#define IN_CRITICAL_REGION (__thread_info__->client_info.in_critical_region)
#endif
-#ifndef DISABLE_CRITICAL_REGION
-
#ifdef HAVE_KW_THREAD
#define IN_CRITICAL_REGION sgen_thread_info->client_info.in_critical_region
#else
*/
#define EXIT_CRITICAL_REGION do { mono_atomic_store_release (&IN_CRITICAL_REGION, 0); } while (0)
-#endif
-
#define SGEN_TV_DECLARE(name) gint64 name
#define SGEN_TV_GETTIME(tv) tv = mono_100ns_ticks ()
#define SGEN_TV_ELAPSED(start,end) ((long)(end-start))
if (!SGEN_CAN_ALIGN_UP (size))
return NULL;
-#ifndef DISABLE_CRITICAL_REGION
-
if (G_UNLIKELY (has_per_allocation_action)) {
static int alloc_count;
int current_alloc = InterlockedIncrement (&alloc_count);
return res;
}
EXIT_CRITICAL_REGION;
-#endif
+
LOCK_GC;
res = sgen_alloc_obj_nolock (vtable, size);
UNLOCK_GC;
{
size_t size = count * element_size;
-#ifdef DISABLE_CRITICAL_REGION
- LOCK_GC;
-#else
TLAB_ACCESS_INIT;
ENTER_CRITICAL_REGION;
-#endif
+
mono_gc_memmove_atomic (dest, src, size);
sgen_card_table_mark_range ((mword)dest, size);
-#ifdef DISABLE_CRITICAL_REGION
- UNLOCK_GC;
-#else
+
EXIT_CRITICAL_REGION;
-#endif
}
static void
{
size_t size = sgen_client_par_object_get_size (SGEN_LOAD_VTABLE_UNCHECKED (obj), obj);
-#ifdef DISABLE_CRITICAL_REGION
- LOCK_GC;
-#else
TLAB_ACCESS_INIT;
ENTER_CRITICAL_REGION;
-#endif
+
mono_gc_memmove_aligned ((char*)obj + SGEN_CLIENT_OBJECT_HEADER_SIZE, (char*)src + SGEN_CLIENT_OBJECT_HEADER_SIZE,
size - SGEN_CLIENT_OBJECT_HEADER_SIZE);
sgen_card_table_mark_range ((mword)obj, size);
-#ifdef DISABLE_CRITICAL_REGION
- UNLOCK_GC;
-#else
+
EXIT_CRITICAL_REGION;
-#endif
}
static void