[Goodies-commits] r3375 - ristretto/trunk/src

Stephan Arts stephan at xfce.org
Sun Oct 14 09:45:00 CEST 2007


Author: stephan
Date: 2007-10-14 07:45:00 +0000 (Sun, 14 Oct 2007)
New Revision: 3375

Modified:
   ristretto/trunk/src/main.c
   ristretto/trunk/src/main_window.c
   ristretto/trunk/src/navigator.c
   ristretto/trunk/src/picture_viewer.c
Log:
Fix memory leaks and segfault



Modified: ristretto/trunk/src/main.c
===================================================================
--- ristretto/trunk/src/main.c	2007-10-13 23:27:28 UTC (rev 3374)
+++ ristretto/trunk/src/main.c	2007-10-14 07:45:00 UTC (rev 3375)
@@ -128,6 +128,7 @@
                         g_free(path_name);
                         filename = g_dir_read_name(dir);
                     }
+                    g_dir_close(dir);
                     g_free(path_string);
                 }
                 else
@@ -155,6 +156,7 @@
                         filename = g_dir_read_name(dir);
                     }
                     rstto_navigator_jump_first(navigator);
+                    g_dir_close(dir);
                 }
                 gchar *uri = thunar_vfs_path_dup_uri(info->path);
                 gtk_recent_manager_add_item(recent_manager, uri);

Modified: ristretto/trunk/src/main_window.c
===================================================================
--- ristretto/trunk/src/main_window.c	2007-10-13 23:27:28 UTC (rev 3374)
+++ ristretto/trunk/src/main_window.c	2007-10-14 07:45:00 UTC (rev 3375)
@@ -190,6 +190,8 @@
 rstto_main_window_init(RsttoMainWindow *);
 static void
 rstto_main_window_class_init(RsttoMainWindowClass *);
+static void
+rstto_main_window_dispose(GObject *object);
 
 static GtkWidgetClass *parent_class = NULL;
 
@@ -554,9 +556,24 @@
 static void
 rstto_main_window_class_init(RsttoMainWindowClass *window_class)
 {
+    GObjectClass *object_class = (GObjectClass*)window_class;
     parent_class = g_type_class_peek_parent(window_class);
+
+    object_class->dispose = rstto_main_window_dispose;
 }
 
+static void
+rstto_main_window_dispose(GObject *object)
+{
+    RsttoMainWindow *window = RSTTO_MAIN_WINDOW(object);
+    if (window->priv->navigator)
+    {
+        g_object_unref(window->priv->navigator);
+        window->priv->navigator = NULL;
+    }
+    G_OBJECT_CLASS (parent_class)->dispose(object); 
+}
+
 static gboolean
 rstto_main_window_clear_recent(RsttoMainWindow *window)
 {
@@ -966,9 +983,8 @@
             gchar *uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
             gtk_recent_manager_add_item(window->priv->manager, uri);
             g_free(uri);
-
+            g_dir_close(dir);
         }
-
     }
     gtk_widget_destroy(dialog);
 }

Modified: ristretto/trunk/src/navigator.c
===================================================================
--- ristretto/trunk/src/navigator.c	2007-10-13 23:27:28 UTC (rev 3374)
+++ ristretto/trunk/src/navigator.c	2007-10-14 07:45:00 UTC (rev 3375)
@@ -575,11 +575,13 @@
 {
     if(nav_entry->thumb)
     {
-        g_object_unref(nav_entry->thumb);
+        gdk_pixbuf_unref(nav_entry->thumb);
+        nav_entry->thumb = NULL;
     }
     if(nav_entry->exif_data)
     {   
         exif_data_free(nav_entry->exif_data);
+        nav_entry->exif_data = NULL;
     }
     thunar_vfs_info_unref(nav_entry->info);
     g_free(nav_entry);

Modified: ristretto/trunk/src/picture_viewer.c
===================================================================
--- ristretto/trunk/src/picture_viewer.c	2007-10-13 23:27:28 UTC (rev 3374)
+++ ristretto/trunk/src/picture_viewer.c	2007-10-14 07:45:00 UTC (rev 3375)
@@ -512,6 +512,13 @@
 
     gboolean vadjustment_changed = FALSE;
     gboolean hadjustment_changed = FALSE;
+
+    if (viewer->priv->src_pixbuf != NULL && entry == NULL)
+    {
+        gdk_pixbuf_unref(viewer->priv->src_pixbuf);
+        viewer->priv->src_pixbuf = NULL;
+    }
+
     if(viewer->priv->src_pixbuf)
     {
         gdouble width = (gdouble)gdk_pixbuf_get_width(viewer->priv->src_pixbuf);
@@ -655,6 +662,12 @@
     {
         if(gdk_pixbuf_animation_iter_advance(viewer->priv->iter, NULL))
         {
+            /* Cleanup old image */
+            if (viewer->priv->src_pixbuf)
+            {
+                gdk_pixbuf_unref(viewer->priv->src_pixbuf);
+                viewer->priv->src_pixbuf = NULL;
+            }
             RsttoNavigatorEntry *entry = rstto_navigator_get_file(viewer->priv->navigator);
 
             if (entry)
@@ -712,6 +725,10 @@
             g_signal_handlers_disconnect_by_func(viewer->priv->loader , cb_rstto_picture_viewer_area_updated, viewer);
             gdk_pixbuf_loader_close(viewer->priv->loader, NULL);
             g_object_unref(viewer->priv->loader);
+            if (viewer->priv->iter)
+            {
+                viewer->priv->iter = NULL;
+            }
             if(viewer->priv->animation)
             {
                 g_object_unref(viewer->priv->animation);
@@ -722,10 +739,6 @@
                 gdk_pixbuf_unref(viewer->priv->src_pixbuf);
                 viewer->priv->src_pixbuf = NULL;
             }
-            if (viewer->priv->iter)
-            {
-                viewer->priv->iter = NULL;
-            }
         }
         viewer->priv->loader = gdk_pixbuf_loader_new();
 




More information about the Goodies-commits mailing list