Jeff Trawick wrote:
worker MPM stack corruption in parent:

int free_slots[MAX_SPAWN_RATE];

...

/* great! we prefer these, because the new process can
* start more threads sooner. So prioritize this slot
* by putting it ahead of any slots with active threads.
*
* first, make room by moving a slot that's potentially still
* in use to the end of the array
*/
NEW CODE-> ap_assert(free_length < MAX_SPAWN_RATE);
free_slots[free_length] =
free_slots[totally_free_length];


[Tue Jan 27 12:20:19 2004] [crit] [Tue Jan 27 12:20:19 2004] file worker.c, line 1590, assertion "free_length < MAX_SPAWN_RATE" failed

I'm testing with this patch currently (so far so good):


Index: server/mpm/worker/worker.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v
retrieving revision 1.145
diff -u -r1.145 worker.c
--- server/mpm/worker/worker.c  27 Jan 2004 15:19:58 -0000      1.145
+++ server/mpm/worker/worker.c  27 Jan 2004 19:20:10 -0000
@@ -1441,7 +1441,8 @@
                 ++idle_thread_count;
             }
         }
-        if (any_dead_threads && totally_free_length < idle_spawn_rate
+        if (any_dead_threads && totally_free_length < idle_spawn_rate
+                && free_length < MAX_SPAWN_RATE
                 && (!ps->pid               /* no process in the slot */
                     || ps->quiescing)) {   /* or at least one is going away */
             if (all_dead_threads) {



Reply via email to