Juggie in #asterisk-dev was reporting problems where fgets would return

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
1.4
Russell Bryant 19 years ago
parent 9b23ab95aa
commit 99adc3f020

@ -1866,8 +1866,14 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi
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;
@ -1879,6 +1885,8 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi
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;

Loading…
Cancel
Save