@@ -174,7 +174,7 @@ static size_t _real_page_size = ZEND_MM_PAGE_SIZE;
174
174
#ifdef __SANITIZE_ADDRESS__
175
175
# include <sanitizer/asan_interface.h>
176
176
177
- #if 1
177
+ #if 0
178
178
179
179
#define ZEND_MM_POISON_DEBUG (_type , _ptr , _size ) do { \
180
180
fprintf(stderr, "%s %p - %p in %d\n", (_type), (_ptr), (void*) (((size_t)_ptr)+((size_t)_size)), __LINE__); \
@@ -1271,7 +1271,15 @@ static zend_always_inline void zend_mm_delete_chunk(zend_mm_heap *heap, zend_mm_
1271
1271
heap -> last_chunks_delete_count ++ ;
1272
1272
}
1273
1273
}
1274
+
1275
+ if (heap -> cached_chunks ) {
1276
+ ZEND_MM_UNPOISON_CHUNK_HDR (heap -> cached_chunks );
1277
+ }
1278
+
1274
1279
if (!heap -> cached_chunks || chunk -> num > heap -> cached_chunks -> num ) {
1280
+ if (heap -> cached_chunks ) {
1281
+ ZEND_MM_POISON_CHUNK_HDR (heap -> cached_chunks , heap );
1282
+ }
1275
1283
zend_mm_chunk_free (heap , chunk , ZEND_MM_CHUNK_SIZE );
1276
1284
} else {
1277
1285
//TODO: select the best chunk to delete???
@@ -1296,11 +1304,12 @@ static zend_always_inline void zend_mm_free_pages_ex(zend_mm_heap *heap, zend_mm
1296
1304
chunk -> free_tail = page_num ;
1297
1305
}
1298
1306
bool should_free = free_chunk && chunk != heap -> main_chunk && chunk -> free_pages == ZEND_MM_PAGES - ZEND_MM_FIRST_PAGE ;
1299
- ZEND_MM_POISON_CHUNK_HDR (chunk , heap );
1300
1307
ZEND_MM_POISON (ZEND_MM_PAGE_ADDR (chunk , page_num ), pages_count * ZEND_MM_PAGE_SIZE );
1301
1308
1302
1309
if (should_free ) {
1303
1310
zend_mm_delete_chunk (heap , chunk );
1311
+ } else {
1312
+ ZEND_MM_POISON_CHUNK_HDR (chunk , heap );
1304
1313
}
1305
1314
}
1306
1315
0 commit comments