Changeset 3704

Show
Ignore:
Timestamp:
06/20/08 11:53:30
Author:
jdapena
Message:

* libtinymail-camel/tny-camel-folder.c:

        • Fix camel operation references

* libtinymail-camel/tny-camel-bs-mime-part.c:

        • Fix camel operation references

* libtinymail-camel/tny-camel-queue.c:

        • Make queue reference to account be weak.

* libtinymail-camel/tny-camel-account.c:

        • More camel operation reference fixes.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r3702 r3704  
    112008-06-20  Jose Dapena Paz  <jdapena@igalia.com> 
     2 
     3        * libtinymail-camel/tny-camel-folder.c: 
     4        Fix camel operation references 
     5 
     6        * libtinymail-camel/tny-camel-bs-mime-part.c: 
     7        Fix camel operation references 
     8 
     9        * libtinymail-camel/tny-camel-queue.c: 
     10        Make queue reference to account be weak. 
     11 
     12        * libtinymail-camel/tny-camel-account.c: 
     13        More camel operation reference fixes. 
    214 
    315        * libtinymail/tny-cached-file-stream.c: 
  • trunk/libtinymail-camel/tny-camel-account.c

    r3666 r3704  
    775775        priv->inuse_spin = TRUE; 
    776776 
    777         if (priv->cancel) 
     777        if (priv->cancel) { 
    778778                _tny_camel_account_actual_uncancel (self); 
     779                camel_operation_unregister (priv->cancel); 
     780        } 
    779781 
    780782        priv->cancel = camel_operation_new (func, user_data); 
    781783 
    782         camel_operation_ref (priv->cancel); 
    783         camel_operation_register (priv->cancel); 
    784784        camel_operation_start (priv->cancel, (char*)what); 
    785785 
  • trunk/libtinymail-camel/tny-camel-bs-mime-part.c

    r3666 r3704  
    557557                if (fpriv->account && TNY_IS_CAMEL_ACCOUNT (fpriv->account)) { 
    558558                        TnyCamelAccountPriv *apriv = TNY_CAMEL_ACCOUNT_GET_PRIVATE (fpriv->account); 
     559                        camel_operation_ref (cancel); 
    559560                        apriv->getmsg_cancel = cancel; 
    560561                } 
    561562        } 
    562563 
    563         camel_operation_ref (cancel); 
    564564        camel_operation_register (cancel); 
    565565        camel_operation_start (cancel, (char *) "Getting message part"); 
     
    589589                        TnyCamelAccountPriv *apriv = TNY_CAMEL_ACCOUNT_GET_PRIVATE (fpriv->account); 
    590590                        apriv->getmsg_cancel = NULL; 
     591                        camel_operation_unref (cancel); 
    591592                } 
    592593        } 
  • trunk/libtinymail-camel/tny-camel-folder.c

    r3687 r3704  
    25092509                TnyCamelAccountPriv *apriv = TNY_CAMEL_ACCOUNT_GET_PRIVATE (priv->account); 
    25102510                apriv->getmsg_cancel = cancel; 
     2511                camel_operation_ref (cancel); 
    25112512        } 
    25122513 
     
    25152516        /* g_static_rec_mutex_lock (priv->folder_lock); */ 
    25162517 
    2517         camel_operation_ref (cancel); 
    25182518        camel_operation_register (cancel); 
    25192519        camel_operation_start (cancel, (char *) "Getting message"); 
     
    25362536                TnyCamelAccountPriv *apriv = TNY_CAMEL_ACCOUNT_GET_PRIVATE (priv->account); 
    25372537                apriv->getmsg_cancel = NULL; 
     2538                camel_operation_unref (cancel); 
    25382539        } 
    25392540 
  • trunk/libtinymail-camel/tny-camel-queue.c

    r3666 r3704  
    4040        (G_TYPE_INSTANCE_GET_PRIVATE ((o), TNY_TYPE_CAMEL_QUEUE, TnyCamelQueuePriv)) 
    4141 
     42static void account_finalized (TnyCamelQueue *queue, GObject *finalized_account); 
    4243 
    4344static void 
     
    4748 
    4849        self->stopped = TRUE; 
     50 
     51        g_mutex_lock (self->mutex); 
     52        if (self->account) 
     53                g_object_weak_unref (G_OBJECT (self->account), (GWeakNotify) account_finalized, self); 
     54        g_mutex_unlock (self->mutex); 
    4955 
    5056        g_static_rec_mutex_lock (self->lock); 
     
    6571} 
    6672 
     73static void 
     74account_finalized (TnyCamelQueue *queue, GObject *finalized_account) 
     75{ 
     76        g_mutex_lock (queue->mutex); 
     77        queue->account = NULL; 
     78        queue->stopped = TRUE; 
     79        if (queue->is_waiting) { 
     80                g_cond_broadcast (queue->condition); 
     81        } 
     82        g_mutex_unlock (queue->mutex); 
     83} 
     84 
    6785/** 
    6886 * _tny_camel_queue_new 
     
    7997 
    8098        self->account = account; 
     99        g_object_weak_ref (G_OBJECT (account), (GWeakNotify) account_finalized, self); 
    81100 
    82101        return TNY_CAMEL_QUEUE (self); 
     
    176195                if (queue->next_uncancel) 
    177196                { 
    178                         _tny_camel_account_actual_uncancel (TNY_CAMEL_ACCOUNT (queue->account)); 
     197                        g_mutex_lock (queue->mutex); 
     198                        if (queue->account) { 
     199                                g_object_ref (queue->account); 
     200                                g_mutex_unlock (queue->mutex); 
     201                                _tny_camel_account_actual_uncancel (TNY_CAMEL_ACCOUNT (queue->account)); 
     202                                g_object_unref (queue->account); 
     203                        } else { 
     204                                g_mutex_unlock (queue->mutex); 
     205                        } 
    179206                        queue->next_uncancel = FALSE; 
    180207                } 
     
    256283        queue->stopped = TRUE; 
    257284 
    258         g_object_unref (queue->account); 
    259285        g_object_unref (queue); 
    260286 
     
    335361                if (item->flags & TNY_CAMEL_QUEUE_CANCELLABLE_ITEM) { 
    336362                        if (!(item->flags & TNY_CAMEL_QUEUE_SYNC_ITEM)) { 
    337                                 _tny_camel_account_actual_cancel (TNY_CAMEL_ACCOUNT (queue->account)); 
     363                                if (queue->account) 
     364                                        _tny_camel_account_actual_cancel (TNY_CAMEL_ACCOUNT (queue->account)); 
    338365                                queue->next_uncancel = TRUE; 
    339366                        } 
     
    388415 
    389416        g_static_rec_mutex_lock (queue->lock); 
     417 
     418        if (queue->account == NULL) 
     419                g_assert ("We should never be running tny_camel_queue_launch_wflags if account was unreferenced"); 
    390420 
    391421        if (flags & TNY_CAMEL_QUEUE_PRIORITY_ITEM)  
     
    413443                queue->stopped = FALSE; 
    414444                g_object_ref (queue); 
    415                 g_object_ref (queue->account); 
    416445                queue->thread = g_thread_create (tny_camel_queue_thread_main_func,  
    417446                        queue, FALSE, &err);