From: Xinchen Hui Date: Sat, 14 Mar 2015 03:32:09 +0000 (+0800) Subject: Merge branch 'PHP-5.6' X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~664 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9420a2a5b0079ddc9ff6db31f7ebcf3e869a0717;p=php Merge branch 'PHP-5.6' --- 9420a2a5b0079ddc9ff6db31f7ebcf3e869a0717 diff --cc ext/spl/spl_observer.c index 14a0bade71,cf8663632b..619ed3883a --- a/ext/spl/spl_observer.c +++ b/ext/spl/spl_observer.c @@@ -357,21 -367,24 +357,21 @@@ static HashTable* spl_object_storage_de /* }}} */ /* overriden for garbage collection */ -static HashTable *spl_object_storage_get_gc(zval *obj, zval ***table, int *n TSRMLS_DC) /* {{{ */ +static HashTable *spl_object_storage_get_gc(zval *obj, zval **table, int *n) /* {{{ */ { - long i = 0; - spl_SplObjectStorage *intern = (spl_SplObjectStorage*)zend_object_store_get_object(obj TSRMLS_CC); + int i = 0; + spl_SplObjectStorage *intern = Z_SPLOBJSTORAGE_P(obj); spl_SplObjectStorageElement *element; - HashPosition pos; - if (intern->storage.nNumOfElements > intern->gcdata_num) { + if (intern->storage.nNumOfElements * 2 > intern->gcdata_num) { intern->gcdata_num = intern->storage.nNumOfElements * 2; - intern->gcdata = (zval**)erealloc(intern->gcdata, sizeof(zval*) * intern->gcdata_num); + intern->gcdata = (zval*)erealloc(intern->gcdata, sizeof(zval) * intern->gcdata_num); } - zend_hash_internal_pointer_reset_ex(&intern->storage, &pos); - while (zend_hash_get_current_data_ex(&intern->storage, (void **)&element, &pos) == SUCCESS) { - intern->gcdata[i++] = element->obj; - intern->gcdata[i++] = element->inf; - zend_hash_move_forward_ex(&intern->storage, &pos); - } + ZEND_HASH_FOREACH_PTR(&intern->storage, element) { + ZVAL_COPY_VALUE(&intern->gcdata[i++], &element->obj); + ZVAL_COPY_VALUE(&intern->gcdata[i++], &element->inf); + } ZEND_HASH_FOREACH_END(); *table = intern->gcdata; *n = i;