fat Mon, 04 Jul 2011 22:39:15 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=312916
Log: alloc SHM for all children at startup to ensure all SHM will be reachable from children over the ages Changed paths: U php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_scoreboard.c U php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_scoreboard.h Modified: php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_scoreboard.c =================================================================== --- php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_scoreboard.c 2011-07-04 21:37:28 UTC (rev 312915) +++ php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_scoreboard.c 2011-07-04 22:39:15 UTC (rev 312916) @@ -40,7 +40,11 @@ } wp->scoreboard->nprocs = wp->config->pm_max_children; for (i=0; i<wp->scoreboard->nprocs; i++) { - wp->scoreboard->procs[i] = NULL; + wp->scoreboard->procs[i] = fpm_shm_alloc(sizeof(struct fpm_scoreboard_proc_s)); + if (!wp->scoreboard->procs[i]) { + return -1; + } + memset(wp->scoreboard->procs[i], 0, sizeof(struct fpm_scoreboard_proc_s)); } wp->scoreboard->pm = wp->config->pm; @@ -242,9 +246,8 @@ return; } - if (scoreboard->procs[child_index]) { - fpm_shm_free(scoreboard->procs[child_index], sizeof(struct fpm_scoreboard_proc_s)); - scoreboard->procs[child_index] = NULL; + if (scoreboard->procs[child_index] && scoreboard->procs[child_index]->used > 0) { + memset(scoreboard->procs[child_index], 0, sizeof(struct fpm_scoreboard_proc_s)); } /* set this slot as free to avoid search on next alloc */ @@ -262,7 +265,7 @@ /* first try the slot which is supposed to be free */ if (scoreboard->free_proc >= 0 && scoreboard->free_proc < scoreboard->nprocs) { - if (!scoreboard->procs[scoreboard->free_proc]) { + if (scoreboard->procs[scoreboard->free_proc] && !scoreboard->procs[scoreboard->free_proc]->used) { i = scoreboard->free_proc; } } @@ -270,7 +273,7 @@ if (i < 0) { /* the supposed free slot is not, let's search for a free slot */ zlog(ZLOG_DEBUG, "[pool %s] the proc->free_slot was not free. Let's search", scoreboard->pool); for (i=0; i<scoreboard->nprocs; i++) { - if (!scoreboard->procs[i]) { /* found */ + if (scoreboard->procs[i] && !scoreboard->procs[i]->used) { /* found */ break; } } @@ -282,10 +285,7 @@ return -1; } - scoreboard->procs[i] = fpm_shm_alloc(sizeof(struct fpm_scoreboard_proc_s)); - if (!scoreboard->procs[i]) { - return -1; - } + scoreboard->procs[i]->used = 1; *child_index = i; /* supposed next slot is free */ Modified: php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_scoreboard.h =================================================================== --- php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_scoreboard.h 2011-07-04 21:37:28 UTC (rev 312915) +++ php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_scoreboard.h 2011-07-04 22:39:15 UTC (rev 312916) @@ -22,6 +22,7 @@ atomic_t lock; char dummy[16]; }; + int used; pid_t pid; enum fpm_request_stage_e request_stage; struct timeval accepted;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php