Index: channels/sig_pri.c =================================================================== --- channels/sig_pri.c (revision 260755) +++ channels/sig_pri.c (working copy) @@ -2859,7 +2859,7 @@ ast_log(LOG_WARNING, "The PRI Call have not been destroyed\n"); } if (p->owner) - ast_softhangup_nolock(p->owner, AST_SOFTHANGUP_DEV); + p->owner->_softhangup |= AST_SOFTHANGUP_DEV; } p->inalarm = 1; } @@ -2898,7 +2898,7 @@ } /* Force soft hangup if appropriate */ if (pri->pvts[chanpos]->owner) - ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV); + pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; sig_pri_unlock_private(pri->pvts[chanpos]); } } else { @@ -2911,7 +2911,7 @@ pri->pvts[x]->call = NULL; } if (pri->pvts[x]->owner) - ast_softhangup_nolock(pri->pvts[x]->owner, AST_SOFTHANGUP_DEV); + pri->pvts[x]->owner->_softhangup |= AST_SOFTHANGUP_DEV; sig_pri_unlock_private(pri->pvts[x]); } } @@ -3640,7 +3640,7 @@ switch (pri->pvts[chanpos]->owner->_state) { case AST_STATE_BUSY: case AST_STATE_UP: - ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV); + pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; break; default: switch (e->hangup.cause) { @@ -3656,7 +3656,7 @@ pri_queue_control(pri->pvts[chanpos], AST_CONTROL_CONGESTION, pri); break; default: - ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV); + pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; break; } break; @@ -3741,7 +3741,7 @@ switch (pri->pvts[chanpos]->owner->_state) { case AST_STATE_BUSY: case AST_STATE_UP: - ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV); + pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; break; default: switch (e->hangup.cause) { @@ -3757,7 +3757,7 @@ pri_queue_control(pri->pvts[chanpos], AST_CONTROL_CONGESTION, pri); break; default: - ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV); + pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; break; } break; @@ -3853,7 +3853,7 @@ if (pri->pvts[chanpos]->owner) { ast_log(LOG_WARNING, "Got restart ack on channel %d/%d with owner on span %d\n", pri->pvts[chanpos]->logicalspan, pri->pvts[chanpos]->prioffset, pri->span); - ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV); + pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; } pri->pvts[chanpos]->resetting = 0; ast_verb(3, "B-channel %d/%d successfully restarted on span %d\n", pri->pvts[chanpos]->logicalspan, @@ -3874,7 +3874,7 @@ if (pri->pvts[chanpos]->owner) { ast_log(LOG_WARNING, "Got restart ack on channel %d/%d span %d with owner\n", PRI_SPAN(e->restartack.channel), PRI_CHANNEL(e->restartack.channel), pri->span); - ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV); + pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV; } pri->pvts[chanpos]->resetting = 0; ast_verb(3, "B-channel %d/%d successfully restarted on span %d\n", pri->pvts[chanpos]->logicalspan, @@ -4871,7 +4871,7 @@ ast_log(LOG_WARNING, "The PRI Call has not been destroyed\n"); } if (p->owner) - ast_softhangup_nolock(p->owner, AST_SOFTHANGUP_DEV); + p->owner->_softhangup |= AST_SOFTHANGUP_DEV; } } else { p->inalarm = 0;