@@ -202,6 +202,12 @@ typedef struct _zend_file_cache_metainfo {
202
202
uint32_t checksum ;
203
203
} zend_file_cache_metainfo ;
204
204
205
+ typedef struct _zend_file_cache_handle {
206
+ zend_string * full_path ;
207
+ zend_file_cache_metainfo info ;
208
+ void * mem , * checkpoint ;
209
+ } zend_file_cache_handle ;
210
+
205
211
static int zend_file_cache_mkdir (char * filename , size_t start )
206
212
{
207
213
char * s = filename + start ;
@@ -1813,7 +1819,7 @@ static void zend_file_cache_unserialize(zend_persistent_script *script,
1813
1819
zend_file_cache_unserialize_early_bindings (script , buf );
1814
1820
}
1815
1821
1816
- zend_always_inline zend_result zend_file_cache_open (zend_file_handle * file_handle , zend_file_cache_handle * cache_handle )
1822
+ zend_result zend_file_cache_validate_and_open (zend_file_handle * file_handle , zend_file_cache_handle * cache_handle )
1817
1823
{
1818
1824
int fd ;
1819
1825
char * filename ;
@@ -1822,9 +1828,9 @@ zend_always_inline zend_result zend_file_cache_open(zend_file_handle *file_handl
1822
1828
if (!file_handle || !file_handle -> opened_path ) {
1823
1829
return FAILURE ;
1824
1830
}
1825
- zend_file_cache_handle -> full_path = file_handle -> opened_path
1831
+ cache_handle -> full_path = file_handle -> opened_path ;
1826
1832
1827
- filename = zend_file_cache_get_bin_file_path (zend_file_cache_handle -> full_path );
1833
+ filename = zend_file_cache_get_bin_file_path (cache_handle -> full_path );
1828
1834
fd = zend_file_cache_open (filename , O_RDONLY | O_BINARY );
1829
1835
if (fd < 0 ) {
1830
1836
goto failure ; // Open failed
@@ -1835,35 +1841,35 @@ zend_always_inline zend_result zend_file_cache_open(zend_file_handle *file_handl
1835
1841
}
1836
1842
1837
1843
1838
- if (read (fd , & zend_file_cache_handle -> info , sizeof (zend_file_cache_handle -> info )) != sizeof (zend_file_cache_handle -> info )) {
1844
+ if (read (fd , & cache_handle -> info , sizeof (cache_handle -> info )) != sizeof (cache_handle -> info )) {
1839
1845
zend_accel_error (ACCEL_LOG_WARNING , "opcache cannot read from file '%s' (info)\n" , filename );
1840
1846
goto failure_unlock_close ;
1841
1847
}
1842
1848
1843
1849
// Verify header
1844
- if (memcmp (zend_file_cache_handle -> info .magic , "OPCACHE" , 8 ) != 0 || memcmp (zend_file_cache_handle -> info .system_id , zend_system_id , 32 ) != 0 ) {
1850
+ if (memcmp (cache_handle -> info .magic , "OPCACHE" , 8 ) != 0 || memcmp (cache_handle -> info .system_id , zend_system_id , 32 ) != 0 ) {
1845
1851
zend_accel_error (ACCEL_LOG_WARNING , "opcache invalid header in file '%s'\n" , filename );
1846
1852
goto failure_unlock_close ;
1847
1853
}
1848
1854
1849
1855
// Verify timestamp if required
1850
1856
if (ZCG (accel_directives ).validate_timestamps &&
1851
- zend_get_file_handle_timestamp (file_handle , NULL ) != zend_file_cache_handle -> info .timestamp ) {
1857
+ zend_get_file_handle_timestamp (file_handle , NULL ) != cache_handle -> info .timestamp ) {
1852
1858
goto failure_unlock_close ;
1853
1859
}
1854
1860
1855
- zend_file_cache_handle -> checkpoint = zend_arena_checkpoint (CG (arena ));
1861
+ cache_handle -> checkpoint = zend_arena_checkpoint (CG (arena ));
1856
1862
#if defined(__AVX__ ) || defined(__SSE2__ )
1857
1863
/* Align to 64-byte boundary */
1858
- zend_file_cache_handle -> mem = zend_arena_alloc (& CG (arena ), zend_file_cache_handle -> info .mem_size + zend_file_cache_handle -> info .str_size + 64 );
1859
- zend_file_cache_handle -> mem = (void * )(((uintptr_t )zend_file_cache_handle -> mem + 63L ) & ~63L );
1864
+ cache_handle -> mem = zend_arena_alloc (& CG (arena ), cache_handle -> info .mem_size + cache_handle -> info .str_size + 64 );
1865
+ cache_handle -> mem = (void * )(((uintptr_t )cache_handle -> mem + 63L ) & ~63L );
1860
1866
#else
1861
- zend_file_cache_handle -> mem = zend_arena_alloc (& CG (arena ), zend_file_cache_handle -> info .mem_size + zend_file_cache_handle -> info .str_size );
1867
+ cache_handle -> mem = zend_arena_alloc (& CG (arena ), cache_handle -> info .mem_size + cache_handle -> info .str_size );
1862
1868
#endif
1863
1869
1864
- if (read (fd , zend_file_cache_handle -> mem , zend_file_cache_handle -> info .mem_size + zend_file_cache_handle -> info .str_size ) != (ssize_t )(zend_file_cache_handle -> info .mem_size + zend_file_cache_handle -> info .str_size )) {
1870
+ if (read (fd , cache_handle -> mem , cache_handle -> info .mem_size + cache_handle -> info .str_size ) != (ssize_t )(cache_handle -> info .mem_size + cache_handle -> info .str_size )) {
1865
1871
zend_accel_error (ACCEL_LOG_WARNING , "opcache cannot read from file '%s' (mem)\n" , filename );
1866
- zend_arena_release (& CG (arena ), zend_file_cache_handle -> checkpoint );
1872
+ zend_arena_release (& CG (arena ), cache_handle -> checkpoint );
1867
1873
goto failure_unlock_close ;
1868
1874
}
1869
1875
if (zend_file_cache_flock (fd , LOCK_UN ) != 0 ) {
@@ -1873,9 +1879,9 @@ zend_always_inline zend_result zend_file_cache_open(zend_file_handle *file_handl
1873
1879
1874
1880
/* verify checksum */
1875
1881
if (ZCG (accel_directives ).file_cache_consistency_checks &&
1876
- (actual_checksum = zend_adler32 (ADLER32_INIT , zend_file_cache_handle -> mem , zend_file_cache_handle -> info .mem_size + zend_file_cache_handle -> info .str_size )) != zend_file_cache_handle -> info .checksum ) {
1877
- zend_accel_error (ACCEL_LOG_WARNING , "corrupted file '%s' excepted checksum: 0x%08x actual checksum: 0x%08x\n" , filename , zend_file_cache_handle -> info .checksum , actual_checksum );
1878
- zend_arena_release (& CG (arena ), zend_file_cache_handle -> checkpoint );
1882
+ (actual_checksum = zend_adler32 (ADLER32_INIT , cache_handle -> mem , cache_handle -> info .mem_size + cache_handle -> info .str_size )) != cache_handle -> info .checksum ) {
1883
+ zend_accel_error (ACCEL_LOG_WARNING , "corrupted file '%s' excepted checksum: 0x%08x actual checksum: 0x%08x\n" , filename , cache_handle -> info .checksum , actual_checksum );
1884
+ zend_arena_release (& CG (arena ), cache_handle -> checkpoint );
1879
1885
goto failure ;
1880
1886
}
1881
1887
@@ -1895,18 +1901,18 @@ zend_always_inline zend_result zend_file_cache_open(zend_file_handle *file_handl
1895
1901
return FAILURE ;
1896
1902
}
1897
1903
1898
- zend_always_inline void zend_file_cache_close (zend_file_cache_handle * cache_handle )
1904
+ void zend_file_cache_close (zend_file_cache_handle * cache_handle )
1899
1905
{
1900
- zend_arena_release (& CG (arena ), zend_file_cache_handle -> checkpoint );
1906
+ zend_arena_release (& CG (arena ), cache_handle -> checkpoint );
1901
1907
}
1902
1908
1903
1909
zend_result zend_file_cache_validate (zend_file_handle * file_handle )
1904
1910
{
1905
1911
zend_file_cache_handle cache_handle ;
1906
1912
1907
- zend_result ret = zend_file_cache_open (file_handle , & cache_handle );
1913
+ zend_result ret = zend_file_cache_validate_and_open (file_handle , & cache_handle );
1908
1914
1909
- if (res == SUCCESS ) {
1915
+ if (ret == SUCCESS ) {
1910
1916
zend_file_cache_close (& cache_handle );
1911
1917
}
1912
1918
@@ -1922,7 +1928,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
1922
1928
bool cache_it = true;
1923
1929
bool ok ;
1924
1930
1925
- if (zend_file_cache_open (file_handle , & cache_handle ) == FAILURE ) {
1931
+ if (zend_file_cache_validate_and_open (file_handle , & cache_handle ) == FAILURE ) {
1926
1932
return NULL ;
1927
1933
}
1928
1934
@@ -1937,7 +1943,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
1937
1943
/* Check if we still need to put the file into the cache (may be it was
1938
1944
* already stored by another process. This final check is done under
1939
1945
* exclusive lock) */
1940
- bucket = zend_accel_hash_find_entry (& ZCSG (hash ), cache_handle -> full_path );
1946
+ bucket = zend_accel_hash_find_entry (& ZCSG (hash ), cache_handle . full_path );
1941
1947
if (bucket ) {
1942
1948
script = (zend_persistent_script * )bucket -> data ;
1943
1949
if (!script -> corrupted ) {
@@ -1955,23 +1961,23 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
1955
1961
goto use_process_mem ;
1956
1962
}
1957
1963
1958
- buf = zend_shared_alloc_aligned (cache_handle -> info .mem_size );
1964
+ buf = zend_shared_alloc_aligned (cache_handle . info .mem_size );
1959
1965
1960
1966
if (!buf ) {
1961
1967
zend_accel_schedule_restart_if_necessary (ACCEL_RESTART_OOM );
1962
1968
zend_shared_alloc_unlock ();
1963
1969
goto use_process_mem ;
1964
1970
}
1965
- memcpy (buf , cache_handle -> mem , cache_handle -> info .mem_size );
1971
+ memcpy (buf , cache_handle . mem , cache_handle . info .mem_size );
1966
1972
zend_map_ptr_extend (ZCSG (map_ptr_last ));
1967
1973
} else {
1968
1974
use_process_mem :
1969
- buf = cache_handle -> mem ;
1975
+ buf = cache_handle . mem ;
1970
1976
cache_it = false;
1971
1977
}
1972
1978
1973
- ZCG (cache_handle -> mem ) = ((char * )cache_handle -> mem + cache_handle -> info .mem_size );
1974
- script = (zend_persistent_script * )((char * )buf + cache_handle -> info .script_offset );
1979
+ ZCG (mem ) = ((char * )cache_handle . mem + cache_handle . info .mem_size );
1980
+ script = (zend_persistent_script * )((char * )buf + cache_handle . info .script_offset );
1975
1981
script -> corrupted = !cache_it ; /* used to check if script restored to SHM or process memory */
1976
1982
1977
1983
ok = true;
0 commit comments