summaryrefslogtreecommitdiffstats
path: root/src/lib/apputils
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2011-09-14 16:12:33 +0000
committerGreg Hudson <ghudson@mit.edu>2011-09-14 16:12:33 +0000
commit232ee45a29845cc8b31955bdc398ac335421e63c (patch)
treeb295df8e6a31cf645b5f69f0afa7bcaf1b8ed770 /src/lib/apputils
parent6cae0a18e4fb6fc3469b5bdf75f888f580dbdec0 (diff)
downloadkrb5-232ee45a29845cc8b31955bdc398ac335421e63c.tar.gz
krb5-232ee45a29845cc8b31955bdc398ac335421e63c.tar.xz
krb5-232ee45a29845cc8b31955bdc398ac335421e63c.zip
Split signal setup into loop_setup_signals()
In the KDC, set up signals in the worker process child after forking from the monitor process. From npmccallum@redhat.com. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25176 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/apputils')
-rw-r--r--src/lib/apputils/net-server.c43
1 files changed, 22 insertions, 21 deletions
diff --git a/src/lib/apputils/net-server.c b/src/lib/apputils/net-server.c
index 546ed769ea..af6552521e 100644
--- a/src/lib/apputils/net-server.c
+++ b/src/lib/apputils/net-server.c
@@ -270,6 +270,20 @@ static SET(unsigned short) udp_port_data, tcp_port_data;
static SET(struct rpc_svc_data) rpc_svc_data;
static SET(verto_ev *) events;
+verto_ctx *
+loop_init(verto_ev_type types)
+{
+ types |= VERTO_EV_TYPE_IO;
+ types |= VERTO_EV_TYPE_SIGNAL;
+ types |= VERTO_EV_TYPE_TIMEOUT;
+
+#ifdef INTERNAL_VERTO
+ return verto_default_k5ev();
+#else
+ return verto_default(NULL, types);
+#endif
+}
+
static void
do_break(verto_ctx *ctx, verto_ev *ev)
{
@@ -299,43 +313,30 @@ free_sighup_context(verto_ctx *ctx, verto_ev *ev)
free(verto_get_private(ev));
}
-verto_ctx *
-loop_init(verto_ev_type types, void *handle, void (*reset)())
+krb5_error_code
+loop_setup_signals(verto_ctx *ctx, void *handle, void (*reset)())
{
struct sighup_context *sc;
- verto_ctx *ctx;
- verto_ev *ev;
+ verto_ev *ev;
- types |= VERTO_EV_TYPE_IO;
- types |= VERTO_EV_TYPE_SIGNAL;
- types |= VERTO_EV_TYPE_TIMEOUT;
-#ifdef INTERNAL_VERTO
- ctx = verto_default_k5ev();
-#else
- ctx = verto_default(NULL, types);
-#endif
if (!verto_add_signal(ctx, VERTO_EV_FLAG_PERSIST, do_break, SIGINT) ||
!verto_add_signal(ctx, VERTO_EV_FLAG_PERSIST, do_break, SIGTERM) ||
!verto_add_signal(ctx, VERTO_EV_FLAG_PERSIST, do_break, SIGQUIT) ||
!verto_add_signal(ctx, VERTO_EV_FLAG_PERSIST, VERTO_SIG_IGN, SIGPIPE))
- goto error;
+ return ENOMEM;
ev = verto_add_signal(ctx, VERTO_EV_FLAG_PERSIST, do_reset, SIGHUP);
if (!ev)
- goto error;
+ return ENOMEM;
sc = malloc(sizeof(*sc));
if (!sc)
- goto error;
+ return ENOMEM;
+
sc->handle = handle;
sc->reset = reset;
-
verto_set_private(ev, sc, free_sighup_context);
- return ctx;
-
-error:
- verto_free(ctx);
- return NULL;
+ return 0;
}
krb5_error_code