[gnome-online-accounts/wip/backports: 5/6] goaalarm: add locks when setting up timers



commit f92b66abf8dce5ae9b86cfe32ec380a1a82b2138
Author: Ray Strode <rstrode redhat com>
Date:   Fri Oct 11 11:19:42 2013 -0400

    goaalarm: add locks when setting up timers
    
    An alarm could be getting set in one thread while getting
    cleared in another.  We need to protect against that.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=709953

 src/goaidentity/goaalarm.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
---
diff --git a/src/goaidentity/goaalarm.c b/src/goaidentity/goaalarm.c
index a3eb550..5f50243 100644
--- a/src/goaidentity/goaalarm.c
+++ b/src/goaidentity/goaalarm.c
@@ -609,6 +609,7 @@ goa_alarm_set_time (GoaAlarm *self, GDateTime *time, GCancellable *cancellable)
   if (g_cancellable_is_cancelled (cancellable))
     return;
 
+  g_rec_mutex_lock (&self->priv->lock);
   if (self->priv->cancellable != NULL && self->priv->cancellable != cancellable)
     g_cancellable_cancel (self->priv->cancellable);
 
@@ -638,12 +639,12 @@ goa_alarm_set_time (GoaAlarm *self, GDateTime *time, GCancellable *cancellable)
 
   self->priv->context = g_main_context_ref (g_main_context_default ());
 
-  g_object_notify (G_OBJECT (self), "time");
-
   schedule_wakeups (self);
 
   /* Wake up right away, in case it's already expired leaving the gate */
   schedule_immediate_wakeup (self);
+  g_rec_mutex_unlock (&self->priv->lock);
+  g_object_notify (G_OBJECT (self), "time");
 }
 
 GDateTime *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]