rcache/udreg: make reference count thread safe
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
Этот коммит содержится в:
родитель
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);
|
OPAL_THREAD_UNLOCK(&rcache_udreg->lock);
|
||||||
|
|
||||||
*reg = udreg_reg;
|
*reg = udreg_reg;
|
||||||
++udreg_reg->ref_count;
|
(void) OPAL_THREAD_ADD32(&udreg_reg->ref_count, 1);
|
||||||
udreg_reg->rcache_context = udreg_entry;
|
udreg_reg->rcache_context = udreg_entry;
|
||||||
|
|
||||||
return OPAL_SUCCESS;
|
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_base_registration_t *reg)
|
||||||
{
|
{
|
||||||
mca_rcache_udreg_module_t *rcache_udreg = (mca_rcache_udreg_module_t *) rcache;
|
mca_rcache_udreg_module_t *rcache_udreg = (mca_rcache_udreg_module_t *) rcache;
|
||||||
|
int32_t ref_count = OPAL_THREAD_ADD32 (®->ref_count, -1);
|
||||||
|
|
||||||
assert(reg->ref_count > 0);
|
assert(ref_count >= 0);
|
||||||
|
|
||||||
--reg->ref_count;
|
|
||||||
|
|
||||||
if (!(reg->flags & MCA_RCACHE_FLAGS_CACHE_BYPASS)) {
|
if (!(reg->flags & MCA_RCACHE_FLAGS_CACHE_BYPASS)) {
|
||||||
OPAL_THREAD_LOCK(&rcache_udreg->lock);
|
OPAL_THREAD_LOCK(&rcache_udreg->lock);
|
||||||
UDREG_DecrRefcount (rcache_udreg->udreg_handle, reg->rcache_context);
|
UDREG_DecrRefcount (rcache_udreg->udreg_handle, reg->rcache_context);
|
||||||
OPAL_THREAD_UNLOCK(&rcache_udreg->lock);
|
OPAL_THREAD_UNLOCK(&rcache_udreg->lock);
|
||||||
} else if (!reg->ref_count) {
|
} else if (!ref_count) {
|
||||||
mca_rcache_udreg_dereg_func (reg, rcache);
|
mca_rcache_udreg_dereg_func (reg, rcache);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user