[asterisk-commits] app queue: Prevent crash when a call is forwarded to an inva... (asterisk[14])
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Aug 12 09:34:48 CDT 2016
Joshua Colp has submitted this change and it was merged.
Change subject: app_queue: Prevent crash when a call is forwarded to an invalid location
......................................................................
app_queue: Prevent crash when a call is forwarded to an invalid location
When a call forward attempt is made from a Queue member, the current
code will hang up the forwarding channel in an off-nominal condition
prior to raising the Stasis events informing the rest of Asterisk that
the call was forwarded. This will result in a slew of dreaded FRACKs,
most likely leading to a crash.
This patch modifies the code such that we don't hang up the forwarding
channel even in an off-nominal condition until we've safely raised the
Stasis messages.
ASTERISK-25797 #close
Change-Id: Ife5abed351691fd79105321636eaa8ea8dcdba38
---
M apps/app_queue.c
1 file changed, 10 insertions(+), 3 deletions(-)
Approvals:
Mark Michelson: Looks good to me, but someone else must approve
Richard Mudgett: Looks good to me, but someone else must approve
Joshua Colp: Looks good to me, approved; Verified
diff --git a/apps/app_queue.c b/apps/app_queue.c
index 39413f9..a5cb126 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -4865,6 +4865,7 @@
char tmpchan[256];
char *stuff;
char *tech;
+ int failed = 0;
ast_copy_string(tmpchan, ast_channel_call_forward(o->chan), sizeof(tmpchan));
ast_copy_string(forwarder, ast_channel_name(o->chan), sizeof(forwarder));
@@ -4977,14 +4978,20 @@
if (ast_call(o->chan, stuff, 0)) {
ast_log(LOG_NOTICE, "Forwarding failed to dial '%s/%s'\n",
tech, stuff);
- do_hang(o);
- numnochan++;
+ failed = 1;
}
}
- ast_channel_publish_dial(qe->chan, o->chan, stuff, NULL);
ast_channel_publish_dial_forward(qe->chan, original, o->chan, NULL,
"CANCEL", ast_channel_call_forward(original));
+ if (o->chan) {
+ ast_channel_publish_dial(qe->chan, o->chan, stuff, NULL);
+ }
+
+ if (failed) {
+ do_hang(o);
+ numnochan++;
+ }
/* Hangup the original channel now, in case we needed it */
ast_hangup(winner);
--
To view, visit https://gerrit.asterisk.org/3511
To unsubscribe, visit https://gerrit.asterisk.org/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ife5abed351691fd79105321636eaa8ea8dcdba38
Gerrit-PatchSet: 1
Gerrit-Project: asterisk
Gerrit-Branch: 14
Gerrit-Owner: Matt Jordan <mjordan at digium.com>
Gerrit-Reviewer: Anonymous Coward #1000019
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Mark Michelson <mmichelson at digium.com>
Gerrit-Reviewer: Richard Mudgett <rmudgett at digium.com>
More information about the asterisk-commits
mailing list