summaryrefslogtreecommitdiff
path: root/telepathy-logger/log-store-xml.c
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2011-05-26 16:46:25 -0400
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2011-05-26 16:47:11 -0400
commit60cdc2fbde2b3eb376f9d01c984ffd9f426196f9 (patch)
tree94d2949fef4260ddcdfbc4796fe2e9829f77868c /telepathy-logger/log-store-xml.c
parent70653d930a0cbb245f36719da5362cf89b208487 (diff)
downloadtelepathy-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.c36
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;