提交 7d11e199 authored 作者: Travis Cross's avatar Travis Cross

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
上级 82a28e76
......@@ -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;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论