diff --git server/mpm/event/event.c server/mpm/event/event.c
index 3487f9e5..236486b8 100644
--- server/mpm/event/event.c
+++ server/mpm/event/event.c
@@ -2282,7 +2288,24 @@ static void *APR_THREAD_FUNC start_threads(apr_thread_t * thd, void *dummy)
                     }
                 }
 #endif
-                /* let the parent decide how bad this really is */
+                /* Let the parent decide how bad this really is by returning
+                 * APEXIT_CHILDSICK. If threads were created already let them
+                 * stop cleanly first to avoid deadlocks in clean_child_exit(),
+                 * just stop creating new ones here (but set resource_shortage
+                 * to return APEXIT_CHILDSICK still when the child exists).
+                 */
+                if (threads_created) {
+                    resource_shortage = 1;
+                    signal_threads(ST_GRACEFUL);
+                    if (!listener_started) {
+                        workers_may_exit = 1;
+                        ap_queue_interrupt_all(worker_queue);
+                        /* wake up main POD thread too */
+                        kill(ap_my_pid, SIGTERM);
+                    }
+                    apr_thread_exit(thd, APR_SUCCESS);
+                    return NULL;
+                }
