zend_list_addref and object resources
| From: | Marshall A. Greenblatt | Date: | Tue, 10 Aug 2004 03:38:52 +0000 |
| Subject: | zend_list_addref and object resources | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-12046@lists.php.net to get a copy of this message | ||
Hi,
I'm having a bit of a conundrum that maybe someone here can help me out with
:-).
When assigning an object resource to either 'getThis()' or 'return_value' as
shown below, is it necessary to manually increment the reference count?
For example, /ext/ming/ming.c (version 1.70) contains many code fragments
like the following where zend_list_addref() is used with 'getThis()', and
not used with 'return_value':
<snip ming.c:297>
ret = zend_list_insert(action, le_swfactionp);
object_init_ex(getThis(), action_class_entry_ptr);
add_property_resource(getThis(), "action", ret);
zend_list_addref(ret);
</snip>
<snip ming.c:1979>
ret = zend_list_insert(item, le_swfdisplayitemp);
object_init_ex(return_value, displayitem_class_entry_ptr);
add_property_resource(return_value, "displayitem", ret);
</snip>
Looking at earlier revisions of this file, it appears that usage of
zend_list_addref() with 'return_value' has been steadily decreasing. There
is, however, one place where zend_list_addref() with 'return_value' is still
being called:
<snip ming.c:1686>
int ret = zend_list_insert(shape, le_swfshapep);
object_init_ex(return_value, shape_class_entry_ptr);
add_property_resource(return_value, "shape", ret);
zend_list_addref(ret);
</snip>
I can't find enough examples in other modules to feel confident that
zend_list_addref() with 'return_value' is a bad thing (some use it, some
don't), and my testing seems to show that everything works fine with or
without the explicit zend_list_addref() call for both 'return_value' and
'getThis()'.
That said, is there a "correct" way to handle reference counting with
'getThis()' and 'return_value' in this situation?
Thanks,
Marshall