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)) {
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));
}
}