summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bus/main.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/bus/main.c b/bus/main.c
index 1af588e3..136d122f 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;
}