Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/mono.d2
-rw-r--r--mono/metadata/sgen-alloc.c15
2 files changed, 13 insertions, 4 deletions
diff --git a/data/mono.d b/data/mono.d
index be871db851c..3542f6367f3 100644
--- a/data/mono.d
+++ b/data/mono.d
@@ -28,6 +28,8 @@ provider mono {
probe gc__nursery__tlab__alloc (void *addr, uintptr_t len);
probe gc__nursery__obj__alloc (void *addr, uintptr_t size, char *class_name);
+ probe gc__major__obj__alloc__large (void *addr, uintptr_t size, char *class_name);
+ probe gc__major__obj__alloc__pinned (void *addr, uintptr_t size, char *class_name);
probe gc__major__obj__alloc__degraded (void *addr, uintptr_t size, char *class_name);
probe gc__major__obj__alloc__mature (void *addr, uintptr_t size, char *class_name);
diff --git a/mono/metadata/sgen-alloc.c b/mono/metadata/sgen-alloc.c
index 4871f23e3b8..9ba03100c3b 100644
--- a/mono/metadata/sgen-alloc.c
+++ b/mono/metadata/sgen-alloc.c
@@ -220,6 +220,7 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size)
DEBUG (6, fprintf (gc_debug_file, "Allocated object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size));
binary_protocol_alloc (p , vtable, size);
+ MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL);
g_assert (*p == NULL);
mono_atomic_store_seq (p, vtable);
@@ -270,8 +271,6 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size)
// no space left
g_assert (0);
}
- if (p)
- MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL);
if (nursery_clear_policy == CLEAR_AT_TLAB_CREATION) {
memset (p, 0, size);
@@ -308,8 +307,6 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size)
memset (TLAB_START, 0, alloc_size);
}
- MONO_GC_NURSERY_TLAB_ALLOC (p, alloc_size);
-
/* Allocate from the TLAB */
p = (void*)TLAB_NEXT;
TLAB_NEXT += size;
@@ -329,6 +326,12 @@ mono_gc_alloc_obj_nolock (MonoVTable *vtable, size_t size)
if (G_LIKELY (p)) {
DEBUG (6, fprintf (gc_debug_file, "Allocated object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size));
binary_protocol_alloc (p, vtable, size);
+ if (MONO_GC_MAJOR_OBJ_ALLOC_LARGE_ENABLED () || MONO_GC_NURSERY_OBJ_ALLOC_ENABLED ()) {
+ if (size > SGEN_MAX_SMALL_OBJ_SIZE)
+ MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, NULL);
+ else
+ MONO_GC_NURSERY_OBJ_ALLOC (p, size, NULL);
+ }
mono_atomic_store_seq (p, vtable);
}
@@ -570,6 +573,10 @@ mono_gc_alloc_pinned_obj (MonoVTable *vtable, size_t size)
}
if (G_LIKELY (p)) {
DEBUG (6, fprintf (gc_debug_file, "Allocated pinned object %p, vtable: %p (%s), size: %zd\n", p, vtable, vtable->klass->name, size));
+ if (size > SGEN_MAX_SMALL_OBJ_SIZE)
+ MONO_GC_MAJOR_OBJ_ALLOC_LARGE (p, size, NULL);
+ else
+ MONO_GC_MAJOR_OBJ_ALLOC_PINNED (p, size, NULL);
binary_protocol_alloc_pinned (p, vtable, size);
mono_atomic_store_seq (p, vtable);
}