mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
f1e21c4979
In ZTS the default properties are duplicated (instead of copied), so the array has one lower RC than on NTS and as such gets destroyed during GC, increasing the cycle count by 3. PHP 5.6 didn't always copy default properties on ZTS, which is where the difference comes from.
38 lines
628 B
PHP
38 lines
628 B
PHP
--TEST--
|
|
GC 029: GC and destructors
|
|
--SKIPIF--
|
|
<?php if (!PHP_ZTS) { print "skip only for zts build"; }
|
|
--INI--
|
|
zend.enable_gc=1
|
|
--FILE--
|
|
<?php
|
|
class Foo {
|
|
public $bar;
|
|
public $x = array(1,2,3);
|
|
function __destruct() {
|
|
if ($this->bar !== null) {
|
|
$this->x = null;
|
|
unset($this->bar);
|
|
}
|
|
}
|
|
}
|
|
class Bar {
|
|
public $foo;
|
|
function __destruct() {
|
|
if ($this->foo !== null) {
|
|
unset($this->foo);
|
|
}
|
|
}
|
|
|
|
}
|
|
$foo = new Foo();
|
|
$bar = new Bar();
|
|
$foo->bar = $bar;
|
|
$bar->foo = $foo;
|
|
unset($foo);
|
|
unset($bar);
|
|
var_dump(gc_collect_cycles());
|
|
?>
|
|
--EXPECT--
|
|
int(6)
|