|
|
|
@ -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
|
|
|
|
|