rendered paste body--- zend_alloc.c.orig 2006-11-13 11:30:56.000000000 +0000+++ zend_alloc.c 2006-11-16 15:08:36.811910300 +0000@@ -381,18 +381,19 @@ #define ZEND_MM_ALIGNED_SIZE(size) ((size + ZEND_MM_ALIGNMENT - 1) & ZEND_MM_ALIGNMENT_MASK) #define ZEND_MM_ALIGNED_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_block)) #define ZEND_MM_ALIGNED_FREE_HEADER_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_free_block))-#define ZEND_MM_ALIGNED_MIN_HEADER_SIZE (sizeof(zend_mm_block)+END_MAGIC_SIZE>sizeof(zend_mm_free_block)?ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_block)+END_MAGIC_SIZE):ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_free_block)))+#define ZEND_MM_MIN_ALLOC_BLOCK_SIZE ZEND_MM_ALIGNED_SIZE(ZEND_MM_ALIGNED_HEADER_SIZE + END_MAGIC_SIZE)+#define ZEND_MM_ALIGNED_MIN_FREE_SIZE ((ZEND_MM_MIN_ALLOC_BLOCK_SIZE > ZEND_MM_ALIGNED_FREE_HEADER_SIZE)?(ZEND_MM_MIN_ALLOC_BLOCK_SIZE):(ZEND_MM_ALIGNED_FREE_HEADER_SIZE)) #define ZEND_MM_ALIGNED_SEGMENT_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_segment)) -#define ZEND_MM_MIN_SIZE (ZEND_MM_ALIGNED_MIN_HEADER_SIZE-(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))+#define ZEND_MM_MIN_SIZE (ZEND_MM_ALIGNED_MIN_FREE_SIZE-(ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)) -#define ZEND_MM_MAX_SMALL_SIZE (((ZEND_MM_NUM_BUCKETS-1)<<ZEND_MM_ALIGNMENT_LOG2)+ZEND_MM_ALIGNED_MIN_HEADER_SIZE)+#define ZEND_MM_MAX_SMALL_SIZE (((ZEND_MM_NUM_BUCKETS-2)<<ZEND_MM_ALIGNMENT_LOG2)+ZEND_MM_ALIGNED_MIN_FREE_SIZE) -#define ZEND_MM_TRUE_SIZE(size) (((long)size<(long)ZEND_MM_MIN_SIZE)?(ZEND_MM_ALIGNED_MIN_HEADER_SIZE):(ZEND_MM_ALIGNED_SIZE(size+ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE)))+#define ZEND_MM_TRUE_SIZE(size) (((long)size<(long)ZEND_MM_MIN_SIZE)?(ZEND_MM_ALIGNED_MIN_FREE_SIZE):(ZEND_MM_ALIGNED_SIZE(size+ZEND_MM_ALIGNED_HEADER_SIZE+END_MAGIC_SIZE))) -#define ZEND_MM_BUCKET_INDEX(true_size) ((true_size>>ZEND_MM_ALIGNMENT_LOG2)-(ZEND_MM_ALIGNED_MIN_HEADER_SIZE>>ZEND_MM_ALIGNMENT_LOG2)+1)+#define ZEND_MM_BUCKET_INDEX(true_size) ((true_size>>ZEND_MM_ALIGNMENT_LOG2)-(ZEND_MM_ALIGNED_MIN_FREE_SIZE>>ZEND_MM_ALIGNMENT_LOG2)+1) -#define ZEND_MM_SMALL_SIZE(true_size) (true_size < ZEND_MM_MAX_SMALL_SIZE)+#define ZEND_MM_SMALL_SIZE(true_size) (true_size <= ZEND_MM_MAX_SMALL_SIZE) /* Memory calculations */ #define ZEND_MM_BLOCK_AT(blk, offset) ((zend_mm_block *) (((char *) (blk))+(offset)))@@ -584,10 +585,13 @@ zend_mm_heap *heap; #if 0+{+ int i; for (i = 0; i < ZEND_MM_MAX_SMALL_SIZE; i++) { printf("%3d%c: %3ld %d %2ld\n", i, (i == ZEND_MM_MIN_SIZE?'*':' '), (long)ZEND_MM_TRUE_SIZE(i), ZEND_MM_SMALL_SIZE(ZEND_MM_TRUE_SIZE(i)), (long)ZEND_MM_BUCKET_INDEX(ZEND_MM_TRUE_SIZE(i))); } exit(0);+} #endif storage = handlers->init(params);@@ -1163,7 +1167,7 @@ size_t block_size = ZEND_MM_FREE_BLOCK_SIZE(best_fit); size_t remaining_size = block_size - true_size; - if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) {+ if (remaining_size < ZEND_MM_ALIGNED_MIN_FREE_SIZE) { ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, block_size); } else { zend_mm_free_block *new_free_block;@@ -1241,7 +1245,7 @@ ZEND_MM_LAST_BLOCK(ZEND_MM_BLOCK_AT(best_fit, block_size)); - if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) {+ if (remaining_size < ZEND_MM_ALIGNED_MIN_FREE_SIZE) { ZEND_MM_BLOCK(best_fit, ZEND_MM_USED_BLOCK, block_size); } else { zend_mm_free_block *new_free_block;@@ -1399,7 +1403,7 @@ if (true_size <= ZEND_MM_BLOCK_SIZE(mm_block)) { size_t remaining_size = ZEND_MM_BLOCK_SIZE(mm_block) - true_size; - if (remaining_size >= ZEND_MM_ALIGNED_MIN_HEADER_SIZE) {+ if (remaining_size >= ZEND_MM_ALIGNED_MIN_FREE_SIZE) { zend_mm_free_block *new_free_block; HANDLE_BLOCK_INTERRUPTIONS();@@ -1440,7 +1444,7 @@ HANDLE_BLOCK_INTERRUPTIONS(); zend_mm_remove_from_free_list(heap, (zend_mm_free_block *) next_block); - if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) {+ if (remaining_size < ZEND_MM_ALIGNED_MIN_FREE_SIZE) { ZEND_MM_BLOCK(mm_block, ZEND_MM_USED_BLOCK, block_size); } else { zend_mm_free_block *new_free_block;@@ -1540,7 +1544,7 @@ /* setup guard block */ ZEND_MM_LAST_BLOCK(ZEND_MM_BLOCK_AT(mm_block, block_size)); - if (remaining_size < ZEND_MM_ALIGNED_MIN_HEADER_SIZE) {+ if (remaining_size < ZEND_MM_ALIGNED_MIN_FREE_SIZE) { ZEND_MM_BLOCK(mm_block, ZEND_MM_USED_BLOCK, block_size); } else { zend_mm_free_block *new_free_block;