cvs: ZendEngine2(PHP_5_3) / zend_gc.c

[email protected] ("Dmitry Stogov")
Newsgroups php.zend-engine.cvs
Message-ID <cvsdmitry1203500747@cvsserver>
dmitry		Wed Feb 20 09:45:47 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /ZendEngine2	zend_gc.c 
  Log:
  Added checks for destoied objects
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.c?r1=1.1.2.4&r2=1.1.2.5&diff_format=u
Index: ZendEngine2/zend_gc.c
diff -u ZendEngine2/zend_gc.c:1.1.2.4 ZendEngine2/zend_gc.c:1.1.2.5
--- ZendEngine2/zend_gc.c:1.1.2.4	Tue Feb 19 15:55:57 2008
+++ ZendEngine2/zend_gc.c	Wed Feb 20 09:45:47 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_gc.c,v 1.1.2.4 2008/02/19 15:55:57 dmitry Exp $ */
+/* $Id: zend_gc.c,v 1.1.2.5 2008/02/20 09:45:47 dmitry Exp $ */
 
 #include "zend.h"
 #include "zend_API.h"
@@ -239,7 +239,8 @@
 {
 	GC_SET_BLACK(obj->buffered);
 
-	if (EXPECTED(Z_OBJ_HANDLER_P(pz, get_properties) != NULL)) {
+	if (EXPECTED(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(pz)].valid &&
+	             Z_OBJ_HANDLER_P(pz, get_properties) != NULL)) {
 		zend_hash_apply(Z_OBJPROP_P(pz), (apply_func_t) children_scan_black TSRMLS_CC);
 	}
 }
@@ -278,7 +279,8 @@
 	if (GC_GET_COLOR(obj->buffered) != GC_GREY) {
 		GC_BENCH_INC(zobj_marked_grey);
 		GC_SET_COLOR(obj->buffered, GC_GREY);
-		if (EXPECTED(Z_OBJ_HANDLER_P(pz, get_properties) != NULL)) {
+		if (EXPECTED(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(pz)].valid &&
+		             Z_OBJ_HANDLER_P(pz, get_properties) != NULL)) {
 			zend_hash_apply(Z_OBJPROP_P(pz), (apply_func_t) children_mark_grey TSRMLS_CC);
 		}
 	}
@@ -353,7 +355,8 @@
 				zobj_scan_black(obj, pz TSRMLS_CC);
 			} else {
 				GC_SET_COLOR(obj->buffered, GC_WHITE);
-				if (EXPECTED(Z_OBJ_HANDLER_P(pz, get_properties) != NULL)) {
+				if (EXPECTED(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(pz)].valid &&
+				             Z_OBJ_HANDLER_P(pz, get_properties) != NULL)) {
 					zend_hash_apply(Z_OBJPROP_P(pz), (apply_func_t) children_scan TSRMLS_CC);
 				}
 			}
@@ -417,7 +420,8 @@
 		if (obj->buffered == (gc_root_buffer*)GC_WHITE) {
 			GC_SET_BLACK(obj->buffered);
 
-			if (EXPECTED(Z_OBJ_HANDLER_P(pz, get_properties) != NULL)) {
+			if (EXPECTED(EG(objects_store).object_buckets[Z_OBJ_HANDLE_P(pz)].valid &&
+			             Z_OBJ_HANDLER_P(pz, get_properties) != NULL)) {
 				zend_hash_apply(Z_OBJPROP_P(pz), (apply_func_t) children_collect_white TSRMLS_CC);
 			}
 		}
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.