From d25598854dd7f517db160b5e377d379e34e72f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georg=20M=C3=BCller?= Date: Thu, 20 Feb 2020 19:19:41 +0100 Subject: journalctl: show duplicate entries if they are from the same file (#14898) When having a service which intentionally outputs multiple equal lines, all these messages might be inserted with the same timestamp. journalctl has a mechanism to avoid duplicate lines, which might be in different journal files. This patch allows duplicate lines, if they are from the same file. (cherry picked from commit b6849042d610da90d5821a03967d648d424f7864) (cherry picked from commit 2867dfbf70a5d761f662fe4b7c81a67e19df008b) --- src/journal/sd-journal.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 055a975b31..4c49fd2c87 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -433,11 +433,12 @@ _public_ void sd_journal_flush_matches(sd_journal *j) { detach_location(j); } -_pure_ static int compare_with_location(JournalFile *f, Location *l) { +_pure_ static int compare_with_location(const JournalFile *f, const Location *l, const JournalFile *current_file) { int r; assert(f); assert(l); + assert(current_file); assert(f->location_type == LOCATION_SEEK); assert(IN_SET(l->type, LOCATION_DISCRETE, LOCATION_SEEK)); @@ -446,7 +447,8 @@ _pure_ static int compare_with_location(JournalFile *f, Location *l) { l->realtime_set && f->current_realtime == l->realtime && l->xor_hash_set && - f->current_xor_hash == l->xor_hash) + f->current_xor_hash == l->xor_hash && + f != current_file) return 0; if (l->seqnum_set && @@ -785,7 +787,7 @@ static int next_beyond_location(sd_journal *j, JournalFile *f, direction_t direc if (j->current_location.type == LOCATION_DISCRETE) { int k; - k = compare_with_location(f, &j->current_location); + k = compare_with_location(f, &j->current_location, j->current_file); found = direction == DIRECTION_DOWN ? k > 0 : k < 0; } else -- cgit v1.2.1