diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-10-25 19:24:39 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-10-25 19:24:39 +0300 |
commit | f33da6f3387d4d4a2b820986aec11c8e37141c6c (patch) | |
tree | 2653d4874b5b25921e72156b0a667e1f681dfcd0 /ext/opcache/zend_shared_alloc.c | |
parent | 3d415644f7dd37ed0ed2d344902ed0e1dbef2f0c (diff) | |
download | php-git-f33da6f3387d4d4a2b820986aec11c8e37141c6c.tar.gz |
Don't use request heap at shutdown
Diffstat (limited to 'ext/opcache/zend_shared_alloc.c')
-rw-r--r-- | ext/opcache/zend_shared_alloc.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/ext/opcache/zend_shared_alloc.c b/ext/opcache/zend_shared_alloc.c index fe8d470d58..63cc988d27 100644 --- a/ext/opcache/zend_shared_alloc.c +++ b/ext/opcache/zend_shared_alloc.c @@ -259,6 +259,7 @@ int zend_shared_alloc_startup(size_t requested_size) void zend_shared_alloc_shutdown(void) { zend_shared_segment **tmp_shared_segments; + zend_shared_segment *shared_segments_buf[16]; size_t shared_segments_array_size; zend_smm_shared_globals tmp_shared_globals; int i; @@ -266,14 +267,20 @@ void zend_shared_alloc_shutdown(void) tmp_shared_globals = *smm_shared_globals; smm_shared_globals = &tmp_shared_globals; shared_segments_array_size = ZSMMG(shared_segments_count) * (S_H(segment_type_size)() + sizeof(void *)); - tmp_shared_segments = emalloc(shared_segments_array_size); + if (shared_segments_array_size > 16) { + tmp_shared_segments = malloc(shared_segments_array_size); + } else { + tmp_shared_segments = shared_segments_buf; + } copy_shared_segments(tmp_shared_segments, ZSMMG(shared_segments)[0], ZSMMG(shared_segments_count), S_H(segment_type_size)()); ZSMMG(shared_segments) = tmp_shared_segments; for (i = 0; i < ZSMMG(shared_segments_count); i++) { S_H(detach_segment)(ZSMMG(shared_segments)[i]); } - efree(ZSMMG(shared_segments)); + if (shared_segments_array_size > 16) { + free(ZSMMG(shared_segments)); + } ZSMMG(shared_segments) = NULL; g_shared_alloc_handler = NULL; #ifndef ZEND_WIN32 |