Re: GC issue wrt. to resource <-> object cycles?
| From: | Nikita Popov | Date: | Wed, 10 Aug 2016 10:59:10 +0000 |
| Subject: | Re: GC issue wrt. to resource <-> object cycles? | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-94998@lists.php.net to get a copy of this message | ||
On Wed, Aug 10, 2016 at 12:52 PM, Christoph M. Becker <cmbecker69@gmx.de>
wrote:
> Hi!
>
> I've tried to fix <https://bugs.php.net/72793>, and
> it looks like
> there's a general GC issue wrt. to resources referencing objects and
> vice versa. Aren't resource ZVALS put in the root buffer?
>
> See <https://3v4l.org/JYIQs>, which demonstrates the
> issue better than
> the test script in the bug report. A steady increase of allocated
> memory can be seen, even though gc_collect_cycles() is called. When
> uncommenting
unset($this->parser);, everything is fine (the
> GC
> wouldn't be involved at all in this case).
>
> Wrt. to the PHP 5.6 behavior: this appears fine, but actually it's in
> error, because of
> <https://github.com/php/php-src/commit/72ec2e8f>. Not
> increasing the refcount of parser->object might
> theoretically lead to
> use-after-free scenarios.
>
As you correctly deduced, we currently do not support GC for resources.
This would require introducing something akin to the get_gc handler for
resources.
The simplest way to fix ext/xml in particular is probably to migrate it to
use an object instead of a resource.
Nikita