mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Merged revisions 80360 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r80360 | russell | 2007-08-22 14:53:30 -0500 (Wed, 22 Aug 2007) | 5 lines 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/trunk@80361 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1902,8 +1902,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 != AST_PBX_KEEPALIVE)
|
||||
returnstatus = -1;
|
||||
@@ -1914,6 +1920,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;
|
||||
|
Reference in New Issue
Block a user