From 878db20a92bfc4a455d822d7dcbe44a4ccb30f9a Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Mon, 19 May 2003 23:37:38 +0000
Subject: [PATCH] Fix case where local is allocated but not actually called on

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1043 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_local.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/channels/chan_local.c b/channels/chan_local.c
index 56c3c64a23..4c4d4e1de3 100755
--- a/channels/chan_local.c
+++ b/channels/chan_local.c
@@ -230,12 +230,14 @@ static int local_hangup(struct ast_channel *ast)
 	int isoutbound = IS_OUTBOUND(ast, p);
 	struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_HANGUP };
 	struct local_pvt *cur, *prev=NULL;
+	struct ast_channel *ochan = NULL;
 	ast_pthread_mutex_lock(&p->lock);
 	if (isoutbound)
 		p->chan = NULL;
 	else
 		p->owner = NULL;
 	ast->pvt->pvt = NULL;
+	
 	if (!p->owner && !p->chan) {
 		/* Okay, done with the private part now, too. */
 		ast_pthread_mutex_unlock(&p->lock);
@@ -258,8 +260,14 @@ static int local_hangup(struct ast_channel *ast)
 		free(p);
 		return 0;
 	}
-	local_queue_frame(p, isoutbound, &f);
+	if (p->chan && !p->chan->pbx)
+		/* Need to actually hangup since there is no PBX */
+		ochan = p->chan;
+	else
+		local_queue_frame(p, isoutbound, &f);
 	ast_pthread_mutex_unlock(&p->lock);
+	if (ochan)
+		ast_hangup(ochan);
 	return 0;
 }
 
-- 
GitLab