Revert "Don't allocate temporary file cache memory on arena"

This reverts commit 4440ac3ed6.

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.
This commit is contained in:
Nikita Popov 2021-04-10 12:44:21 +02:00
parent 6ab4286f2e
commit bd3ba5465b

View file

@ -1705,7 +1705,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
zend_persistent_script *script; zend_persistent_script *script;
zend_file_cache_metainfo info; zend_file_cache_metainfo info;
zend_accel_hash_entry *bucket; zend_accel_hash_entry *bucket;
void *mem, *buf; void *mem, *checkpoint, *buf;
int cache_it = 1; int cache_it = 1;
unsigned int actual_checksum; unsigned int actual_checksum;
int ok; int ok;
@ -1766,12 +1766,13 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
return NULL; return NULL;
} }
checkpoint = zend_arena_checkpoint(CG(arena));
#if defined(__AVX__) || defined(__SSE2__) #if defined(__AVX__) || defined(__SSE2__)
/* Align to 64-byte boundary */ /* Align to 64-byte boundary */
mem = emalloc(info.mem_size + info.str_size + 64); mem = zend_arena_alloc(&CG(arena), info.mem_size + info.str_size + 64);
mem = (void*)(((zend_uintptr_t)mem + 63L) & ~63L); mem = (void*)(((zend_uintptr_t)mem + 63L) & ~63L);
#else #else
mem = emalloc(info.mem_size + info.str_size); mem = zend_arena_alloc(&CG(arena), info.mem_size + info.str_size);
#endif #endif
if (read(fd, mem, info.mem_size + info.str_size) != (ssize_t)(info.mem_size + info.str_size)) { if (read(fd, mem, info.mem_size + info.str_size) != (ssize_t)(info.mem_size + info.str_size)) {
@ -1779,7 +1780,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
zend_file_cache_flock(fd, LOCK_UN); zend_file_cache_flock(fd, LOCK_UN);
close(fd); close(fd);
zend_file_cache_unlink(filename); zend_file_cache_unlink(filename);
efree(mem); zend_arena_release(&CG(arena), checkpoint);
efree(filename); efree(filename);
return NULL; return NULL;
} }
@ -1793,7 +1794,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
(actual_checksum = zend_adler32(ADLER32_INIT, mem, info.mem_size + info.str_size)) != info.checksum) { (actual_checksum = zend_adler32(ADLER32_INIT, mem, info.mem_size + info.str_size)) != info.checksum) {
zend_accel_error(ACCEL_LOG_WARNING, "corrupted file '%s' excepted checksum: 0x%08x actual checksum: 0x%08x\n", filename, info.checksum, actual_checksum); zend_accel_error(ACCEL_LOG_WARNING, "corrupted file '%s' excepted checksum: 0x%08x actual checksum: 0x%08x\n", filename, info.checksum, actual_checksum);
zend_file_cache_unlink(filename); zend_file_cache_unlink(filename);
efree(mem); zend_arena_release(&CG(arena), checkpoint);
efree(filename); efree(filename);
return NULL; return NULL;
} }
@ -1813,7 +1814,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
script = (zend_persistent_script *)bucket->data; script = (zend_persistent_script *)bucket->data;
if (!script->corrupted) { if (!script->corrupted) {
zend_shared_alloc_unlock(); zend_shared_alloc_unlock();
efree(mem); zend_arena_release(&CG(arena), checkpoint);
efree(filename); efree(filename);
return script; return script;
} }
@ -1863,7 +1864,7 @@ use_process_mem:
zend_shared_alloc_unlock(); zend_shared_alloc_unlock();
goto use_process_mem; goto use_process_mem;
} else { } else {
efree(mem); zend_arena_release(&CG(arena), checkpoint);
efree(filename); efree(filename);
return NULL; return NULL;
} }
@ -1881,7 +1882,7 @@ use_process_mem:
zend_shared_alloc_unlock(); zend_shared_alloc_unlock();
zend_accel_error(ACCEL_LOG_INFO, "File cached script loaded into memory '%s'", ZSTR_VAL(script->script.filename)); zend_accel_error(ACCEL_LOG_INFO, "File cached script loaded into memory '%s'", ZSTR_VAL(script->script.filename));
efree(mem); zend_arena_release(&CG(arena), checkpoint);
} }
efree(filename); efree(filename);