Check for null hash or private while holding lock
What if the hash were destroyed by one thread holding the lock while another thread was waiting for the lock? The waiting thread would have already checked that the hash was non-null and would proceed on that assumption after acquiring the lock. With this commit we check only after acquiring the lock. ref: FS-6783 ref: FS-6775
This commit is contained in:
parent
82a28e76e4
commit
7d11e19983
|
@ -280,12 +280,13 @@ SWITCH_LIMIT_RELEASE(limit_release_hash)
|
|||
limit_hash_private_t *pvt = switch_channel_get_private(channel, "limit_hash");
|
||||
limit_hash_item_t *item = NULL;
|
||||
|
||||
switch_thread_rwlock_wrlock(globals.limit_hash_rwlock);
|
||||
|
||||
if (!pvt || !pvt->hash) {
|
||||
switch_thread_rwlock_unlock(globals.limit_hash_rwlock);
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
switch_thread_rwlock_wrlock(globals.limit_hash_rwlock);
|
||||
|
||||
/* clear for uuid */
|
||||
if (realm == NULL && resource == NULL) {
|
||||
switch_hash_index_t *hi = NULL;
|
||||
|
|
Loading…
Reference in New Issue