diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2023-03-19 22:56:42 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2023-04-28 19:45:45 +0300 |
commit | c181e8f9fdb108f8e3085fb1e584a9c47b702286 (patch) | |
tree | ce02ecfc4ba870a99b001443c74d9c20bdfd95b3 | |
parent | de3a4d4856bc57d5ec2af2c19e8964c339811313 (diff) | |
download | bdwgc-c181e8f9fdb108f8e3085fb1e584a9c47b702286.tar.gz |
Fix of GC_bytes_allocd increment in GC_generic_malloc_inner
EXTRA_BYTES should be always counted when updating GC_bytes_allocd.
* malloc.c (GC_generic_malloc_inner): Define lb_adjusted local
variable and set it to ADD_SLOP(lb); increment GC_bytes_allocd by
lb_adjusted instead of lb (in case of a non-small object).
* malloc.c [DBG_HDRS_ALL || GC_GCJ_SUPPORT || !GC_NO_FINALIZATION]
(GC_generic_malloc_inner_ignore_off_page): Change type of lb_adjusted
local variable from word to size_t.
-rw-r--r-- | malloc.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -197,9 +197,11 @@ GC_INNER void * GC_generic_malloc_inner(size_t lb, int k) obj_link(op) = 0; GC_bytes_allocd += GRANULES_TO_BYTES((word)lg); } else { - op = (ptr_t)GC_alloc_large_and_clear(ADD_SLOP(lb), k, 0); + size_t lb_adjusted = ADD_SLOP(lb); + + op = (ptr_t)GC_alloc_large_and_clear(lb_adjusted, k, 0 /* flags */); if (op != NULL) - GC_bytes_allocd += lb; + GC_bytes_allocd += lb_adjusted; } return op; @@ -211,7 +213,7 @@ GC_INNER void * GC_generic_malloc_inner(size_t lb, int k) /* guarantees that pointers past the first page are not relevant. */ GC_INNER void * GC_generic_malloc_inner_ignore_off_page(size_t lb, int k) { - word lb_adjusted; + size_t lb_adjusted; void * op; GC_ASSERT(I_HOLD_LOCK()); |