[file-roller/gnome-3-20] fixed crash after extracting a file



commit 0ae6cf61db69c1fc5a8ca9095e1d1e65e1e81a20
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sat Feb 18 08:54:53 2017 +0100

    fixed crash after extracting a file
    
    [bug #778846]

 src/fr-window.c |   33 ++++++++++++++++++++++++++++-----
 1 files changed, 28 insertions(+), 5 deletions(-)
---
diff --git a/src/fr-window.c b/src/fr-window.c
index a3ad349..bf75902 100644
--- a/src/fr-window.c
+++ b/src/fr-window.c
@@ -6428,7 +6428,7 @@ extract_data_new (FrWindow    *window,
        ExtractData *edata;
 
        edata = g_new0 (ExtractData, 1);
-       edata->window = window;
+       edata->window = _g_object_ref (window);
        edata->file_list = _g_string_list_dup (file_list);
        edata->destination = _g_object_ref (destination);
        edata->skip_older = skip_older;
@@ -6450,6 +6450,7 @@ extract_data_free (ExtractData *edata)
 
        _g_string_list_free (edata->file_list);
        _g_object_unref (edata->destination);
+       _g_object_unref (edata->window);
        g_free (edata->base_dir);
 
        g_free (edata);
@@ -6593,6 +6594,29 @@ _fr_window_archive_extract_from_edata (FrWindow    *window,
 static void _fr_window_ask_overwrite_dialog (OverwriteData *odata);
 
 
+static OverwriteData *
+overwrite_data_new (FrWindow *window)
+{
+       OverwriteData *odata;
+
+       odata = g_new0 (OverwriteData, 1);
+       odata->window = _g_object_ref (window);
+       odata->edata = NULL;
+       odata->current_file = NULL;
+       odata->extract_all = FALSE;
+
+       return odata;
+}
+
+
+static void
+overwrite_data_free (OverwriteData *odata)
+{
+       _g_object_unref (odata->window);
+       g_free (odata);
+}
+
+
 /* remove the file from the list to extract */
 static void
 overwrite_data_skip_current (OverwriteData *odata)
@@ -6640,7 +6664,7 @@ overwrite_dialog_response_cb (GtkDialog *dialog,
 
        if (do_not_extract) {
                fr_window_batch_stop (odata->window);
-               g_free (odata);
+               overwrite_data_free (odata);
                return;
        }
 
@@ -6771,7 +6795,7 @@ _fr_window_ask_overwrite_dialog (OverwriteData *odata)
                fr_window_dnd_extraction_finished (odata->window, TRUE);
        }
 
-       g_free (odata);
+       overwrite_data_free (odata);
 }
 
 
@@ -6899,8 +6923,7 @@ _fr_window_archive_extract_from_edata_maybe (FrWindow    *window,
        if (edata->overwrite == FR_OVERWRITE_ASK) {
                OverwriteData *odata;
 
-               odata = g_new0 (OverwriteData, 1);
-               odata->window = window;
+               odata = overwrite_data_new (window);
                odata->edata = edata;
                odata->extract_all = (edata->file_list == NULL) || (g_list_length (edata->file_list) == 
window->archive->files->len);
                if (edata->file_list == NULL)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]