aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2010-02-23 01:51:43 +0800
committerMilan Crha <mcrha@redhat.com>2010-02-23 01:51:43 +0800
commitd4878c1685fd92b5379013d6f3bddda8a23a5d9e (patch)
treece976242dd34c4e8e1c1e5f69ea490858136ea89
parent3e40ee35807042c5dc07f4ed8dbe83bfda8bfc5f (diff)
downloadgsoc2013-evolution-d4878c1685fd92b5379013d6f3bddda8a23a5d9e.tar
gsoc2013-evolution-d4878c1685fd92b5379013d6f3bddda8a23a5d9e.tar.gz
gsoc2013-evolution-d4878c1685fd92b5379013d6f3bddda8a23a5d9e.tar.bz2
gsoc2013-evolution-d4878c1685fd92b5379013d6f3bddda8a23a5d9e.tar.lz
gsoc2013-evolution-d4878c1685fd92b5379013d6f3bddda8a23a5d9e.tar.xz
gsoc2013-evolution-d4878c1685fd92b5379013d6f3bddda8a23a5d9e.tar.zst
gsoc2013-evolution-d4878c1685fd92b5379013d6f3bddda8a23a5d9e.zip
Bug #602185 - Crash after 'Show only this calendar'
-rw-r--r--calendar/gui/gnome-cal.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index cfdfb6d112..dbe91436ae 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -139,6 +139,7 @@ struct _GnomeCalendarPrivate {
ECalMenu *memopad_menu;
/* Calendar query for the date navigator */
+ GMutex *dn_queries_lock; /* lock for dn_queries list */
GList *dn_queries; /* list of CalQueries */
gchar *sexp;
gchar *todo_sexp;
@@ -877,6 +878,8 @@ update_query_async (struct _date_query_msg *msg)
priv = gcal->priv;
+ g_mutex_lock (priv->dn_queries_lock);
+
/* free the previous queries */
for (l = priv->dn_queries; l != NULL; l = l->next) {
old_query = l->data;
@@ -891,6 +894,8 @@ update_query_async (struct _date_query_msg *msg)
g_list_free (priv->dn_queries);
priv->dn_queries = NULL;
+ g_mutex_unlock (priv->dn_queries_lock);
+
g_return_if_fail (priv->sexp != NULL);
real_sexp = adjust_e_cal_view_sexp (gcal, priv->sexp);
@@ -937,7 +942,9 @@ try_again:
g_signal_connect (old_query, "view_done",
G_CALLBACK (dn_e_cal_view_done_cb), gcal);
+ g_mutex_lock (priv->dn_queries_lock);
priv->dn_queries = g_list_append (priv->dn_queries, old_query);
+ g_mutex_unlock (priv->dn_queries_lock);
e_cal_view_start (old_query);
}
@@ -1912,6 +1919,7 @@ gnome_calendar_init (GnomeCalendar *gcal)
priv->taskpad_menu = e_cal_menu_new("org.gnome.evolution.calendar.taskpad");
priv->memopad_menu = e_cal_menu_new ("org.gnome.evolution.calendar.memopad");
+ priv->dn_queries_lock = g_mutex_new ();
priv->dn_queries = NULL;
priv->sexp = g_strdup ("#t"); /* Match all */
priv->todo_sexp = g_strdup ("#t");
@@ -2004,6 +2012,7 @@ gnome_calendar_destroy (GtkObject *object)
e_memo_table_save_state (E_MEMO_TABLE (priv->memo), filename);
g_free (filename);
+ g_mutex_lock (priv->dn_queries_lock);
if (priv->dn_queries) {
for (l = priv->dn_queries; l != NULL; l = l->next) {
g_signal_handlers_disconnect_matched ((ECalView *) l->data, G_SIGNAL_MATCH_DATA,
@@ -2014,6 +2023,9 @@ gnome_calendar_destroy (GtkObject *object)
g_list_free (priv->dn_queries);
priv->dn_queries = NULL;
}
+ g_mutex_unlock (priv->dn_queries_lock);
+ g_mutex_free (priv->dn_queries_lock);
+ priv->dn_queries_lock = NULL;
if (non_intrusive_error_table) {
g_hash_table_destroy (non_intrusive_error_table);
@@ -3372,6 +3384,7 @@ gnome_calendar_remove_source_by_uid (GnomeCalendar *gcal, ECalSourceType source_
switch (source_type) {
case E_CAL_SOURCE_TYPE_EVENT:
+ g_mutex_lock (priv->dn_queries_lock);
/* remove the query for this client */
for (l = priv->dn_queries; l != NULL; l = l->next) {
ECalView *query = l->data;
@@ -3384,6 +3397,7 @@ gnome_calendar_remove_source_by_uid (GnomeCalendar *gcal, ECalSourceType source_
break;
}
}
+ g_mutex_unlock (priv->dn_queries_lock);
model = e_calendar_view_get_model (priv->views[priv->current_view_type]);
e_cal_model_remove_client (model, client);