Index: vm/gc_gen/src/finalizer_weakref/finalizer_weakref_metadata.cpp =================================================================== --- vm/gc_gen/src/finalizer_weakref/finalizer_weakref_metadata.cpp (revision 540468) +++ vm/gc_gen/src/finalizer_weakref/finalizer_weakref_metadata.cpp (working copy) @@ -21,6 +21,7 @@ #include "finalizer_weakref_metadata.h" #include "../thread/mutator.h" #include "../thread/collector.h" +#include "port_threadunsafe.h" #define FINREF_METADATA_SEG_SIZE_BIT_SHIFT 20 #define FINREF_METADATA_SEG_SIZE_BYTES (1 << FINREF_METADATA_SEG_SIZE_BIT_SHIFT) @@ -203,9 +204,11 @@ assert(collector->softref_set == NULL); assert(collector->weakref_set == NULL); assert(collector->phanref_set == NULL); + UNSAFE_REGION_START collector->softref_set = finref_get_free_block(gc); collector->weakref_set = finref_get_free_block(gc); collector->phanref_set= finref_get_free_block(gc); + UNSAFE_REGION_END } /* put back last weak references block of each collector */ @@ -217,12 +220,14 @@ for(unsigned int i = 0; i < num_active_collectors; i++) { Collector* collector = gc->collectors[i]; + UNSAFE_REGION_START pool_put_entry(metadata->softref_pool, collector->softref_set); pool_put_entry(metadata->weakref_pool, collector->weakref_set); pool_put_entry(metadata->phanref_pool, collector->phanref_set); collector->softref_set = NULL; collector->weakref_set= NULL; collector->phanref_set= NULL; + UNSAFE_REGION_END } return; }