diff options
Diffstat (limited to 'calendar/gui')
-rw-r--r-- | calendar/gui/alarm-notify/notify-main.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/calendar/gui/alarm-notify/notify-main.c b/calendar/gui/alarm-notify/notify-main.c index b6f60222b5..4dca946d76 100644 --- a/calendar/gui/alarm-notify/notify-main.c +++ b/calendar/gui/alarm-notify/notify-main.c @@ -52,6 +52,8 @@ static BonoboGenericFactory *factory; static AlarmNotify *alarm_notify_service = NULL; +/* to ensure alarm_notify object is created only once */ +GStaticMutex mutex_init = G_STATIC_MUTEX_INIT; /* Callback for the master client's "die" signal. We must terminate the daemon * since the session is ending. @@ -104,6 +106,7 @@ init_session (void) static BonoboObject * alarm_notify_factory_fn (BonoboGenericFactory *factory, const char *component_id, void *data) { + g_static_mutex_lock (&mutex_init); if (!alarm_notify_service) { alarm_notify_service = alarm_notify_new (); g_assert (alarm_notify_service != NULL); @@ -111,6 +114,7 @@ alarm_notify_factory_fn (BonoboGenericFactory *factory, const char *component_id bonobo_object_ref (BONOBO_OBJECT (alarm_notify_service)); + g_static_mutex_unlock (&mutex_init); return BONOBO_OBJECT (alarm_notify_service); } @@ -118,10 +122,13 @@ alarm_notify_factory_fn (BonoboGenericFactory *factory, const char *component_id static gboolean init_alarm_service (gpointer user_data) { + if (!g_static_mutex_trylock (&mutex_init)) + return FALSE; if (!alarm_notify_service) { alarm_notify_service = alarm_notify_new (); g_assert (alarm_notify_service != NULL); } + g_static_mutex_unlock (&mutex_init); return FALSE; } |