]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* malloc/malloc.c (do_check_malloc_state): Only require for empty
authorUlrich Drepper <drepper@redhat.com>
Fri, 13 Oct 2006 20:30:12 +0000 (20:30 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 13 Oct 2006 20:30:12 +0000 (20:30 +0000)
bins for large sizes in main arena.

ChangeLog
malloc/malloc.c

index 86f54b4248e4ccee01279d8ecac9e4b43ad75c95..941d2f422313c9c733618bc43c844c16b66dc7b6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2006-10-13  Ulrich Drepper  <drepper@redhat.com>
 
+       * malloc/malloc.c (do_check_malloc_state): Only require for empty
+       bins for large sizes in main arena.
+
        * libio/stdio.h: Add more __wur attributes.
 
        * elf/dl-minimal.c (realloc): Optimize last patch.
index c3855290f73e91472f56e7a1ddcaf05e002bc9e5..e4b693c3425d535c7a9531eaded3d2815ceaabd9 100644 (file)
@@ -2741,8 +2741,19 @@ static void do_check_malloc_state(mstate av)
   for (i = 0; i < NFASTBINS; ++i) {
     p = av->fastbins[i];
 
+    /* The following test can only be performed for the main arena.
+       While mallopt calls malloc_consolidate to get rid of all fast
+       bins (especially those larger than the new maximum) this does
+       only happen for the main arena.  Trying to do this for any
+       other arena would mean those arenas have to be locked and
+       malloc_consolidate be called for them.  This is excessive.  And
+       even if this is acceptable to somebody it still cannot solve
+       the problem completely since if the arena is locked a
+       concurrent malloc call might create a new arena which then
+       could use the newly invalid fast bins.  */
+
     /* all bins past max_fast are empty */
-    if (i > max_fast_bin)
+    if (av == &main_arena && i > max_fast_bin)
       assert(p == 0);
 
     while (p != 0) {