[PHP-CVS] svn: /php/php-src/trunk/Zend/ zend_alloc.c

2012-01-29 Thread Derick Rethans
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

2011-06-02 Thread Ilia Alshanetsky
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

2011-05-31 Thread Dmitry Stogov
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

2010-10-04 Thread Dmitry Stogov
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

2010-10-04 Thread Kalle Sommer Nielsen
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

2010-09-20 Thread Dmitry Stogov
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

2010-09-08 Thread Dmitry Stogov
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

2010-07-07 Thread Dmitry Stogov
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

2009-08-08 Thread Andi Gutmans
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