]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.6'
authorXinchen Hui <laruence@php.net>
Sat, 14 Mar 2015 03:32:09 +0000 (11:32 +0800)
committerXinchen Hui <laruence@php.net>
Sat, 14 Mar 2015 03:32:09 +0000 (11:32 +0800)
1  2 
ext/spl/spl_observer.c

index 14a0bade71829445d0bd7cabf2e184dfa685f37f,cf8663632b5729c46421ffa51e573f544091c5ba..619ed3883aae28ec353ca3e3ca1246d2674af115
@@@ -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;