without reading the whole line when using fastagi. When this happens,
errno was set to EINTR or EAGAIN. This patch accounts for the possibility
and lets fgets continue in that case.
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@80360
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
ast_frfree(f);
}
} else if (outfd > -1) {
+ size_t len;
retry = RETRY;
- if (!fgets(buf, sizeof(buf), readf)) {
+ buf[0] = '\0';
+retry_fgets:
+ len = strlen(buf);
+ if (!fgets(buf + len, sizeof(buf) - len, readf)) {
+ if (!feof(readf) && (errno == EINTR || errno == EAGAIN))
+ goto retry_fgets;
/* Program terminated */
if (returnstatus)
returnstatus = -1;
pid = -1;
break;
}
+ if (errno == EINTR || errno == EAGAIN)
+ goto retry_fgets;
/* get rid of trailing newline, if any */
if (*buf && buf[strlen(buf) - 1] == '\n')
buf[strlen(buf) - 1] = 0;