On socket-based connections, there is no error FD, so don't try waiting on one.
authorTilghman Lesher <tilghman@meg.abyt.es>
Wed, 21 May 2008 13:39:41 +0000 (13:39 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Wed, 21 May 2008 13:39:41 +0000 (13:39 +0000)
(closes issue #12697)
 Reported by: ctooley
 Patches:
       fix_externalivr_waitfor_nandfds-v3.diff uploaded by ctooley (license 136)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@117431 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_externalivr.c

index 6068e5f..8dbc53e 100644 (file)
@@ -379,7 +379,7 @@ static int app_exec(struct ast_channel *chan, void *data)
                if (!ser) {
                        goto exit;
                } 
-               res = eivr_comm(chan, u, ser->fd, ser->fd, 0, pipe_delim_argbuf);
+               res = eivr_comm(chan, u, ser->fd, ser->fd, -1, pipe_delim_argbuf);
        } else {
        
                if (pipe(child_stdin)) {
@@ -495,7 +495,7 @@ static int eivr_comm(struct ast_channel *chan, struct ivr_localuser *u,
                ast_chan_log(LOG_WARNING, chan, "Could not open stream to receive commands\n");
                goto exit;
        }
-       if(eivr_errors_fd) {  /* if opening a socket connection, error stream will not be used */
+       if (eivr_errors_fd > -1) {  /* if opening a socket connection, error stream will not be used */
                if (!(eivr_errors = fdopen(eivr_errors_fd, "r"))) {
                        ast_chan_log(LOG_WARNING, chan, "Could not open stream to receive errors\n");
                        goto exit;
@@ -529,7 +529,7 @@ static int eivr_comm(struct ast_channel *chan, struct ivr_localuser *u,
                errno = 0;
                exception = 0;
  
-               rchan = ast_waitfor_nandfds(&chan, 1, waitfds, 2, &exception, &ready_fd, &ms);
+               rchan = ast_waitfor_nandfds(&chan, 1, waitfds, (eivr_errors_fd < 0) ? 1 : 2, &exception, &ready_fd, &ms);
  
                if (!AST_LIST_EMPTY(&u->finishlist)) {
                        AST_LIST_LOCK(&u->finishlist);