aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog5
-rw-r--r--mail/mail-mt.c13
2 files changed, 15 insertions, 3 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index b9b5c81186..b6af992250 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,5 +1,10 @@
2001-10-30 <NotZed@Ximian.com>
+ * mail-mt.c (mail_msg_received): If we have a cancellation setup,
+ destroy it immediately, to save fd's.
+ (mail_msg_cancel): Check cancel != NULL.
+ (mail_msg_free): Same.
+
* folder-info.c: Comment out the Folder: and you've got mail
prints.
diff --git a/mail/mail-mt.c b/mail/mail-mt.c
index 25ff6c632a..d02eaaab60 100644
--- a/mail/mail-mt.c
+++ b/mail/mail-mt.c
@@ -206,7 +206,9 @@ void mail_msg_free(void *msg)
MAIL_MT_UNLOCK(mail_msg_lock);
- camel_operation_unref(m->cancel);
+ if (m->cancel)
+ camel_operation_unref(m->cancel);
+
camel_exception_clear(&m->ex);
/*g_free(m->priv->what);*/
g_free(m->priv);
@@ -277,7 +279,7 @@ void mail_msg_cancel(unsigned int msgid)
MAIL_MT_LOCK(mail_msg_lock);
m = g_hash_table_lookup(mail_msg_active_table, (void *)msgid);
- if (m)
+ if (m && m->cancel)
camel_operation_cancel(m->cancel);
MAIL_MT_UNLOCK(mail_msg_lock);
@@ -500,6 +502,10 @@ mail_msg_received(EThread *e, EMsg *msg, void *data)
if (m->ops->describe_msg) {
camel_operation_end(m->cancel);
camel_operation_unregister(m->cancel);
+ MAIL_MT_LOCK(mail_msg_lock);
+ camel_operation_unref(m->cancel);
+ m->cancel = NULL;
+ MAIL_MT_UNLOCK(mail_msg_lock);
}
}
@@ -909,7 +915,8 @@ static void do_op_status(struct _mail_msg *mm)
MAIL_MT_UNLOCK (mail_msg_lock);
if (activity)
gtk_object_unref (GTK_OBJECT (activity));
- camel_operation_unref (msg->cancel);
+ if (msg->cancel)
+ camel_operation_unref (msg->cancel);
camel_exception_clear (&msg->ex);
g_free (msg->priv);
g_free (msg);