summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Müller <georgmueller@gmx.net>2020-02-20 19:19:41 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-03-18 20:25:01 +0100
commit2867dfbf70a5d761f662fe4b7c81a67e19df008b (patch)
tree114af26d58062446bd7784ec096740b52103b19e
parentaf339a3122be302446ec79b76123fd4661a120f9 (diff)
downloadsystemd-2867dfbf70a5d761f662fe4b7c81a67e19df008b.tar.gz
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)
-rw-r--r--src/journal/sd-journal.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
index 3fa98dfda2..17998090f4 100644
--- a/src/journal/sd-journal.c
+++ b/src/journal/sd-journal.c
@@ -435,11 +435,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));
@@ -448,7 +449,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 &&
@@ -787,7 +789,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