static int clean_non_persistent_constant(zend_constant *c TSRMLS_DC)
{
if (c->flags & CONST_PERSISTENT) {
- return ZEND_HASH_APPLY_STOP;
+ return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
- return ZEND_HASH_APPLY_REMOVE;
+ return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
void clean_non_persistent_constants(TSRMLS_D)
{
- zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
+ if (EG(full_tables_cleanup)) {
+ zend_hash_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
+ } else {
+ zend_hash_reverse_apply(EG(zend_constants), (apply_func_t) clean_non_persistent_constant TSRMLS_CC);
+ }
}
static int is_not_internal_function(zend_function *function TSRMLS_DC)
{
if (function->type == ZEND_INTERNAL_FUNCTION) {
- return ZEND_HASH_APPLY_STOP;
+ return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
- return ZEND_HASH_APPLY_REMOVE;
+ return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
static int is_not_internal_class(zend_class_entry *ce TSRMLS_DC)
{
if (ce->type == ZEND_INTERNAL_CLASS) {
- return ZEND_HASH_APPLY_STOP;
+ return EG(full_tables_cleanup) ? 0 : ZEND_HASH_APPLY_STOP;
} else {
- return ZEND_HASH_APPLY_REMOVE;
+ return EG(full_tables_cleanup) ? 1 : ZEND_HASH_APPLY_REMOVE;
}
}
zend_ptr_stack_destroy(&EG(argument_stack));
/* Destroy all op arrays */
- zend_hash_reverse_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
- zend_hash_reverse_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
+ if (EG(full_tables_cleanup) {
+ zend_hash_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
+ zend_hash_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
+ } else {
+ zend_hash_reverse_apply(EG(function_table), (apply_func_t) is_not_internal_function TSRMLS_CC);
+ zend_hash_reverse_apply(EG(class_table), (apply_func_t) is_not_internal_class TSRMLS_CC);
+ }
} zend_end_try();
/* The regular list must be destroyed after the main symbol table and
}
+ EG(full_tables_cleanup) = 0;
#ifdef ZEND_WIN32
static LRESULT CALLBACK zend_timeout_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{