From: Simon McVittie Date: Mon, 13 Jun 2011 14:58:45 +0000 (+0100) Subject: bus: signal_handler: ignore failure to write, and explain why X-Git-Tag: dbus-1.5.6~106 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=50c81a35a7c692b0e19b4a5d92343267f4a10c06;p=platform%2Fupstream%2Fdbus.git bus: signal_handler: ignore failure to write, and explain why See the comment in the source code for rationale. Bug: https://bugs.freedesktop.org/show_bug.cgi?id=33336 Reviewed-by: Thiago Macieira --- diff --git a/bus/main.c b/bus/main.c index 1af588e..136d122 100644 --- a/bus/main.c +++ b/bus/main.c @@ -44,7 +44,6 @@ static int reload_pipe[2]; #define RELOAD_WRITE_END 1 static void close_reload_pipe (DBusWatch **); -static void close_reload_pipe_write (void); static void signal_handler (int sig) @@ -64,8 +63,14 @@ signal_handler (int sig) if ((reload_pipe[RELOAD_WRITE_END] > 0) && !_dbus_write_socket (reload_pipe[RELOAD_WRITE_END], &str, 0, 1)) { + /* If we receive SIGHUP often enough to fill the pipe buffer (4096 + * times on old Linux, 65536 on modern Linux) before it can be + * drained, let's just warn and ignore. The configuration will be + * reloaded while draining the pipe buffer, which is what we + * wanted. It's harmless that it will be reloaded fewer times than + * we asked for, since the reload is delayed anyway, so new changes + * will be picked up. */ _dbus_warn ("Unable to write to reload pipe.\n"); - close_reload_pipe_write (); } } break; @@ -261,13 +266,6 @@ close_reload_pipe (DBusWatch **watch) _dbus_close_socket (reload_pipe[RELOAD_READ_END], NULL); reload_pipe[RELOAD_READ_END] = -1; - close_reload_pipe_write (); -} - -/* this is the only bit that's safe to do from an async signal handler */ -static void -close_reload_pipe_write (void) -{ _dbus_close_socket (reload_pipe[RELOAD_WRITE_END], NULL); reload_pipe[RELOAD_WRITE_END] = -1; }