From a0616efadf830db1b861bd96afbac8a47dad26c5 Mon Sep 17 00:00:00 2001
From: Sree Kuchibhotla <sreek@google.com>
Date: Tue, 18 Jul 2017 23:49:49 -0700
Subject: [PATCH] Consume kicked_without_poller

---
 src/core/lib/iomgr/ev_epoll1_linux.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/core/lib/iomgr/ev_epoll1_linux.c b/src/core/lib/iomgr/ev_epoll1_linux.c
index bd7c955d03..77d59059d4 100644
--- a/src/core/lib/iomgr/ev_epoll1_linux.c
+++ b/src/core/lib/iomgr/ev_epoll1_linux.c
@@ -630,17 +630,20 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
   }
 
   /* We release pollset lock in this function at a couple of places:
-   *   1. Brielfly when assigning pollset to a neighbourhood
+   *   1. Briefly when assigning pollset to a neighbourhood
    *   2. When doing gpr_cv_wait()
    * It is possible that 'kicked_without_poller' was set to true during (1) and
    * 'shutting_down' is set to true during (1) or (2). If either of them is
    * true, this worker cannot do polling */
-
   /* TODO(sreek): Perhaps there is a better way to handle kicked_without_poller
    * case; especially when the worker is the DESIGNATED_POLLER */
 
-  return worker->kick_state == DESIGNATED_POLLER && !pollset->shutting_down &&
-         !pollset->kicked_without_poller;
+  if (pollset->kicked_without_poller) {
+    pollset->kicked_without_poller = false;
+    return false;
+  }
+
+  return worker->kick_state == DESIGNATED_POLLER && !pollset->shutting_down;
 }
 
 static bool check_neighbourhood_for_available_poller(
-- 
GitLab