From: Lennart Poettering Date: Tue, 10 Jul 2012 19:46:11 +0000 (+0200) Subject: journal: introduce sd_journal_wait() to simplify writing synchronous clients X-Git-Tag: v187~129 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=e02d1cf72d115d1d61defdca5b551672d876c6bd journal: introduce sd_journal_wait() to simplify writing synchronous clients --- diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 6929b7601..7d8b8e51c 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -210,7 +210,7 @@ static int generate_new_id128(void) { } int main(int argc, char *argv[]) { - int r, i, fd; + int r, i; sd_journal *j = NULL; unsigned line = 0; bool need_seek = false; @@ -301,12 +301,6 @@ int main(int argc, char *argv[]) { } } - fd = sd_journal_get_fd(j); - if (fd < 0) { - log_error("Failed to get wakeup fd: %s", strerror(-fd)); - goto finish; - } - if (!arg_quiet) { usec_t start, end; char start_buf[FORMAT_TIMESTAMP_MAX], end_buf[FORMAT_TIMESTAMP_MAX]; @@ -385,15 +379,9 @@ int main(int argc, char *argv[]) { if (!arg_follow) break; - r = fd_wait_for_event(fd, POLLIN, (usec_t) -1); - if (r < 0) { - log_error("Couldn't wait for event: %s", strerror(-r)); - goto finish; - } - - r = sd_journal_process(j); + r = sd_journal_wait(j, (uint64_t) -1); if (r < 0) { - log_error("Failed to process: %s", strerror(-r)); + log_error("Couldn't wait for log event: %s", strerror(-r)); goto finish; } } diff --git a/src/journal/libsystemd-journal.sym b/src/journal/libsystemd-journal.sym index d29108426..d1ba9e8e3 100644 --- a/src/journal/libsystemd-journal.sym +++ b/src/journal/libsystemd-journal.sym @@ -57,3 +57,8 @@ global: sd_journal_get_cutoff_realtime_usec; sd_journal_get_cutoff_monotonic_usec; } LIBSYSTEMD_JOURNAL_183; + +LIBSYSTEMD_JOURNAL_187 { +global: + sd_journal_wait; +} LIBSYSTEMD_JOURNAL_184; diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 75884594a..149dc10bd 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "sd-journal.h" #include "journal-def.h" @@ -1622,6 +1623,20 @@ _public_ int sd_journal_process(sd_journal *j) { } } +_public_ int sd_journal_wait(sd_journal *j, uint64_t timeout_usec) { + int r, k; + + assert(j); + + r = fd_wait_for_event(j->inotify_fd, POLLIN, timeout_usec); + k = sd_journal_process(j); + + if (r < 0) + return r; + + return k; +} + _public_ int sd_journal_get_cutoff_realtime_usec(sd_journal *j, uint64_t *from, uint64_t *to) { Iterator i; JournalFile *f; diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index 697b5cf4b..540b5a2a2 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -557,7 +557,6 @@ int show_journal_by_unit( char *m = NULL; sd_journal *j = NULL; int r; - int fd; unsigned line = 0; bool need_seek = false; @@ -583,10 +582,6 @@ int show_journal_by_unit( if (r < 0) goto finish; - fd = sd_journal_get_fd(j); - if (fd < 0) - goto finish; - r = sd_journal_add_match(j, m, strlen(m)); if (r < 0) goto finish; @@ -663,11 +658,7 @@ int show_journal_by_unit( if (!follow) break; - r = fd_wait_for_event(fd, POLLIN, (usec_t) -1); - if (r < 0) - goto finish; - - r = sd_journal_process(j); + r = sd_journal_wait(j, (usec_t) -1); if (r < 0) goto finish; diff --git a/src/systemd/sd-journal.h b/src/systemd/sd-journal.h index a69aa25a6..ee4acffd6 100644 --- a/src/systemd/sd-journal.h +++ b/src/systemd/sd-journal.h @@ -113,6 +113,7 @@ enum { int sd_journal_get_fd(sd_journal *j); int sd_journal_process(sd_journal *j); +int sd_journal_wait(sd_journal *j, uint64_t timeout_usec); #define SD_JOURNAL_FOREACH(j) \ if (sd_journal_seek_head(j) >= 0) \