summaryrefslogtreecommitdiff
path: root/fnlz_mlc.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2011-11-15 14:31:54 +0400
committerIvan Maidanski <ivmai@mail.ru>2011-11-15 14:31:54 +0400
commit27cb36a10a012466dc94c8e64350dc603cab94fa (patch)
tree59be9f43bf6b35d7aa937b7aebeb056fa8bdd32a /fnlz_mlc.c
parent8d4ebac171600c33043928aa21a62cf351b8ec44 (diff)
downloadbdwgc-27cb36a10a012466dc94c8e64350dc603cab94fa.tar.gz
Fix GC_finalized_malloc to fetch GC_oom_fn value atomically
* fnlz_mlc.c (GC_finalized_malloc): Fetch GC_oom_fn value holding the allocation lock.
Diffstat (limited to 'fnlz_mlc.c')
-rw-r--r--fnlz_mlc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/fnlz_mlc.c b/fnlz_mlc.c
index 6aea12d5..a7db976b 100644
--- a/fnlz_mlc.c
+++ b/fnlz_mlc.c
@@ -129,8 +129,14 @@ GC_API void GC_CALL GC_init_finalized_malloc(void)
GC_generic_malloc_many(GC_RAW_BYTES_FROM_INDEX(lg),
GC_finalized_kind, my_fl);
my_entry = *my_fl;
- if (my_entry == 0)
- return GC_oom_fn(lb);
+ if (my_entry == 0) {
+ GC_oom_func oom_fn;
+
+ LOCK();
+ oom_fn = GC_oom_fn;
+ UNLOCK();
+ return((*oom_fn)(lb));
+ }
}
}