diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index dce5cac44b951cb0fb313add4a6bae65af2e70c3..7c7c9dfa44b4e8054d3825b3e11699f8ac8061f3 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -2886,7 +2886,7 @@ static void *pri_dchannel(void *vpri)
 										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;
 							}
 							sig_pri_set_alarm(p, 1);
 						}
@@ -2925,7 +2925,7 @@ static void *pri_dchannel(void *vpri)
 						}
 						/* 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 {
@@ -2938,7 +2938,7 @@ static void *pri_dchannel(void *vpri)
 								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]);
 						}
 				}
@@ -3664,7 +3664,7 @@ static void *pri_dchannel(void *vpri)
 								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) {
@@ -3680,7 +3680,7 @@ static void *pri_dchannel(void *vpri)
 										pri_queue_control(pri, chanpos, AST_CONTROL_CONGESTION);
 										break;
 									default:
-										ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV);
+										pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV;
 										break;
 									}
 									break;
@@ -3765,7 +3765,7 @@ static void *pri_dchannel(void *vpri)
 							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) {
@@ -3781,7 +3781,7 @@ static void *pri_dchannel(void *vpri)
 									pri_queue_control(pri, chanpos, AST_CONTROL_CONGESTION);
 									break;
 								default:
-									ast_softhangup_nolock(pri->pvts[chanpos]->owner, AST_SOFTHANGUP_DEV);
+									pri->pvts[chanpos]->owner->_softhangup |= AST_SOFTHANGUP_DEV;
 									break;
 								}
 								break;
@@ -3877,7 +3877,7 @@ static void *pri_dchannel(void *vpri)
 							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,
@@ -3898,7 +3898,7 @@ static void *pri_dchannel(void *vpri)
 						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,
@@ -4889,7 +4889,7 @@ void sig_pri_chan_alarm_notify(struct sig_pri_chan *p, int noalarm)
 					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;
 		}
 	}
 }