Re: memory leak in free()

From: Ville-Pertti Keinonen <will_at_exomi.com>
Date: Mon, 19 Jun 2006 17:04:35 +0300
On Jun 14, 2006, at 8:35 PM, Jason Evans wrote:

> Incidentally, this isn't an issue on 64-bit systems, since only mmap 
> () is used to request memory from the kernel.

The test does seem to leak memory on 64-bit systems, though; not the  
actual allocated bits, but support structures, namely nodes that  
chunk_dealloc tries to insert into old_chunks but fails because a  
node holding that address is already there.

It should be possible to fix this either by removing any nodes within  
range from old_chunks when allocating "new" memory, or by checking  
the return value of RB_INSERT in chunk_dealloc, and deallocating the  
new node if it returns non-NULL.

A patch implementing the latter that seems to work:

--- malloc.c    10 May 2006 00:07:45 -0000      1.126
+++ malloc.c    19 Jun 2006 13:58:57 -0000
_at__at_ -1370,7 +1370,8 _at__at_
                 node->chunk = (void *)((uintptr_t)chunk + (uintptr_t) 
offset);
                 node->size = chunk_size;
-               RB_INSERT(chunk_tree_s, &old_chunks, node);
+               if (RB_INSERT(chunk_tree_s, &old_chunks, node) != NULL)
+                       base_chunk_node_dealloc(node);
         }
#ifdef USE_BRK
Received on Mon Jun 19 2006 - 12:04:39 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:57 UTC