From: Rodrigo Kumpera Date: Thu, 13 Mar 2014 22:47:26 +0000 (-0400) Subject: Fix memory management for toggle-ref X-Git-Tag: gc7_6_0~151^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0d482e8754623564ecd697a8e70aa8a7549a79da;p=gc Fix memory management for toggle-ref (Apply commit 960f233 from 'mono_libgc' branch.) Replace GC_free with GC_INTERNAL_FREE. The former might take the GC lock and deadlock us. Replace GC_INTERNAL_MALLOC with GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE as we don't need the rest of the GC messing around with the toggleref array. --- diff --git a/finalize.c b/finalize.c index f58d2201..f57bf55e 100644 --- a/finalize.c +++ b/finalize.c @@ -377,7 +377,7 @@ ensure_toggleref_capacity (int capacity) { if (!GC_toggleref_array) { GC_toggleref_array_capacity = 32; - GC_toggleref_array = (GCToggleRef *) GC_INTERNAL_MALLOC (GC_toggleref_array_capacity * sizeof (GCToggleRef), NORMAL); + GC_toggleref_array = (GCToggleRef *) GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE (GC_toggleref_array_capacity * sizeof (GCToggleRef), NORMAL); } if (GC_toggleref_array_size + capacity >= GC_toggleref_array_capacity) { GCToggleRef *tmp; @@ -385,10 +385,10 @@ ensure_toggleref_capacity (int capacity) while (GC_toggleref_array_capacity < GC_toggleref_array_size + capacity) GC_toggleref_array_capacity *= 2; - tmp = (GCToggleRef *) GC_INTERNAL_MALLOC (GC_toggleref_array_capacity * sizeof (GCToggleRef), NORMAL); + tmp = (GCToggleRef *) GC_INTERNAL_MALLOC_IGNORE_OFF_PAGE (GC_toggleref_array_capacity * sizeof (GCToggleRef), NORMAL); memcpy (tmp, GC_toggleref_array, GC_toggleref_array_size * sizeof (GCToggleRef)); - GC_free((GC_PTR)GC_toggleref_array); + GC_INTERNAL_FREE(GC_toggleref_array); GC_toggleref_array = tmp; } }