aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Thacker <johnthacker@gmail.com>2024-05-25 23:35:59 -0400
committerJohn Thacker <johnthacker@gmail.com>2024-05-26 12:47:23 +0000
commit5a8a7077f114d0f56601136c7d320a40494e928d (patch)
treead99940770181c2b8ba206d42fba87fc58ae2e1c
parent8cc925bc2e9af4abb37cc3a446f9613e0e630122 (diff)
lua: Fix leaks when reloading plugins
If any of the static GPtrArrays have been created, unref the current one before creating a new one.
-rw-r--r--epan/wslua/wslua_column.c6
-rw-r--r--epan/wslua/wslua_dumper.c3
-rw-r--r--epan/wslua/wslua_field.c6
-rw-r--r--epan/wslua/wslua_pinfo.c6
-rw-r--r--epan/wslua/wslua_proto.c3
-rw-r--r--epan/wslua/wslua_tree.c3
-rw-r--r--epan/wslua/wslua_tvb.c6
7 files changed, 33 insertions, 0 deletions
diff --git a/epan/wslua/wslua_column.c b/epan/wslua/wslua_column.c
index 05c4450977..5d75657c47 100644
--- a/epan/wslua/wslua_column.c
+++ b/epan/wslua/wslua_column.c
@@ -238,6 +238,9 @@ WSLUA_META Column_meta[] = {
int Column_register(lua_State *L) {
WSLUA_REGISTER_CLASS(Column);
+ if (outstanding_Column != NULL) {
+ g_ptr_array_unref(outstanding_Column);
+ }
outstanding_Column = g_ptr_array_new();
return 0;
}
@@ -415,6 +418,9 @@ WSLUA_META Columns_meta[] = {
int Columns_register(lua_State *L) {
WSLUA_REGISTER_META(Columns);
+ if (outstanding_Columns != NULL) {
+ g_ptr_array_unref(outstanding_Columns);
+ }
outstanding_Columns = g_ptr_array_new();
return 0;
}
diff --git a/epan/wslua/wslua_dumper.c b/epan/wslua/wslua_dumper.c
index a98d4b9f23..9ece6518f8 100644
--- a/epan/wslua/wslua_dumper.c
+++ b/epan/wslua/wslua_dumper.c
@@ -615,6 +615,9 @@ WSLUA_META Dumper_meta[] = {
};
int Dumper_register(lua_State* L) {
+ if (dumper_encaps != NULL) {
+ g_hash_table_unref(dumper_encaps);
+ }
dumper_encaps = g_hash_table_new(g_direct_hash,g_direct_equal);
WSLUA_REGISTER_CLASS(Dumper);
return 0;
diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c
index 4c0bde97cc..26ee9a45a4 100644
--- a/epan/wslua/wslua_field.c
+++ b/epan/wslua/wslua_field.c
@@ -766,9 +766,15 @@ WSLUA_META Field_meta[] = {
int Field_register(lua_State* L) {
+ if (wanted_fields != NULL) {
+ g_ptr_array_unref(wanted_fields);
+ }
wanted_fields = g_ptr_array_new();
WSLUA_REGISTER_CLASS_WITH_ATTRS(Field);
+ if (outstanding_FieldInfo != NULL) {
+ g_ptr_array_unref(outstanding_FieldInfo);
+ }
outstanding_FieldInfo = g_ptr_array_new();
return 0;
diff --git a/epan/wslua/wslua_pinfo.c b/epan/wslua/wslua_pinfo.c
index 2d1a7afcbd..2a2de107bc 100644
--- a/epan/wslua/wslua_pinfo.c
+++ b/epan/wslua/wslua_pinfo.c
@@ -477,7 +477,13 @@ WSLUA_META Pinfo_meta[] = {
int Pinfo_register(lua_State* L) {
WSLUA_REGISTER_META_WITH_ATTRS(Pinfo);
+ if (outstanding_Pinfo != NULL) {
+ g_ptr_array_unref(outstanding_Pinfo);
+ }
outstanding_Pinfo = g_ptr_array_new();
+ if (outstanding_PrivateTable != NULL) {
+ g_ptr_array_unref(outstanding_PrivateTable);
+ }
outstanding_PrivateTable = g_ptr_array_new();
return 0;
}
diff --git a/epan/wslua/wslua_proto.c b/epan/wslua/wslua_proto.c
index d63867c75f..17238f5d58 100644
--- a/epan/wslua/wslua_proto.c
+++ b/epan/wslua/wslua_proto.c
@@ -572,6 +572,9 @@ WSLUA_META Proto_meta[] = {
int Proto_register(lua_State* L) {
WSLUA_REGISTER_CLASS_WITH_ATTRS(Proto);
+ if (outstanding_FuncSavers != NULL) {
+ g_ptr_array_unref(outstanding_FuncSavers);
+ }
outstanding_FuncSavers = g_ptr_array_new();
lua_newtable(L);
diff --git a/epan/wslua/wslua_tree.c b/epan/wslua/wslua_tree.c
index 126bdb1a25..8a890a0d64 100644
--- a/epan/wslua/wslua_tree.c
+++ b/epan/wslua/wslua_tree.c
@@ -1169,6 +1169,9 @@ int TreeItem_register(lua_State *L) {
int* etts[] = { &wslua_ett };
wslua_ett = -1; /* Reset to support reload Lua plugins */
WSLUA_REGISTER_CLASS_WITH_ATTRS(TreeItem);
+ if (outstanding_TreeItem != NULL) {
+ g_ptr_array_unref(outstanding_TreeItem);
+ }
outstanding_TreeItem = g_ptr_array_new();
proto_register_subtree_array(etts,1);
return 0;
diff --git a/epan/wslua/wslua_tvb.c b/epan/wslua/wslua_tvb.c
index 4059b43714..15a3ca5fce 100644
--- a/epan/wslua/wslua_tvb.c
+++ b/epan/wslua/wslua_tvb.c
@@ -321,6 +321,9 @@ WSLUA_META Tvb_meta[] = {
int Tvb_register(lua_State* L) {
WSLUA_REGISTER_CLASS(Tvb);
+ if (outstanding_Tvb != NULL) {
+ g_ptr_array_unref(outstanding_Tvb);
+ }
outstanding_Tvb = g_ptr_array_new();
return 0;
}
@@ -1475,6 +1478,9 @@ WSLUA_META TvbRange_meta[] = {
};
int TvbRange_register(lua_State* L) {
+ if (outstanding_TvbRange != NULL) {
+ g_ptr_array_unref(outstanding_TvbRange);
+ }
outstanding_TvbRange = g_ptr_array_new();
WSLUA_REGISTER_CLASS(TvbRange);
return 0;