managesieve: close windows when unloading
authorCharles Lehner <charles@claws-mail.org>
Tue, 21 Jul 2015 02:23:15 +0000 (22:23 -0400)
committerCharles Lehner <charles@claws-mail.org>
Tue, 21 Jul 2015 02:31:01 +0000 (22:31 -0400)
fixes crash on plugin unload

src/plugins/managesieve/sieve_editor.c
src/plugins/managesieve/sieve_editor.h
src/plugins/managesieve/sieve_manager.c
src/plugins/managesieve/sieve_manager.h
src/plugins/managesieve/sieve_plugin.c

index e085dcba8f9e97b6b7bc691a1a9e538f57351e44..f8b43eeb2df6edbffbf5efbb57d53c3dfe2b2853 100644 (file)
@@ -106,8 +106,9 @@ static GtkActionEntry sieve_editor_entries[] =
 void sieve_editors_close()
 {
        if (editors) {
 void sieve_editors_close()
 {
        if (editors) {
-               g_slist_free_full(editors, (GDestroyNotify)sieve_editor_close);
+               GSList *list = editors;
                editors = NULL;
                editors = NULL;
+               g_slist_free_full(list, (GDestroyNotify)sieve_editor_close);
        }
 }
 
        }
 }
 
index 60d3d86e0a1ee2398ee6b715e746ea31aa2a10bf..18228c4a29208aeece8b485b97dd5c282c9d3b0f 100644 (file)
@@ -45,6 +45,7 @@ struct SieveEditorPage
        gpointer on_load_error_data;
 };
 
        gpointer on_load_error_data;
 };
 
+void sieve_editors_close();
 SieveEditorPage *sieve_editor_new(SieveSession *session, gchar *script_name);
 SieveEditorPage *sieve_editor_get(SieveSession *session, gchar *script_name);
 void sieve_editor_load(SieveEditorPage *page,
 SieveEditorPage *sieve_editor_new(SieveSession *session, gchar *script_name);
 SieveEditorPage *sieve_editor_get(SieveSession *session, gchar *script_name);
 void sieve_editor_load(SieveEditorPage *page,
index b2bff52809cf32f53658dbfb033564fc8629b1fa..2dcdf711cec162e4abe45fdff5e05a53ebb47f55 100644 (file)
@@ -80,6 +80,13 @@ static GSList *manager_pages = NULL;
                if ((page = (SieveManagerPage *)cur->data) && \
                        page->active_session == session)
 
                if ((page = (SieveManagerPage *)cur->data) && \
                        page->active_session == session)
 
+void sieve_managers_done()
+{
+       GSList *list = manager_pages;
+       manager_pages = NULL;
+       g_slist_free_full(list, (GDestroyNotify)sieve_manager_done);
+}
+
 static void filters_list_clear(SieveManagerPage *page)
 {
        GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(page->filters_list)));
 static void filters_list_clear(SieveManagerPage *page)
 {
        GtkListStore *list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(page->filters_list)));
index 58f08f0c71454de5b5c7b7cf0bec29b7b44b4313..fb5c9ba0e0311ace57363025b7cc101266652265 100644 (file)
@@ -36,6 +36,7 @@ struct SieveManagerPage
        gboolean        got_list;
 };
 
        gboolean        got_list;
 };
 
+void sieve_managers_done(void);
 void sieve_manager_show(void);
 void sieve_manager_done(SieveManagerPage *page);
 void sieve_manager_script_created(SieveSession *session,
 void sieve_manager_show(void);
 void sieve_manager_done(SieveManagerPage *page);
 void sieve_manager_script_created(SieveSession *session,
index 363a58456fe6b0ebc9f83b161c047268ae12734c..09264fc2c56c2d11f12715dcf0d7768216e8ae1f 100644 (file)
@@ -31,6 +31,7 @@
 #include "log.h"
 #include "sieve_prefs.h"
 #include "sieve_manager.h"
 #include "log.h"
 #include "sieve_prefs.h"
 #include "sieve_manager.h"
+#include "sieve_editor.h"
 
 #define PLUGIN_NAME (_("ManageSieve"))
 
 
 #define PLUGIN_NAME (_("ManageSieve"))
 
@@ -84,6 +85,8 @@ gboolean plugin_done(void)
        MainWindow *mainwin = mainwindow_get_mainwindow();
 
        sieve_prefs_done();
        MainWindow *mainwin = mainwindow_get_mainwindow();
 
        sieve_prefs_done();
+       sieve_managers_done();
+       sieve_editors_close();
        sieve_sessions_close();
 
        if (mainwin)
        sieve_sessions_close();
 
        if (mainwin)