From: Richard Mudgett Date: Wed, 7 Mar 2012 18:28:09 +0000 (+0000) Subject: Change directly setting _softhangup in sig_ss7.c to use ast_softhangup_nolock(). X-Git-Tag: 10.3.0~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=830d0d5be2bed9452cad26857b7c5ad467d1af24;p=thirdparty%2Fasterisk.git Change directly setting _softhangup in sig_ss7.c to use ast_softhangup_nolock(). Update to: (issue ASTERISK-19372) ........ Merged revisions 358530 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@358531 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/sig_ss7.c b/channels/sig_ss7.c index 1fe59f5076..b7472c40a4 100644 --- a/channels/sig_ss7.c +++ b/channels/sig_ss7.c @@ -459,8 +459,11 @@ static inline void ss7_hangup_cics(struct sig_ss7_linkset *linkset, int startcic for (i = 0; i < linkset->numchans; i++) { if (linkset->pvts[i] && (linkset->pvts[i]->dpc == dpc && ((linkset->pvts[i]->cic >= startcic) && (linkset->pvts[i]->cic <= endcic)))) { sig_ss7_lock_private(linkset->pvts[i]); - if (linkset->pvts[i]->owner) - linkset->pvts[i]->owner->_softhangup |= AST_SOFTHANGUP_DEV; + sig_ss7_lock_owner(linkset, i); + if (linkset->pvts[i]->owner) { + ast_softhangup_nolock(linkset->pvts[i]->owner, AST_SOFTHANGUP_DEV); + ast_channel_unlock(linkset->pvts[i]->owner); + } sig_ss7_unlock_private(linkset->pvts[i]); } } @@ -1673,7 +1676,7 @@ int sig_ss7_indicate(struct sig_ss7_chan *p, struct ast_channel *chan, int condi case AST_CONTROL_BUSY: if (p->call_level < SIG_SS7_CALL_LEVEL_CONNECT) { chan->hangupcause = AST_CAUSE_USER_BUSY; - chan->_softhangup |= AST_SOFTHANGUP_DEV; + ast_softhangup_nolock(chan, AST_SOFTHANGUP_DEV); res = 0; break; } @@ -1737,7 +1740,7 @@ int sig_ss7_indicate(struct sig_ss7_chan *p, struct ast_channel *chan, int condi case AST_CONTROL_INCOMPLETE: if (p->call_level < SIG_SS7_CALL_LEVEL_CONNECT) { chan->hangupcause = AST_CAUSE_INVALID_NUMBER_FORMAT; - chan->_softhangup |= AST_SOFTHANGUP_DEV; + ast_softhangup_nolock(chan, AST_SOFTHANGUP_DEV); res = 0; break; } @@ -1747,7 +1750,7 @@ int sig_ss7_indicate(struct sig_ss7_chan *p, struct ast_channel *chan, int condi case AST_CONTROL_CONGESTION: if (p->call_level < SIG_SS7_CALL_LEVEL_CONNECT) { chan->hangupcause = AST_CAUSE_CONGESTION; - chan->_softhangup |= AST_SOFTHANGUP_DEV; + ast_softhangup_nolock(chan, AST_SOFTHANGUP_DEV); res = 0; break; }