Check for null hash on increment of mod_hash limit

When we specifically release all limits on a channel we destroy the
hash table stored in the "limit_hash" private channel data but we
don't destroy the private data as it will be reclaimed as part of the
session.  If limit increment is called after the limit release we can
reuse that channel private, but we need to check whether the hash
table is null first.  Fortunately this makes the code look better
anyway.

FS-6775 #resolve
FS-6783 #resolve
This commit is contained in:
Travis Cross 2014-09-11 17:42:07 +00:00
parent c8afe47639
commit 622e0e1a6f
1 changed files with 5 additions and 11 deletions

View File

@ -150,21 +150,15 @@ SWITCH_LIMIT_INCR(limit_incr_hash)
switch_core_hash_insert(globals.limit_hash, hashkey, item);
}
/* Did we already run on this channel before? */
if ((pvt = switch_channel_get_private(channel, "limit_hash"))) {
/* Yes, but check if we did that realm+resource
If we didnt, allow incrementing the counter.
If we did, dont touch it but do the validation anyways
*/
increment = !switch_core_hash_find(pvt->hash, hashkey);
} else {
/* This is the first limit check on this channel, create a hashtable, set our private data */
if (!(pvt = switch_channel_get_private(channel, "limit_hash"))) {
pvt = (limit_hash_private_t *) switch_core_session_alloc(session, sizeof(limit_hash_private_t));
memset(pvt, 0, sizeof(limit_hash_private_t));
switch_core_hash_init(&pvt->hash);
switch_channel_set_private(channel, "limit_hash", pvt);
}
if (!(pvt->hash)) {
switch_core_hash_init(&pvt->hash);
}
increment = !switch_core_hash_find(pvt->hash, hashkey);
remote_usage = get_remote_usage(hashkey);
if (interval > 0) {