diff --git a/src/core/lib/event_engine/thread_pool.cc b/src/core/lib/event_engine/thread_pool.cc
index 184a89be8a6..35d8c651f81 100644
--- a/src/core/lib/event_engine/thread_pool.cc
+++ b/src/core/lib/event_engine/thread_pool.cc
@@ -128,8 +128,9 @@ bool ThreadPool::Queue::Step() {
   switch (state_) {
     case State::kRunning:
       break;
-    case State::kShutdown:
     case State::kForking:
+      return false;
+    case State::kShutdown:
       if (!callbacks_.empty()) break;
       return false;
   }
diff --git a/test/core/event_engine/thread_pool_test.cc b/test/core/event_engine/thread_pool_test.cc
index e3057d308ab..a135759b69f 100644
--- a/test/core/event_engine/thread_pool_test.cc
+++ b/test/core/event_engine/thread_pool_test.cc
@@ -66,10 +66,9 @@ TEST(ThreadPoolTest, CanSurviveFork) {
   });
   gpr_log(GPR_INFO, "prepare fork");
   p.PrepareFork();
-  gpr_log(GPR_INFO, "wait for notification");
-  n.WaitForNotification();
   gpr_log(GPR_INFO, "postfork child");
   p.PostforkChild();
+  n.WaitForNotification();
   grpc_core::Notification n2;
   gpr_log(GPR_INFO, "run callback 3");
   p.Run([&n2] {
@@ -85,7 +84,10 @@ void ScheduleSelf(ThreadPool* p) {
   p->Run([p] { ScheduleSelf(p); });
 }
 
-TEST(ThreadPoolDeathTest, CanDetectStucknessAtFork) {
+// This can be re-enabled if/when the thread pool is changed to quiesce
+// pre-fork. For now, it cannot get stuck because callback execution is
+// effectively paused until after the post-fork reboot.
+TEST(ThreadPoolDeathTest, DISABLED_CanDetectStucknessAtFork) {
   ASSERT_DEATH_IF_SUPPORTED(
       [] {
         gpr_set_log_verbosity(GPR_LOG_SEVERITY_ERROR);