mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-02 03:48:02 +00:00
don't start a PBX on incoming PRI call channels until after we're done setting channel variables and other things on the channel, otherwise the channel might go away (if the dialplan hangs up quickly) before we are done, which results in a spectacular crash
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@147429 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -9080,10 +9080,16 @@ static void *pri_dchannel(void *vpri)
|
||||
}
|
||||
pthread_attr_destroy(&attr);
|
||||
} else {
|
||||
ast_mutex_unlock(&pri->lock);
|
||||
/* Release PRI lock while we create the channel */
|
||||
c = dahdi_new(pri->pvts[chanpos], AST_STATE_RING, 1, SUB_REAL, law, e->ring.ctype);
|
||||
if (c) {
|
||||
ast_mutex_unlock(&pri->lock);
|
||||
|
||||
if (!(c = dahdi_new(pri->pvts[chanpos], AST_STATE_RING, 0, SUB_REAL, law, e->ring.ctype))) {
|
||||
ast_mutex_lock(&pri->lock);
|
||||
ast_log(LOG_WARNING, "Unable to create channel for %d/%d, span %d\n",
|
||||
pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
|
||||
pri_hangup(pri->pri, e->ring.call, PRI_CAUSE_SWITCH_CONGESTION);
|
||||
pri->pvts[chanpos]->call = NULL;
|
||||
} else {
|
||||
char calledtonstr[10];
|
||||
|
||||
ast_mutex_unlock(&pri->pvts[chanpos]->lock);
|
||||
@@ -9110,17 +9116,17 @@ static void *pri_dchannel(void *vpri)
|
||||
|
||||
if (option_verbose > 2)
|
||||
ast_verbose(VERBOSE_PREFIX_3 "Accepting call from '%s' to '%s' on channel %d/%d, span %d\n",
|
||||
plancallingnum, pri->pvts[chanpos]->exten,
|
||||
pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
|
||||
dahdi_enable_ec(pri->pvts[chanpos]);
|
||||
} else {
|
||||
|
||||
ast_mutex_lock(&pri->lock);
|
||||
|
||||
ast_log(LOG_WARNING, "Unable to start PBX on channel %d/%d, span %d\n",
|
||||
pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
|
||||
pri_hangup(pri->pri, e->ring.call, PRI_CAUSE_SWITCH_CONGESTION);
|
||||
pri->pvts[chanpos]->call = NULL;
|
||||
plancallingnum, pri->pvts[chanpos]->exten,
|
||||
pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span);
|
||||
if (ast_pbx_start(c)) {
|
||||
ast_log(LOG_WARNING, "Unable to start PBX on %s\n", c->name);
|
||||
ast_hangup(c);
|
||||
pri->pvts[chanpos]->owner = NULL;
|
||||
pri_hangup(pri->pri, e->ring.call, PRI_CAUSE_SWITCH_CONGESTION);
|
||||
pri->pvts[chanpos]->call = NULL;
|
||||
} else {
|
||||
dahdi_enable_ec(pri->pvts[chanpos]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user