From 53853d58f6108666766f9c5bf9253693a2a696f9 Mon Sep 17 00:00:00 2001 From: Sree Kuchibhotla Date: Mon, 29 Jan 2018 09:30:43 -0800 Subject: Fix an issue in epollex that was causing some workers to get indefinitely stuck in pollset_work() --- src/core/lib/iomgr/ev_epollex_linux.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/core/lib/iomgr/ev_epollex_linux.cc') diff --git a/src/core/lib/iomgr/ev_epollex_linux.cc b/src/core/lib/iomgr/ev_epollex_linux.cc index 5412358ab8..59e5beebe4 100644 --- a/src/core/lib/iomgr/ev_epollex_linux.cc +++ b/src/core/lib/iomgr/ev_epollex_linux.cc @@ -1100,6 +1100,16 @@ static grpc_error* pollset_as_multipollable_locked(grpc_pollset* pollset, case PO_EMPTY: POLLABLE_UNREF(pollset->active_pollable, "pollset"); error = pollable_create(PO_MULTI, &pollset->active_pollable); + /* Any workers currently polling on this pollset must now be woked up so + * that they can pick up the new active_pollable */ + if (grpc_polling_trace.enabled()) { + gpr_log(GPR_DEBUG, + "PS:%p active pollable transition from empty to multi", + pollset); + } + static const char* err_desc = + "pollset_as_multipollable_locked (%p): empty -> multi"; + append_error(&error, pollset_kick_all(pollset), err_desc); break; case PO_FD: gpr_mu_lock(&po_at_start->owner_fd->orphan_mu); -- cgit v1.2.3