trivial-httpd: use PR_SET_PDEATHSIG by default

If we're not daemonizing, this is a useful way to ensure we go away if
our parent does.

https://bugzilla.gnome.org/show_bug.cgi?id=741264
This commit is contained in:
Colin Walters 2014-12-08 14:44:44 -05:00
parent e908ebd9b3
commit f7c926c5e9
1 changed files with 18 additions and 1 deletions

View File

@ -28,6 +28,8 @@
#include "otutil.h" #include "otutil.h"
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/prctl.h>
#include <signal.h>
static char *opt_port_file = NULL; static char *opt_port_file = NULL;
static gboolean opt_daemonize; static gboolean opt_daemonize;
@ -390,7 +392,7 @@ ostree_builtin_trivial_httpd (int argc, char **argv, GCancellable *cancellable,
#if !SOUP_CHECK_VERSION(2, 48, 0) #if !SOUP_CHECK_VERSION(2, 48, 0)
soup_server_run_async (server); soup_server_run_async (server);
#endif #endif
if (opt_daemonize) if (opt_daemonize)
{ {
pid_t pid = fork(); pid_t pid = fork();
@ -411,6 +413,21 @@ ostree_builtin_trivial_httpd (int argc, char **argv, GCancellable *cancellable,
fclose (stdout); fclose (stdout);
fclose (stdin); fclose (stdin);
} }
else
{
/* Since we're used for testing purposes, let's just do this by
* default. This ensures we exit when our parent does.
*/
if (prctl (PR_SET_PDEATHSIG, SIGTERM) != 0)
{
int errsv = errno;
if (errsv != ENOSYS)
{
ot_util_set_error_from_errno (error, errsv);
goto out;
}
}
}
app->running = TRUE; app->running = TRUE;
if (opt_autoexit) if (opt_autoexit)