summary refs log tree commit diff
path: root/malloc
diff options
context:
space:
mode:
Diffstat (limited to 'malloc')
-rw-r--r--malloc/malloc.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 890d3669e2..3f4ddcd7f7 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -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;