]> granicus.if.org Git - gc/commitdiff
Fix bug in finalized allocation.
authorPetter Urkedal <paurkedal@gmail.com>
Wed, 11 Apr 2012 19:11:03 +0000 (21:11 +0200)
committerPetter Urkedal <paurkedal@gmail.com>
Wed, 11 Apr 2012 19:20:17 +0000 (21:20 +0200)
* 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.

fnlz_mlc.c

index 12767aa5157a36dd6eb2ac647516215f50713a75..763d3b0c449488388399f6eb6fd44be430c94361 100644 (file)
@@ -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;