Fix #982: random crash (SIGSEGV) while running two instances of geeqie gtk2final
authorColin Clark <colin.clark@cclark.uk>
Sat, 16 Jul 2022 10:29:50 +0000 (11:29 +0100)
committerColin Clark <colin.clark@cclark.uk>
Sat, 16 Jul 2022 10:29:50 +0000 (11:29 +0100)
https://github.com/BestImageViewer/geeqie/issues/982

User reports this fix works.

src/advanced_exif.c
src/layout_util.c

index 0c9e4d6..a6851ad 100644 (file)
@@ -280,18 +280,25 @@ void advanced_exif_close(ExifWin *ew)
        if (!ew) return;
 
        advanced_exif_window_get_geometry(ew);
+       file_data_unref(ew->fd);
 
        gtk_widget_destroy(ew->window);
+
+       g_free(ew);
 }
 
-static void advanced_exif_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
+static gboolean advanced_exif_delete_cb(GtkWidget *widget, GdkEvent *event, gpointer data)
 {
        ExifWin *ew = data;
 
-       advanced_exif_window_get_geometry(ew);
+       if (!ew) return FALSE;
 
+       advanced_exif_window_get_geometry(ew);
        file_data_unref(ew->fd);
+
        g_free(ew);
+
+       return FALSE;
 }
 
 static gint advanced_exif_sort_cb(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data)
index e77b8c0..60b5312 100644 (file)
@@ -4167,10 +4167,12 @@ void layout_bars_close(LayoutWindow *lw)
        layout_bar_close(lw);
 }
 
-static void layout_exif_window_destroy(GtkWidget *widget, gpointer data)
+static gboolean layout_exif_window_destroy(GtkWidget *widget, gpointer data)
 {
        LayoutWindow *lw = data;
        lw->exif_window = NULL;
+
+       return TRUE;
 }
 
 void layout_exif_window_new(LayoutWindow *lw)