cvs commit: src/lib/libc/stdlib malloc.c

Jason Evans jasone at FreeBSD.org
Mon Dec 31 00:59:17 UTC 2007


jasone      2007-12-31 00:59:16 UTC

  FreeBSD src repository

  Modified files:
    lib/libc/stdlib      malloc.c 
  Log:
  Fix a bug related to sbrk() calls that could cause address space leaks.
  This is a long-standing bug, but until recent changes it was difficult
  to trigger, and even then its impact was non-catastrophic, with the
  exception of revision 1.157.
  
  Optimize chunk_alloc_mmap() to avoid the need for unmapping pages in the
  common case.  Thanks go to Kris Kennaway for a patch that inspired this
  change.
  
  Do not maintain a record of previously mmap'ed chunk address ranges.
  The original intent was to avoid the extra system call overhead in
  chunk_alloc_mmap(), which is no longer a concern.  This also allows some
  simplifications for the tree of unused DSS chunks.
  
  Introduce huge_mtx and dss_chunks_mtx to replace chunks_mtx.  There was
  no compelling reason to use the same mutex for these disjoint purposes.
  
  Avoid memset() for huge allocations when possible.
  
  Maintain two trees instead of one for tracking unused DSS address
  ranges.  This allows scalable allocation of multi-chunk huge objects in
  the DSS.  Previously, multi-chunk huge allocation requests failed if the
  DSS could not be extended.
  
  Revision  Changes    Path
  1.159     +268 -186  src/lib/libc/stdlib/malloc.c


More information about the cvs-all mailing list