[Goodies-commits] r2811 - in xfce4-places-plugin/trunk: . panel-plugin

Diego Ongaro ongardie at xfce.org
Mon Jun 4 09:15:04 CEST 2007


Author: ongardie
Date: 2007-06-04 07:15:04 +0000 (Mon, 04 Jun 2007)
New Revision: 2811

Modified:
   xfce4-places-plugin/trunk/ChangeLog
   xfce4-places-plugin/trunk/panel-plugin/model.c
   xfce4-places-plugin/trunk/panel-plugin/model.h
   xfce4-places-plugin/trunk/panel-plugin/model_system.c
   xfce4-places-plugin/trunk/panel-plugin/model_user.c
   xfce4-places-plugin/trunk/panel-plugin/model_volumes.c
Log:
2007-06-04	Diego Ongaro <ongardie at gmail.com>

* Fix BookmarkInfo-related memory leaks



Modified: xfce4-places-plugin/trunk/ChangeLog
===================================================================
--- xfce4-places-plugin/trunk/ChangeLog	2007-06-04 06:39:03 UTC (rev 2810)
+++ xfce4-places-plugin/trunk/ChangeLog	2007-06-04 07:15:04 UTC (rev 2811)
@@ -1,3 +1,7 @@
+2007-06-04	Diego Ongaro <ongardie at gmail.com>
+
+	* Fix BookmarkInfo-related memory leaks
+
 2007-06-03	Diego Ongaro <ongardie at gmail.com>
 
 	* Use exo_str_is_equal (adds direct exo dependency)

Modified: xfce4-places-plugin/trunk/panel-plugin/model.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model.c	2007-06-04 06:39:03 UTC (rev 2810)
+++ xfce4-places-plugin/trunk/panel-plugin/model.c	2007-06-04 07:15:04 UTC (rev 2811)
@@ -118,4 +118,27 @@
     g_free(b);
 }
 
+void
+places_bookmark_info_free(BookmarkInfo *bi)
+{
+    if(bi->label != NULL){
+        g_free(bi->label);
+        bi->label = NULL;
+    }
+    if(bi->uri != NULL){
+        g_free(bi->uri);
+        bi->uri = NULL;
+    }
+    if(bi->icon != NULL){
+        g_free(bi->icon);
+        bi->icon = NULL;
+    }
+    if(bi->data != NULL){
+        DBG("WARNING: data != NULL. Caller is in charge of freeing data");
+        bi->data = NULL;
+    }
+
+    g_free(bi);
+}
+
 // vim: ai et tabstop=4

Modified: xfce4-places-plugin/trunk/panel-plugin/model.h
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model.h	2007-06-04 06:39:03 UTC (rev 2810)
+++ xfce4-places-plugin/trunk/panel-plugin/model.h	2007-06-04 07:15:04 UTC (rev 2811)
@@ -22,15 +22,21 @@
 
 #include <glib.h>
 
+// Bookmark Info
+
 typedef struct
 {
     gchar           *label;
     gchar           *uri;
     gchar           *icon;
     gboolean         show;
-    gpointer        *data;
+    gpointer         data;
 } BookmarkInfo;
 
+void
+places_bookmark_info_free(BookmarkInfo*);
+
+
 typedef struct
 {
     gpointer   pass_thru;

Modified: xfce4-places-plugin/trunk/panel-plugin/model_system.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model_system.c	2007-06-04 06:39:03 UTC (rev 2810)
+++ xfce4-places-plugin/trunk/panel-plugin/model_system.c	2007-06-04 07:15:04 UTC (rev 2811)
@@ -141,13 +141,24 @@
     }
 }
 
+static void
+places_bookmarks_system_clear_bi_data(BookmarkInfo *bi)
+{
+    bi->data = NULL;
+}
+
 void
 places_bookmarks_system_finalize(BookmarksSystem *b)
 {
+    g_ptr_array_foreach(b->bookmarks, (GFunc) places_bookmarks_system_clear_bi_data, NULL);
+    g_ptr_array_foreach(b->bookmarks, (GFunc) places_bookmark_info_free, NULL);
     g_ptr_array_free(b->bookmarks, TRUE);
+    b->bookmarks = NULL;
+
     thunar_vfs_path_unref(b->trash_path);
+    thunar_vfs_shutdown();
+    
     g_free(b);
-    thunar_vfs_shutdown();
 }
 
 /*

Modified: xfce4-places-plugin/trunk/panel-plugin/model_user.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model_user.c	2007-06-04 06:39:03 UTC (rev 2810)
+++ xfce4-places-plugin/trunk/panel-plugin/model_user.c	2007-06-04 07:15:04 UTC (rev 2811)
@@ -143,6 +143,7 @@
     time_t mtime = places_bookmarks_user_get_mtime(b);
     
     if(mtime > b->loaded){
+        g_ptr_array_foreach(b->bookmarks, (GFunc) places_bookmark_info_free, NULL);
         g_ptr_array_free(b->bookmarks, TRUE);
         b->bookmarks = g_ptr_array_new();
         b->loaded = mtime;
@@ -182,6 +183,7 @@
 void
 places_bookmarks_user_finalize(BookmarksUser *b)
 {
+    g_ptr_array_foreach(b->bookmarks, (GFunc) places_bookmark_info_free, NULL);
     g_ptr_array_free(b->bookmarks, TRUE);
     b->bookmarks = NULL;
 

Modified: xfce4-places-plugin/trunk/panel-plugin/model_volumes.c
===================================================================
--- xfce4-places-plugin/trunk/panel-plugin/model_volumes.c	2007-06-04 06:39:03 UTC (rev 2810)
+++ xfce4-places-plugin/trunk/panel-plugin/model_volumes.c	2007-06-04 07:15:04 UTC (rev 2811)
@@ -84,9 +84,9 @@
                 DBG("dropping volume from array");
                 
                 bi = g_ptr_array_remove_index(b->bookmarks, k);
-                g_object_unref(bi->data);
+                g_object_unref(bi->data); // unref the volume
                 bi->data = NULL;
-                g_free(bi);
+                places_bookmark_info_free(bi);
                 
                 b->changed = TRUE;
             }
@@ -128,11 +128,11 @@
                 bi = g_ptr_array_remove_index(b->bookmarks, k);
                 DBG("Removing bookmark %s", bi->label);
                 
-                if(bi->data != NULL){
+                if(bi->data != NULL){ // unref the volume
                     g_object_unref(bi->data);
                     bi->data = NULL;
                 }
-                g_free(bi);
+                places_bookmark_info_free(bi);
                 
                 b->changed = TRUE;
                 break;
@@ -223,17 +223,18 @@
 
     for(k = 0; k < b->bookmarks->len; k++){
         bi = g_ptr_array_remove_index(b->bookmarks, k);
-        if(bi->data != NULL){
+        if(bi->data != NULL){ // unref the volume
             g_object_unref(bi->data);
             bi->data = NULL;
         }
-        g_free(bi);
+        places_bookmark_info_free(bi);
     }
 
     g_object_unref(b->volume_manager);
     b->volume_manager = NULL;
     thunar_vfs_shutdown();
-
+    
+    g_ptr_array_foreach(b->bookmarks, (GFunc) places_bookmark_info_free, NULL);
     g_ptr_array_free(b->bookmarks, TRUE);
     b->bookmarks = NULL;
 




More information about the Goodies-commits mailing list