mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-05-09 07:18:03 +02:00
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:
parent
c5c7850762
commit
50c81a35a7
1 changed files with 7 additions and 9 deletions
16
bus/main.c
16
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue