chiark / gitweb /
journal: skipping of exhausted journal files is bad if direction changed
authorMichal Schmidt <mschmidt@redhat.com>
Fri, 19 Dec 2014 16:11:22 +0000 (17:11 +0100)
committerMichal Schmidt <mschmidt@redhat.com>
Fri, 19 Dec 2014 16:14:11 +0000 (17:14 +0100)
EOF is meaningless if the direction of iteration changes.
Move the EOF optimization under the direction check.

This fixes test-journal-interleaving for me.

Thanks to Filipe Brandenburger for telling me about the failure.

src/journal/sd-journal.c

index 89cab3733128d351901690b2a9d8c45f71dabcbb..d46dc3c29c6a7cee21eb44e5af5a7918e18e812c 100644 (file)
@@ -723,13 +723,13 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc
         assert(j);
         assert(f);
 
-        /* If we hit EOF before, recheck if any new entries arrived. */
-        n_entries = le64toh(f->header->n_entries);
-        if (f->location_type == LOCATION_TAIL && n_entries == f->last_n_entries)
-                return 0;
-        f->last_n_entries = n_entries;
-
         if (f->last_direction == direction && f->current_offset > 0) {
+                /* If we hit EOF before, recheck if any new entries arrived. */
+                n_entries = le64toh(f->header->n_entries);
+                if (f->location_type == LOCATION_TAIL && n_entries == f->last_n_entries)
+                        return 0;
+                f->last_n_entries = n_entries;
+
                 /* LOCATION_SEEK here means we did the work in a previous
                  * iteration and the current location already points to a
                  * candidate entry. */