Ville-Pertti Keinonen wrote: > > 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 Ah, you are right that there is a leak. I'm going to use a slightly different approach to fixing the problem, but thank you very much for pointing it out. JasonReceived on Tue Jun 20 2006 - 15:51:25 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:57 UTC