diff options
| author | Greg Hudson <ghudson@mit.edu> | 2011-09-14 16:12:33 +0000 |
|---|---|---|
| committer | Greg Hudson <ghudson@mit.edu> | 2011-09-14 16:12:33 +0000 |
| commit | 232ee45a29845cc8b31955bdc398ac335421e63c (patch) | |
| tree | b295df8e6a31cf645b5f69f0afa7bcaf1b8ed770 /src/lib/apputils | |
| parent | 6cae0a18e4fb6fc3469b5bdf75f888f580dbdec0 (diff) | |
| download | krb5-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.c | 43 |
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 |
