Patch is against CVS HEAD.

Regards,
-- 
Michael
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);

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to