@@ -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