rrichards Tue Feb 17 14:57:49 2004 EDT Modified files: /php-src/ext/dom php_dom.c Log: add dtor to cleanup iterator related data http://cvs.php.net/diff.php/php-src/ext/dom/php_dom.c?r1=1.53&r2=1.54&ty=u Index: php-src/ext/dom/php_dom.c diff -u php-src/ext/dom/php_dom.c:1.53 php-src/ext/dom/php_dom.c:1.54 --- php-src/ext/dom/php_dom.c:1.53 Tue Feb 17 06:13:47 2004 +++ php-src/ext/dom/php_dom.c Tue Feb 17 14:57:48 2004 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_dom.c,v 1.53 2004/02/17 11:13:47 rrichards Exp $ */ +/* $Id: php_dom.c,v 1.54 2004/02/17 19:57:48 rrichards Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -879,14 +879,15 @@ /* }}} */ #endif -void dom_nnodemap_objects_free_storage(void *object TSRMLS_DC) +static void dom_nnodemap_object_dtor(void *object, zend_object_handle handle TSRMLS_DC) { - dom_nnodemap_object *objmap; zval *baseobj; - dom_object *intern = (dom_object *)object; + dom_object *intern; + dom_nnodemap_object *objmap; - php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC); + intern = (dom_object *)object; objmap = (dom_nnodemap_object *)intern->ptr; + if (objmap) { if (objmap->local) { xmlFree(objmap->local); @@ -899,8 +900,18 @@ zval_ptr_dtor((zval **)&baseobj); } efree(objmap); + intern->ptr = NULL; } + +} + +void dom_nnodemap_objects_free_storage(void *object TSRMLS_DC) +{ + dom_object *intern = (dom_object *)object; + + php_libxml_decrement_doc_ref((php_libxml_node_object *)intern TSRMLS_CC); + zend_hash_destroy(intern->std.properties); FREE_HASHTABLE(intern->std.properties); @@ -923,7 +934,7 @@ objmap->local = NULL; objmap->ns = NULL; - retval.handle = zend_objects_store_put(intern, NULL, (zend_objects_free_object_storage_t)dom_nnodemap_objects_free_storage, dom_objects_clone TSRMLS_CC); + retval.handle = zend_objects_store_put(intern, dom_nnodemap_object_dtor, (zend_objects_free_object_storage_t)dom_nnodemap_objects_free_storage, dom_objects_clone TSRMLS_CC); intern->handle = retval.handle; retval.handlers = &dom_object_handlers;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php