Make sure that the inUse and inRinging fields for
[asterisk/asterisk.git] / 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 */
        /* 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 */
                        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);
                }
                        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:
                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);
                }
                        ast_atomic_fetchadd_int(inringing, -1);
                        ast_clear_flag(&fup->flags[0], SIP_INC_RINGING);
                }