cvs: ZendEngine2 / zend_gc.c
[email protected] ("Dmitry Stogov")
| Newsgroups | php.zend-engine.cvs |
|---|---|
| Message-ID | <cvsdmitry1203500765@cvsserver> |
dmitry Wed Feb 20 09:46:05 2008 UTC
Modified files:
/ZendEngine2 zend_gc.c
Log:
Added checks for destoied objects
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_gc.c?r1=1.5&r2=1.6&diff_format=u
Index: ZendEngine2/zend_gc.c
diff -u ZendEngine2/zend_gc.c:1.5 ZendEngine2/zend_gc.c:1.6
--- ZendEngine2/zend_gc.c:1.5 Tue Feb 19 15:56:09 2008
+++ ZendEngine2/zend_gc.c Wed Feb 20 09:46:05 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_gc.c,v 1.5 2008/02/19 15:56:09 dmitry Exp $ */
+/* $Id: zend_gc.c,v 1.6 2008/02/20 09:46:05 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);
}
}