cvs: ZendEngine2(PHP_5_3) / zend_gc.c /tests gc_029.phpt gc_030.phpt php-src NEWS

"Dmitry Stogov" <[email protected]>
Newsgroups gmane.comp.php.cvs.zend
Message-ID <cvsdmitry1215504969@cvsserver>
dmitry		Tue Jul  8 08:16:09 2008 UTC

  Added files:                 (Branch: PHP_5_3)
    /ZendEngine2/tests	gc_030.phpt 

  Modified files:              
    /php-src	NEWS 
    /ZendEngine2	zend_gc.c 
    /ZendEngine2/tests	gc_029.phpt 
  Log:
  Fixed bug #45434 (circular reference causes segfault in gc_collect_cycles())
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.190&r2=1.2027.2.547.2.965.2.191&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.190 php-src/NEWS:1.2027.2.547.2.965.2.191
--- php-src/NEWS:1.2027.2.547.2.965.2.190	Sun Jul  6 15:17:24 2008
+++ php-src/NEWS	Tue Jul  8 08:16:08 2008
@@ -183,6 +183,8 @@
 - Fixed an issue in date() where a : was printed for the O modifier after a P
   modifier was used. (Derick)
 
+- Fixed bug #45434 (circular reference causes segfault in gc_collect_cycles()).
+  (Dmitry)
 - Fixed bug #44769 (declaring private magic methods should throw error). (Felipe)
 - Fixed bug #44913 (Segfault when using return in combination with nested loops
   and continue 2). (Dmitry)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.c?r1=1.1.2.14&r2=1.1.2.15&diff_format=u
Index: ZendEngine2/zend_gc.c
diff -u ZendEngine2/zend_gc.c:1.1.2.14 ZendEngine2/zend_gc.c:1.1.2.15
--- ZendEngine2/zend_gc.c:1.1.2.14	Tue Apr 29 13:50:27 2008
+++ ZendEngine2/zend_gc.c	Tue Jul  8 08:16:08 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_gc.c,v 1.1.2.14 2008/04/29 13:50:27 tony2001 Exp $ */
+/* $Id: zend_gc.c,v 1.1.2.15 2008/07/08 08:16:08 dmitry Exp $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -557,9 +557,9 @@
 					!EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].destructor_called) {
 
 					EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].destructor_called = 1;
-					zend_try {
-						EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].bucket.obj.dtor(EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].bucket.obj.object, Z_OBJ_HANDLE(p->z) TSRMLS_CC);
-					} zend_end_try();
+					EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].bucket.obj.refcount++;
+					EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].bucket.obj.dtor(EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].bucket.obj.object, Z_OBJ_HANDLE(p->z) TSRMLS_CC);
+					EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].bucket.obj.refcount--;
 				}
 			}
 			count++;
@@ -575,19 +575,15 @@
 					EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].valid &&
 					EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].bucket.obj.refcount <= 0) {
 					EG(objects_store).object_buckets[Z_OBJ_HANDLE(p->z)].bucket.obj.refcount = 1;
-					zend_try {
-						Z_TYPE(p->z) = IS_NULL;
-						zend_objects_store_del_ref_by_handle(Z_OBJ_HANDLE(p->z) TSRMLS_CC);
-					} zend_end_try();
+					Z_TYPE(p->z) = IS_NULL;
+					zend_objects_store_del_ref_by_handle(Z_OBJ_HANDLE(p->z) TSRMLS_CC);
 				}
 			} else if (Z_TYPE(p->z) == IS_ARRAY) {
 				Z_TYPE(p->z) = IS_NULL;
 				zend_hash_destroy(Z_ARRVAL(p->z));
 				FREE_HASHTABLE(Z_ARRVAL(p->z));
 			} else {
-				zend_try {
-					zval_dtor(&p->z);
-				} zend_end_try();
+				zval_dtor(&p->z);
 				Z_TYPE(p->z) = IS_NULL;
 			}
 			p = GC_G(next_to_free);
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_029.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u
Index: ZendEngine2/tests/gc_029.phpt
diff -u ZendEngine2/tests/gc_029.phpt:1.1.2.1 ZendEngine2/tests/gc_029.phpt:1.1.2.2
--- ZendEngine2/tests/gc_029.phpt:1.1.2.1	Fri Mar 14 18:36:34 2008
+++ ZendEngine2/tests/gc_029.phpt	Tue Jul  8 08:16:09 2008
@@ -1,5 +1,5 @@
 --TEST--
-GC 028: GC and destructors
+GC 029: GC and destructors
 --FILE--
 <?php
 class Foo {

http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/gc_030.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/gc_030.phpt
+++ ZendEngine2/tests/gc_030.phpt



-- 
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.