diff options
-rw-r--r-- | mail/ChangeLog | 19 | ||||
-rw-r--r-- | mail/component-factory.c | 2 | ||||
-rw-r--r-- | mail/mail-importer.c | 6 | ||||
-rw-r--r-- | mail/mail-importer.h | 2 | ||||
-rw-r--r-- | mail/mail-local.c | 13 | ||||
-rw-r--r-- | mail/mail-local.h | 1 |
6 files changed, 39 insertions, 4 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog index d72cf5b544..a7d9d35c49 100644 --- a/mail/ChangeLog +++ b/mail/ChangeLog @@ -1,3 +1,22 @@ +2001-05-11 JP Rosevear <jpr@ximian.com> + + * mail-importer.h: add proto + + * mail-importer.c (mail_importer_uninit): release and unref the + local storage + + * mail-local.c (mail_local_store_finalize): use + bonobo_object_release_unref rather than doing Bonobo_Unknow_unref + and a corba release + (register_folder_registered): "sink" the local_store ref to + prevent circular ref + (mail_local_storage_shutdown): unref the local store + + * mail-local.h: new proto + + * component-factory.c (owner_unset_cb): uninit the importer and + shutdown the local storage + 2001-05-11 Jeffrey Stedfast <fejj@ximian.com> * mail-local.c (mail_local_reconfigure_folder): Set a title on the diff --git a/mail/component-factory.c b/mail/component-factory.c index 26796201a1..9a3e657ca0 100644 --- a/mail/component-factory.c +++ b/mail/component-factory.c @@ -265,6 +265,8 @@ static void owner_unset_cb (EvolutionShellComponent *shell_component, gpointer user_data) { unref_standard_folders (); + mail_importer_uninit (); + mail_local_storage_shutdown (); g_idle_add_full (G_PRIORITY_LOW, idle_quit, NULL, NULL); } diff --git a/mail/mail-importer.c b/mail/mail-importer.c index dd30807645..500897ea59 100644 --- a/mail/mail-importer.c +++ b/mail/mail-importer.c @@ -242,6 +242,7 @@ mail_importer_init (EvolutionShellClient *client) void mail_importer_uninit (void) { + CORBA_Environment ev; GList *l; for (l = importer_modules; l; l = l->next) { @@ -250,5 +251,10 @@ mail_importer_uninit (void) g_list_free (importer_modules); importer_modules = NULL; + + CORBA_exception_init (&ev); + bonobo_object_release_unref (local_storage, &ev); + local_storage = NULL; + CORBA_exception_free (&ev); } diff --git a/mail/mail-importer.h b/mail/mail-importer.h index 350671a8ad..23b555d6b8 100644 --- a/mail/mail-importer.h +++ b/mail/mail-importer.h @@ -38,6 +38,8 @@ struct _MailImporter { }; void mail_importer_init (EvolutionShellClient *client); +void mail_importer_uninit (void); + void mail_importer_add_line (MailImporter *importer, const char *str, gboolean finished); diff --git a/mail/mail-local.c b/mail/mail-local.c index 5c27fb0e0a..71c2c4919b 100644 --- a/mail/mail-local.c +++ b/mail/mail-local.c @@ -285,10 +285,8 @@ mail_local_store_finalize (gpointer object) CORBA_Environment ev; CORBA_exception_init (&ev); - if (!CORBA_Object_is_nil (local_store->corba_local_storage, &ev)) { - Bonobo_Unknown_unref (local_store->corba_local_storage, &ev); - CORBA_Object_release (local_store->corba_local_storage, &ev); - } + if (!CORBA_Object_is_nil (local_store->corba_local_storage, &ev)) + bonobo_object_release_unref (local_store->corba_local_storage, &ev); CORBA_exception_free (&ev); if (local_store->local_storage_listener) @@ -564,6 +562,8 @@ register_folder_registered(struct _mail_msg *mm) if (local_folder->folder) { g_hash_table_insert (local_folder->local_store->folders, local_folder->uri + 8, local_folder); + /* Remove the circular ref once the local store knows aboutthe folder */ + camel_object_unref ((CamelObject *)local_folder->local_store); /* add the folder to the vfolder lists FIXME: merge stuff above with this */ vfolder_register_source(local_folder->folder); @@ -732,6 +732,11 @@ mail_local_storage_startup (EvolutionShellClient *shellclient, CORBA_exception_free (&ev); } +void +mail_local_storage_shutdown (void) +{ + camel_object_unref (CAMEL_OBJECT (local_store)); +} /* Local folder reconfiguration stuff */ diff --git a/mail/mail-local.h b/mail/mail-local.h index 254fcbe4f6..f61a843843 100644 --- a/mail/mail-local.h +++ b/mail/mail-local.h @@ -32,6 +32,7 @@ void mail_local_storage_startup (EvolutionShellClient *shellclient, const char *evolution_path); +void mail_local_storage_shutdown (void); void mail_local_reconfigure_folder (FolderBrowser *fb); |