changeset 1709:b16a453bfde6

fixed vd_notify_cb leak
author nadvornik
date Fri, 28 Aug 2009 23:09:05 +0000
parents 8213f95b65c9
children 1b790ab146ab
files src/filedata.c src/view_dir.c
diffstat 2 files changed, 17 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/filedata.c	Fri Aug 28 20:18:46 2009 +0000
+++ b/src/filedata.c	Fri Aug 28 23:09:05 2009 +0000
@@ -2535,6 +2535,19 @@
 gboolean file_data_register_notify_func(FileDataNotifyFunc func, gpointer data, NotifyPriority priority)
 {
 	NotifyData *nd;
+	GList *work = notify_func_list;
+	
+	while (work)
+		{
+		NotifyData *nd = (NotifyData *)work->data;
+	
+		if (nd->func == func && nd->data == data)
+			{
+			g_warning("Notify func already registered");
+			return FALSE;
+			}
+		work = work->next;
+		}
 	
 	nd = g_new(NotifyData, 1);
 	nd->func = func;
@@ -2565,6 +2578,7 @@
 		work = work->next;
 		}
 
+	g_warning("Notify func not found");
 	return FALSE;
 }
 
--- a/src/view_dir.c	Fri Aug 28 20:18:46 2009 +0000
+++ b/src/view_dir.c	Fri Aug 28 23:09:05 2009 +0000
@@ -133,9 +133,10 @@
 	g_signal_connect(G_OBJECT(vd->view), "button_release_event",
 			 G_CALLBACK(vd_release_cb), vd);
 
-	if (dir_fd) vd_set_fd(vd, dir_fd);
+	file_data_register_notify_func(vd_notify_cb, vd, NOTIFY_PRIORITY_HIGH);
 
-	file_data_register_notify_func(vd_notify_cb, vd, NOTIFY_PRIORITY_HIGH);
+	/* vd_set_fd expects that vd_notify_cb is already registered */
+	if (dir_fd) vd_set_fd(vd, dir_fd);
 
 	gtk_widget_show(vd->view);