2 Commits

Author SHA1 Message Date
Auke Kok 5dfb9821e3 v19 2019-11-04 14:18:38 -08:00
Auke Kok 348fd7d744 Fixed signedness.
It appears that using a signed int causes the reads from libsystemd-journal
to return incorrect values when comparing time stamps. I've fixed them
to unsigned ones and monitored the performance on 2 systems for 3 days and
it no longer misbehaves. I've also made it use `atoll` instead of `atoi`
to prevent incomplete results.
2019-11-04 14:18:12 -08:00
2 changed files with 6 additions and 4 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.64])
AC_INIT([tallow], [18], [auke-jan.h.kok@intel.com])
AC_INIT([tallow], [19], [auke-jan.h.kok@intel.com])
AM_INIT_AUTOMAKE([foreign -Wall -Werror -Wno-portability silent-rules subdir-objects color-tests
no-dist-gzip dist-xz])
AC_CONFIG_FILES([Makefile])
+5 -3
View File
@@ -287,7 +287,7 @@ int main(void)
int r;
FILE *f;
int timeout = 60;
long long int last_timestamp = 0;
long long unsigned int last_timestamp = 0;
json_load_patterns();
@@ -396,11 +396,13 @@ int main(void)
* this happens when the journal rotates - we get replayed events
*/
if (sd_journal_get_data(j, "_SOURCE_REALTIME_TIMESTAMP", &dt, &dl) == 0) {
long long int lt = atoi(dt + strlen("_SOURCE_REALTIME_TIMESTAMP="));
long long unsigned int lt = atoll(dt + strlen("_SOURCE_REALTIME_TIMESTAMP="));
if (lt > last_timestamp)
last_timestamp = lt;
else if (lt < last_timestamp)
else if (lt < last_timestamp) {
dbg("Discarding old entry: %llu - %llu\n", lt, last_timestamp);
continue;
}
}
if (sd_journal_get_data(j, "MESSAGE", &d, &l) < 0) {