aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Vijay Pai <vpai@google.com>2017-10-11 15:19:06 -0700
committerGravatar Vijay Pai <vpai@google.com>2017-10-11 15:20:30 -0700
commit147a45ae8037332b15ec1e9ce9259aa8be6c915a (patch)
tree43115991ae10222d39d8dbcbf6e16aec7a013128 /src/core
parent5b87a52b43c1e182ef60cdbdad01b04e07a0e134 (diff)
Allow zero-duration polls in non-poller
Diffstat (limited to 'src/core')
-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