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);


Reply via email to