fixed vd_notify_cb leak
authorVladimir Nadvornik <nadvornik@suse.cz>
Fri, 28 Aug 2009 23:09:05 +0000 (23:09 +0000)
committerVladimir Nadvornik <nadvornik@suse.cz>
Fri, 28 Aug 2009 23:09:05 +0000 (23:09 +0000)
src/filedata.c
src/view_dir.c

index 1397998..1d2bb1f 100644 (file)
@@ -2549,6 +2549,19 @@ static gint file_data_notify_sort(gconstpointer a, gconstpointer b)
 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;
@@ -2579,6 +2592,7 @@ gboolean file_data_unregister_notify_func(FileDataNotifyFunc func, gpointer data
                work = work->next;
                }
 
+       g_warning("Notify func not found");
        return FALSE;
 }
 
index 5ba3077..7c5cd18 100644 (file)
@@ -126,10 +126,11 @@ ViewDir *vd_new(DirViewType type, FileData *dir_fd)
        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);
 
+       /* 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);
 
        return vd;