diff --git a/src/core/lib/promise/party.cc b/src/core/lib/promise/party.cc index ba9bb7ecc7e..59a85a234f2 100644 --- a/src/core/lib/promise/party.cc +++ b/src/core/lib/promise/party.cc @@ -29,6 +29,11 @@ #include "src/core/util/latent_see.h" #include "src/core/util/sync.h" +#ifdef GRPC_MAXIMIZE_THREADYNESS +#include "src/core/lib/iomgr/exec_ctx.h" // IWYU pragma: keep +#include "src/core/util/thd.h" // IWYU pragma: keep +#endif + namespace grpc_core { /////////////////////////////////////////////////////////////////////////////// @@ -188,13 +193,16 @@ void Party::ForceImmediateRepoll(WakeupMask mask) { void Party::RunLockedAndUnref(Party* party, uint64_t prev_state) { GRPC_LATENT_SEE_PARENT_SCOPE("Party::RunLocked"); -#if defined(GRPC_MAXIMIZE_THREADYNESS) - party->arena_->GetContext() - ->Run([party, prev_state]() { +#ifdef GRPC_MAXIMIZE_THREADYNESS + Thread thd( + "RunParty", + [party, prev_state]() { ApplicationCallbackExecCtx app_exec_ctx; ExecCtx exec_ctx; party->RunPartyAndUnref(prev_state); - }); + }, + nullptr, Thread::Options().set_joinable(false)); + thd.Start(); #else struct RunState; static thread_local RunState* g_run_state = nullptr;