diff --git a/src/mod/applications/mod_hiredis/mod_hiredis.c b/src/mod/applications/mod_hiredis/mod_hiredis.c index 9536521899..a81f86f8ff 100644 --- a/src/mod/applications/mod_hiredis/mod_hiredis.c +++ b/src/mod/applications/mod_hiredis/mod_hiredis.c @@ -189,6 +189,19 @@ SWITCH_LIMIT_INCR(hiredis_limit_incr) count = atoll(response ? response : ""); + if (!interval && count > max ) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "%s is already at max value (%d)\n", limit_key , max); + switch_safe_free(hashkey); + switch_safe_free(response); + hashkey = switch_mprintf("decr %s", limit_key); + if ( (status = hiredis_profile_execute_sync(profile, hashkey, &response, session)) != SWITCH_STATUS_SUCCESS ) { + if ( status == SWITCH_STATUS_SOCKERR && profile->ignore_connect_fail ) { + switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "hiredis: profile[%s] connection error executing [%s] with limit already reached\n", realm, hashkey); + switch_goto_status(SWITCH_STATUS_SUCCESS, done); // increment has been succesful but decrement have failed + } + } + } + if ( !count || count > max ) { switch_goto_status(SWITCH_STATUS_GENERR, done); }