Skip to content

Commit ecbd993

Browse files
authored
Merge pull request #1047 from Unity-Technologies/scripting_memory_capture_crash_fixes
Scripting memory snapshot crash fixes
2 parents 4d7a3f7 + eb95345 commit ecbd993

File tree

2 files changed

+10
-26
lines changed

2 files changed

+10
-26
lines changed

mono/metadata/mempool.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ mono_mempool_foreach_block(MonoMemPool* pool, mono_mempool_block_proc callback,
443443
while (current)
444444
{
445445
gpointer start = (guint8*)current + SIZEOF_MEM_POOL;
446-
gpointer end = (guint8*)start + current->size;
446+
gpointer end = (guint8*)current + current->size;
447447

448448
callback(start, end, user_data);
449449
current = current->next;

mono/metadata/unity-memory-info.c

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -305,9 +305,7 @@ static void AllocateMemoryForMemPool(MonoMemPool* pool, void *user_data)
305305

306306
static void AllocateMemoryForImageMemPool(MonoImage *image, gpointer value, void *user_data)
307307
{
308-
mono_image_lock(image);
309308
AllocateMemoryForMemPool(image->mempool, user_data);
310-
mono_image_unlock(image);
311309
}
312310

313311
static void CopyMemPool(MonoMemPool *pool, SectionIterationContext *context)
@@ -317,26 +315,17 @@ static void CopyMemPool(MonoMemPool *pool, SectionIterationContext *context)
317315

318316
static void CopyImageMemPool(MonoImage *image, gpointer value, SectionIterationContext *context)
319317
{
320-
mono_image_lock(image);
321318
CopyMemPool(image->mempool, context);
322-
mono_image_unlock(image);
323319
}
324320

325321
static void AllocateMemoryForImageClassCache(MonoImage *image, gpointer *value, void *user_data)
326322
{
327-
mono_image_lock(image);
328-
329323
AllocateMemoryForSection(user_data, image->class_cache.table, ((uint8_t*)image->class_cache.table) + image->class_cache.size);
330-
mono_image_unlock(image);
331324
}
332325

333326
static void CopyImageClassCache(MonoImage *image, gpointer value, SectionIterationContext *context)
334327
{
335-
mono_image_lock(image);
336-
337328
CopyHeapSection(context, image->class_cache.table, ((uint8_t*)image->class_cache.table) + image->class_cache.size);
338-
339-
mono_image_unlock(image);
340329
}
341330

342331
static void IncrementCountForImageSetMemPoolNumChunks(MonoImageSet *imageSet, void *user_data)
@@ -491,18 +480,7 @@ static void CaptureManagedHeap(MonoManagedHeap* heap, GHashTable* monoImages)
491480
data.heap = heap;
492481
data.monoImages = monoImages;
493482

494-
while (TRUE)
495-
{
496-
GC_call_with_alloc_lock(CaptureHeapInfo, &data);
497-
GC_stop_world_external();
498-
499-
if (MonoManagedHeapStillValid(heap, monoImages))
500-
break;
501-
502-
GC_start_world_external();
503-
504-
FreeMonoManagedHeap(heap);
505-
}
483+
CaptureHeapInfo(&data);
506484

507485
iterationContext.currentSection = heap->sections;
508486

@@ -512,8 +490,6 @@ static void CaptureManagedHeap(MonoManagedHeap* heap, GHashTable* monoImages)
512490
g_hash_table_foreach(monoImages, (GHFunc)CopyImageMemPool, &iterationContext);
513491
g_hash_table_foreach(monoImages, (GHFunc)CopyImageClassCache, &iterationContext);
514492
mono_metadata_image_set_foreach(CopyImageSetMemPool, &iterationContext);
515-
516-
GC_start_world_external();
517493
}
518494

519495
static void GCHandleIterationCallback(MonoObject* managedObject, GList** managedObjects)
@@ -638,6 +614,11 @@ static void CollectMonoImageFromAssembly(MonoAssembly *assembly, void *user_data
638614

639615
MonoManagedMemorySnapshot* mono_unity_capture_memory_snapshot()
640616
{
617+
GC_disable();
618+
GC_wait_for_gc_completion(TRUE);
619+
620+
GC_stop_world_external();
621+
641622
MonoManagedMemorySnapshot* snapshot;
642623
snapshot = g_new0(MonoManagedMemorySnapshot, 1);
643624

@@ -656,6 +637,9 @@ MonoManagedMemorySnapshot* mono_unity_capture_memory_snapshot()
656637

657638
g_hash_table_destroy(monoImages);
658639

640+
GC_start_world_external();
641+
GC_enable();
642+
659643
return snapshot;
660644
}
661645

0 commit comments

Comments
 (0)