From 4fc282ef6326dd2148dca8acbfe48c819b256668 Mon Sep 17 00:00:00 2001
From: Brett Bryant <bbryant@digium.com>
Date: Mon, 21 Jul 2008 17:22:02 +0000
Subject: [PATCH] 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/trunk@132466 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_iax2.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 885ad2845c..71d4137581 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -3715,16 +3715,14 @@ static int iax2_call(struct ast_channel *c, char *dest, int timeout)
 static int iax2_hangup(struct ast_channel *c) 
 {
 	unsigned short callno = PTR_TO_CALLNO(c->tech_pvt);
-	int alreadygone;
  	struct iax_ie_data ied;
  	memset(&ied, 0, sizeof(ied));
 	ast_mutex_lock(&iaxsl[callno]);
 	if (callno && iaxs[callno]) {
 		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 */
  		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);
 			if (!iaxs[callno]) {
 				ast_mutex_unlock(&iaxsl[callno]);
@@ -3734,7 +3732,7 @@ static int iax2_hangup(struct ast_channel *c)
 		/* Explicitly predestroy it */
 		iax2_predestroy(callno);
 		/* 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);
 			iax2_destroy(callno);
 		}
-- 
GitLab