Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:jberkman
evolution-exchange-2.6
bgo-406155-evo-ex-crash.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bgo-406155-evo-ex-crash.patch of Package evolution-exchange-2.6
Index: mail/mail-stub-exchange.c =================================================================== --- mail/mail-stub-exchange.c (revision 1340) +++ mail/mail-stub-exchange.c (working copy) @@ -43,7 +43,7 @@ #include <exchange-hierarchy.h> #include <mapi.h> -#define d(x) +#define d(x) #define PARENT_TYPE MAIL_TYPE_STUB static MailStubClass *parent_class = NULL; @@ -134,6 +134,9 @@ static void folder_update_linestatus (gpointer key, gpointer value, gpointer data); static void free_folder (gpointer value); static gboolean get_folder_online (MailStubExchangeFolder *mfld, gboolean background); + +static GStaticMutex g_changed_msgs_mutex = G_STATIC_MUTEX_INIT; + static void class_init (GObjectClass *object_class) { @@ -190,9 +193,13 @@ MailStubExchangeFolder *mfld = value; int i; + d(g_print ("%s:%s:%d: freeing mfld: name=[%s]\n", __FILE__, __PRETTY_FUNCTION__, __LINE__, + mfld->name)); + e_folder_exchange_unsubscribe (mfld->folder); g_signal_handlers_disconnect_by_func (mfld->folder, storage_folder_changed, mfld); g_object_unref (mfld->folder); + mfld->folder = NULL; for (i = 0; i < mfld->messages->len; i++) free_message (mfld->messages->pdata[i]); @@ -360,7 +367,9 @@ for (i = 0; i < mfld->changed_messages->len; i++) { if (mfld->changed_messages->pdata[i] == (gpointer)mmsg) { + g_static_rec_mutex_lock (&g_changed_msgs_mutex); g_ptr_array_remove_index_fast (mfld->changed_messages, i); + g_static_rec_mutex_unlock (&g_changed_msgs_mutex); break; } } @@ -1610,6 +1619,13 @@ g_warning ("update_tags: %d", status); } +static void dump_tag_update_values (GQuark key_id, gpointer data, + gpointer user_data) +{ + d(g_print ("Dumping tag_update_values: \n")); + d(g_print ("Key=[%s], value=[%s]\n", g_quark_to_string (key_id), data ? (char *)data:"{NULL}")); +} + static gboolean process_flags (gpointer user_data) { @@ -1620,8 +1636,16 @@ int i; guint32 hier_type = e_folder_exchange_get_hierarchy (mfld->folder)->type; + g_static_rec_mutex_lock (&g_changed_msgs_mutex); + for (i = 0; i < mfld->changed_messages->len; i++) { mmsg = mfld->changed_messages->pdata[i]; + + if (!mmsg->href) { + d(g_print ("%s:%s:%d: mfld = [%s], type=[%d]\n", __FILE__, __PRETTY_FUNCTION__, + __LINE__, mfld->name, mfld->type)); + g_datalist_foreach (&mmsg->tag_updates, dump_tag_update_values, NULL); + } if (mmsg->change_mask & MAIL_STUB_MESSAGE_SEEN) { if (mmsg->change_flags & MAIL_STUB_MESSAGE_SEEN) { @@ -1655,6 +1679,8 @@ g_ptr_array_remove_index_fast (mfld->changed_messages, i--); } + g_static_rec_mutex_unlock (&g_changed_msgs_mutex); + if (seen || unseen) { if (seen) { mark_read (mfld->folder, seen, TRUE); @@ -1672,6 +1698,8 @@ } else return TRUE; } + + g_static_rec_mutex_lock (&g_changed_msgs_mutex); for (i = 0; i < mfld->changed_messages->len; i++) { mmsg = mfld->changed_messages->pdata[i]; @@ -1681,6 +1709,7 @@ g_ptr_array_add (deleted, strrchr (mmsg->href, '/') + 1); } } + g_static_rec_mutex_unlock (&g_changed_msgs_mutex); if (deleted) { MailStub *stub = MAIL_STUB (mse);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor