Index: channel.c =================================================================== RCS file: /usr/cvsroot/asterisk/channel.c,v retrieving revision 1.88 diff -u -r1.88 channel.c --- channel.c 19 Mar 2004 09:37:28 -0000 1.88 +++ channel.c 22 Mar 2004 17:31:05 -0000 @@ -375,12 +375,17 @@ if (lock) ast_mutex_lock(&chan->lock); prev = NULL; - cur = chan->pvt->readq; - while(cur) { - prev = cur; - cur = cur->next; - qlen++; + if (chan->pvt) { + cur = chan->pvt->readq; + while(cur) { + prev = cur; + cur = cur->next; + qlen++; + } + } else { + return 0; } + /* Allow up to 96 voice frames outstanding, and up to 128 total frames */ if (((fin->frametype == AST_FRAME_VOICE) && (qlen > 96)) || (qlen > 128)) { if (fin->frametype != AST_FRAME_VOICE) { @@ -417,8 +422,12 @@ int ast_queue_hangup(struct ast_channel *chan, int lock) { struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_HANGUP }; - chan->_softhangup |= AST_SOFTHANGUP_DEV; - return ast_queue_frame(chan, &f, lock); + if (chan) { + chan->_softhangup |= AST_SOFTHANGUP_DEV; + return ast_queue_frame(chan, &f, lock); + } else { + return -1; + } } int ast_queue_control(struct ast_channel *chan, int control, int lock) Index: rtp.c =================================================================== RCS file: /usr/cvsroot/asterisk/rtp.c,v retrieving revision 1.60 diff -u -r1.60 rtp.c --- rtp.c 20 Mar 2004 05:22:52 -0000 1.60 +++ rtp.c 22 Mar 2004 17:31:06 -0000 @@ -398,9 +398,11 @@ len = sizeof(sin); /* Cache where the header will go */ - res = recvfrom(rtp->s, rtp->rawdata + AST_FRIENDLY_OFFSET, sizeof(rtp->rawdata) - AST_FRIENDLY_OFFSET, + if (rtp) + res = recvfrom(rtp->s, rtp->rawdata + AST_FRIENDLY_OFFSET, sizeof(rtp->rawdata) - AST_FRIENDLY_OFFSET, 0, (struct sockaddr *)&sin, &len); - + else + return &null_frame; rtpheader = (unsigned int *)(rtp->rawdata + AST_FRIENDLY_OFFSET); if (res < 0) { @@ -451,6 +453,9 @@ /* Comfort Noise */ f = process_rfc3389(rtp, rtp->rawdata + AST_FRIENDLY_OFFSET + hdrlen, res - hdrlen); if (f) return f; else return &null_frame; + } else if (payloadtype == 19) { + /* Comfort Noise - ignore */ + return &null_frame; } else { ast_log(LOG_NOTICE, "Unknown RTP codec %d received\n", payloadtype); return &null_frame; Index: channels/chan_h323.c =================================================================== RCS file: /usr/cvsroot/asterisk/channels/chan_h323.c,v retrieving revision 1.37 diff -u -r1.37 chan_h323.c --- channels/chan_h323.c 20 Mar 2004 14:25:39 -0000 1.37 +++ channels/chan_h323.c 22 Mar 2004 17:31:07 -0000 @@ -1212,6 +1212,7 @@ p->alreadygone = 1; + usleep(100000); /* Send hangup */ if (p->owner) ast_queue_hangup(p->owner, 1);