Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:27905 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 20182 invoked by uid 1010); 8 Feb 2007 11:31:33 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 20167 invoked from network); 8 Feb 2007 11:31:33 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 8 Feb 2007 11:31:33 -0000 X-Host-Fingerprint: 80.123.98.46 unknown Received: from [80.123.98.46] ([80.123.98.46:22609] helo=localhost.localdomain) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 5F/3D-26753-41A0BC54 for ; Thu, 08 Feb 2007 06:31:32 -0500 Message-ID: <5F.3D.26753.41A0BC54@pb1.pair.com> To: internals@lists.php.net Date: Thu, 08 Feb 2007 12:31:37 +0100 User-Agent: Thunderbird 1.5.0.9 (X11/20070103) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020305000106090801020801" X-Posted-By: 80.123.98.46 Subject: [PATCH] persistence for zend_stack From: mike@php.net (Michael Wallner) --------------020305000106090801020801 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Patch is against CVS HEAD. Regards, -- Michael --------------020305000106090801020801 Content-Type: text/plain; name="zend_stack_persistence.diff.txt" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="zend_stack_persistence.diff.txt" Index: Zend/zend_stack.c =================================================================== RCS file: /repository/ZendEngine2/zend_stack.c,v retrieving revision 1.19 diff -u -p -d -r1.19 zend_stack.c --- Zend/zend_stack.c 1 Jan 2007 09:29:21 -0000 1.19 +++ Zend/zend_stack.c 6 Feb 2007 12:55:41 -0000 @@ -24,8 +24,13 @@ ZEND_API int zend_stack_init(zend_stack *stack) { + return zend_stack_init_ex(stack, 0); +} + +ZEND_API int zend_stack_init_ex(zend_stack *stack, int persistent) +{ stack->top = 0; - stack->elements = (void **) emalloc(sizeof(void **) * STACK_BLOCK_SIZE); + stack->elements = (void **) pemalloc(sizeof(void **) * STACK_BLOCK_SIZE, stack->persistent = persistent); if (!stack->elements) { return FAILURE; } else { @@ -37,11 +42,11 @@ ZEND_API int zend_stack_init(zend_stack ZEND_API int zend_stack_push(zend_stack *stack, void *element, int size) { if (stack->top >= stack->max) { /* we need to allocate more memory */ - stack->elements = (void **) erealloc(stack->elements, - (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE))); - if (!stack->elements) { + void *elements = perealloc(stack->elements, (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE)), stack->persistent); + if (!elements) { return FAILURE; } + stack->elements = elements; } stack->elements[stack->top] = (void *) emalloc(size); memcpy(stack->elements[stack->top], element, size); @@ -64,7 +69,7 @@ ZEND_API int zend_stack_top(zend_stack * ZEND_API int zend_stack_del_top(zend_stack *stack) { if (stack->top > 0) { - efree(stack->elements[--stack->top]); + pefree(stack->elements[--stack->top], stack->persistent); } return SUCCESS; } @@ -97,11 +102,11 @@ ZEND_API int zend_stack_destroy(zend_sta register int i; for (i = 0; i < stack->top; i++) { - efree(stack->elements[i]); + pefree(stack->elements[i], stack->persistent); } if (stack->elements) { - efree(stack->elements); + pefree(stack->elements, stack->persistent); } return SUCCESS; } Index: Zend/zend_stack.h =================================================================== RCS file: /repository/ZendEngine2/zend_stack.h,v retrieving revision 1.22 diff -u -p -d -r1.22 zend_stack.h --- Zend/zend_stack.h 1 Jan 2007 09:29:21 -0000 1.22 +++ Zend/zend_stack.h 6 Feb 2007 12:55:42 -0000 @@ -25,6 +25,7 @@ typedef struct _zend_stack { int top, max; void **elements; + unsigned persistent:1; } zend_stack; @@ -32,6 +33,7 @@ typedef struct _zend_stack { BEGIN_EXTERN_C() ZEND_API int zend_stack_init(zend_stack *stack); +ZEND_API int zend_stack_init_ex(zend_stack *stack, int persistent); ZEND_API int zend_stack_push(zend_stack *stack, void *element, int size); ZEND_API int zend_stack_top(zend_stack *stack, void **element); ZEND_API int zend_stack_del_top(zend_stack *stack); --------------020305000106090801020801--