Make sure that the inUse and inRinging fields for
authorMark Michelson <mmichelson@digium.com>
Fri, 10 Oct 2008 21:18:10 +0000 (21:18 +0000)
committerMark Michelson <mmichelson@digium.com>
Fri, 10 Oct 2008 21:18:10 +0000 (21:18 +0000)
a sip peer cannot go below zero. This is a regression
from 1.4 and so it will be applied to 1.6.0 as well.

(closes issue #13668)
Reported by: mjc

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@148373 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index 8b3f025..e1926ee 100644 (file)
@@ -4742,13 +4742,13 @@ static int update_call_counter(struct sip_pvt *fup, int event)
        /* incoming and outgoing affects the inUse counter */
        case DEC_CALL_LIMIT:
                /* Decrement inuse count if applicable */
-               if (inuse && ast_test_flag(&fup->flags[0], SIP_INC_COUNT)) {
+               if (inuse && *inuse > 0 && ast_test_flag(&fup->flags[0], SIP_INC_COUNT)) {
                        ast_atomic_fetchadd_int(inuse, -1);
                        ast_clear_flag(&fup->flags[0], SIP_INC_COUNT);
                } else
                        *inuse = 0;
                /* Decrement ringing count if applicable */
-               if (inringing && ast_test_flag(&fup->flags[0], SIP_INC_RINGING)) {
+               if (inringing && *inringing > 0 && ast_test_flag(&fup->flags[0], SIP_INC_RINGING)) {
                        ast_atomic_fetchadd_int(inringing, -1);
                        ast_clear_flag(&fup->flags[0], SIP_INC_RINGING);
                }
@@ -4786,7 +4786,7 @@ static int update_call_counter(struct sip_pvt *fup, int event)
                break;
 
        case DEC_CALL_RINGING:
-               if (inringing && ast_test_flag(&fup->flags[0], SIP_INC_RINGING)) {
+               if (inringing && *inringing > 0 && ast_test_flag(&fup->flags[0], SIP_INC_RINGING)) {
                        ast_atomic_fetchadd_int(inringing, -1);
                        ast_clear_flag(&fup->flags[0], SIP_INC_RINGING);
                }