aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorPeter Williams <peterw@src.gnome.org>2000-08-16 04:59:43 +0800
committerPeter Williams <peterw@src.gnome.org>2000-08-16 04:59:43 +0800
commit0adbb63d08342d20bdb06bed1555ad961e24032e (patch)
tree78ffe49e71853ce419e3c5503d9d872c2b96e02c /mail
parent6f0b054a1c5b55f9d965c9e0a585bb51281eae4e (diff)
downloadgsoc2013-evolution-0adbb63d08342d20bdb06bed1555ad961e24032e.tar.gz
gsoc2013-evolution-0adbb63d08342d20bdb06bed1555ad961e24032e.tar.zst
gsoc2013-evolution-0adbb63d08342d20bdb06bed1555ad961e24032e.zip
Address bugzilla bug #496
svn path=/trunk/; revision=4849
Diffstat (limited to 'mail')
-rw-r--r--mail/ChangeLog3
-rw-r--r--mail/message-list.c8
2 files changed, 10 insertions, 1 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index cb91b880bd..72e93cb7fe 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,5 +1,8 @@
2000-08-15 Peter Williams <peterw@helixcode.com>
+ * message-list.c (main_message_changed): Address bug #496 --
+ possible race when forwading a message_changed event.
+
* mail-threads.c (dispatch): Close the dispatch thread's half of
pipes when about to exit.
(mail_operations_terminate): Close the main thread's half of the
diff --git a/mail/message-list.c b/mail/message-list.c
index 7e00d0ac14..c635f3ea84 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -884,12 +884,18 @@ main_message_changed (CamelObject *o, gpointer uid, gpointer user_data)
uid));
if (row != -1)
e_table_model_row_changed (message_list->table_model, row);
+
+ g_free (uid);
}
static void
message_changed (CamelObject *o, gpointer event_data, gpointer user_data)
{
- mail_op_forward_event (main_message_changed, o, event_data, user_data);
+ /* Here we copy the data because our thread may free the copy that we would reference.
+ * The other thread would be passed a uid parameter that pointed to freed data.
+ * We copy it and free it in the handler.
+ */
+ mail_op_forward_event (main_message_changed, o, g_strdup ((gchar *)event_data), user_data);
}
void