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 <thiago@kde.org>
This commit is contained in:
Simon McVittie 2011-06-13 15:58:45 +01:00
parent c5c7850762
commit 50c81a35a7

View file

@ -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;
}