Skip to content

Commit 15ea9c5

Browse files
authored
Merge pull request #3013 from hjelmn/rcache_lifo
rcache/base: do not free memory with the vma lock held
2 parents c2adf35 + 60ad9d1 commit 15ea9c5

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

opal/mca/rcache/base/rcache_base_vma.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ struct mca_rcache_base_vma_module_t {
4444
opal_object_t super;
4545
opal_rb_tree_t rb_tree;
4646
opal_list_t vma_list;
47-
opal_list_t vma_gc_list;
47+
opal_lifo_t vma_gc_lifo;
4848
size_t reg_cur_cache_size;
4949
opal_mutex_t vma_lock;
5050
};

opal/mca/rcache/base/rcache_base_vma_tree.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ int mca_rcache_base_vma_tree_init (mca_rcache_base_vma_module_t *vma_module)
241241
{
242242
OBJ_CONSTRUCT(&vma_module->rb_tree, opal_rb_tree_t);
243243
OBJ_CONSTRUCT(&vma_module->vma_list, opal_list_t);
244-
OBJ_CONSTRUCT(&vma_module->vma_gc_list, opal_list_t);
244+
OBJ_CONSTRUCT(&vma_module->vma_gc_lifo, opal_lifo_t);
245245
vma_module->reg_cur_cache_size = 0;
246246
return opal_rb_tree_init (&vma_module->rb_tree, mca_rcache_base_vma_tree_node_compare);
247247
}
@@ -250,7 +250,7 @@ void mca_rcache_base_vma_tree_finalize (mca_rcache_base_vma_module_t *vma_module
250250
{
251251
opal_rb_tree_init(&vma_module->rb_tree, mca_rcache_base_vma_tree_node_compare);
252252
OBJ_DESTRUCT(&vma_module->vma_list);
253-
OBJ_DESTRUCT(&vma_module->vma_gc_list);
253+
OBJ_DESTRUCT(&vma_module->vma_gc_lifo);
254254
OBJ_DESTRUCT(&vma_module->rb_tree);
255255
}
256256

@@ -423,7 +423,7 @@ static void mca_rcache_base_vma_cleanup (mca_rcache_base_vma_module_t *vma_modul
423423
{
424424
opal_list_item_t *item;
425425

426-
while (NULL != (item = opal_list_remove_first (&vma_module->vma_gc_list))) {
426+
while (NULL != (item = opal_lifo_pop_atomic (&vma_module->vma_gc_lifo))) {
427427
OBJ_RELEASE(item);
428428
}
429429
}
@@ -434,10 +434,10 @@ int mca_rcache_base_vma_tree_insert (mca_rcache_base_vma_module_t *vma_module,
434434
mca_rcache_base_vma_item_t *i;
435435
uintptr_t begin = (uintptr_t)reg->base, end = (uintptr_t)reg->bound;
436436

437-
opal_mutex_lock (&vma_module->vma_lock);
438-
439437
mca_rcache_base_vma_cleanup (vma_module);
440438

439+
opal_mutex_lock (&vma_module->vma_lock);
440+
441441
i = (mca_rcache_base_vma_item_t *) opal_rb_tree_find_with (&vma_module->rb_tree,
442442
(void *) begin, mca_rcache_base_vma_tree_node_compare_closest);
443443

@@ -570,7 +570,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
570570
mca_rcache_base_vma_update_byte_count (vma_module,
571571
vma->start - vma->end - 1);
572572
opal_list_remove_item (&vma_module->vma_list, &vma->super);
573-
opal_list_append (&vma_module->vma_gc_list, &vma->super);
573+
opal_lifo_push_atomic (&vma_module->vma_gc_lifo, &vma->super);
574574
vma = next;
575575
} else {
576576
int merged;
@@ -588,7 +588,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
588588
prev->end = vma->end;
589589
opal_list_remove_item(&vma_module->vma_list, &vma->super);
590590
opal_rb_tree_delete(&vma_module->rb_tree, vma);
591-
opal_list_append (&vma_module->vma_gc_list, &vma->super);
591+
opal_lifo_push_atomic (&vma_module->vma_gc_lifo, &vma->super);
592592
vma = prev;
593593
merged = 1;
594594
}
@@ -602,7 +602,7 @@ int mca_rcache_base_vma_tree_delete (mca_rcache_base_vma_module_t *vma_module,
602602
vma->end = next->end;
603603
opal_list_remove_item(&vma_module->vma_list, &next->super);
604604
opal_rb_tree_delete(&vma_module->rb_tree, next);
605-
opal_list_append (&vma_module->vma_gc_list, &next->super);
605+
opal_lifo_push_atomic (&vma_module->vma_gc_lifo, &next->super);
606606
merged = 1;
607607
}
608608
} while (merged);

0 commit comments

Comments
 (0)