From: Nikita Popov Date: Mon, 26 Aug 2019 15:50:46 +0000 (+0200) Subject: Merge branch 'PHP-7.2' into PHP-7.3 X-Git-Tag: php-7.4.0RC1~38^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=461db524001fbcbd3344a08651f3a64c775967d6;p=php Merge branch 'PHP-7.2' into PHP-7.3 --- 461db524001fbcbd3344a08651f3a64c775967d6 diff --cc Zend/tests/gc_042.phpt index 0000000000,a7c40fe1ff..c8dfc0ef86 mode 000000,100644..100644 --- a/Zend/tests/gc_042.phpt +++ b/Zend/tests/gc_042.phpt @@@ -1,0 -1,26 +1,28 @@@ + --TEST-- + Object properties HT may need to be removed from nested data + --FILE-- + x = new stdClass; + $t->x->t = $t; + $a = (array) $t->x; + unset($t, $a); + gc_collect_cycles(); + var_dump($x); + -// TODO: The destructor *should* be running here, but doesn't. -// This works in PHP >= 7.3 though. - + ?> ---EXPECTF-- -Notice: Undefined variable: x in %s on line %d -NULL ++--EXPECT-- ++object(Test)#1 (1) { ++ ["x"]=> ++ object(stdClass)#2 (1) { ++ ["t"]=> ++ *RECURSION* ++ } ++} diff --cc Zend/zend_gc.c index b6510153f0,1b6d53a83d..3a36a8cc0d --- a/Zend/zend_gc.c +++ b/Zend/zend_gc.c @@@ -1400,6 -1007,10 +1400,10 @@@ tail_call ref = Z_COUNTED_P(zv); goto tail_call; } - if (GC_ADDRESS(GC_INFO(ht)) != 0 && GC_REF_GET_COLOR(ht) == GC_BLACK) { ++ if (GC_REF_ADDRESS(ht) != 0 && GC_REF_CHECK_COLOR(ht, GC_BLACK)) { + GC_TRACE_REF(ht, "removing from buffer"); + GC_REMOVE_FROM_BUFFER(ht); + } } else { return; }