mirror of
https://github.com/php/php-src.git
synced 2024-11-25 10:54:15 +08:00
Formatting. Fix possible memory corruption in FPM SHM management
This commit is contained in:
parent
807004a446
commit
a22175b06f
@ -25,7 +25,7 @@ static float fpm_scoreboard_tick;
|
||||
int fpm_scoreboard_init_main() /* {{{ */
|
||||
{
|
||||
struct fpm_worker_pool_s *wp;
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
#ifdef HAVE_TIMES
|
||||
#if (defined(HAVE_SYSCONF) && defined(_SC_CLK_TCK))
|
||||
@ -42,6 +42,9 @@ int fpm_scoreboard_init_main() /* {{{ */
|
||||
|
||||
|
||||
for (wp = fpm_worker_all_pools; wp; wp = wp->next) {
|
||||
size_t scoreboard_size, scoreboard_nprocs_size;
|
||||
void *shm_mem;
|
||||
|
||||
if (wp->config->pm_max_children < 1) {
|
||||
zlog(ZLOG_ERROR, "[pool %s] Unable to create scoreboard SHM because max_client is not set", wp->config->name);
|
||||
return -1;
|
||||
@ -52,21 +55,22 @@ int fpm_scoreboard_init_main() /* {{{ */
|
||||
return -1;
|
||||
}
|
||||
|
||||
int scoreboard_size = sizeof(struct fpm_scoreboard_s) + (wp->config->pm_max_children) * sizeof(struct fpm_scoreboard_proc_s *);
|
||||
int scoreboard_nprocs_size = sizeof(struct fpm_scoreboard_proc_s) * wp->config->pm_max_children;
|
||||
void *shm_mem = fpm_shm_alloc(scoreboard_size + scoreboard_nprocs_size);
|
||||
scoreboard_size = sizeof(struct fpm_scoreboard_s) + (wp->config->pm_max_children) * sizeof(struct fpm_scoreboard_proc_s *);
|
||||
scoreboard_nprocs_size = sizeof(struct fpm_scoreboard_proc_s) * wp->config->pm_max_children;
|
||||
shm_mem = fpm_shm_alloc(scoreboard_size + scoreboard_nprocs_size);
|
||||
|
||||
if (!shm_mem) {
|
||||
return -1;
|
||||
}
|
||||
wp->scoreboard = shm_mem;
|
||||
wp->scoreboard = shm_mem;
|
||||
wp->scoreboard->nprocs = wp->config->pm_max_children;
|
||||
shm_mem += scoreboard_size;
|
||||
for (i = 0; i < wp->scoreboard->nprocs; i++) {
|
||||
shm_mem += scoreboard_size;
|
||||
|
||||
for (i = 0; i < wp->scoreboard->nprocs; i++, shm_mem += sizeof(struct fpm_scoreboard_proc_s)) {
|
||||
wp->scoreboard->procs[i] = shm_mem;
|
||||
shm_mem += sizeof(struct fpm_scoreboard_proc_s);
|
||||
}
|
||||
|
||||
wp->scoreboard->pm = wp->config->pm;
|
||||
wp->scoreboard->pm = wp->config->pm;
|
||||
wp->scoreboard->start_epoch = time(NULL);
|
||||
strlcpy(wp->scoreboard->pool, wp->config->name, sizeof(wp->scoreboard->pool));
|
||||
}
|
||||
@ -234,15 +238,15 @@ void fpm_scoreboard_proc_release(struct fpm_scoreboard_proc_s *proc) /* {{{ */
|
||||
|
||||
void fpm_scoreboard_free(struct fpm_scoreboard_s *scoreboard) /* {{{ */
|
||||
{
|
||||
int i;
|
||||
size_t scoreboard_size, scoreboard_nprocs_size;
|
||||
|
||||
if (!scoreboard) {
|
||||
zlog(ZLOG_ERROR, "**scoreboard is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
int scoreboard_size = sizeof(struct fpm_scoreboard_s) + (scoreboard->nprocs) * sizeof(struct fpm_scoreboard_proc_s *);
|
||||
int scoreboard_nprocs_size = sizeof(struct fpm_scoreboard_proc_s) * scoreboard->nprocs;
|
||||
scoreboard_size = sizeof(struct fpm_scoreboard_s) + (scoreboard->nprocs) * sizeof(struct fpm_scoreboard_proc_s *);
|
||||
scoreboard_nprocs_size = sizeof(struct fpm_scoreboard_proc_s) * scoreboard->nprocs;
|
||||
|
||||
fpm_shm_free(scoreboard, scoreboard_size + scoreboard_nprocs_size);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user