mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Don't use request heap at shutdown
This commit is contained in:
parent
3d415644f7
commit
f33da6f338
1 changed files with 9 additions and 2 deletions
|
@ -259,6 +259,7 @@ int zend_shared_alloc_startup(size_t requested_size)
|
||||||
void zend_shared_alloc_shutdown(void)
|
void zend_shared_alloc_shutdown(void)
|
||||||
{
|
{
|
||||||
zend_shared_segment **tmp_shared_segments;
|
zend_shared_segment **tmp_shared_segments;
|
||||||
|
zend_shared_segment *shared_segments_buf[16];
|
||||||
size_t shared_segments_array_size;
|
size_t shared_segments_array_size;
|
||||||
zend_smm_shared_globals tmp_shared_globals;
|
zend_smm_shared_globals tmp_shared_globals;
|
||||||
int i;
|
int i;
|
||||||
|
@ -266,14 +267,20 @@ void zend_shared_alloc_shutdown(void)
|
||||||
tmp_shared_globals = *smm_shared_globals;
|
tmp_shared_globals = *smm_shared_globals;
|
||||||
smm_shared_globals = &tmp_shared_globals;
|
smm_shared_globals = &tmp_shared_globals;
|
||||||
shared_segments_array_size = ZSMMG(shared_segments_count) * (S_H(segment_type_size)() + sizeof(void *));
|
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)());
|
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;
|
ZSMMG(shared_segments) = tmp_shared_segments;
|
||||||
|
|
||||||
for (i = 0; i < ZSMMG(shared_segments_count); i++) {
|
for (i = 0; i < ZSMMG(shared_segments_count); i++) {
|
||||||
S_H(detach_segment)(ZSMMG(shared_segments)[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;
|
ZSMMG(shared_segments) = NULL;
|
||||||
g_shared_alloc_handler = NULL;
|
g_shared_alloc_handler = NULL;
|
||||||
#ifndef ZEND_WIN32
|
#ifndef ZEND_WIN32
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue