X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=secnet.git;a=blobdiff_plain;f=polypath.c;h=82492077e9620e827bdfad014d23855bda308631;hp=58a89ee9f0cc978add45ca6a95d170103360b69a;hb=83e03cacb4b2380e610b3e86a11b95a295776037;hpb=94a1d5fce6a68fce8216d4b45ef6148d353c2c3a diff --git a/polypath.c b/polypath.c index 58a89ee..8249207 100644 --- a/polypath.c +++ b/polypath.c @@ -463,7 +463,8 @@ static void child_monitor(struct polypath *st, int childfd) } static void start_subproc(struct polypath *st, void (*make_fdpair)(int[2]), - void (*child)(struct polypath *st, int childfd)) + void (*child)(struct polypath *st, int childfd), + const char *desc) { int pfds[2]; @@ -487,12 +488,15 @@ static void start_subproc(struct polypath *st, void (*make_fdpair)(int[2]), st->monitor_pid=pid; st->monitor_fd=pfds[0]; setnonblock(st->monitor_fd); + + lg_perror(LG,M_NOTICE,0, "%s: spawning %s [pid %ld]", + st->uc.cc.cl.description, desc, (long)st->monitor_pid); } static void polypath_phase_startmonitor(void *sst, uint32_t newphase) { struct polypath *st=sst; - start_subproc(st,pipe_cloexec,child_monitor); + start_subproc(st,pipe_cloexec,child_monitor,"interface monitor"); register_for_poll(st,polypath_beforepoll, polypath_afterpoll_monitor,"polypath"); } @@ -506,6 +510,15 @@ static void polypath_phase_shutdown(void *sst, uint32_t newphase) } } +static void polypath_phase_childpersist(void *sst, uint32_t newphase) +{ + struct polypath *st=sst; + struct interf *interf; + + LIST_FOREACH(interf,&st->interfs,entry) + udp_socks_childpersist(&st->uc,&interf->socks); +} + #undef BAD #undef BADE @@ -546,6 +559,7 @@ static list_t *polypath_apply(closure_t *self, struct cloc loc, add_hook(PHASE_RUN, polypath_phase_startmonitor,st); add_hook(PHASE_SHUTDOWN, polypath_phase_shutdown, st); + add_hook(PHASE_CHILDPERSIST,polypath_phase_childpersist,st); return new_closure(&cc->cl); }