[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
derick Sun, 29 Jan 2012 11:17:07 + Revision: http://svn.php.net/viewvc?view=revisionrevision=322921 Log: CS fixes. Changed paths: U php/php-src/trunk/Zend/zend_alloc.c Modified: php/php-src/trunk/Zend/zend_alloc.c === --- php/php-src/trunk/Zend/zend_alloc.c 2012-01-29 09:20:28 UTC (rev 322920) +++ php/php-src/trunk/Zend/zend_alloc.c 2012-01-29 11:17:07 UTC (rev 322921) @@ -1882,7 +1882,7 @@ size_t segment_size; zend_mm_segment *segment; int keep_rest = 0; -#ifdef ZEND_SIGNALS +#ifdef ZEND_SIGNALS TSRMLS_FETCH(); #endif @@ -2058,7 +2058,7 @@ zend_mm_block *mm_block; zend_mm_block *next_block; size_t size; -#ifdef ZEND_SIGNALS +#ifdef ZEND_SIGNALS TSRMLS_FETCH(); #endif if (!ZEND_MM_VALID_PTR(p)) { @@ -2548,7 +2548,7 @@ ZEND_API void *_ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { void *p; -#ifdef ZEND_SIGNALS +#ifdef ZEND_SIGNALS TSRMLS_FETCH(); #endif HANDLE_BLOCK_INTERRUPTIONS(); @@ -2567,7 +2567,7 @@ { int length; char *p; -#ifdef ZEND_SIGNALS +#ifdef ZEND_SIGNALS TSRMLS_FETCH(); #endif @@ -2587,7 +2587,7 @@ ZEND_API char *_estrndup(const char *s, uint length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { char *p; -#ifdef ZEND_SIGNALS +#ifdef ZEND_SIGNALS TSRMLS_FETCH(); #endif @@ -2608,7 +2608,7 @@ ZEND_API char *zend_strndup(const char *s, uint length) { char *p; -#ifdef ZEND_SIGNALS +#ifdef ZEND_SIGNALS TSRMLS_FETCH(); #endif -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
iliaaThu, 02 Jun 2011 21:38:54 + Revision: http://svn.php.net/viewvc?view=revisionrevision=311741 Log: Missing ifdef related to the previous patch Changed paths: U php/php-src/trunk/Zend/zend_alloc.c Modified: php/php-src/trunk/Zend/zend_alloc.c === --- php/php-src/trunk/Zend/zend_alloc.c 2011-06-02 21:16:50 UTC (rev 311740) +++ php/php-src/trunk/Zend/zend_alloc.c 2011-06-02 21:38:54 UTC (rev 311741) @@ -2123,8 +2123,9 @@ size_t true_size; size_t orig_size; void *ptr; +#ifdef ZEND_SIGNALS TSRMLS_FETCH(); - +#endif if (UNEXPECTED(!p) || !ZEND_MM_VALID_PTR(p)) { return _zend_mm_alloc_int(heap, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
dmitry Tue, 31 May 2011 08:26:53 + Revision: http://svn.php.net/viewvc?view=revisionrevision=311627 Log: Fixed bug #54957 (Memleak in alloc_globals_ctor) Bug: http://bugs.php.net/54957 (Assigned) Memleak in alloc_globals_ctor Changed paths: U php/php-src/trunk/Zend/zend_alloc.c Modified: php/php-src/trunk/Zend/zend_alloc.c === --- php/php-src/trunk/Zend/zend_alloc.c 2011-05-31 08:19:14 UTC (rev 311626) +++ php/php-src/trunk/Zend/zend_alloc.c 2011-05-31 08:26:53 UTC (rev 311627) @@ -1602,6 +1602,9 @@ int internal; if (!heap-use_zend_alloc) { + if (full_shutdown) { + free(heap); + } return; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
dmitry Mon, 04 Oct 2010 15:50:47 + Revision: http://svn.php.net/viewvc?view=revisionrevision=304031 Log: Bug #51155 (Unreasonable non-emalloc allocations of memory) Bug: http://bugs.php.net/51155 (Assigned) Unreasonable non-emalloc allocations of memory Changed paths: U php/php-src/trunk/Zend/zend_alloc.c Modified: php/php-src/trunk/Zend/zend_alloc.c === --- php/php-src/trunk/Zend/zend_alloc.c 2010-10-04 15:33:09 UTC (rev 304030) +++ php/php-src/trunk/Zend/zend_alloc.c 2010-10-04 15:50:47 UTC (rev 304031) @@ -435,6 +435,7 @@ zend_mm_free_block *free_buckets[ZEND_MM_NUM_BUCKETS*2]; zend_mm_free_block *large_free_buckets[ZEND_MM_NUM_BUCKETS]; zend_mm_free_block *rest_buckets[2]; + int rest_count; #if ZEND_MM_CACHE_STAT struct { int count; @@ -455,6 +456,10 @@ sizeof(zend_mm_free_block*) * 2 - \ sizeof(zend_mm_small_free_block)) +#define ZEND_MM_REST_BLOCK ((zend_mm_free_block*)(zend_uintptr_t)(1)) + +#define ZEND_MM_MAX_REST_BLOCKS 16 + #if ZEND_MM_COOKIES static unsigned int _zend_mm_cookie = 0; @@ -711,23 +716,6 @@ #endif } -static inline void zend_mm_add_to_rest_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) -{ - zend_mm_free_block *prev, *next; - - ZEND_MM_SET_MAGIC(mm_block, MEM_BLOCK_FREED); - - if (!ZEND_MM_SMALL_SIZE(ZEND_MM_FREE_BLOCK_SIZE(mm_block))) { - mm_block-parent = NULL; - } - - prev = heap-rest_buckets[0]; - next = prev-next_free_block; - mm_block-prev_free_block = prev; - mm_block-next_free_block = next; - prev-next_free_block = next-prev_free_block = mm_block; -} - static inline void zend_mm_add_to_free_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) { size_t size; @@ -854,12 +842,45 @@ heap-free_bitmap = ~(ZEND_MM_LONG_CONST(1) index); } } + } else if (UNEXPECTED(mm_block-parent == ZEND_MM_REST_BLOCK)) { + heap-rest_count--; } else if (UNEXPECTED(mm_block-parent != NULL)) { goto subst_block; } } } +static inline void zend_mm_add_to_rest_list(zend_mm_heap *heap, zend_mm_free_block *mm_block) +{ + zend_mm_free_block *prev, *next; + + while (heap-rest_count = ZEND_MM_MAX_REST_BLOCKS) { + zend_mm_free_block *p = heap-rest_buckets[1]; + + if (!ZEND_MM_SMALL_SIZE(ZEND_MM_FREE_BLOCK_SIZE(p))) { + heap-rest_count--; + } + prev = p-prev_free_block; + next = p-next_free_block; + prev-next_free_block = next; + next-prev_free_block = prev; + zend_mm_add_to_free_list(heap, p); + } + + if (!ZEND_MM_SMALL_SIZE(ZEND_MM_FREE_BLOCK_SIZE(mm_block))) { + mm_block-parent = ZEND_MM_REST_BLOCK; + heap-rest_count++; + } + + ZEND_MM_SET_MAGIC(mm_block, MEM_BLOCK_FREED); + + prev = heap-rest_buckets[0]; + next = prev-next_free_block; + mm_block-prev_free_block = prev; + mm_block-next_free_block = next; + prev-next_free_block = next-prev_free_block = mm_block; +} + static inline void zend_mm_init(zend_mm_heap *heap) { zend_mm_free_block* p; @@ -884,6 +905,7 @@ heap-large_free_buckets[i] = NULL; } heap-rest_buckets[0] = heap-rest_buckets[1] = ZEND_MM_REST_BUCKET(heap); + heap-rest_count = 0; } static void zend_mm_del_segment(zend_mm_heap *heap, zend_mm_segment *segment) @@ -1116,6 +1138,7 @@ } } mm_heap-rest_buckets[0] = mm_heap-rest_buckets[1] = ZEND_MM_REST_BUCKET(mm_heap); + mm_heap-rest_count = 0; free(heap); heap = mm_heap; @@ -1674,8 +1697,13 @@ storage-handlers-compact(storage); } zend_mm_init(heap); - heap-real_size = 0; - heap-real_peak = 0; + if (heap-segments_list) { + heap-real_size = heap-segments_list-size; + heap-real_peak = heap-segments_list-size; + } else { + heap-real_size = 0; + heap-real_peak = 0; + } heap-size = 0; heap-peak = 0; if (heap-segments_list) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
Hi Dmitry 2010/10/4 Dmitry Stogov dmi...@php.net: dmitry Mon, 04 Oct 2010 15:50:47 + Revision: http://svn.php.net/viewvc?view=revisionrevision=304031 Log: Bug #51155 (Unreasonable non-emalloc allocations of memory) This commit causes these new warnings to appear from zend_alloc.c: Zend\zend_alloc.c(845) : warning C4047: '==' : '_zend_mm_free_block **' differs in levels of indirection from 'zend_mm_free_block *' Zend\zend_alloc.c(871) : warning C4047: '=' : '_zend_mm_free_block **' differs in levels of indirection from 'zend_mm_free_block *' -- regards, Kalle Sommer Nielsen ka...@php.net -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
dmitry Mon, 20 Sep 2010 12:12:42 + Revision: http://svn.php.net/viewvc?view=revisionrevision=303619 Log: Fixed bug #52888 (Zend MM shutdown crash) Bug: http://bugs.php.net/52888 (Assigned) Zend MM shutdown crash Changed paths: U php/php-src/trunk/Zend/zend_alloc.c Modified: php/php-src/trunk/Zend/zend_alloc.c === --- php/php-src/trunk/Zend/zend_alloc.c 2010-09-20 11:17:05 UTC (rev 303618) +++ php/php-src/trunk/Zend/zend_alloc.c 2010-09-20 12:12:42 UTC (rev 303619) @@ -1649,6 +1649,7 @@ } } else { if (segment) { +#ifndef ZEND_WIN32 if (heap-reserve_size) { while (segment-next_segment) { prev = segment; @@ -1657,13 +1658,16 @@ } heap-segments_list = segment; } else { +#endif do { prev = segment; segment = segment-next_segment; ZEND_MM_STORAGE_FREE(prev); } while (segment); heap-segments_list = NULL; +#ifndef ZEND_WIN32 } +#endif } if (heap-compact_size heap-real_peak heap-compact_size) { -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
dmitry Wed, 08 Sep 2010 07:52:49 + Revision: http://svn.php.net/viewvc?view=revisionrevision=303162 Log: We don't need to preallocate a memory segment in case we don't use zend memory manager Changed paths: U php/php-src/trunk/Zend/zend_alloc.c Modified: php/php-src/trunk/Zend/zend_alloc.c === --- php/php-src/trunk/Zend/zend_alloc.c 2010-09-08 05:40:42 UTC (rev 303161) +++ php/php-src/trunk/Zend/zend_alloc.c 2010-09-08 07:52:49 UTC (rev 303162) @@ -1568,6 +1568,10 @@ zend_mm_segment *prev; int internal; + if (!heap-use_zend_alloc) { + return; + } + if (heap-reserve) { #if ZEND_DEBUG if (!silent) { @@ -2581,17 +2585,17 @@ static void alloc_globals_ctor(zend_alloc_globals *alloc_globals TSRMLS_DC) { - char *tmp; - alloc_globals-mm_heap = zend_mm_startup(); + char *tmp = getenv(USE_ZEND_ALLOC); - tmp = getenv(USE_ZEND_ALLOC); - if (tmp) { - alloc_globals-mm_heap-use_zend_alloc = zend_atoi(tmp, 0); - if (!alloc_globals-mm_heap-use_zend_alloc) { - alloc_globals-mm_heap-_malloc = malloc; - alloc_globals-mm_heap-_free = free; - alloc_globals-mm_heap-_realloc = realloc; - } + if (tmp !zend_atoi(tmp, 0)) { + alloc_globals-mm_heap = malloc(sizeof(struct _zend_mm_heap)); + memset(alloc_globals-mm_heap, 0, sizeof(struct _zend_mm_heap)); + alloc_globals-mm_heap-use_zend_alloc = 0; + alloc_globals-mm_heap-_malloc = malloc; + alloc_globals-mm_heap-_free = free; + alloc_globals-mm_heap-_realloc = realloc; + } else { + alloc_globals-mm_heap = zend_mm_startup(); } } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
dmitry Wed, 07 Jul 2010 10:34:50 + Revision: http://svn.php.net/viewvc?view=revisionrevision=301040 Log: Reused single segment between requests. Saved one malloc/free for each request. Changed paths: U php/php-src/trunk/Zend/zend_alloc.c Modified: php/php-src/trunk/Zend/zend_alloc.c === --- php/php-src/trunk/Zend/zend_alloc.c 2010-07-07 10:30:17 UTC (rev 301039) +++ php/php-src/trunk/Zend/zend_alloc.c 2010-07-07 10:34:50 UTC (rev 301040) @@ -1632,27 +1632,54 @@ internal = heap-internal; storage = heap-storage; segment = heap-segments_list; - while (segment) { - prev = segment; - segment = segment-next_segment; - ZEND_MM_STORAGE_FREE(prev); - } if (full_shutdown) { + while (segment) { + prev = segment; + segment = segment-next_segment; + ZEND_MM_STORAGE_FREE(prev); + } + heap-segments_list = NULL; storage-handlers-dtor(storage); if (!internal) { free(heap); } } else { + if (segment) { + if (heap-reserve_size) { + while (segment-next_segment) { + prev = segment; + segment = segment-next_segment; + ZEND_MM_STORAGE_FREE(prev); + } + heap-segments_list = segment; + } else { + do { + prev = segment; + segment = segment-next_segment; + ZEND_MM_STORAGE_FREE(prev); + } while (segment); + heap-segments_list = NULL; + } + } if (heap-compact_size heap-real_peak heap-compact_size) { storage-handlers-compact(storage); } - heap-segments_list = NULL; zend_mm_init(heap); heap-real_size = 0; heap-real_peak = 0; heap-size = 0; heap-peak = 0; + if (heap-segments_list) { + /* mark segment as a free block */ + zend_mm_free_block *b = (zend_mm_free_block*)((char*)heap-segments_list + ZEND_MM_ALIGNED_SEGMENT_SIZE); + size_t block_size = heap-segments_list-size - ZEND_MM_ALIGNED_SEGMENT_SIZE - ZEND_MM_ALIGNED_HEADER_SIZE; + + ZEND_MM_MARK_FIRST_BLOCK(b); + ZEND_MM_LAST_BLOCK(ZEND_MM_BLOCK_AT(b, block_size)); + ZEND_MM_BLOCK(b, ZEND_MM_FREE_BLOCK, block_size); + zend_mm_add_to_free_list(heap, b); + } if (heap-reserve_size) { heap-reserve = _zend_mm_alloc_int(heap, heap-reserve_size ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC); } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c
andi Sun, 09 Aug 2009 04:46:02 + Revision: http://svn.php.net/viewvc?view=revisionrevision=286940 Log: - Optimize slightly for common case - n!=4 Changed paths: U php/php-src/trunk/Zend/zend_alloc.c Modified: php/php-src/trunk/Zend/zend_alloc.c === --- php/php-src/trunk/Zend/zend_alloc.c 2009-08-09 04:22:00 UTC (rev 286939) +++ php/php-src/trunk/Zend/zend_alloc.c 2009-08-09 04:46:02 UTC (rev 286940) @@ -730,12 +730,14 @@ unsigned int n; unsigned int index = 0; - do { - n = offset[_size 15]; + n = offset[_size 15]; + while (n == 4) { _size = 4; index += n; - } while (n == 4); - return index; + n = offset[_size 15]; + } + + return index + n; #endif } /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php