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.
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;
}
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)
if (input_fd < 0) {
/* execute failed */
input_fd = 0;
- send_eof = 1;
+ send_eof++;
}
}
}