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:
parent
27502f1b65
commit
8383cb923b
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue