php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #65374 Circular references on callbacks can't be resolved by GC
Submitted: 2013-08-02 02:25 UTC Modified: 2017-10-24 04:44 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: bugs dot php dot net at ss dot chernousov dot net Assigned:
Status: Suspended Package: libevent (PECL)
PHP Version: 5.5.1 OS: Gentoo Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: bugs dot php dot net at ss dot chernousov dot net
New email:
PHP Version: OS:

 

 [2013-08-02 02:25 UTC] bugs dot php dot net at ss dot chernousov dot net
Description:
------------
If an event's a callback is a method of the object, which holds a reference to 
this event, the object leaks after both the event and the object have been 
nulled.

The test script performs 3 tests:
 - test 1 holds the event as a global variable, and the callback object is 
released as expected;
 - test 2 holds the event as a property of another object, and the callback 
object is released as expected;
 - test 3 holds the event as a property of the same object, which is used for the 
callback, and the object does not get released.

I guess the event leaks too, but I didn't check.

I'm not sure if it's pecl-libevent's or PHP Garbage Collector's bug, but I 
suppose that behaviour is not something one should expect.

The workaround is to explicitly break the reference from the object to the event.


Test script:
---------------
https://gist.github.com/5lava/62629f3d66c9124d2877

Expected result:
----------------
destruct 1
==== THE END of test 1 ====
destruct 3
destruct 2
==== THE END of test 2 ====
destruct 4
==== THE END of test 3 ====


Actual result:
--------------
destruct 1
==== THE END of test 1 ====
destruct 3
destruct 2
==== THE END of test 2 ====
==== THE END of test 3 ====
destruct 4


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2013-08-05 19:49 UTC] krakjoe@php.net
-Assigned To: +Assigned To: osmanov
 [2013-08-06 11:55 UTC] osmanov@php.net
-Assigned To: osmanov +Assigned To: tony2001
 [2013-08-06 11:55 UTC] osmanov@php.net
The test script refers to "libevent" extension. Mine is "event". However, "event" 
ext. has similar bug, too.
 [2017-10-24 04:44 UTC] kalle@php.net
-Status: Assigned +Status: Suspended -Assigned To: tony2001 +Assigned To:
 [2017-10-24 04:44 UTC] kalle@php.net
I'm gonna close this as the libevent package on PECL had no had a release for 4 years, and there haven't really been much acitivity since. If development picks back up then this report should be re-opened
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 01:01:30 2024 UTC