Lua: Do not deregister Listener in __gc.

Listeners should not be deregistered in __gc because they will go out
of scope while in use.  Instead free allocated data when deregistering
the Listener (Listener.remove() and Reload Lua Plugins).

Bug: 11722
Change-Id: Iadf6506757df06e476ac3cac38c05f1d1d497dc4
Reviewed-on: https://code.wireshark.org/review/11924
Reviewed-by: Stig Bjørlykke <stig@bjorlykke.org>
This commit is contained in:
Stig Bjørlykke 2015-11-17 22:36:01 +01:00
parent 27502f1b65
commit 8383cb923b
1 changed files with 5 additions and 10 deletions

View File

@ -193,6 +193,10 @@ static void deregister_Listener (lua_State* L _U_, Listener tap) {
}
remove_tap_listener(tap);
g_free(tap->filter);
g_free(tap->name);
g_free(tap);
}
WSLUA_CONSTRUCTOR Listener_new(lua_State* L) {
@ -337,16 +341,7 @@ WSLUA_ATTRIBUTE_FUNC_SETTER(Listener,reset);
static int Listener__gc(lua_State* L _U_) {
Listener tap = toListener(L, 1);
if (listeners && g_ptr_array_remove(listeners, tap)) {
deregister_Listener(L, tap);
}
g_free(tap->filter);
g_free(tap->name);
g_free(tap);
/* do NOT free Listener here, only in deregister_Listener */
return 0;
}