From: Phil Lavin Date: Thu, 24 Mar 2016 18:34:13 +0000 (+0000) Subject: FS-8978: [mod_redis] Fix limit counter not decrementing on hangup X-Git-Tag: v1.6.8~5^2~47^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1ee1a03bf0b9ff045e3a1b94f479e86c37f1274;p=thirdparty%2Ffreeswitch.git FS-8978: [mod_redis] Fix limit counter not decrementing on hangup The limit counter value is not automatically decremented in Redis when the call is hung up. This results in it only ever counting up and the limit being eventually hit. The linked list is moved on too early. When `limit_pvt` is checked, it is `NULL`. This means the `decr` command is never sent to Redis. --- diff --git a/src/mod/applications/mod_hiredis/mod_hiredis.c b/src/mod/applications/mod_hiredis/mod_hiredis.c index 09a538e15a..2af3cd3598 100644 --- a/src/mod/applications/mod_hiredis/mod_hiredis.c +++ b/src/mod/applications/mod_hiredis/mod_hiredis.c @@ -197,13 +197,14 @@ SWITCH_LIMIT_RELEASE(hiredis_limit_release) while (tmp) { profile = switch_core_hash_find(mod_hiredis_globals.profiles, limit_pvt->realm); hashkey = switch_mprintf("decr %s", tmp->limit_key); - limit_pvt = tmp->next; if ( limit_pvt && (limit_pvt->interval > 0) && (hiredis_profile_execute_sync(profile, hashkey, &response) != SWITCH_STATUS_SUCCESS)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "hiredis: profile[%s] error executing [%s] because [%s]\n", tmp->realm, hashkey, response); } + limit_pvt = tmp->next; + tmp = limit_pvt; switch_safe_free(response); switch_safe_free(hashkey);