diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2011-11-15 14:31:54 +0400 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2011-11-15 14:31:54 +0400 |
commit | 27cb36a10a012466dc94c8e64350dc603cab94fa (patch) | |
tree | 59be9f43bf6b35d7aa937b7aebeb056fa8bdd32a /fnlz_mlc.c | |
parent | 8d4ebac171600c33043928aa21a62cf351b8ec44 (diff) | |
download | bdwgc-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.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -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)); + } } } |