summaryrefslogtreecommitdiff
path: root/Zend/zend_alloc.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-10-13 15:20:17 +0300
committerDmitry Stogov <dmitry@zend.com>2015-10-13 15:20:17 +0300
commitd949c3b6e58632a7aae565c3a0e2930f395eaea9 (patch)
treee516a51650cbf3d51b06bad2cc844f7d4ac9541f /Zend/zend_alloc.c
parentd1b67af3aba1ebe8ecf0dc63f3a15dec1cf7a68a (diff)
downloadphp-git-d949c3b6e58632a7aae565c3a0e2930f395eaea9.tar.gz
Fixed incorrect "peak" memory consumption calculation.
Diffstat (limited to 'Zend/zend_alloc.c')
-rw-r--r--Zend/zend_alloc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index e04dc6ae80..6120efc15c 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -1507,7 +1507,9 @@ static void *zend_mm_realloc_heap(zend_mm_heap *heap, void *ptr, size_t size, si
heap->real_size += new_size - old_size;
#endif
#if ZEND_MM_STAT
+ heap->real_peak = MAX(heap->real_peak, heap->real_size);
heap->size += new_size - old_size;
+ heap->peak = MAX(heap->peak, heap->size);
#endif
#if ZEND_DEBUG
zend_mm_change_huge_block_size(heap, ptr, new_size, real_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
@@ -1618,9 +1620,19 @@ static void *zend_mm_realloc_heap(zend_mm_heap *heap, void *ptr, size_t size, si
}
/* Naive reallocation */
+#if ZEND_MM_STAT
+ do {
+ size_t orig_peak = heap->peak;
+ size_t orig_real_peak = heap->real_peak;
+#endif
ret = zend_mm_alloc_heap(heap, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
memcpy(ret, ptr, MIN(old_size, copy_size));
zend_mm_free_heap(heap, ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
+#if ZEND_MM_STAT
+ heap->peak = MAX(orig_peak, heap->size);
+ heap->real_peak = MAX(orig_real_peak, heap->real_size);
+ } while (0);
+#endif
return ret;
}