aboutsummaryrefslogtreecommitdiffstats
path: root/epan/wslua/wslua_listener.c
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2015-11-17 22:36:01 +0100
committerStig Bjørlykke <stig@bjorlykke.org>2015-11-17 21:51:42 +0000
commit8383cb923b63535b46d52f00f430f784cbbb9014 (patch)
tree7e08ab6292e5c03c4bff4d7658fdf4e5dc7a62a9 /epan/wslua/wslua_listener.c
parent27502f1b656d24606d83b910aade04674a8f3499 (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.c15
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;
}