commit 38ea0d67f58b56a028a50e5c421e1d29c95298e4 parent 897a5ed7241c371232c816d26c4b577dd36899e3 Author: Charles Lehner <charles@claws-mail.org> Date: Mon, 20 Jul 2015 22:23:15 -0400 managesieve: close windows when unloading fixes crash on plugin unload Diffstat:
5 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/plugins/managesieve/sieve_editor.c b/src/plugins/managesieve/sieve_editor.c @@ -106,8 +106,9 @@ static GtkActionEntry sieve_editor_entries[] = void sieve_editors_close() { if (editors) { - g_slist_free_full(editors, (GDestroyNotify)sieve_editor_close); + GSList *list = editors; editors = NULL; + g_slist_free_full(list, (GDestroyNotify)sieve_editor_close); } } diff --git a/src/plugins/managesieve/sieve_editor.h b/src/plugins/managesieve/sieve_editor.h @@ -45,6 +45,7 @@ struct SieveEditorPage 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, diff --git a/src/plugins/managesieve/sieve_manager.c b/src/plugins/managesieve/sieve_manager.c @@ -80,6 +80,13 @@ static GSList *manager_pages = NULL; 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))); diff --git a/src/plugins/managesieve/sieve_manager.h b/src/plugins/managesieve/sieve_manager.h @@ -36,6 +36,7 @@ struct SieveManagerPage 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, diff --git a/src/plugins/managesieve/sieve_plugin.c b/src/plugins/managesieve/sieve_plugin.c @@ -31,6 +31,7 @@ #include "log.h" #include "sieve_prefs.h" #include "sieve_manager.h" +#include "sieve_editor.h" #define PLUGIN_NAME (_("ManageSieve")) @@ -84,6 +85,8 @@ gboolean plugin_done(void) MainWindow *mainwin = mainwindow_get_mainwindow(); sieve_prefs_done(); + sieve_managers_done(); + sieve_editors_close(); sieve_sessions_close(); if (mainwin)