aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/funnel.h2
-rw-r--r--epan/wslua/wslua_gui.c2
-rw-r--r--gtk/funnel_stat.c12
3 files changed, 10 insertions, 6 deletions
diff --git a/epan/funnel.h b/epan/funnel.h
index 2c1bf7afe9..09be5448eb 100644
--- a/epan/funnel.h
+++ b/epan/funnel.h
@@ -49,6 +49,8 @@ typedef struct _funnel_bt_t {
funnel_text_window_t* tw;
funnel_bt_cb_t func;
void* data;
+ void (*free)(void*);
+ void (*free_data)(void*);
} funnel_bt_t;
typedef struct _funnel_ops_t {
diff --git a/epan/wslua/wslua_gui.c b/epan/wslua/wslua_gui.c
index c680f149fa..53b2fc0163 100644
--- a/epan/wslua/wslua_gui.c
+++ b/epan/wslua/wslua_gui.c
@@ -447,6 +447,8 @@ WSLUA_METHOD TextWindow_add_button(lua_State* L) {
fbt->tw = tw;
fbt->func = wslua_button_callback;
fbt->data = cbd;
+ fbt->free = g_free;
+ fbt->free_data = g_free;
cbd->L = L;
cbd->data_ref = luaL_ref(L, LUA_REGISTRYINDEX);
diff --git a/gtk/funnel_stat.c b/gtk/funnel_stat.c
index 43f10ef73f..aa569dbba8 100644
--- a/gtk/funnel_stat.c
+++ b/gtk/funnel_stat.c
@@ -107,8 +107,8 @@ static void unref_text_win_cancel_bt_cb(GtkWidget *bt _U_, gpointer data) {
for (i = 0; i < tw->buttons->len; i++) {
funnel_bt_t* cbd = g_ptr_array_index(tw->buttons,i);
/* XXX a free cb should be passed somehow */
- if (cbd->data) g_free(cbd->data);
- g_free(cbd);
+ if (cbd->data && cbd->free_data) cbd->free_data(cbd->data);
+ if (cbd->free) cbd->free(cbd);
}
g_ptr_array_free(tw->buttons,TRUE);
g_free(tw);
@@ -128,8 +128,8 @@ static gboolean text_window_unref_del_event_cb(GtkWidget *win _U_, GdkEvent *eve
for (i = 0; i < tw->buttons->len; i++) {
funnel_bt_t* cbd = g_ptr_array_index(tw->buttons,i);
/* XXX a free cb should be passed somehow */
- if (cbd->data) g_free(cbd->data);
- g_free(cbd);
+ if (cbd->data && cbd->free_data) cbd->free_data(cbd->data);
+ if (cbd->free) cbd->free(cbd);
}
g_ptr_array_free(tw->buttons,TRUE);
g_free(tw);
@@ -380,8 +380,8 @@ static void text_window_destroy(funnel_text_window_t* tw) {
for (i = 0; i < tw->buttons->len; i++) {
funnel_bt_t* cbd = g_ptr_array_index(tw->buttons,i);
/* XXX a free cb should be passed somehow */
- if (cbd->data) g_free(cbd->data);
- g_free(cbd);
+ if (cbd->data && cbd->free_data) cbd->free_data(cbd->data);
+ if (cbd->free) cbd->free(cbd);
}
g_ptr_array_free(tw->buttons,TRUE);
g_free(tw);