]> granicus.if.org Git - php/commitdiff
Add GC support for ArrayObject
authorNikita Popov <nikic@php.net>
Thu, 16 Apr 2015 08:07:41 +0000 (10:07 +0200)
committerNikita Popov <nikic@php.net>
Wed, 20 May 2015 16:28:09 +0000 (18:28 +0200)
gc_024 test changes because the array that ArrayObject holds is
now counted separately from the ArrayObject.

Zend/tests/gc_024.phpt
ext/spl/spl_array.c

index 9a2ceb88f504541ea14f8e900be6a3458ab5e097..ca78da63d3b7f51308baa3b581493985efd258e4 100644 (file)
@@ -13,5 +13,5 @@ var_dump(gc_collect_cycles());
 echo "ok\n";
 ?>
 --EXPECT--
-int(1)
+int(2)
 ok
index c56e2d5f22581448705a18749e43979a8a62230e..4ade06a5d818ccd5a428294b5faaae341620262e 100644 (file)
@@ -831,6 +831,15 @@ static HashTable* spl_array_get_debug_info(zval *obj, int *is_temp) /* {{{ */
 }
 /* }}} */
 
+static HashTable *spl_array_get_gc(zval *obj, zval **gc_data, int *gc_data_count) /* {{{ */
+{
+       spl_array_object *intern = Z_SPLARRAY_P(obj);
+       *gc_data = &intern->array;
+       *gc_data_count = 1;
+       return zend_std_get_properties(obj);
+}
+/* }}} */
+
 static zval *spl_array_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv) /* {{{ */
 {
        spl_array_object *intern = Z_SPLARRAY_P(object);
@@ -1913,6 +1922,7 @@ PHP_MINIT_FUNCTION(spl_array)
 
        spl_handler_ArrayObject.get_properties = spl_array_get_properties;
        spl_handler_ArrayObject.get_debug_info = spl_array_get_debug_info;
+       spl_handler_ArrayObject.get_gc = spl_array_get_gc;
        spl_handler_ArrayObject.read_property = spl_array_read_property;
        spl_handler_ArrayObject.write_property = spl_array_write_property;
        spl_handler_ArrayObject.get_property_ptr_ptr = spl_array_get_property_ptr_ptr;