aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Sree Kuchibhotla <sreecha@users.noreply.github.com>2018-01-30 15:29:27 -0800
committerGravatar GitHub <noreply@github.com>2018-01-30 15:29:27 -0800
commitef4df6011019e21f54d7b0cbfc5444b9112168d7 (patch)
treefe028787d56e11b1b19b944dac62a46de657d762
parent8d98bf2379c257fbd65b71a6707ef34ca4718da7 (diff)
parent9f91136fe637d19a46d6e495138d16f7b7c61dba (diff)
Merge pull request #14217 from sreecha/epollex-fix
Fix an issue in epollex that was causing some workers to get stuck in pollset_work()
-rw-r--r--src/core/lib/iomgr/ev_epollex_linux.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/core/lib/iomgr/ev_epollex_linux.cc b/src/core/lib/iomgr/ev_epollex_linux.cc
index 982612f402..178ebd8977 100644
--- a/src/core/lib/iomgr/ev_epollex_linux.cc
+++ b/src/core/lib/iomgr/ev_epollex_linux.cc
@@ -1110,6 +1110,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: 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);