summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_alloc.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 7ab91d810d..aa4f90cc59 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -666,6 +666,15 @@ static long zend_mm_find_leaks(zend_mm_segment *segment, zend_mm_block *b)
p = ZEND_MM_NEXT_BLOCK(b);
while (1) {
+ if (ZEND_MM_IS_GUARD_BLOCK(p)) {
+ ZEND_MM_CHECK_MAGIC(p, MEM_BLOCK_GUARD);
+ segment = segment->next_segment;
+ if (!segment) {
+ break;
+ }
+ p = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE);
+ continue;
+ }
q = ZEND_MM_NEXT_BLOCK(p);
if (q <= p ||
(char*)q > (char*)segment + segment->size ||
@@ -686,14 +695,6 @@ static long zend_mm_find_leaks(zend_mm_segment *segment, zend_mm_block *b)
zend_mm_panic("zend_mm_heap corrupted");
}
}
- if (ZEND_MM_IS_GUARD_BLOCK(q)) {
- ZEND_MM_CHECK_MAGIC(q, MEM_BLOCK_GUARD);
- segment = segment->next_segment;
- if (!segment) {
- break;
- }
- q = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE);
- }
p = q;
}
return leaks;