diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2015-11-17 22:36:01 +0100 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2015-11-17 21:51:42 +0000 |
commit | 8383cb923b63535b46d52f00f430f784cbbb9014 (patch) | |
tree | 7e08ab6292e5c03c4bff4d7658fdf4e5dc7a62a9 /epan/wslua/wslua_listener.c | |
parent | 27502f1b656d24606d83b910aade04674a8f3499 (diff) |
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>
Diffstat (limited to 'epan/wslua/wslua_listener.c')
-rw-r--r-- | epan/wslua/wslua_listener.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/epan/wslua/wslua_listener.c b/epan/wslua/wslua_listener.c index 05519718ef..ed606c42bd 100644 --- a/epan/wslua/wslua_listener.c +++ b/epan/wslua/wslua_listener.c @@ -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; } |