diff options
author | Dmitry Stogov <dmitry@zend.com> | 2015-04-27 16:50:47 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2015-04-27 16:50:47 +0300 |
commit | ffe804a50c687673e2c46a0d4a43ab5eb3604281 (patch) | |
tree | 6f4d26021542362c8a0e8dd95e616c96dd6b9951 | |
parent | 0182eb4717a48ef0768bed9980f92b5be3062ab1 (diff) | |
download | php-git-ffe804a50c687673e2c46a0d4a43ab5eb3604281.tar.gz |
Use new hash iteration API.
-rw-r--r-- | Zend/zend_hash.h | 4 | ||||
-rw-r--r-- | ext/opcache/zend_accelerator_util_funcs.c | 26 |
2 files changed, 15 insertions, 15 deletions
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 2687ce2e87..dcac9c355c 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -814,6 +814,10 @@ static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht, _key = _p->key; \ _ptr = Z_PTR_P(_z); +#define ZEND_HASH_REVERSE_FOREACH_BUCKET(ht, _bucket) \ + ZEND_HASH_REVERSE_FOREACH(ht, 0); \ + _bucket = _p; + #define ZEND_HASH_REVERSE_FOREACH_VAL(ht, _val) \ ZEND_HASH_REVERSE_FOREACH(ht, 0); \ _val = _z; diff --git a/ext/opcache/zend_accelerator_util_funcs.c b/ext/opcache/zend_accelerator_util_funcs.c index 9aefa51778..92ada0b17f 100644 --- a/ext/opcache/zend_accelerator_util_funcs.c +++ b/ext/opcache/zend_accelerator_util_funcs.c @@ -118,26 +118,22 @@ void zend_accel_free_user_functions(HashTable *ht) ht->pDestructor = orig_dtor; } -static int move_user_function(zval *zv, int num_args, va_list args, zend_hash_key *hash_key) -{ - zend_function *function = Z_PTR_P(zv); - HashTable *function_table = va_arg(args, HashTable *); - (void)num_args; /* keep the compiler happy */ - - if (function->type == ZEND_USER_FUNCTION) { - zend_hash_update_ptr(function_table, hash_key->key, function); - return 1; - } else { - return 0; - } -} - void zend_accel_move_user_functions(HashTable *src, HashTable *dst) { + Bucket *p; dtor_func_t orig_dtor = src->pDestructor; src->pDestructor = NULL; - zend_hash_apply_with_arguments(src, (apply_func_args_t)move_user_function, 1, dst); + ZEND_HASH_REVERSE_FOREACH_BUCKET(src, p) { + zend_function *function = Z_PTR(p->val); + + if (EXPECTED(function->type == ZEND_USER_FUNCTION)) { + zend_hash_add_new_ptr(dst, p->key, function); + zend_hash_del_bucket(src, p); + } else { + break; + } + } ZEND_HASH_FOREACH_END(); src->pDestructor = orig_dtor; } |