Skip to content

Commit a594a61

Browse files
committed
Cleanup
- remove useless ZCSG(saved_map_ptr_last) - move preloaded classes/functions clean-up code back into better place
1 parent ab9a40f commit a594a61

File tree

3 files changed

+44
-57
lines changed

3 files changed

+44
-57
lines changed

Zend/zend_execute_API.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,13 +340,56 @@ void shutdown_executor(void) /* {{{ */
340340
destroy_op_array(&func->op_array);
341341
zend_string_release_ex(key, 0);
342342
} ZEND_HASH_FOREACH_END_DEL();
343+
344+
/* Cleanup preloaded immutable functions */
345+
ZEND_HASH_REVERSE_FOREACH_VAL(EG(function_table), zv) {
346+
zend_op_array *op_array = Z_PTR_P(zv);
347+
if (op_array->type == ZEND_INTERNAL_FUNCTION) {
348+
break;
349+
}
350+
ZEND_ASSERT(op_array->fn_flags & ZEND_ACC_IMMUTABLE);
351+
if (op_array->static_variables) {
352+
HashTable *ht = ZEND_MAP_PTR_GET(op_array->static_variables_ptr);
353+
if (ht) {
354+
ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
355+
zend_array_destroy(ht);
356+
}
357+
}
358+
} ZEND_HASH_FOREACH_END();
359+
343360
ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(EG(class_table), key, zv) {
344361
if (_idx == EG(persistent_classes_count)) {
345362
break;
346363
}
347364
destroy_zend_class(zv);
348365
zend_string_release_ex(key, 0);
349366
} ZEND_HASH_FOREACH_END_DEL();
367+
368+
/* Cleanup preloaded immutable classes */
369+
ZEND_HASH_REVERSE_FOREACH_VAL(EG(class_table), zv) {
370+
zend_class_entry *ce = Z_PTR_P(zv);
371+
if (ce->type == ZEND_INTERNAL_CLASS) {
372+
break;
373+
}
374+
ZEND_ASSERT(ce->ce_flags & ZEND_ACC_IMMUTABLE);
375+
if (ce->default_static_members_count) {
376+
zend_cleanup_internal_class_data(ce);
377+
}
378+
if (ce->ce_flags & ZEND_HAS_STATIC_IN_METHODS) {
379+
zend_op_array *op_array;
380+
ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) {
381+
if (op_array->type == ZEND_USER_FUNCTION) {
382+
if (op_array->static_variables) {
383+
HashTable *ht = ZEND_MAP_PTR_GET(op_array->static_variables_ptr);
384+
if (ht) {
385+
ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
386+
zend_array_destroy(ht);
387+
}
388+
}
389+
}
390+
} ZEND_HASH_FOREACH_END();
391+
}
392+
} ZEND_HASH_FOREACH_END();
350393
}
351394

352395
zend_cleanup_internal_classes();

ext/opcache/ZendAccelerator.c

Lines changed: 1 addition & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ static int accel_finish_startup(void);
134134

135135
static void preload_shutdown(void);
136136
static void preload_activate(void);
137-
static void preload_deactivate(void);
138137
static void preload_restart(void);
139138

140139
#ifdef ZEND_WIN32
@@ -2433,10 +2432,6 @@ int accel_post_deactivate(void)
24332432
return SUCCESS;
24342433
}
24352434

2436-
if (ZCSG(preload_script)) {
2437-
preload_deactivate();
2438-
}
2439-
24402435
zend_shared_alloc_safe_unlock(); /* be sure we didn't leave cache locked */
24412436
accel_unlock_all();
24422437
ZCG(counted) = 0;
@@ -3086,55 +3081,6 @@ static void preload_activate(void)
30863081
}
30873082
}
30883083

3089-
static void preload_deactivate(void)
3090-
{
3091-
if ((ZEND_DEBUG || !is_zend_mm()) && !EG(full_tables_cleanup)) {
3092-
zval *zv;
3093-
3094-
/* Cleanup preloaded immutable functions */
3095-
ZEND_HASH_REVERSE_FOREACH_VAL(EG(function_table), zv) {
3096-
zend_op_array *op_array = Z_PTR_P(zv);
3097-
if (op_array->type == ZEND_INTERNAL_FUNCTION) {
3098-
break;
3099-
}
3100-
ZEND_ASSERT(op_array->fn_flags & ZEND_ACC_IMMUTABLE);
3101-
if (op_array->static_variables) {
3102-
HashTable *ht = ZEND_MAP_PTR_GET(op_array->static_variables_ptr);
3103-
if (ht) {
3104-
ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
3105-
zend_array_destroy(ht);
3106-
}
3107-
}
3108-
} ZEND_HASH_FOREACH_END();
3109-
3110-
/* Cleanup preloaded immutable classes */
3111-
ZEND_HASH_REVERSE_FOREACH_VAL(EG(class_table), zv) {
3112-
zend_class_entry *ce = Z_PTR_P(zv);
3113-
if (ce->type == ZEND_INTERNAL_CLASS) {
3114-
break;
3115-
}
3116-
ZEND_ASSERT(ce->ce_flags & ZEND_ACC_IMMUTABLE);
3117-
if (ce->default_static_members_count) {
3118-
zend_cleanup_internal_class_data(ce);
3119-
}
3120-
if (ce->ce_flags & ZEND_HAS_STATIC_IN_METHODS) {
3121-
zend_op_array *op_array;
3122-
ZEND_HASH_FOREACH_PTR(&ce->function_table, op_array) {
3123-
if (op_array->type == ZEND_USER_FUNCTION) {
3124-
if (op_array->static_variables) {
3125-
HashTable *ht = ZEND_MAP_PTR_GET(op_array->static_variables_ptr);
3126-
if (ht) {
3127-
ZEND_ASSERT(GC_REFCOUNT(ht) == 1);
3128-
zend_array_destroy(ht);
3129-
}
3130-
}
3131-
}
3132-
} ZEND_HASH_FOREACH_END();
3133-
}
3134-
} ZEND_HASH_FOREACH_END();
3135-
}
3136-
}
3137-
31383084
static void preload_restart(void)
31393085
{
31403086
zend_accel_hash_update(&ZCSG(hash), ZSTR_VAL(ZCSG(preload_script)->script.filename), ZSTR_LEN(ZCSG(preload_script)->script.filename), 0, ZCSG(preload_script));
@@ -3145,7 +3091,6 @@ static void preload_restart(void)
31453091
p++;
31463092
}
31473093
}
3148-
ZCSG(map_ptr_last) = ZCSG(saved_map_ptr_last);
31493094
}
31503095

31513096
static void preload_move_user_functions(HashTable *src, HashTable *dst)
@@ -3821,7 +3766,7 @@ static int accel_preload(const char *config)
38213766
} ZEND_HASH_FOREACH_END();
38223767
ZCSG(saved_scripts)[i] = NULL;
38233768

3824-
ZCSG(saved_map_ptr_last) = ZCSG(map_ptr_last);
3769+
CG(map_ptr_last) = ZCSG(map_ptr_last);
38253770
zend_shared_alloc_save_state();
38263771
accel_interned_strings_save_state();
38273772

ext/opcache/ZendAccelerator.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,6 @@ typedef struct _zend_accel_shared_globals {
289289
/* Preloading */
290290
zend_persistent_script *preload_script;
291291
zend_persistent_script **saved_scripts;
292-
size_t saved_map_ptr_last;
293292

294293
/* uninitialized HashTable Support */
295294
uint32_t uninitialized_bucket[-HT_MIN_MASK];

0 commit comments

Comments
 (0)