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

Reply via email to