* malloc/malloc.c (_int_malloc): Limit number of unsorted blocks
authorUlrich Drepper <drepper@redhat.com>
Sat, 19 Aug 2006 22:34:27 +0000 (22:34 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 19 Aug 2006 22:34:27 +0000 (22:34 +0000)
to sort in each call.

ChangeLog
malloc/malloc.c

index 9dd545d..4647b9e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2006-08-19  Ulrich Drepper  <drepper@redhat.com>
 
+       * malloc/malloc.c (_int_malloc): Limit number of unsorted blocks
+       to sort in each call.
+
        * nis/nss_nis/nis-service.c (internal_nis_getservent_r): . If map
        is empty simply return and use next service.
        * nis/nss_nis/nis-rpc.c (internal_nis_getrpcent_r): Likewise.
index 890d366..3f4ddcd 100644 (file)
@@ -4055,6 +4055,8 @@ _int_malloc(mstate av, size_t bytes)
 
   for(;;) {
 
+    int iters = 0;
+    bool any_larger = false;
     while ( (victim = unsorted_chunks(av)->bk) != unsorted_chunks(av)) {
       bck = victim->bk;
       if (__builtin_expect (victim->size <= 2 * SIZE_SZ, 0)
@@ -4145,6 +4147,12 @@ _int_malloc(mstate av, size_t bytes)
         }
       }
 
+      if (size >= nb)
+       any_larger = true;
+#define MAX_ITERS      10000
+      if (++iters == MAX_ITERS)
+       break;
+
       mark_bin(av, victim_index);
       victim->bk = bck;
       victim->fd = fwd;