chiark / gitweb /
journalctl: quit on I/O error
authorDavid Herrmann <dh.herrmann@googlemail.com>
Sun, 13 Jan 2013 11:28:38 +0000 (12:28 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 15 Jan 2013 19:59:10 +0000 (20:59 +0100)
This makes journalctl quit on ferror() conditions on stdout. It fixes an
annoying bug if you pipe its output through 'less' and press 'q'. Without
this fix journalctl will continue reading all journal data until EOF which
can take quite some time. For instance on my machine:

    david-nb ~ # time journalctl | wc -l
    327240

    real    1m13.039s
    user    1m0.217s
    sys     0m10.467s

However, expected behavior is journalctl to quit when its pager closed the
output pipe.

Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
src/journal/journalctl.c

index a74d43be7f2e2aecf76325b7dac8538e5f1dbb87..45543a50130a4aada7dcc7db2102533434096183 100644 (file)
@@ -1077,7 +1077,7 @@ int main(int argc, char *argv[]) {
                                 arg_catalog * OUTPUT_CATALOG;
 
                         r = output_journal(stdout, j, arg_output, 0, flags);
                                 arg_catalog * OUTPUT_CATALOG;
 
                         r = output_journal(stdout, j, arg_output, 0, flags);
-                        if (r < 0)
+                        if (r < 0 || ferror(stdout))
                                 goto finish;
 
                         need_seek = true;
                                 goto finish;
 
                         need_seek = true;