svn: /php/php-src/branches/PHP_5_3/sapi/fpm/fpm/ fpm_scoreboard.c fpm_scoreboard.h
| From: | Jérôme Loyet | Date: | Mon, 04 Jul 2011 22:39:15 +0000 |
| Subject: | svn: /php/php-src/branches/PHP_5_3/sapi/fpm/fpm/ fpm_scoreboard.c fpm_scoreboard.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-65406@lists.php.net to get a copy of this message | ||
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;