Merged revisions 132466 via svnmerge from

https://origsvn.digium.com/svn/asterisk/trunk

........
r132466 | bbryant | 2008-07-21 12:22:02 -0500 (Mon, 21 Jul 2008) | 3 lines

Fix an issue in iax2 where a call that's been rejected still kept an open channel on the side that attempted to make the call (not the side of the 
call that rejected the call). Changes were load tested and also approved by Russell.

........


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.0@132467 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.0
Brett Bryant 17 years ago
parent a5962c87e2
commit 3224dcc7c7

@ -3697,16 +3697,14 @@ static int iax2_call(struct ast_channel *c, char *dest, int timeout)
static int iax2_hangup(struct ast_channel *c) static int iax2_hangup(struct ast_channel *c)
{ {
unsigned short callno = PTR_TO_CALLNO(c->tech_pvt); unsigned short callno = PTR_TO_CALLNO(c->tech_pvt);
int alreadygone;
struct iax_ie_data ied; struct iax_ie_data ied;
memset(&ied, 0, sizeof(ied)); memset(&ied, 0, sizeof(ied));
ast_mutex_lock(&iaxsl[callno]); ast_mutex_lock(&iaxsl[callno]);
if (callno && iaxs[callno]) { if (callno && iaxs[callno]) {
ast_debug(1, "We're hanging up %s now...\n", c->name); ast_debug(1, "We're hanging up %s now...\n", c->name);
alreadygone = ast_test_flag(iaxs[callno], IAX_ALREADYGONE);
/* Send the hangup unless we have had a transmission error or are already gone */ /* Send the hangup unless we have had a transmission error or are already gone */
iax_ie_append_byte(&ied, IAX_IE_CAUSECODE, (unsigned char)c->hangupcause); iax_ie_append_byte(&ied, IAX_IE_CAUSECODE, (unsigned char)c->hangupcause);
if (!iaxs[callno]->error && !alreadygone) { if (!iaxs[callno]->error && !ast_test_flag(iaxs[callno], IAX_ALREADYGONE)) {
send_command_final(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_HANGUP, 0, ied.buf, ied.pos, -1); send_command_final(iaxs[callno], AST_FRAME_IAX, IAX_COMMAND_HANGUP, 0, ied.buf, ied.pos, -1);
if (!iaxs[callno]) { if (!iaxs[callno]) {
ast_mutex_unlock(&iaxsl[callno]); ast_mutex_unlock(&iaxsl[callno]);
@ -3716,7 +3714,7 @@ static int iax2_hangup(struct ast_channel *c)
/* Explicitly predestroy it */ /* Explicitly predestroy it */
iax2_predestroy(callno); iax2_predestroy(callno);
/* If we were already gone to begin with, destroy us now */ /* If we were already gone to begin with, destroy us now */
if (alreadygone && iaxs[callno]) { if (iaxs[callno]) {
ast_debug(1, "Really destroying %s now...\n", c->name); ast_debug(1, "Really destroying %s now...\n", c->name);
iax2_destroy(callno); iax2_destroy(callno);
} }

Loading…
Cancel
Save