The attached patch fixes zend_llist_remove_tail() which didn't reset 
zend_llist->head properly.
The diff was generated against 5_2.

Regards,
-- 
Michael
Index: Zend/zend_llist.c
===================================================================
RCS file: /repository/ZendEngine2/zend_llist.c,v
retrieving revision 1.35.2.1.2.1
diff -u -p -d -r1.35.2.1.2.1 zend_llist.c
--- Zend/zend_llist.c   1 Jan 2007 09:35:46 -0000       1.35.2.1.2.1
+++ Zend/zend_llist.c   27 Jan 2007 17:31:36 -0000
@@ -130,28 +130,17 @@ ZEND_API void zend_llist_clean(zend_llis
 
 ZEND_API void *zend_llist_remove_tail(zend_llist *l)
 {
-       zend_llist_element *old_tail;
+       zend_llist_element *current = l->tail;
        void *data;
-
-       if ((old_tail = l->tail)) {
-               if (l->tail->prev) {
-                       l->tail->prev->next = NULL;
-               }
-        
-               data = old_tail->data;
-
-               l->tail = l->tail->prev;
-               if (l->dtor) {
-                       l->dtor(data);
-               }
-               pefree(old_tail, l->persistent);
-
-               --l->count;
-
-               return data;
+       
+       if (current) {
+               data = current->data;
+               DEL_LLIST_ELEMENT(current, l);
+       } else {
+               data = NULL;
        }
-
-       return NULL;
+       
+       return data;
 }
 
 

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

Reply via email to