diff options
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; |