Skip to content

Commit 827464c

Browse files
committed
rcache/udreg: make reference count thread safe
Signed-off-by: Nathan Hjelm <[email protected]>
1 parent 3b70ad0 commit 827464c

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

opal/mca/rcache/udreg/rcache_udreg_module.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ static int mca_rcache_udreg_register(mca_rcache_base_module_t *rcache, void *add
301301
OPAL_THREAD_UNLOCK(&rcache_udreg->lock);
302302

303303
*reg = udreg_reg;
304-
++udreg_reg->ref_count;
304+
(void) OPAL_THREAD_ADD32(&udreg_reg->ref_count, 1);
305305
udreg_reg->rcache_context = udreg_entry;
306306

307307
return OPAL_SUCCESS;
@@ -318,16 +318,15 @@ static int mca_rcache_udreg_deregister(mca_rcache_base_module_t *rcache,
318318
mca_rcache_base_registration_t *reg)
319319
{
320320
mca_rcache_udreg_module_t *rcache_udreg = (mca_rcache_udreg_module_t *) rcache;
321+
int32_t ref_count = OPAL_THREAD_ADD32 (&reg->ref_count, -1);
321322

322-
assert(reg->ref_count > 0);
323-
324-
--reg->ref_count;
323+
assert(ref_count >= 0);
325324

326325
if (!(reg->flags & MCA_RCACHE_FLAGS_CACHE_BYPASS)) {
327326
OPAL_THREAD_LOCK(&rcache_udreg->lock);
328327
UDREG_DecrRefcount (rcache_udreg->udreg_handle, reg->rcache_context);
329328
OPAL_THREAD_UNLOCK(&rcache_udreg->lock);
330-
} else if (!reg->ref_count) {
329+
} else if (!ref_count) {
331330
mca_rcache_udreg_dereg_func (reg, rcache);
332331
}
333332

0 commit comments

Comments
 (0)