From 9773d2351b692a1639e02a1b7025f06e2f7775b7 Mon Sep 17 00:00:00 2001
From: Richard Mudgett <rmudgett@digium.com>
Date: Thu, 12 Jul 2012 20:28:07 +0000
Subject: [PATCH] Add missing ast_hangup() calls on some analog exception
 paths.

Make starting analog_ss_thread() or __analog_ss_thread() failure paths
hangup the channel.
........

Merged revisions 370017 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 370025 from http://svn.asterisk.org/svn/asterisk/branches/10


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@370037 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_dahdi.c | 2 ++
 channels/sig_analog.c | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index b15caa5bef..a394ec89c4 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -11841,6 +11841,7 @@ static struct dahdi_pvt *handle_init_event(struct dahdi_pvt *i, int event)
 					ast_log(LOG_WARNING, "Cannot allocate new structure on channel %d\n", i->channel);
 				} else if (ast_pthread_create_detached(&threadid, NULL, analog_ss_thread, chan)) {
 					ast_log(LOG_WARNING, "Unable to start simple switch thread on channel %d\n", i->channel);
+					ast_hangup(chan);
 				}
 			}
 			ast_callid_threadstorage_auto_clean(callid, callid_created);
@@ -12111,6 +12112,7 @@ static void *do_monitor(void *data)
 											res = ast_pthread_create_detached(&threadid, NULL, analog_ss_thread, chan);
 											if (res) {
 												ast_log(LOG_WARNING, "Unable to start simple switch thread on channel %d\n", i->channel);
+												ast_hangup(chan);
 											} else {
 												i->dtmfcid_holdoff_state = 1;
 											}
diff --git a/channels/sig_analog.c b/channels/sig_analog.c
index eef0436769..f40932f278 100644
--- a/channels/sig_analog.c
+++ b/channels/sig_analog.c
@@ -3886,6 +3886,7 @@ void *analog_handle_init_event(struct analog_pvt *i, int event)
 					ast_log(LOG_WARNING, "Cannot allocate new structure on channel %d\n", i->channel);
 				} else if (ast_pthread_create_detached(&threadid, NULL, __analog_ss_thread, i)) {
 					ast_log(LOG_WARNING, "Unable to start simple switch thread on channel %d\n", i->channel);
+					ast_hangup(chan);
 				}
 			}
 			ast_callid_threadstorage_auto_clean(callid, callid_created);
@@ -3912,6 +3913,7 @@ void *analog_handle_init_event(struct analog_pvt *i, int event)
 					ast_log(LOG_WARNING, "Cannot allocate new structure on channel %d\n", i->channel);
 				} else if (ast_pthread_create_detached(&threadid, NULL, __analog_ss_thread, i)) {
 					ast_log(LOG_WARNING, "Unable to start simple switch thread on channel %d\n", i->channel);
+					ast_hangup(chan);
 				}
 			}
 			ast_callid_threadstorage_auto_clean(callid, callid_created);
-- 
GitLab