]> granicus.if.org Git - php/commitdiff
Fixed ASSERTION
authorXinchen Hui <laruence@php.net>
Fri, 23 Jan 2015 06:18:56 +0000 (14:18 +0800)
committerXinchen Hui <laruence@php.net>
Fri, 23 Jan 2015 06:18:56 +0000 (14:18 +0800)
Zend/zend_gc.c
Zend/zend_gc.h

index 966b615b60c5822b55a58b642603104151b0f44a..ea8c06f2ceb0512f55acd1aff14e5fb38d53b36f 100644 (file)
@@ -137,11 +137,7 @@ ZEND_API void gc_init(void)
 
 ZEND_API void gc_possible_root(zend_refcounted *ref)
 {
-       if (GC_TYPE(ref) == IS_NULL) {
-               return;
-       }
-
-       ZEND_ASSERT(GC_TYPE(ref) == IS_ARRAY || GC_TYPE(ref) == IS_OBJECT);
+       ZEND_ASSERT(CG(unclean_shutdown) || (GC_TYPE(ref) == IS_ARRAY || GC_TYPE(ref) == IS_OBJECT));
        GC_BENCH_INC(zval_possible_root);
 
        if (EXPECTED(GC_GET_COLOR(GC_INFO(ref)) == GC_BLACK)) {
index 80425fc7ec26a3d9c1b84b3724d9c33b54557a4e..40c9db7565a99320f6b80a1484c078a2bdbd956a 100644 (file)
@@ -141,7 +141,7 @@ END_EXTERN_C()
 static zend_always_inline void gc_check_possible_root(zval *z)
 {
        ZVAL_DEREF(z);
-       if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z))) {
+       if (Z_COLLECTABLE_P(z) && UNEXPECTED(!Z_GC_INFO_P(z)) && EXPECTED(GC_TYPE(Z_COUNTED_P(z)) != IS_NULL)) {
                gc_possible_root(Z_COUNTED_P(z));
        }
 }