]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
add a check to prevent a seg fault from an unknown cause ... (bug #3496)
authorRussell Bryant <russell@russellbryant.com>
Wed, 2 Mar 2005 22:32:57 +0000 (22:32 +0000)
committerRussell Bryant <russell@russellbryant.com>
Wed, 2 Mar 2005 22:32:57 +0000 (22:32 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@5122 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_skinny.c

index 920899664ff73074a742f58af6bcc362cf9fc65a..3b18955c87a1178e41e4bca684ace7a5950005e3 100755 (executable)
@@ -1576,19 +1576,22 @@ static int skinny_answer(struct ast_channel *ast)
 static struct ast_frame *skinny_rtp_read(struct skinny_subchannel *sub)
 {
        /* Retrieve audio/etc from channel.  Assumes sub->lock is already held. */
-       struct ast_frame *f;
-       f = ast_rtp_read(sub->rtp);
-       if (sub->owner) {
-               /* We already hold the channel lock */
-               if (f->frametype == AST_FRAME_VOICE) {
-                       if (f->subclass != sub->owner->nativeformats) {
-                               ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
-                               sub->owner->nativeformats = f->subclass;
-                               ast_set_read_format(sub->owner, sub->owner->readformat);
-                               ast_set_write_format(sub->owner, sub->owner->writeformat);
+       struct ast_frame *f = NULL;
+       if (sub->rtp) { 
+               f = ast_rtp_read(sub->rtp);
+               if (sub->owner) {
+                       /* We already hold the channel lock */
+                       if (f->frametype == AST_FRAME_VOICE) {
+                               if (f->subclass != sub->owner->nativeformats) {
+                                       ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
+                                       sub->owner->nativeformats = f->subclass;
+                                       ast_set_read_format(sub->owner, sub->owner->readformat);
+                                       ast_set_write_format(sub->owner, sub->owner->writeformat);
+                               }
                        }
                }
-       }
+       } else
+               ast_log(LOG_WARNING, "sub->rtp is NULL - calling read on a channel that has been hungup?\n");
        return f;
 }