]> git.pond.sub.org Git - empserver/commitdiff
(play): Increment send_eof instead of setting it, decrement it instead
authorMarkus Armbruster <armbru@pond.sub.org>
Wed, 28 Nov 2007 06:34:33 +0000 (06:34 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Wed, 28 Nov 2007 06:34:33 +0000 (06:34 +0000)
of clearing it.  Fixes a race condition: when we got EOF on input_fd
and a failed doexecute() in the same iteration of the loop, only one
EOF cookie was sent, leaving the client hung.

src/client/play.c

index 744b66e8028e04721280242bd03ca8dbbf2e8337..956ca410a9440e5c084dc3d9c95ba2f78b5bb587 100644 (file)
@@ -258,7 +258,7 @@ play(int sock)
 
        if (send_eof
            && ring_putm(&inbuf, EOF_COOKIE, sizeof(EOF_COOKIE) - 1) >= 0)
-           send_eof = 0;
+           send_eof--;
        if (send_intr
            && ring_putm(&inbuf, INTR_COOKIE, sizeof(INTR_COOKIE) - 1) >= 0)
            send_intr = 0;
@@ -275,7 +275,7 @@ play(int sock)
            }
            if (n == 0) {
                /* EOF on input */
-               send_eof = 1;
+               send_eof++;
                if (input_fd) {
                    /* execute done, switch back to fd 0 */
                    if (input_fd > 0)
@@ -311,7 +311,7 @@ play(int sock)
            if (input_fd < 0) {
                /* execute failed */
                input_fd = 0;
-               send_eof = 1;
+               send_eof++;
            }
        }
     }