]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 207361 via svnmerge from
authorRussell Bryant <russell@russellbryant.com>
Mon, 20 Jul 2009 16:40:10 +0000 (16:40 +0000)
committerRussell Bryant <russell@russellbryant.com>
Mon, 20 Jul 2009 16:40:10 +0000 (16:40 +0000)
https://origsvn.digium.com/svn/asterisk/trunk

................
  r207361 | russell | 2009-07-20 11:36:15 -0500 (Mon, 20 Jul 2009) | 16 lines

  Merged revisions 207360 via svnmerge from
  https://origsvn.digium.com/svn/asterisk/branches/1.4

  ........
    r207360 | russell | 2009-07-20 11:26:24 -0500 (Mon, 20 Jul 2009) | 9 lines

    Only do the chan->fdno check in ast_read() in a developer build.

    I changed this check to only happen in a dev-mode build.  I also added a
    comment explaining what is going on.  I also made it so that detection of
    this situation does not affect ast_read() operation.

    (closes issue #14723)
    Reported by: seadweller
  ........
................

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

main/channel.c

index 17a489fe6402ab4fa69617d25ed186506205bea8..f4009904540ce5458db79c6137dca307d3f56cf6 100644 (file)
@@ -2578,15 +2578,20 @@ static struct ast_frame *__ast_read(struct ast_channel *chan, int dropaudio)
                goto done;
        }
 
-       if (chan->fdno == -1) {
 #ifdef AST_DEVMODE
+       /* 
+        * The ast_waitfor() code records which of the channel's file descriptors reported that
+        * data is available.  In theory, ast_read() should only be called after ast_waitfor()
+        * reports that a channel has data available for reading.  However, there still may be
+        * some edge cases throughout the code where ast_read() is called improperly.  This can
+        * potentially cause problems, so if this is a developer build, make a lot of noise if
+        * this happens so that it can be addressed. 
+        */
+       if (chan->fdno == -1) {
                ast_log(LOG_ERROR, "ast_read() called with no recorded file descriptor.\n");
-#else
-               ast_debug(2, "ast_read() called with no recorded file descriptor.\n");
-#endif
-               f = &ast_null_frame;
-               goto done;
        }
+#endif
+
        prestate = chan->_state;
 
        /* Read and ignore anything on the alertpipe, but read only