From d37d142a6339ba1ea600fe4c2002971dc8337949 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Tue, 18 Apr 2017 19:41:07 +0000 Subject: [PATCH] sync fixes --- src/core/lib/iomgr/ev_epollex_linux.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/core/lib/iomgr/ev_epollex_linux.c b/src/core/lib/iomgr/ev_epollex_linux.c index 4f221a5f22f..d6504f5bace 100644 --- a/src/core/lib/iomgr/ev_epollex_linux.c +++ b/src/core/lib/iomgr/ev_epollex_linux.c @@ -711,11 +711,17 @@ static grpc_error *pollset_kick_inner(grpc_pollset *pollset, pollable *p, } return GRPC_ERROR_NONE; } + } else if (specific_worker->kicked) { + if (grpc_polling_trace) { + gpr_log(GPR_DEBUG, "PS:%p kicked_specific_but_already_kicked", p); + } + return GRPC_ERROR_NONE; } else if (gpr_tls_get(&g_current_thread_worker) == (intptr_t)specific_worker) { if (grpc_polling_trace) { gpr_log(GPR_DEBUG, "PS:%p kicked_specific_but_awake", p); } + specific_worker->kicked = true; return GRPC_ERROR_NONE; } else if (specific_worker == p->root_worker) { if (grpc_polling_trace) { @@ -723,6 +729,7 @@ static grpc_error *pollset_kick_inner(grpc_pollset *pollset, pollable *p, } grpc_error *err = pollable_materialize(p); if (err != GRPC_ERROR_NONE) return err; + specific_worker->kicked = true; return grpc_wakeup_fd_wakeup(&p->wakeup); } else { if (grpc_polling_trace) {