X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fhtparser.c;h=1dbb8eeef429e4f0148ebad1270b15e24e8ec1b7;hb=4139016c7b6dbc1213686c234a11a926b5c18b53;hp=8d0b515ec072de95902b7497484401ff371a3e23;hpb=1fb1c61484cfd92fb9d11cf0b68e98e7d0e6a75f;p=ashd.git diff --git a/src/htparser.c b/src/htparser.c index 8d0b515..1dbb8ee 100644 --- a/src/htparser.c +++ b/src/htparser.c @@ -405,8 +405,9 @@ static void plexwatch(struct muth *muth, va_list args) { vavar(int, fd); char *buf; - int i, ret; + int i, s, ret; + s = 0; while(1) { if(block(fd, EV_READ, 0) == 0) break; @@ -416,6 +417,7 @@ static void plexwatch(struct muth *muth, va_list args) flog(LOG_WARNING, "received error on rootplex read channel: %s", strerror(errno)); exit(1); } else if(ret == 0) { + s = 1; free(buf); break; } @@ -423,15 +425,16 @@ static void plexwatch(struct muth *muth, va_list args) * some day... */ free(buf); } - close(plex); - plex = -1; + shutdown(plex, SHUT_RDWR); for(i = 0; i < listeners.d; i++) { if(listeners.b[i] == muth) bufdel(listeners, i); } - flog(LOG_INFO, "root handler exited, so shutting down listening..."); - while(listeners.d > 0) - resume(listeners.b[0], 0); + if(s) { + flog(LOG_INFO, "root handler exited, so shutting down listening..."); + while(listeners.d > 0) + resume(listeners.b[0], 0); + } } static void initroot(void *uu)