diff options
author | Vijay Pai <vpai@google.com> | 2017-10-11 21:56:10 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-11 21:56:10 -0700 |
commit | 45ca857ad007fcdc42a9f01c830de0c3bb33ffd8 (patch) | |
tree | 775bc70e053b90ed9244636c5bc841feb7d8d605 | |
parent | 6b7ffa01b1a962ccc7249de2c642af698aa60d26 (diff) | |
parent | 147a45ae8037332b15ec1e9ce9259aa8be6c915a (diff) |
Merge pull request #12965 from vjpai/fix_no_poll
Fix forward of sanitized non-polling (#12953)
-rw-r--r-- | src/core/lib/iomgr/ev_posix.cc | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/core/lib/iomgr/ev_posix.cc b/src/core/lib/iomgr/ev_posix.cc index 369baa621f..3a1dd8d30b 100644 --- a/src/core/lib/iomgr/ev_posix.cc +++ b/src/core/lib/iomgr/ev_posix.cc @@ -62,18 +62,31 @@ typedef struct { } event_engine_factory; namespace { + extern "C" { -int dummypoll(struct pollfd fds[], nfds_t nfds, int timeout) { - gpr_log(GPR_ERROR, "Attempted to poll despite declaring non-polling."); - GPR_ASSERT(false); - return -1; + +grpc_poll_function_type real_poll_function; + +int dummy_poll(struct pollfd fds[], nfds_t nfds, int timeout) { + if (timeout == 0) { + return real_poll_function(fds, nfds, 0); + } else { + gpr_log(GPR_ERROR, "Attempted a blocking poll when declared non-polling."); + GPR_ASSERT(false); + return -1; + } } } // extern "C" const grpc_event_engine_vtable *init_non_polling(bool explicit_request) { + if (!explicit_request) { + return nullptr; + } // return the simplest engine as a dummy but also override the poller auto ret = grpc_init_poll_posix(explicit_request); - grpc_poll_function = dummypoll; + real_poll_function = grpc_poll_function; + grpc_poll_function = dummy_poll; + return ret; } } // namespace |