summaryrefslogtreecommitdiff
path: root/malloc.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2023-03-19 22:56:42 +0300
committerIvan Maidanski <ivmai@mail.ru>2023-03-20 07:39:56 +0300
commit63d838d6448555c6b241926fc4a1ba4a2e6448b7 (patch)
treecaa99dba85bbcc293c80b271924a129b1fec8a16 /malloc.c
parentaa2b00d83ead0d48670a00ef77174db7dc4b5b6b (diff)
downloadbdwgc-63d838d6448555c6b241926fc4a1ba4a2e6448b7.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.
Diffstat (limited to 'malloc.c')
-rw-r--r--malloc.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/malloc.c b/malloc.c
index 7d998c63..82c97e8a 100644
--- a/malloc.c
+++ b/malloc.c
@@ -194,9 +194,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;
@@ -208,7 +210,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());