diff options
author | Petter Urkedal <paurkedal@gmail.com> | 2012-04-11 21:11:03 +0200 |
---|---|---|
committer | Petter Urkedal <paurkedal@gmail.com> | 2012-04-11 21:20:17 +0200 |
commit | c1405932f87664e8324824c0f5e09af58cba1dc5 (patch) | |
tree | d78d39f2caf34f0f14016a064717a8a18b16db9d /fnlz_mlc.c | |
parent | f63e95f14c6e57c0e98db3e9264dcdd077fdf857 (diff) | |
download | bdwgc-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.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -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; |