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) {