diff options
author | Michael Biebl <biebl@debian.org> | 2009-07-14 17:41:18 +0200 |
---|---|---|
committer | Michael Biebl <biebl@debian.org> | 2009-07-14 17:41:18 +0200 |
commit | b78e497569d2fc75e25c65c3f9f78c8580887c0b (patch) | |
tree | 3f8bf4dd1b6be9554b2da77d82c400697121df24 /src/ck-event-logger.c | |
parent | 1f223c41689bbbd64f8749ff7c09967a49407022 (diff) | |
download | consolekit-upstream/0.3.0.tar.gz |
Imported Upstream version 0.3.0upstream/0.3.0
Diffstat (limited to 'src/ck-event-logger.c')
-rw-r--r-- | src/ck-event-logger.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/ck-event-logger.c b/src/ck-event-logger.c index 2fded87..92bf987 100644 --- a/src/ck-event-logger.c +++ b/src/ck-event-logger.c @@ -254,12 +254,16 @@ writer_thread_start (CkEventLogger *event_logger) { CkLogEvent *event; - while ((event = g_async_queue_pop (event_logger->priv->event_queue)) != NULL) { + while (1) { + event = g_async_queue_pop (event_logger->priv->event_queue); + if (event == NULL || event->type == CK_LOG_EVENT_NONE) { + break; + } write_log_for_event (event_logger, event); ck_log_event_free (event); } - g_thread_exit (NULL); + g_debug ("Writer thread received None event - exiting"); return NULL; } @@ -274,7 +278,7 @@ create_writer_thread (CkEventLogger *event_logger) event_logger->priv->writer_thread = g_thread_create_full ((GThreadFunc)writer_thread_start, event_logger, 65536, - FALSE, + TRUE, TRUE, G_THREAD_PRIORITY_NORMAL, &error); @@ -284,6 +288,22 @@ create_writer_thread (CkEventLogger *event_logger) } } +static void +destroy_writer_thread (CkEventLogger *event_logger) +{ + CkLogEvent event; + + event.type = CK_LOG_EVENT_NONE; + + g_debug ("Destroying writer thread"); + g_async_queue_push (event_logger->priv->event_queue, + &event); +#if 1 + g_debug ("Joining writer thread"); + g_thread_join (event_logger->priv->writer_thread); +#endif +} + static GObject * ck_event_logger_constructor (GType type, guint n_construct_properties, @@ -394,6 +414,8 @@ ck_event_logger_finalize (GObject *object) g_return_if_fail (event_logger->priv != NULL); + destroy_writer_thread (event_logger); + if (event_logger->priv->event_queue != NULL) { g_async_queue_unref (event_logger->priv->event_queue); } |