Hi, here's a small malloc diff. Most important part is an extra internal consistency check. I have been running this for a few week already,
-Otto Index: stdlib/malloc.3 =================================================================== RCS file: /cvs/src/lib/libc/stdlib/malloc.3,v retrieving revision 1.127 diff -u -p -r1.127 malloc.3 --- stdlib/malloc.3 25 Feb 2021 15:20:18 -0000 1.127 +++ stdlib/malloc.3 1 Apr 2021 09:21:59 -0000 @@ -366,7 +366,8 @@ If a program changes behavior if any of are used, it is buggy. .Pp -The default number of free pages cached is 64 per malloc pool. +The default size of the cache is 64 single page allocations. +It also caches a number of larger regions. Multi-threaded programs use multiple pools. .Sh RETURN VALUES Upon successful completion, the allocation functions Index: stdlib/malloc.c =================================================================== RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v retrieving revision 1.269 diff -u -p -r1.269 malloc.c --- stdlib/malloc.c 9 Mar 2021 07:39:28 -0000 1.269 +++ stdlib/malloc.c 1 Apr 2021 09:22:00 -0000 @@ -1404,6 +1404,8 @@ ofree(struct dir_info **argpool, void *p } else { /* Validate and optionally canary check */ struct chunk_info *info = (struct chunk_info *)r->size; + if (info->size != sz) + wrterror(pool, "internal struct corrupt"); find_chunknum(pool, info, p, mopts.chunk_canaries); if (!clear) { void *tmp; @@ -1608,6 +1610,7 @@ orealloc(struct dir_info **argpool, void } if (munmap((char *)r->p + rnewsz, roldsz - rnewsz)) wrterror(pool, "munmap %p", (char *)r->p + rnewsz); + STATS_SUB(d->malloc_used, roldsz - rnewsz); r->size = gnewsz; if (MALLOC_MOVE_COND(gnewsz)) { void *pp = MALLOC_MOVE(r->p, gnewsz);