diff --git a/daemon/engine.c b/daemon/engine.c index c8dfb40d36f0e184072cd33d531e30f7360f0234..dd36156a7ac559f972a7c994d90f47a175203f35 100644 --- a/daemon/engine.c +++ b/daemon/engine.c @@ -298,7 +298,9 @@ void engine_deinit(struct engine *engine) kr_zonecut_deinit(&engine->resolver.root_hints); kr_cache_close(&engine->resolver.cache); lru_deinit(engine->resolver.cache_rtt); + free(engine->resolver.cache_rtt); lru_deinit(engine->resolver.cache_rep); + free(engine->resolver.cache_rep); /* Unload modules. */ for (size_t i = 0; i < engine->modules.len; ++i) { diff --git a/daemon/ffimodule.c b/daemon/ffimodule.c index 040d5ee87bd2282d5de6813517a5016f29dddb09..cd9d0aade4393b52adb729f73732bf5f61b026e3 100644 --- a/daemon/ffimodule.c +++ b/daemon/ffimodule.c @@ -99,14 +99,15 @@ static int l_ffi_init(struct kr_module *module) static int l_ffi_deinit(struct kr_module *module) { - lua_State *L = l_ffi_preface(module, "deinit"); - if (!L) { - return 0; + /* Deinit the module in Lua (if possible) */ + int ret = 0; + lua_State *L = module->lib; + if (l_ffi_preface(module, "deinit")) { + ret = l_ffi_call(L, 1); } - int ret = l_ffi_call(L, 1); /* Free the layer API wrapper */ lua_rawgeti(L, LUA_REGISTRYINDEX, (intptr_t)module->data); - lua_getfield(L, -1, "_layercdata"); + lua_getfield(L, -1, "_layer_capi"); free(lua_touserdata(L, -1)); lua_pop(L, 2); /* Unref module and unset 'lib', so the module @@ -242,8 +243,8 @@ int ffimodule_register_lua(struct engine *engine, struct kr_module *module, cons /* Create FFI module with trampolined functions. */ memset(module, 0, sizeof(*module)); module->name = strdup(name); - REGISTER_FFI_CALL(L, module->init, "init", &l_ffi_init); - REGISTER_FFI_CALL(L, module->deinit, "deinit", &l_ffi_deinit); + module->init = &l_ffi_init; + module->deinit = &l_ffi_deinit; REGISTER_FFI_CALL(L, module->layer, "layer", &l_ffi_layer); module->data = (void *)(intptr_t)luaL_ref(L, LUA_REGISTRYINDEX); module->lib = L; diff --git a/modules/hints/hints.c b/modules/hints/hints.c index 80f81fb2e80e92fa5511244483d40e835e814a86..d4dc43b9a25717a3d12fca6b0428c09d83933add 100644 --- a/modules/hints/hints.c +++ b/modules/hints/hints.c @@ -303,6 +303,7 @@ static char* hint_root(void *env, struct kr_module *module, const char *args) default: continue; } } + json_delete(root_node); } /* Return current root hints */ char *result = NULL;