From: Dmitry Stogov Date: Wed, 20 Feb 2008 09:46:05 +0000 (+0000) Subject: Added checks for destoied objects X-Git-Tag: RELEASE_2_0_0a1~420 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=41fc9ece97c14fca7f5f6c5b442337648243dd20;p=php Added checks for destoied objects --- diff --git a/Zend/zend_gc.c b/Zend/zend_gc.c index 3cdf3829d6..07ced9c6a6 100644 --- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@ -239,7 +239,8 @@ static void zobj_scan_black(struct _store_object *obj, zval *pz TSRMLS_DC) { 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 @@ static void zobj_mark_grey(struct _store_object *obj, zval *pz TSRMLS_DC) 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 @@ static void zobj_scan(zval *pz TSRMLS_DC) 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 @@ static void zobj_collect_white(zval *pz TSRMLS_DC) 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); } }