summaryrefslogtreecommitdiff
path: root/fnlz_mlc.c
diff options
context:
space:
mode:
authorPetter Urkedal <paurkedal@gmail.com>2012-04-11 21:11:03 +0200
committerPetter Urkedal <paurkedal@gmail.com>2012-04-11 21:20:17 +0200
commitc1405932f87664e8324824c0f5e09af58cba1dc5 (patch)
treed78d39f2caf34f0f14016a064717a8a18b16db9d /fnlz_mlc.c
parentf63e95f14c6e57c0e98db3e9264dcdd077fdf857 (diff)
downloadbdwgc-c1405932f87664e8324824c0f5e09af58cba1dc5.tar.gz
Fix bug in finalized allocation.
* fnlz_mlc.c (GC_register_disclaim_proc): Make sure to re-read our GC_size_map entry after calling GC_generic_malloc, in case it had to be extended.
Diffstat (limited to 'fnlz_mlc.c')
-rw-r--r--fnlz_mlc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fnlz_mlc.c b/fnlz_mlc.c
index 12767aa5..763d3b0c 100644
--- a/fnlz_mlc.c
+++ b/fnlz_mlc.c
@@ -102,12 +102,15 @@ GC_API void GC_CALL GC_register_disclaim_proc(int kind, GC_disclaim_proc proc,
op = GC_generic_malloc((word)lb, GC_finalized_kind);
if (NULL == op)
return NULL;
+ /* GC_generic_malloc have have extended the size map for us. */
+ lg = GC_size_map[lb];
} else {
*opp = obj_link(op);
obj_link(op) = 0;
GC_bytes_allocd += GRANULES_TO_BYTES(lg);
UNLOCK();
}
+ GC_ASSERT(lg > 0);
((const void **)op)[GRANULES_TO_WORDS(lg) - 1] = fclos;
} else {
size_t op_sz;