If an external command produces output without newlines, the current
code ends up calling read_nonblock() with a buffer size of zero which
triggers the assertion in readv_nonblock().
Increase the output buffer to 32K and fix the problem by simply
discarding all input if the input buffer is full and contains no
newline character.
A better fix would be to discard everything until the next newline
character is read, but this requires more work, so let's go with this
simple fix for now.
return ret;
}
-#define COMMAND_BUF_SIZE 4096
+#define COMMAND_BUF_SIZE 32768
/*
* This is the core select loop. Besides the (internal) signal
if (command_fds[!i] < 0) /* both fds closed */
return 0;
}
+ if (cbo[i] == COMMAND_BUF_SIZE - 1) {
+ PARA_NOTICE_LOG("discarding overlong line");
+ cbo[i] = 0;
+ }
}
}
ret = read_stat_pipe(&rfds);