diff options
author | 2018-01-29 09:30:43 -0800 | |
---|---|---|
committer | 2018-01-29 09:30:43 -0800 | |
commit | 53853d58f6108666766f9c5bf9253693a2a696f9 (patch) | |
tree | a33be0b48af3644c3b02ce3166dade6fd5eea676 /src/core/lib | |
parent | 123547c9625c56fdf5cb4ddd1df55ae0c785fa60 (diff) |
Fix an issue in epollex that was causing some workers to get indefinitely stuck in pollset_work()
Diffstat (limited to 'src/core/lib')
-rw-r--r-- | src/core/lib/iomgr/ev_epollex_linux.cc | 10 |
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 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); |