SOURCES: glibc-malloc.patch (NEW) - malloc fixes from libc HEAD cv...

arekm arekm at pld-linux.org
Mon Jun 4 09:08:51 CEST 2007


Author: arekm                        Date: Mon Jun  4 07:08:51 2007 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- malloc fixes from libc HEAD cvs; fixes locale generation problems

---- Files affected:
SOURCES:
   glibc-malloc.patch (1.3 -> 1.4)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/glibc-malloc.patch
diff -u /dev/null SOURCES/glibc-malloc.patch:1.4
--- /dev/null	Mon Jun  4 09:08:51 2007
+++ SOURCES/glibc-malloc.patch	Mon Jun  4 09:08:46 2007
@@ -0,0 +1,217 @@
+Index: Makefile
+===================================================================
+RCS file: /cvs/glibc/libc/malloc/Makefile,v
+retrieving revision 1.54
+retrieving revision 1.55
+diff -u -r1.54 -r1.55
+--- glibc/malloc/Makefile	7 May 2007 15:30:57 -0000	1.54
++++ glibc/malloc/Makefile	21 May 2007 16:12:25 -0000	1.55
+@@ -104,7 +104,6 @@
+ include ../Rules
+ 
+ CFLAGS-mcheck-init.c = $(PIC-ccflag)
+-CFLAGS-malloc.c += -DMALLOC_DEBUG
+ 
+ $(objpfx)libmcheck.a: $(objpfx)mcheck-init.o
+ 	-rm -f $@
+Index: arena.c
+===================================================================
+RCS file: /cvs/glibc/libc/malloc/arena.c,v
+retrieving revision 1.27
+retrieving revision 1.28
+diff -u -r1.27 -r1.28
+--- glibc/malloc/arena.c	13 May 2007 20:32:57 -0000	1.27
++++ glibc/malloc/arena.c	21 May 2007 16:13:07 -0000	1.28
+@@ -370,9 +370,6 @@
+   mp_.top_pad        = DEFAULT_TOP_PAD;
+ #endif
+   mp_.n_mmaps_max    = DEFAULT_MMAP_MAX;
+-#if MALLOC_DEBUG
+-  mp_.n_mmaps_cmax   = DEFAULT_MMAP_MAX;
+-#endif
+   mp_.mmap_threshold = DEFAULT_MMAP_THRESHOLD;
+   mp_.trim_threshold = DEFAULT_TRIM_THRESHOLD;
+   mp_.pagesize       = malloc_getpagesize;
+Index: hooks.c
+===================================================================
+RCS file: /cvs/glibc/libc/malloc/hooks.c,v
+retrieving revision 1.21
+retrieving revision 1.22
+diff -u -r1.21 -r1.22
+--- glibc/malloc/hooks.c	13 May 2007 20:32:57 -0000	1.21
++++ glibc/malloc/hooks.c	21 May 2007 16:12:12 -0000	1.22
+@@ -496,7 +496,7 @@
+    then the hooks are reset to 0.  */
+ 
+ #define MALLOC_STATE_MAGIC   0x444c4541l
+-#define MALLOC_STATE_VERSION (0*0x100l + 2l) /* major*0x100 + minor */
++#define MALLOC_STATE_VERSION (0*0x100l + 3l) /* major*0x100 + minor */
+ 
+ struct malloc_save_state {
+   long          magic;
+@@ -507,9 +507,6 @@
+   unsigned long trim_threshold;
+   unsigned long top_pad;
+   unsigned int  n_mmaps_max;
+-#if MALLOC_DEBUG
+-  unsigned int  n_mmaps_cmax;
+-#endif
+   unsigned long mmap_threshold;
+   int           check_action;
+   unsigned long max_sbrked_mem;
+@@ -553,9 +550,6 @@
+   ms->trim_threshold = mp_.trim_threshold;
+   ms->top_pad = mp_.top_pad;
+   ms->n_mmaps_max = mp_.n_mmaps_max;
+-#if MALLOC_DEBUG
+-  ms->n_mmaps_cmax = mp_.n_mmaps_cmax;
+-#endif
+   ms->mmap_threshold = mp_.mmap_threshold;
+   ms->check_action = check_action;
+   ms->max_sbrked_mem = main_arena.max_system_mem;
+@@ -601,8 +595,9 @@
+       assert(ms->av[2*i+3] == 0);
+       first(b) = last(b) = b;
+     } else {
+-      if(i<NSMALLBINS || (largebin_index(chunksize(ms->av[2*i+2]))==i &&
+-			  largebin_index(chunksize(ms->av[2*i+3]))==i)) {
++      if(ms->version >= 3 &&
++	 (i<NSMALLBINS || (largebin_index(chunksize(ms->av[2*i+2]))==i &&
++			   largebin_index(chunksize(ms->av[2*i+3]))==i))) {
+ 	first(b) = ms->av[2*i+2];
+ 	last(b) = ms->av[2*i+3];
+ 	/* Make sure the links to the bins within the heap are correct.  */
+@@ -622,14 +617,22 @@
+       }
+     }
+   }
++  if (ms->version < 3) {
++    /* Clear fd_nextsize and bk_nextsize fields.  */
++    b = unsorted_chunks(&main_arena)->fd;
++    while (b != unsorted_chunks(&main_arena)) {
++      if (!in_smallbin_range(chunksize(b))) {
++	b->fd_nextsize = NULL;
++	b->bk_nextsize = NULL;
++      }
++      b = b->fd;
++    }
++  }
+   mp_.sbrk_base = ms->sbrk_base;
+   main_arena.system_mem = ms->sbrked_mem_bytes;
+   mp_.trim_threshold = ms->trim_threshold;
+   mp_.top_pad = ms->top_pad;
+   mp_.n_mmaps_max = ms->n_mmaps_max;
+-#if MALLOC_DEBUG
+-  mp_.n_mmaps_cmax = ms->n_mmaps_cmax;
+-#endif
+   mp_.mmap_threshold = ms->mmap_threshold;
+   check_action = ms->check_action;
+   main_arena.max_system_mem = ms->max_sbrked_mem;
+Index: malloc.c
+===================================================================
+RCS file: /cvs/glibc/libc/malloc/malloc.c,v
+retrieving revision 1.178
+retrieving revision 1.180
+diff -u -r1.178 -r1.180
+--- glibc/malloc/malloc.c	15 May 2007 01:51:17 -0000	1.178
++++ glibc/malloc/malloc.c	21 May 2007 16:12:53 -0000	1.180
+@@ -2358,9 +2358,6 @@
+   /* Memory map support */
+   int              n_mmaps;
+   int              n_mmaps_max;
+-#if MALLOC_DEBUG
+-  int              n_mmaps_cmax;
+-#endif
+   int              max_n_mmaps;
+   /* the mmap_threshold is dynamic, until the user sets
+      it manually, at which point we need to disable any
+@@ -2572,7 +2569,7 @@
+ #if HAVE_MMAP
+     /* address is outside main heap  */
+     if (contiguous(av) && av->top != initial_top(av)) {
+-      assert(((char*)p) < min_address || ((char*)p) > max_address);
++      assert(((char*)p) < min_address || ((char*)p) >= max_address);
+     }
+     /* chunk is page-aligned */
+     assert(((p->prev_size + sz) & (mp_.pagesize-1)) == 0);
+@@ -2876,8 +2873,6 @@
+   assert(total <= (unsigned long)(mp_.max_total_mem));
+   assert(mp_.n_mmaps >= 0);
+ #endif
+-  assert(mp_.n_mmaps <= mp_.n_mmaps_cmax);
+-  assert(mp_.n_mmaps_max <= mp_.n_mmaps_cmax);
+   assert(mp_.n_mmaps <= mp_.max_n_mmaps);
+ 
+   assert((unsigned long)(av->system_mem) <=
+@@ -3475,13 +3470,6 @@
+     }
+ 
+   mp_.n_mmaps--;
+-#if MALLOC_DEBUG
+-  if (mp_.n_mmaps_cmax > mp_.n_mmaps_max)
+-    {
+-      assert (mp_.n_mmaps_cmax == mp_.n_mmaps + 1);
+-      mp_.n_mmaps_cmax = mp_.n_mmaps;
+-    }
+-#endif
+   mp_.mmapped_mem -= total_size;
+ 
+   int ret __attribute__ ((unused)) = munmap((char *)block, total_size);
+@@ -5397,9 +5385,6 @@
+   mp_.n_mmaps_max = 0;
+   mem = _int_malloc(av, size);
+   mp_.n_mmaps_max = mmx;   /* reset mmap */
+-#if MALLOC_DEBUG
+-  mp_.n_mmaps_cmax = mmx;
+-#endif
+   if (mem == 0)
+     return 0;
+ 
+@@ -5725,17 +5710,8 @@
+       res = 0;
+     else
+ #endif
+-      {
+-#if MALLOC_DEBUG
+-	if (mp_.n_mmaps <= value)
+-	  mp_.n_mmaps_cmax = value;
+-	else
+-	  mp_.n_mmaps_cmax = mp_.n_mmaps;
+-#endif
+-
+-	mp_.n_mmaps_max = value;
+-	mp_.no_dyn_threshold = 1;
+-      }
++      mp_.n_mmaps_max = value;
++      mp_.no_dyn_threshold = 1;
+     break;
+ 
+   case M_CHECK_ACTION:
+Index: mcheck.c
+===================================================================
+RCS file: /cvs/glibc/libc/malloc/mcheck.c,v
+retrieving revision 1.18
+retrieving revision 1.20
+diff -u -r1.18 -r1.20
+--- glibc/malloc/mcheck.c	8 Sep 2004 20:36:02 -0000	1.18
++++ glibc/malloc/mcheck.c	19 May 2007 04:27:20 -0000	1.20
+@@ -1,5 +1,5 @@
+ /* Standard debugging hooks for `malloc'.
+-   Copyright (C) 1990-1997,99,2000,01,02 Free Software Foundation, Inc.
++   Copyright (C) 1990-1997,1999,2000-2002,2007 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Written May 1989 by Mike Haertel.
+ 
+@@ -264,6 +264,12 @@
+ static __ptr_t
+ reallochook (__ptr_t ptr, __malloc_size_t size, const __ptr_t caller)
+ {
++  if (size == 0)
++    {
++      freehook (ptr, caller);
++      return NULL;
++    }
++
+   struct hdr *hdr;
+   __malloc_size_t osize;
+ 
================================================================


More information about the pld-cvs-commit mailing list