diff options
-rw-r--r-- | camel/ChangeLog | 5 | ||||
-rw-r--r-- | camel/camel-disco-store.c | 18 | ||||
-rw-r--r-- | camel/camel-store.c | 11 | ||||
-rw-r--r-- | camel/camel-transport.c | 23 | ||||
-rw-r--r-- | camel/providers/imap/camel-imap-store.c | 26 | ||||
-rw-r--r-- | camel/providers/smtp/camel-smtp-transport.c | 9 |
6 files changed, 50 insertions, 42 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog index 5304e9cdee..67575fc472 100644 --- a/camel/ChangeLog +++ b/camel/ChangeLog @@ -1,3 +1,8 @@ +2001-08-13 Jeffrey Stedfast <fejj@ximian.com> + + * camel-store.c (camel_store_get_folder): We need to be ref'ing + the folder if/when we add it to the hash. This may fix bug #6089? + 2001-08-11 Ettore Perazzoli <ettore@ximian.com> * providers/local/camel-spool-summary.c (summary_rebuild): diff --git a/camel/camel-disco-store.c b/camel/camel-disco-store.c index ebe26a1908..0cc5f4feea 100644 --- a/camel/camel-disco-store.c +++ b/camel/camel-disco-store.c @@ -169,18 +169,18 @@ disco_get_folder (CamelStore *store, const char *name, guint32 flags, CamelException *ex) { CamelDiscoStore *disco_store = CAMEL_DISCO_STORE (store); - + switch (camel_disco_store_status (disco_store)) { case CAMEL_DISCO_STORE_ONLINE: return CDS_CLASS (store)->get_folder_online (store, name, flags, ex); - + case CAMEL_DISCO_STORE_OFFLINE: return CDS_CLASS (store)->get_folder_offline (store, name, flags, ex); - + case CAMEL_DISCO_STORE_RESYNCING: return CDS_CLASS (store)->get_folder_resyncing (store, name, flags, ex); } - + g_assert_not_reached (); return NULL; } @@ -190,11 +190,11 @@ disco_get_folder_info (CamelStore *store, const char *top, guint32 flags, CamelException *ex) { CamelDiscoStore *disco_store = CAMEL_DISCO_STORE (store); - + switch (camel_disco_store_status (disco_store)) { case CAMEL_DISCO_STORE_ONLINE: return CDS_CLASS (store)->get_folder_info_online (store, top, flags, ex); - + case CAMEL_DISCO_STORE_OFFLINE: /* Can't edit subscriptions while offline */ if ((store->flags & CAMEL_STORE_SUBSCRIPTIONS) && @@ -202,13 +202,13 @@ disco_get_folder_info (CamelStore *store, const char *top, camel_disco_store_check_online (disco_store, ex); return NULL; } - + return CDS_CLASS (store)->get_folder_info_offline (store, top, flags, ex); - + case CAMEL_DISCO_STORE_RESYNCING: return CDS_CLASS (store)->get_folder_info_resyncing (store, top, flags, ex); } - + g_assert_not_reached (); return NULL; } diff --git a/camel/camel-store.c b/camel/camel-store.c index dbf0fce2e7..7abea71392 100644 --- a/camel/camel-store.c +++ b/camel/camel-store.c @@ -115,8 +115,8 @@ camel_store_init (void *o) store->priv = g_malloc0 (sizeof (*store->priv)); #ifdef ENABLE_THREADS - store->priv->folder_lock = g_mutex_new(); - store->priv->cache_lock = g_mutex_new(); + store->priv->folder_lock = g_mutex_new (); + store->priv->cache_lock = g_mutex_new (); #endif } @@ -204,9 +204,9 @@ CamelFolder * camel_store_get_folder (CamelStore *store, const char *folder_name, guint32 flags, CamelException *ex) { CamelFolder *folder = NULL; - + CAMEL_STORE_LOCK(store, folder_lock); - + if (store->folders) { /* Try cache first. */ CAMEL_STORE_LOCK(store, cache_lock); @@ -227,13 +227,14 @@ camel_store_get_folder (CamelStore *store, const char *folder_name, guint32 flag CAMEL_STORE_LOCK(store, cache_lock); g_hash_table_insert (store->folders, g_strdup (folder_name), folder); + camel_object_ref (CAMEL_OBJECT (folder)); camel_object_hook_event (CAMEL_OBJECT (folder), "finalize", folder_finalize, store); CAMEL_STORE_UNLOCK(store, cache_lock); } } } - + CAMEL_STORE_UNLOCK(store, folder_lock); return folder; } diff --git a/camel/camel-transport.c b/camel/camel-transport.c index 0338f5dcc0..b4d78c8d74 100644 --- a/camel/camel-transport.c +++ b/camel/camel-transport.c @@ -39,7 +39,7 @@ static void camel_transport_init (gpointer object, gpointer klass) { CamelTransport *xport = object; - + xport->priv = g_malloc0 (sizeof (struct _CamelTransportPrivate)); #ifdef ENABLE_THREADS xport->priv->send_lock = g_mutex_new (); @@ -60,19 +60,20 @@ camel_transport_finalize (CamelObject *object) CamelType camel_transport_get_type (void) { - static CamelType camel_transport_type = CAMEL_INVALID_TYPE; + static CamelType type = CAMEL_INVALID_TYPE; - if (camel_transport_type == CAMEL_INVALID_TYPE) { - camel_transport_type = camel_type_register (CAMEL_SERVICE_TYPE, "CamelTransport", - sizeof (CamelTransport), - sizeof (CamelTransportClass), - NULL, - NULL, - (CamelObjectInitFunc) camel_transport_init, - (CamelObjectFinalizeFunc) camel_transport_finalize); + if (type == CAMEL_INVALID_TYPE) { + type = camel_type_register (CAMEL_SERVICE_TYPE, + "CamelTransport", + sizeof (CamelTransport), + sizeof (CamelTransportClass), + NULL, + NULL, + (CamelObjectInitFunc) camel_transport_init, + (CamelObjectFinalizeFunc) camel_transport_finalize); } - return camel_transport_type; + return type; } diff --git a/camel/providers/imap/camel-imap-store.c b/camel/providers/imap/camel-imap-store.c index 9eff81ecf3..b4c01110ea 100644 --- a/camel/providers/imap/camel-imap-store.c +++ b/camel/providers/imap/camel-imap-store.c @@ -868,13 +868,13 @@ get_folder_online (CamelStore *store, const char *folder_name, CamelImapResponse *response; CamelFolder *new_folder; char *folder_dir; - + if (!camel_remote_store_connected (CAMEL_REMOTE_STORE (store), ex)) return NULL; - + if (!g_strcasecmp (folder_name, "INBOX")) folder_name = "INBOX"; - + /* Lock around the whole lot to check/create atomically */ CAMEL_IMAP_STORE_LOCK (imap_store, command_lock); if (imap_store->current_folder) { @@ -886,12 +886,12 @@ get_folder_online (CamelStore *store, const char *folder_name, if (!response) { if (!flags & CAMEL_STORE_FOLDER_CREATE) return no_such_folder (folder_name, ex); - + response = camel_imap_command (imap_store, NULL, ex, "CREATE %F", folder_name); if (response) { camel_imap_response_free (imap_store, response); - + response = camel_imap_command (imap_store, NULL, NULL, "SELECT %F", folder_name); } @@ -900,7 +900,7 @@ get_folder_online (CamelStore *store, const char *folder_name, return NULL; } } - + folder_dir = e_path_to_physical (imap_store->storage_path, folder_name); new_folder = camel_imap_folder_new (store, folder_name, folder_dir, ex); g_free (folder_dir); @@ -916,9 +916,9 @@ get_folder_online (CamelStore *store, const char *folder_name, } } camel_imap_response_free_without_processing (imap_store, response); - + CAMEL_IMAP_STORE_UNLOCK (imap_store, command_lock); - + return new_folder; } @@ -929,21 +929,21 @@ get_folder_offline (CamelStore *store, const char *folder_name, CamelImapStore *imap_store = CAMEL_IMAP_STORE (store); CamelFolder *new_folder; char *folder_dir; - + if (!imap_store->connected && !camel_service_connect (CAMEL_SERVICE (store), ex)) return NULL; - + if (!g_strcasecmp (folder_name, "INBOX")) folder_name = "INBOX"; - + folder_dir = e_path_to_physical (imap_store->storage_path, folder_name); if (access (folder_dir, F_OK) != 0) return no_such_folder (folder_name, ex); - + new_folder = camel_imap_folder_new (store, folder_name, folder_dir, ex); g_free (folder_dir); - + return new_folder; } diff --git a/camel/providers/smtp/camel-smtp-transport.c b/camel/providers/smtp/camel-smtp-transport.c index f7749f4216..1f3abf987d 100644 --- a/camel/providers/smtp/camel-smtp-transport.c +++ b/camel/providers/smtp/camel-smtp-transport.c @@ -112,7 +112,7 @@ camel_smtp_transport_class_init (CamelSmtpTransportClass *camel_smtp_transport_c camel_service_class->disconnect = smtp_disconnect; camel_service_class->query_auth_types = query_auth_types; camel_service_class->get_name = get_name; - + camel_transport_class->can_send = smtp_can_send; camel_transport_class->send = smtp_send; camel_transport_class->send_to = smtp_send_to; @@ -133,7 +133,8 @@ camel_smtp_transport_get_type (void) if (camel_smtp_transport_type == CAMEL_INVALID_TYPE) { camel_smtp_transport_type = - camel_type_register (CAMEL_TRANSPORT_TYPE, "CamelSmtpTransport", + camel_type_register (CAMEL_TRANSPORT_TYPE, + "CamelSmtpTransport", sizeof (CamelSmtpTransport), sizeof (CamelSmtpTransportClass), (CamelObjectClassInitFunc) camel_smtp_transport_class_init, @@ -151,9 +152,9 @@ smtp_construct (CamelService *service, CamelSession *session, CamelException *ex) { CamelSmtpTransport *smtp_transport = CAMEL_SMTP_TRANSPORT (service); - + CAMEL_SERVICE_CLASS (parent_class)->construct (service, session, provider, url, ex); - + if (camel_url_get_param (url, "use_ssl")) smtp_transport->use_ssl = TRUE; } |