From: Fredrik Tolf Date: Tue, 24 Aug 2010 18:46:44 +0000 (+0200) Subject: Use childhandle() in dirplex too. X-Git-Tag: 0.1~87 X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=commitdiff_plain;h=d1b065b5e557cafab691a5da47b503e45f86a314 Use childhandle() in dirplex too. --- diff --git a/src/dirplex.c b/src/dirplex.c index 6dccff5..c612c15 100644 --- a/src/dirplex.c +++ b/src/dirplex.c @@ -37,9 +37,6 @@ #include #include -#define CH_SOCKET 0 -#define CH_FORK 1 - #define PAT_BASENAME 0 #define PAT_PATHNAME 1 #define PAT_ALL 2 @@ -337,29 +334,6 @@ out: return(pat); } -static void forkchild(struct child *ch) -{ - ch->fd = stdmkchild(ch->argv); -} - -static void passreq(struct child *ch, struct hthead *req, int fd) -{ - if(ch->fd < 0) - forkchild(ch); - if(sendreq(ch->fd, req, fd)) { - if(errno == EPIPE) { - /* Assume that the child has crashed and restart it. */ - forkchild(ch); - if(!sendreq(ch->fd, req, fd)) - return; - } - flog(LOG_ERR, "could not pass on request to child %s: %s", ch->name, strerror(errno)); - close(ch->fd); - ch->fd = -1; - simpleerror(fd, 500, "Server Error", "The request handler crashed."); - } -} - static void handlefile(struct hthead *req, int fd, char *path) { struct pattern *pat; @@ -376,11 +350,8 @@ static void handlefile(struct hthead *req, int fd, char *path) return; } - if(ch->type == CH_SOCKET) { - passreq(ch, req, fd); - } else if(ch->type == CH_FORK) { - stdforkserve(ch->argv, req, fd); - } + if(childhandle(ch, req, fd)) + simpleerror(fd, 500, "Server Error", "The request handler crashed."); } static void handledir(struct hthead *req, int fd, char *path)