@@ -2421,6 +2421,17 @@ int accel_activate(INIT_FUNC_ARGS)
24212421 }
24222422
24232423 zend_shared_alloc_restore_state ();
2424+ if (ZCSG (preload_script )) {
2425+ zend_accel_hash_update (& ZCSG (hash ), ZSTR_VAL (ZCSG (preload_script )-> script .filename ), ZSTR_LEN (ZCSG (preload_script )-> script .filename ), 0 , ZCSG (preload_script ));
2426+ if (ZCSG (saved_scripts )) {
2427+ zend_persistent_script * * p = ZCSG (saved_scripts );
2428+ while (* p ) {
2429+ zend_accel_hash_update (& ZCSG (hash ), ZSTR_VAL ((* p )-> script .filename ), ZSTR_LEN ((* p )-> script .filename ), 0 , * p );
2430+ p ++ ;
2431+ }
2432+ }
2433+ ZCSG (map_ptr_last ) = ZCSG (saved_map_ptr_last );
2434+ }
24242435 ZCSG (accelerator_enabled ) = ZCSG (cache_status_before_restart );
24252436 if (ZCSG (last_restart_time ) < ZCG (request_time )) {
24262437 ZCSG (last_restart_time ) = ZCG (request_time );
@@ -3616,6 +3627,7 @@ static int accel_preload(const char *config)
36163627 if (ret == SUCCESS ) {
36173628 zend_persistent_script * script ;
36183629 zend_string * filename ;
3630+ int i ;
36193631
36203632 preload_link ();
36213633 preload_remove_empty_includes ();
@@ -3704,13 +3716,24 @@ static int accel_preload(const char *config)
37043716 EG (persistent_classes_count ) = EG (class_table )-> nNumUsed ;
37053717
37063718 /* Store individual scripts with unlinked classes */
3719+ HANDLE_BLOCK_INTERRUPTIONS ();
3720+ SHM_UNPROTECT ();
3721+
3722+ i = 0 ;
3723+ zend_shared_alloc_lock ();
3724+ ZCSG (saved_scripts ) = zend_shared_alloc ((zend_hash_num_elements (preload_scripts ) + 1 ) * sizeof (void * ));
3725+ zend_shared_alloc_unlock ();
37073726 ZEND_HASH_FOREACH_PTR (preload_scripts , script ) {
3708- HANDLE_BLOCK_INTERRUPTIONS ();
3709- SHM_UNPROTECT ();
3710- preload_script_in_shared_memory (script );
3711- SHM_PROTECT ();
3712- HANDLE_UNBLOCK_INTERRUPTIONS ();
3727+ ZCSG (saved_scripts )[i ++ ] = preload_script_in_shared_memory (script );
37133728 } ZEND_HASH_FOREACH_END ();
3729+ ZCSG (saved_scripts )[i ] = NULL ;
3730+
3731+ ZCSG (saved_map_ptr_last ) = ZCSG (map_ptr_last );
3732+ zend_shared_alloc_save_state ();
3733+ accel_interned_strings_save_state ();
3734+
3735+ SHM_PROTECT ();
3736+ HANDLE_UNBLOCK_INTERRUPTIONS ();
37143737
37153738 zend_shared_alloc_destroy_xlat_table ();
37163739 }
0 commit comments