aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib
diff options
context:
space:
mode:
authorGravatar Jan Tattermusch <jtattermusch@google.com>2018-01-25 15:45:15 +0100
committerGravatar Jan Tattermusch <jtattermusch@google.com>2018-01-25 17:04:06 +0100
commit6fe650908f688d4ad88b8abe3631c14ec9e34c44 (patch)
tree5dbce8e20fb43eb3f11ee3111f84c355bbba99ac /src/core/lib
parent80c9631ad086f20ad49619100df61e7a15e94603 (diff)
fix: avoid doing a poll when already shutdown
Diffstat (limited to 'src/core/lib')
-rw-r--r--src/core/lib/iomgr/ev_epollex_linux.cc5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/core/lib/iomgr/ev_epollex_linux.cc b/src/core/lib/iomgr/ev_epollex_linux.cc
index 416e8384b4..54a93ecb63 100644
--- a/src/core/lib/iomgr/ev_epollex_linux.cc
+++ b/src/core/lib/iomgr/ev_epollex_linux.cc
@@ -199,6 +199,7 @@ struct grpc_pollset {
pollable* active_pollable;
bool kicked_without_poller;
grpc_closure* shutdown_closure;
+ bool already_shutdown;
grpc_pollset_worker* root_worker;
int containing_pollset_set_count;
};
@@ -562,6 +563,7 @@ static void pollset_maybe_finish_shutdown(grpc_pollset* pollset) {
pollset->containing_pollset_set_count == 0) {
GRPC_CLOSURE_SCHED(pollset->shutdown_closure, GRPC_ERROR_NONE);
pollset->shutdown_closure = nullptr;
+ pollset->already_shutdown = true;
}
}
@@ -862,7 +864,8 @@ static worker_remove_result worker_remove(grpc_pollset_worker** root_worker,
static bool begin_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
grpc_pollset_worker** worker_hdl,
grpc_millis deadline) {
- bool do_poll = (pollset->shutdown_closure == nullptr);
+ bool do_poll =
+ (pollset->shutdown_closure == nullptr && !pollset->already_shutdown);
if (worker_hdl != nullptr) *worker_hdl = worker;
worker->initialized_cv = false;
worker->kicked = false;