mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-01-02 05:10:28 +01:00
dbus-monitor: use unbuffered stdout instead of handling SIGINT
The current SIGINT handling of dbus-monitor ain't making too many people happy since it defers the exit to the next msg received -- which might be quite some time away often enough. This patch replaces the SIGINT handling by simply enabling line-buffered IO for STDOUT so that even if you redirect dbus-monitor into a file no lines get accidently lost and the effect of C-c is still immediate. halfline came up with the great idea to use setvbuf here instead of fflush()ing after each printf(). (Oh and the old signal handler was broken anyway, the flag should have been of type sigatomic_t and be marked volatile) Signed-off-by: Colin Walters <walters@verbum.org>
This commit is contained in:
parent
1116f210aa
commit
43b1f91865
1 changed files with 8 additions and 6 deletions
|
|
@ -33,8 +33,6 @@
|
|||
|
||||
#include <time.h>
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
#include "dbus-print-message.h"
|
||||
|
||||
#ifdef DBUS_WIN
|
||||
|
|
@ -214,6 +212,13 @@ main (int argc, char *argv[])
|
|||
|
||||
int i = 0, j = 0, numFilters = 0;
|
||||
char **filters = NULL;
|
||||
|
||||
/* Set stdout to be unbuffered; this is basically so that if people
|
||||
* do dbus-monitor > file, then send SIGINT via Control-C, they
|
||||
* don't lose the last chunk of messages.
|
||||
*/
|
||||
setvbuf (stdout, NULL, _IOLBF, 0);
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
{
|
||||
char *arg = argv[i];
|
||||
|
|
@ -339,10 +344,7 @@ main (int argc, char *argv[])
|
|||
exit (1);
|
||||
}
|
||||
|
||||
/* we handle SIGINT so exit() is reached and flushes stdout */
|
||||
signal (SIGINT, sigint_handler);
|
||||
while (dbus_connection_read_write_dispatch(connection, -1)
|
||||
&& !sigint_received)
|
||||
while (dbus_connection_read_write_dispatch(connection, -1))
|
||||
;
|
||||
exit (0);
|
||||
lose:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue