1
1

rcache/udreg: make reference count thread safe

Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Этот коммит содержится в:
Nathan Hjelm 2016-07-27 13:40:35 -06:00
родитель 1eb4ef438e
Коммит 4658b761e4

Просмотреть файл

@ -301,7 +301,7 @@ static int mca_rcache_udreg_register(mca_rcache_base_module_t *rcache, void *add
OPAL_THREAD_UNLOCK(&rcache_udreg->lock);
*reg = udreg_reg;
++udreg_reg->ref_count;
(void) OPAL_THREAD_ADD32(&udreg_reg->ref_count, 1);
udreg_reg->rcache_context = udreg_entry;
return OPAL_SUCCESS;
@ -318,16 +318,15 @@ static int mca_rcache_udreg_deregister(mca_rcache_base_module_t *rcache,
mca_rcache_base_registration_t *reg)
{
mca_rcache_udreg_module_t *rcache_udreg = (mca_rcache_udreg_module_t *) rcache;
int32_t ref_count = OPAL_THREAD_ADD32 (&reg->ref_count, -1);
assert(reg->ref_count > 0);
--reg->ref_count;
assert(ref_count >= 0);
if (!(reg->flags & MCA_RCACHE_FLAGS_CACHE_BYPASS)) {
OPAL_THREAD_LOCK(&rcache_udreg->lock);
UDREG_DecrRefcount (rcache_udreg->udreg_handle, reg->rcache_context);
OPAL_THREAD_UNLOCK(&rcache_udreg->lock);
} else if (!reg->ref_count) {
} else if (!ref_count) {
mca_rcache_udreg_dereg_func (reg, rcache);
}