Skip to content

Commit

Permalink
Revert "Don't allocate temporary file cache memory on arena"
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
nikic committed Apr 10, 2021
1 parent 6ab4286 commit bd3ba54
Showing 1 changed file with 9 additions and 8 deletions.
17 changes: 9 additions & 8 deletions ext/opcache/zend_file_cache.c
Original file line number Diff line number Diff line change
Expand Up @@ -1705,7 +1705,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
zend_persistent_script *script;
zend_file_cache_metainfo info;
zend_accel_hash_entry *bucket;
void *mem, *buf;
void *mem, *checkpoint, *buf;
int cache_it = 1;
unsigned int actual_checksum;
int ok;
Expand Down Expand Up @@ -1766,20 +1766,21 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
return NULL;
}

checkpoint = zend_arena_checkpoint(CG(arena));
#if defined(__AVX__) || defined(__SSE2__)
/* 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);
#else
mem = emalloc(info.mem_size + info.str_size);
mem = zend_arena_alloc(&CG(arena), info.mem_size + info.str_size);
#endif

if (read(fd, mem, info.mem_size + info.str_size) != (ssize_t)(info.mem_size + info.str_size)) {
zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot read from file '%s' (mem)\n", filename);
zend_file_cache_flock(fd, LOCK_UN);
close(fd);
zend_file_cache_unlink(filename);
efree(mem);
zend_arena_release(&CG(arena), checkpoint);
efree(filename);
return NULL;
}
Expand All @@ -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) {
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);
efree(mem);
zend_arena_release(&CG(arena), checkpoint);
efree(filename);
return NULL;
}
Expand All @@ -1813,7 +1814,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
script = (zend_persistent_script *)bucket->data;
if (!script->corrupted) {
zend_shared_alloc_unlock();
efree(mem);
zend_arena_release(&CG(arena), checkpoint);
efree(filename);
return script;
}
Expand Down Expand Up @@ -1863,7 +1864,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
zend_shared_alloc_unlock();
goto use_process_mem;
} else {
efree(mem);
zend_arena_release(&CG(arena), checkpoint);
efree(filename);
return NULL;
}
Expand All @@ -1881,7 +1882,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
zend_shared_alloc_unlock();
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);

Expand Down

0 comments on commit bd3ba54

Please sign in to comment.