]> err.no Git - systemd/commitdiff
journal: properly handle if we interleave files with different boot ids
authorLennart Poettering <lennart@poettering.net>
Tue, 27 Mar 2012 16:50:34 +0000 (18:50 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 27 Mar 2012 16:50:34 +0000 (18:50 +0200)
If we try to locate a monotonic time in a file that doesn't have any
entries with the matching boot id, then don't fail on it, simply
fall back to calendar time.

src/journal/sd-journal.c

index e9cd26e95c6f43106aa930bf24653ea8d8cb9b23..92ba57822bae3035595971da9ae08ca4aba7f41d 100644 (file)
@@ -325,9 +325,17 @@ static int find_location(sd_journal *j, JournalFile *f, direction_t direction, O
                 else if (j->current_location.seqnum_set &&
                          sd_id128_equal(j->current_location.seqnum_id, f->header->seqnum_id))
                         r = journal_file_move_to_entry_by_seqnum(f, j->current_location.seqnum, direction, &o, &p);
-                else if (j->current_location.monotonic_set)
+                else if (j->current_location.monotonic_set) {
                         r = journal_file_move_to_entry_by_monotonic(f, j->current_location.boot_id, j->current_location.monotonic, direction, &o, &p);
-                else if (j->current_location.realtime_set)
+
+                        if (r == -ENOENT) {
+                                /* boot id unknown in this file */
+                                if (j->current_location.realtime_set)
+                                        r = journal_file_move_to_entry_by_realtime(f, j->current_location.realtime, direction, &o, &p);
+                                else
+                                        r = journal_file_next_entry(f, NULL, 0, direction, &o, &p);
+                        }
+                } else if (j->current_location.realtime_set)
                         r = journal_file_move_to_entry_by_realtime(f, j->current_location.realtime, direction, &o, &p);
                 else
                         r = journal_file_next_entry(f, NULL, 0, direction, &o, &p);