summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend.c4
-rw-r--r--Zend/zend_execute_API.c7
-rw-r--r--Zend/zend_hash.c26
-rw-r--r--Zend/zend_hash.h6
-rw-r--r--Zend/zend_list.c10
-rw-r--r--Zend/zend_list.h3
6 files changed, 10 insertions, 46 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index a44c9bfd7b..70e87b043e 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -315,7 +315,7 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS
static void executor_globals_dtor(zend_executor_globals *executor_globals TSRMLS_DC)
{
zend_shutdown_constants(TSRMLS_C);
- zend_destroy_rsrc_plist(TSRMLS_C);
+ zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC);
zend_ini_shutdown(TSRMLS_C);
}
@@ -437,7 +437,7 @@ void zend_shutdown(TSRMLS_D)
zend_shutdown_timeout_thread();
#endif
#ifndef ZTS
- zend_destroy_rsrc_plist();
+ zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC);
#endif
zend_destroy_rsrc_list_dtors();
zend_hash_destroy(&module_registry);
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index cf15349fec..6ee4fd9634 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -177,9 +177,10 @@ void shutdown_executor(TSRMLS_D)
zend_hash_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
} zend_end_try();
- zend_destroy_rsrc_list(TSRMLS_C); /* must be destroyed after the main symbol table and
- * op arrays are destroyed.
- */
+ /* The regular list must be destroyed after the main symbol table and
+ * op arrays are destroyed.
+ */
+ zend_destroy_rsrc_list(&EG(regular_list) TSRMLS_CC);
zend_try {
clean_non_persistent_constants(TSRMLS_C);
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 437190e001..5ccebd8faf 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -524,32 +524,6 @@ ZEND_API int zend_hash_del_key_or_index(HashTable *ht, char *arKey, uint nKeyLen
return FAILURE;
}
-ZEND_API void zend_hash_reverse_destroy(HashTable *ht)
-{
- Bucket *p, *q;
-
- while (1) {
- p = ht->pListTail;
- if (!p) {
- break;
- }
- q = p->pListLast;
- if (q) {
- q->pListNext = NULL;
- }
- ht->pListTail = q;
-
- if (ht->pDestructor) {
- ht->pDestructor(p->pData);
- }
- if (!p->pDataPtr && p->pData) {
- pefree(p->pData, ht->persistent);
- }
- pefree(p, ht->persistent);
- }
- pefree(ht->arBuckets, ht->persistent);
-}
-
ZEND_API void zend_hash_destroy(HashTable *ht)
{
diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h
index c1d593f76e..72eecb4748 100644
--- a/Zend/zend_hash.h
+++ b/Zend/zend_hash.h
@@ -37,8 +37,6 @@ typedef ulong (*hash_func_t)(char *arKey, uint nKeyLength);
typedef int (*compare_func_t)(const void *, const void *);
typedef void (*sort_func_t)(void *, size_t, register size_t, compare_func_t);
typedef void (*dtor_func_t)(void *pDest);
-typedef int (*apply_func_t)(void *pDest TSRMLS_DC);
-typedef int (*apply_func_arg_t)(void *pDest, void *argument TSRMLS_DC);
typedef void (*copy_ctor_func_t)(void *pElement);
struct _hashtable;
@@ -81,8 +79,6 @@ BEGIN_EXTERN_C()
ZEND_API int zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent);
ZEND_API int zend_hash_init_ex(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, int persistent, zend_bool bApplyProtection);
ZEND_API void zend_hash_destroy(HashTable *ht);
-ZEND_API void zend_hash_reverse_destroy(HashTable *ht);
-
ZEND_API void zend_hash_clean(HashTable *ht);
/* additions/updates/changes */
@@ -113,6 +109,8 @@ typedef struct _zend_hash_key {
} zend_hash_key;
+typedef int (*apply_func_t)(void *pDest TSRMLS_DC);
+typedef int (*apply_func_arg_t)(void *pDest, void *argument TSRMLS_DC);
typedef int (*apply_func_args_t)(void *pDest, int num_args, va_list args, zend_hash_key *hash_key);
ZEND_API void zend_hash_graceful_destroy(HashTable *ht);
diff --git a/Zend/zend_list.c b/Zend/zend_list.c
index 6f868715da..dc61aa3272 100644
--- a/Zend/zend_list.c
+++ b/Zend/zend_list.c
@@ -228,10 +228,9 @@ int zend_init_rsrc_plist(TSRMLS_D)
}
-void zend_destroy_rsrc_list(TSRMLS_D)
+void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC)
{
Bucket *p, *q;
- HashTable *ht = &EG(regular_list);
while (1) {
p = ht->pListTail;
@@ -258,13 +257,6 @@ void zend_destroy_rsrc_list(TSRMLS_D)
}
-
-void zend_destroy_rsrc_plist(TSRMLS_D)
-{
- zend_hash_reverse_destroy(&EG(persistent_list));
-}
-
-
static int clean_module_resource(zend_rsrc_list_entry *le, int *resource_id TSRMLS_DC)
{
if (le->type == *resource_id) {
diff --git a/Zend/zend_list.h b/Zend/zend_list.h
index c17d2c5ff5..6150a42efe 100644
--- a/Zend/zend_list.h
+++ b/Zend/zend_list.h
@@ -68,8 +68,7 @@ void plist_entry_destructor(void *ptr);
void zend_clean_module_rsrc_dtors(int module_number TSRMLS_DC);
int zend_init_rsrc_list(TSRMLS_D);
int zend_init_rsrc_plist(TSRMLS_D);
-void zend_destroy_rsrc_list(TSRMLS_D);
-void zend_destroy_rsrc_plist(TSRMLS_D);
+void zend_destroy_rsrc_list(HashTable *ht TSRMLS_DC);
int zend_init_rsrc_list_dtors(void);
void zend_destroy_rsrc_list_dtors(void);