From: Michal Schmidt Date: Fri, 19 Dec 2014 16:11:22 +0000 (+0100) Subject: journal: skipping of exhausted journal files is bad if direction changed X-Git-Tag: v219~905 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=668c965af journal: skipping of exhausted journal files is bad if direction changed 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. --- diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 89cab3733..d46dc3c29 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -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. */