Skip to content

Commit bd3ba54

Browse files
committed
Revert "Don't allocate temporary file cache memory on arena"
This reverts commit 4440ac3. This fix wasn't correct, as we do retain the arena-allocation for the file cache only case. This will need some other way to reconcile both modes.
1 parent 6ab4286 commit bd3ba54

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

ext/opcache/zend_file_cache.c

+9-8
Original file line numberDiff line numberDiff line change
@@ -1705,7 +1705,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
17051705
zend_persistent_script *script;
17061706
zend_file_cache_metainfo info;
17071707
zend_accel_hash_entry *bucket;
1708-
void *mem, *buf;
1708+
void *mem, *checkpoint, *buf;
17091709
int cache_it = 1;
17101710
unsigned int actual_checksum;
17111711
int ok;
@@ -1766,20 +1766,21 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
17661766
return NULL;
17671767
}
17681768

1769+
checkpoint = zend_arena_checkpoint(CG(arena));
17691770
#if defined(__AVX__) || defined(__SSE2__)
17701771
/* Align to 64-byte boundary */
1771-
mem = emalloc(info.mem_size + info.str_size + 64);
1772+
mem = zend_arena_alloc(&CG(arena), info.mem_size + info.str_size + 64);
17721773
mem = (void*)(((zend_uintptr_t)mem + 63L) & ~63L);
17731774
#else
1774-
mem = emalloc(info.mem_size + info.str_size);
1775+
mem = zend_arena_alloc(&CG(arena), info.mem_size + info.str_size);
17751776
#endif
17761777

17771778
if (read(fd, mem, info.mem_size + info.str_size) != (ssize_t)(info.mem_size + info.str_size)) {
17781779
zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot read from file '%s' (mem)\n", filename);
17791780
zend_file_cache_flock(fd, LOCK_UN);
17801781
close(fd);
17811782
zend_file_cache_unlink(filename);
1782-
efree(mem);
1783+
zend_arena_release(&CG(arena), checkpoint);
17831784
efree(filename);
17841785
return NULL;
17851786
}
@@ -1793,7 +1794,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
17931794
(actual_checksum = zend_adler32(ADLER32_INIT, mem, info.mem_size + info.str_size)) != info.checksum) {
17941795
zend_accel_error(ACCEL_LOG_WARNING, "corrupted file '%s' excepted checksum: 0x%08x actual checksum: 0x%08x\n", filename, info.checksum, actual_checksum);
17951796
zend_file_cache_unlink(filename);
1796-
efree(mem);
1797+
zend_arena_release(&CG(arena), checkpoint);
17971798
efree(filename);
17981799
return NULL;
17991800
}
@@ -1813,7 +1814,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
18131814
script = (zend_persistent_script *)bucket->data;
18141815
if (!script->corrupted) {
18151816
zend_shared_alloc_unlock();
1816-
efree(mem);
1817+
zend_arena_release(&CG(arena), checkpoint);
18171818
efree(filename);
18181819
return script;
18191820
}
@@ -1863,7 +1864,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
18631864
zend_shared_alloc_unlock();
18641865
goto use_process_mem;
18651866
} else {
1866-
efree(mem);
1867+
zend_arena_release(&CG(arena), checkpoint);
18671868
efree(filename);
18681869
return NULL;
18691870
}
@@ -1881,7 +1882,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
18811882
zend_shared_alloc_unlock();
18821883
zend_accel_error(ACCEL_LOG_INFO, "File cached script loaded into memory '%s'", ZSTR_VAL(script->script.filename));
18831884

1884-
efree(mem);
1885+
zend_arena_release(&CG(arena), checkpoint);
18851886
}
18861887
efree(filename);
18871888

0 commit comments

Comments
 (0)