aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Vijay Pai <vpai@google.com>2017-10-11 21:56:10 -0700
committerGravatar GitHub <noreply@github.com>2017-10-11 21:56:10 -0700
commit45ca857ad007fcdc42a9f01c830de0c3bb33ffd8 (patch)
tree775bc70e053b90ed9244636c5bc841feb7d8d605
parent6b7ffa01b1a962ccc7249de2c642af698aa60d26 (diff)
parent147a45ae8037332b15ec1e9ce9259aa8be6c915a (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.cc23
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