X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=process.c;h=f83625815456648ced0ad0a1781f2610e04a07d4;hb=f2d5f883b327692465b0eb77da48790d03253814;hp=77fe38e3127134077d8cbdbc3e6e460bcefaf942;hpb=274fce818821d1aa7287dece474cfa5f5016c89f;p=secnet.git diff --git a/process.c b/process.c index 77fe38e..f836258 100644 --- a/process.c +++ b/process.c @@ -45,7 +45,7 @@ pid_t makesubproc(process_entry_fn *entry, process_callback_fn *cb, struct child *c; pid_t p; - c=safe_malloc(sizeof(*c),"makesubproc"); + NEW(c); c->desc=desc; c->cb=cb; c->cst=cst; @@ -92,7 +92,7 @@ static void sigchld_handler(void *st, int signum) if (rv==i->pid) { i->finished=True; - nw=safe_malloc(sizeof(*nw),"sigchld_handler"); + NEW(nw); nw->pid=i->pid; nw->cb=i->cb; nw->cst=i->cst; @@ -236,6 +236,16 @@ void afterfork(void) sigprocmask(SIG_SETMASK,&emptyset,NULL); } +void childpersist_closefd_hook(void *fd_vp, uint32_t newphase) +{ + int *fd_p=fd_vp; + int fd=*fd_p; + if (fd<0) return; + *fd_p=-1; + setnonblock(fd); /* in case close() might block */ + close(fd); /* discard errors - we don't care, in the child */ +} + static void signal_handler(int signum) { int saved_errno; @@ -281,7 +291,7 @@ void request_signal_notification(int signum, signal_notify_fn *notify, struct signotify *s; sigset_t old; - s=safe_malloc(sizeof(*s),"request_signal_notification"); + NEW(s); s->signum=signum; s->notify=notify; s->cst=cst;