Make the logic for inuse and inringing manipluation match that of 1.4. The old broken logic would reset the values back to 0 during certain scenarios causing the wrong state to be reported.

(closes issue #14399)
Reported by: caspy
(issue #13238)
Reported by: kowalma


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@174543 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.2
Joshua Colp 17 years ago
parent d4df1c6a78
commit bb327036f1

@ -5230,9 +5230,11 @@ static int update_call_counter(struct sip_pvt *fup, int event)
if (inuse) {
sip_pvt_lock(fup);
ao2_lock(p);
if ((*inuse > 0) && ast_test_flag(&fup->flags[0], SIP_INC_COUNT)) {
(*inuse)--;
ast_clear_flag(&fup->flags[0], SIP_INC_COUNT);
if (*inuse > 0) {
if (ast_test_flag(&fup->flags[0], SIP_INC_COUNT)) {
(*inuse)--;
ast_clear_flag(&fup->flags[0], SIP_INC_COUNT);
}
} else {
*inuse = 0;
}
@ -5244,9 +5246,11 @@ static int update_call_counter(struct sip_pvt *fup, int event)
if (inringing) {
sip_pvt_lock(fup);
ao2_lock(p);
if ((*inringing > 0)&& ast_test_flag(&fup->flags[0], SIP_INC_RINGING)) {
(*inringing)--;
ast_clear_flag(&fup->flags[0], SIP_INC_RINGING);
if (*inringing > 0) {
if (ast_test_flag(&fup->flags[0], SIP_INC_RINGING)) {
(*inringing)--;
ast_clear_flag(&fup->flags[0], SIP_INC_RINGING);
}
} else {
*inringing = 0;
}

Loading…
Cancel
Save