Merge branch 'master' of git.dolda2000.com:/srv/git/r/ashd
authorFredrik Tolf <fredrik@dolda2000.com>
Sun, 3 Feb 2013 02:16:55 +0000 (03:16 +0100)
committerFredrik Tolf <fredrik@dolda2000.com>
Sun, 3 Feb 2013 02:16:55 +0000 (03:16 +0100)
src/htparser.c

index 8d0b515..1dbb8ee 100644 (file)
@@ -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)