From a1ee1a03bf0b9ff045e3a1b94f479e86c37f1274 Mon Sep 17 00:00:00 2001 From: Phil Lavin Date: Thu, 24 Mar 2016 18:34:13 +0000 Subject: [PATCH] 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. --- src/mod/applications/mod_hiredis/mod_hiredis.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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);