From: Fredrik Tolf Date: Tue, 15 Jan 2013 07:24:26 +0000 (+0100) Subject: lib: Preserve error properly across flog. X-Git-Tag: 0.12~6^2~1 X-Git-Url: http://www.dolda2000.com/gitweb/?a=commitdiff_plain;ds=inline;h=45b19d96212b690e1abaf0693285a1888c923470;p=ashd.git lib: Preserve error properly across flog. --- diff --git a/lib/cf.c b/lib/cf.c index 86658f8..ba63999 100644 --- a/lib/cf.c +++ b/lib/cf.c @@ -306,20 +306,22 @@ static struct chandler stdhandler = { static int stdhandle(struct child *ch, struct hthead *req, int fd, void (*chinit)(void *), void *idata) { struct stdchild *i = ch->pdata; + int serr; if(i->type == CH_SOCKET) { if(i->fd < 0) i->fd = stdmkchild(i->argv, chinit, idata); if(sendreq2(i->fd, req, fd, MSG_NOSIGNAL | MSG_DONTWAIT)) { - if((errno == EPIPE) || (errno == ECONNRESET)) { + serr = errno; + if((serr == EPIPE) || (serr == ECONNRESET)) { /* Assume that the child has crashed and restart it. */ close(i->fd); i->fd = stdmkchild(i->argv, chinit, idata); if(!sendreq2(i->fd, req, fd, MSG_NOSIGNAL | MSG_DONTWAIT)) return(0); } - flog(LOG_ERR, "could not pass on request to child %s: %s", ch->name, strerror(errno)); - if(errno != EAGAIN) { + flog(LOG_ERR, "could not pass on request to child %s: %s", ch->name, strerror(serr)); + if(serr != EAGAIN) { close(i->fd); i->fd = -1; }