@@ -87,7 +87,7 @@ typedef struct _spl_SplObjectStorage { /* {{{ */
87
87
zend_function * fptr_get_hash ;
88
88
HashTable * debug_info ;
89
89
zval * * gcdata ;
90
- long gcdata_len ;
90
+ long gcdata_num ;
91
91
} spl_SplObjectStorage ; /* }}} */
92
92
93
93
/* {{{ storage is an assoc aray of [zend_object_value]=>[zval *obj, zval *inf] */
@@ -269,9 +269,6 @@ static zend_object_value spl_object_storage_new_ex(zend_class_entry *class_type,
269
269
zend_object_std_init (& intern -> std , class_type TSRMLS_CC );
270
270
object_properties_init (& intern -> std , class_type );
271
271
272
- intern -> gcdata = NULL ;
273
- intern -> gcdata_len = 0 ;
274
-
275
272
zend_hash_init (& intern -> storage , 0 , NULL , (void (* )(void * ))spl_object_storage_dtor , 0 );
276
273
277
274
retval .handle = zend_objects_store_put (intern , (zend_objects_store_dtor_t )zend_objects_destroy_object , (zend_objects_free_object_storage_t ) spl_SplOjectStorage_free_storage , NULL TSRMLS_CC );
@@ -371,15 +368,14 @@ static HashTable* spl_object_storage_debug_info(zval *obj, int *is_temp TSRMLS_D
371
368
/* overriden for garbage collection */
372
369
static HashTable * spl_object_storage_get_gc (zval * obj , zval * * * table , int * n TSRMLS_DC ) /* {{{ */
373
370
{
371
+ long i = 0 ;
374
372
spl_SplObjectStorage * intern = (spl_SplObjectStorage * )zend_object_store_get_object (obj TSRMLS_CC );
375
373
spl_SplObjectStorageElement * element ;
376
374
HashPosition pos ;
377
- long i = 0 ;
378
- long requiredLength = intern -> storage .nNumOfElements * 2 ;
379
375
380
- if (requiredLength > intern -> gcdata_len ) {
381
- intern -> gcdata = ( zval * * ) erealloc ( intern -> gcdata , sizeof ( zval * ) * requiredLength ) ;
382
- intern -> gcdata_len = requiredLength ;
376
+ if (intern -> storage . nNumOfElements > intern -> gcdata_num ) {
377
+ intern -> gcdata_num = intern -> storage . nNumOfElements * 2 ;
378
+ intern -> gcdata = ( zval * * ) erealloc ( intern -> gcdata , sizeof ( zval * ) * intern -> gcdata_num ) ;
383
379
}
384
380
385
381
zend_hash_internal_pointer_reset_ex (& intern -> storage , & pos );
0 commit comments