diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2011-05-26 16:46:25 -0400 |
---|---|---|
committer | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2011-05-26 16:47:11 -0400 |
commit | 60cdc2fbde2b3eb376f9d01c984ffd9f426196f9 (patch) | |
tree | 94d2949fef4260ddcdfbc4796fe2e9829f77868c /telepathy-logger/log-store-xml.c | |
parent | 70653d930a0cbb245f36719da5362cf89b208487 (diff) | |
download | telepathy-logger-60cdc2fbde2b3eb376f9d01c984ffd9f426196f9.tar.gz |
Fixed initial call event_queue_insert_sorted_after()
The current code would always insert after the first element.
Diffstat (limited to 'telepathy-logger/log-store-xml.c')
-rw-r--r-- | telepathy-logger/log-store-xml.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/telepathy-logger/log-store-xml.c b/telepathy-logger/log-store-xml.c index a27e0cf..6f82b14 100644 --- a/telepathy-logger/log-store-xml.c +++ b/telepathy-logger/log-store-xml.c @@ -1283,21 +1283,33 @@ event_queue_insert_sorted_after (GQueue *events, GList *index, TplEvent *event) { - while (index != NULL && - tpl_event_get_timestamp (event) < - tpl_event_get_timestamp (TPL_EVENT (index->data))) - index = g_list_next (index); - - if (index != NULL) + if (g_queue_is_empty (events)) { - g_queue_insert_after (events, index, event); - return g_list_next (index); + g_queue_push_tail (events, event); + return events->tail; } - else + + /* The initial index might go before the first one */ + if (index == NULL) { - g_queue_push_tail (events, event); - return events->head; + index = events->head; + + if (tpl_event_get_timestamp (event) < + tpl_event_get_timestamp (TPL_EVENT (index->data))) + { + g_queue_insert_before (events, index, event); + return events->head; + } } + + /* Find the last event that this event can go after */ + while (g_list_next (index) != NULL && + tpl_event_get_timestamp (event) >= + tpl_event_get_timestamp (TPL_EVENT (g_list_next (index)->data))) + index = g_list_next (index); + + g_queue_insert_after (events, index, event); + return g_list_next (index); } static void @@ -1454,7 +1466,7 @@ log_store_xml_get_events_for_file (TplLogStoreXml *self, supersedes_links = g_hash_table_new (g_str_hash, g_str_equal); /* Now get the events. */ - index = events->head; + index = NULL; for (node = log_node->children; node; node = node->next) { TplEvent *event = NULL; |