Hello internals@, I'm new to this list, so let me first introduce myself. My name is Martijn van Duren and I work for a webhosting company in the Netherlands. Apart from that I'm also an OpenBSD h^Hslacker.
tl;dr: How do I properly use Z_REFCOUNT on a zval? I'm faced with the following issue: I've build a framework which allows to talk to a remote interface over a persistent connection. This interface can return variables of arbitrary types. When an object is returned it is stored locally in an array accompanied by its id. This way I can ensure that the same object (and not an identical object) is returned on multiple requests. The problem I'm facing is that because this interface holds a reference of the object it's never truly released and thus a memory leak. For the application I use it for this is not an issue, but that might change in the future. To solve this I was thinking of creating a small extension which exports a function that gives me the active reference count. This way I could check in certain parts of the code if there's more than 1 variables linked to the object and if not, remove it from the internal array. This would not give a 100% result, but it's still better than hanging on to everything all the time. When playing with the extension I made the following function: PHP_FUNCTION(refcount) { zval var; zend_long refcount; if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &var) == FAILURE) { return; } refcount = (zend_long) Z_REFCOUNT(var); RETURN_LONG(refcount); } Which didn't returned what I expected: $ php -r 'dl("refcount.so"); for ($a = 0; $a < 4; $a++) echo refcount($a)."\n";' 0 1 2 3 Could someone point me to what I'm doing wrong with Z_REFCOUNT? If there is a better way to solve my actual problem I would be all ears of course. Sincerely, Martijn van Duren -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php