summaryrefslogtreecommitdiff
path: root/finalize.c
diff options
context:
space:
mode:
authorRodrigo Kumpera <kumpera@gmail.com>2014-03-13 18:47:26 -0400
committerIvan Maidanski <ivmai@mail.ru>2015-08-26 23:19:59 +0300
commit0d482e8754623564ecd697a8e70aa8a7549a79da (patch)
treebe10327f8ce4c5ca41598c49f2bfa0884b3b7b9d /finalize.c
parent5ae0aed4befd61980cb9930a982e37c051be1d5d (diff)
downloadbdwgc-0d482e8754623564ecd697a8e70aa8a7549a79da.tar.gz
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.
Diffstat (limited to 'finalize.c')
-rw-r--r--finalize.c6
1 files changed, 3 insertions, 3 deletions
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;
}
}