--- a/lib/rtnl.c +++ b/lib/rtnl.c @@ -3704,7 +3704,7 @@ uc_nl_listener(uc_vm_t *vm, size_t nargs break; } - ucv_array_set(listener_registry, i + 1, cb_func); + ucv_array_set(listener_registry, i + 1, ucv_get(cb_func)); l = xalloc(sizeof(*l)); l->index = i; if (!uc_nl_fill_cmds(l->cmds, cmds)) { @@ -3714,7 +3714,7 @@ uc_nl_listener(uc_vm_t *vm, size_t nargs } rv = uc_resource_new(listener_type, l); - ucv_array_set(listener_registry, i, rv); + ucv_array_set(listener_registry, i, ucv_get(rv)); listener_vm = vm; return rv; @@ -4150,5 +4150,7 @@ void uc_module_init(uc_vm_t *vm, uc_valu listener_type = uc_type_declare(vm, "rtnl.listener", listener_fns, uc_nl_listener_free); listener_registry = ucv_array_new(vm); + uc_vm_registry_set(vm, "rtnl.registry", listener_registry); + register_constants(vm, scope); } --- a/lib/nl80211.c +++ b/lib/nl80211.c @@ -2560,7 +2560,7 @@ uc_nl_listener(uc_vm_t *vm, size_t nargs break; } - ucv_array_set(listener_registry, i + 1, cb_func); + ucv_array_set(listener_registry, i + 1, ucv_get(cb_func)); l = xalloc(sizeof(*l)); l->index = i; if (!uc_nl_fill_cmds(l->cmds, cmds)) { @@ -2570,7 +2570,7 @@ uc_nl_listener(uc_vm_t *vm, size_t nargs } rv = uc_resource_new(listener_type, l); - ucv_array_set(listener_registry, i, rv); + ucv_array_set(listener_registry, i, ucv_get(rv)); listener_vm = vm; return rv;