Go to the documentation of this file.
25 #ifdef GRPC_POSIX_SOCKET_EV
42 grpc_poll_strategy,
"all",
43 "Declares which polling engines to try when starting gRPC. "
44 "This is a comma-separated list of engines, which are tried in priority "
45 "order first -> last.")
57 #define GRPC_POLLING_API_TRACE(format, ...) \
58 if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_api_trace)) { \
59 gpr_log(GPR_INFO, "(polling-api) " format, __VA_ARGS__); \
62 #define GRPC_POLLING_API_TRACE(...)
70 int aix_poll(
struct pollfd fds[], nfds_t nfds,
int timeout) {
71 return poll(fds, nfds,
timeout);
106 static void add(
const char* beg,
const char*
end,
char*** ss,
size_t*
ns) {
112 len =
static_cast<size_t>(
end - beg);
116 *ss =
static_cast<char**
>(
gpr_realloc(*ss,
sizeof(
char**) * np));
121 static void split(
const char* s,
char*** ss,
size_t*
ns) {
122 const char*
c = strchr(s,
',');
124 add(s, s + strlen(s), ss,
ns);
131 static bool is(
const char* want,
const char* have) {
132 return 0 == strcmp(want,
"all") || 0 == strcmp(want, have);
135 static void try_engine(
const char* engine) {
137 if (g_vtables[
i] !=
nullptr && is(engine, g_vtables[
i]->
name) &&
139 0 == strcmp(engine, g_vtables[
i]->
name))) {
140 g_event_engine = g_vtables[
i];
155 if (g_vtables[
i] ==
nullptr) {
156 if (first_null ==
nullptr) first_null = &g_vtables[
i];
157 last_null = &g_vtables[
i];
164 *(add_at_head ? first_null : last_null) =
vtable;
176 char** strings =
nullptr;
180 for (
size_t i = 0; g_event_engine ==
nullptr &&
i < nstrings;
i++) {
181 try_engine(strings[
i]);
184 for (
size_t i = 0;
i < nstrings;
i++) {
189 if (g_event_engine ==
nullptr) {
202 return grpc_core::KernelSupportsErrqueue() && g_event_engine->
can_track_err;
211 GRPC_POLLING_API_TRACE(
"fd_create(%d, %s, %d)", fd,
name, track_err);
222 const char* reason) {
224 on_done, release_fd, reason);
227 g_event_engine->
fd_orphan(fd, on_done, release_fd, reason);
258 static size_t pollset_size(
void) {
return g_event_engine->
pollset_size; }
261 GRPC_POLLING_API_TRACE(
"pollset_init(%p)", pollset);
266 GRPC_POLLING_API_TRACE(
"pollset_shutdown(%p)", pollset);
271 GRPC_POLLING_API_TRACE(
"pollset_destroy(%p)", pollset);
278 GRPC_POLLING_API_TRACE(
"pollset_work(%p, %" PRId64
") begin", pollset,
282 GRPC_POLLING_API_TRACE(
"pollset_work(%p, %" PRId64
") end", pollset,
289 GRPC_POLLING_API_TRACE(
"pollset_kick(%p, %p)", pollset, specific_worker);
290 return g_event_engine->
pollset_kick(pollset, specific_worker);
294 GRPC_POLLING_API_TRACE(
"pollset_add_fd(%p, %d)", pollset,
299 void pollset_global_init() {}
300 void pollset_global_shutdown() {}
303 pollset_global_init, pollset_global_shutdown,
310 GRPC_POLLING_API_TRACE(
"pollset_set_create(%p)", pss);
315 GRPC_POLLING_API_TRACE(
"pollset_set_destroy(%p)", pollset_set);
321 GRPC_POLLING_API_TRACE(
"pollset_set_add_pollset(%p, %p)", pollset_set,
328 GRPC_POLLING_API_TRACE(
"pollset_set_del_pollset(%p, %p)", pollset_set,
335 GRPC_POLLING_API_TRACE(
"pollset_set_add_pollset_set(%p, %p)", bag, item);
341 GRPC_POLLING_API_TRACE(
"pollset_set_del_pollset_set(%p, %p)", bag, item);
346 pollset_set_create, pollset_set_destroy,
347 pollset_set_add_pollset, pollset_set_del_pollset,
348 pollset_set_add_pollset_set, pollset_set_del_pollset_set};
351 GRPC_POLLING_API_TRACE(
"pollset_set_add_fd(%p, %d)", pollset_set,
357 GRPC_POLLING_API_TRACE(
"pollset_set_del_fd(%p, %d)", pollset_set,
375 #endif // GRPC_POSIX_SOCKET_EV
struct grpc_pollset_worker grpc_pollset_worker
void grpc_pollset_set_del_fd(grpc_pollset_set *pollset_set, grpc_fd *fd)
static const grpc_transport_vtable vtable
static grpc_error_handle pollset_work(grpc_pollset *ps, grpc_pollset_worker **, grpc_core::Timestamp deadline)
grpc_core::DebugOnlyTraceFlag grpc_trace_fd_refcount
bool grpc_event_engine_can_track_errors()
grpc_core::DebugOnlyTraceFlag grpc_fd_trace
void(* pollset_set_add_pollset_set)(grpc_pollset_set *bag, grpc_pollset_set *item)
void(* fd_set_writable)(grpc_fd *fd)
#define GPR_GLOBAL_CONFIG_GET(name)
void grpc_fd_shutdown(grpc_fd *fd, grpc_error_handle why)
struct grpc_pollset_set grpc_pollset_set
int(* grpc_poll_function_type)(struct pollfd *, nfds_t, int)
bool(* is_any_background_poller_thread)(void)
void(* fd_set_readable)(grpc_fd *fd)
GPRAPI void gpr_free(void *ptr)
void grpc_register_event_engine_factory(const grpc_event_engine_vtable *vtable, bool add_at_head)
GPRAPI void * gpr_malloc(size_t size)
void grpc_event_engine_shutdown(void)
grpc_fd *(* fd_create)(int fd, const char *name, bool track_err)
const char * grpc_get_poll_strategy_name()
void(* pollset_set_del_fd)(grpc_pollset_set *pollset_set, grpc_fd *fd)
GPRAPI void gpr_once_init(gpr_once *once, void(*init_function)(void))
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
void(* pollset_set_destroy)(grpc_pollset_set *pollset_set)
GPRAPI void * gpr_realloc(void *p, size_t size)
bool grpc_add_closure_to_background_poller(grpc_closure *closure, grpc_error_handle error)
void(* pollset_init)(grpc_pollset *pollset, gpr_mu **mu)
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
void(* fd_notify_on_write)(grpc_fd *fd, grpc_closure *closure)
void grpc_fd_set_readable(grpc_fd *fd)
grpc_fd * grpc_fd_create(int fd, const char *name, bool track_err)
void(* pollset_add_fd)(grpc_pollset *pollset, struct grpc_fd *fd)
uint64_t milliseconds_after_process_epoch() const
void grpc_fd_notify_on_write(grpc_fd *fd, grpc_closure *closure)
void grpc_fd_set_error(grpc_fd *fd)
void(* fd_notify_on_error)(grpc_fd *fd, grpc_closure *closure)
bool(* fd_is_shutdown)(grpc_fd *fd)
void(* fd_orphan)(grpc_fd *fd, grpc_closure *on_done, int *release_fd, const char *reason)
void(* pollset_shutdown)(grpc_pollset *pollset, grpc_closure *closure)
std::unique_ptr< T, DefaultDeleteChar > UniquePtr
void(* pollset_destroy)(grpc_pollset *pollset)
void(* pollset_set_add_pollset)(grpc_pollset_set *pollset_set, grpc_pollset *pollset)
static void add(const char *beg, const char *end, char ***ss, size_t *ns)
void grpc_fd_notify_on_read(grpc_fd *fd, grpc_closure *closure)
bool grpc_event_engine_run_in_background()
bool grpc_fd_is_shutdown(grpc_fd *fd)
void grpc_event_engine_init(void)
#define GPR_ARRAY_SIZE(array)
void(* shutdown_background_closure)(void)
void(* fd_shutdown)(grpc_fd *fd, grpc_error_handle why)
const grpc_event_engine_vtable grpc_ev_none_posix
grpc_core::DebugOnlyTraceFlag grpc_polling_trace
void(* fd_notify_on_read)(grpc_fd *fd, grpc_closure *closure)
void grpc_shutdown_background_closure()
bool(* check_engine_available)(bool explicit_request)
void(* shutdown_engine)(void)
#define GPR_GLOBAL_CONFIG_DEFINE_STRING(name, default_value, help)
static void pollset_destroy(grpc_pollset *ps)
void grpc_pollset_add_fd(grpc_pollset *pollset, struct grpc_fd *fd)
void grpc_pollset_set_add_fd(grpc_pollset_set *pollset_set, grpc_fd *fd)
static void pollset_shutdown(grpc_pollset *, grpc_closure *closure)
void(* pollset_set_add_fd)(grpc_pollset_set *pollset_set, grpc_fd *fd)
grpc_pollset_set *(* pollset_set_create)(void)
void(* pollset_set_del_pollset)(grpc_pollset_set *pollset_set, grpc_pollset *pollset)
void grpc_fd_orphan(grpc_fd *fd, grpc_closure *on_done, int *release_fd, const char *reason)
#define GRPC_FD_TRACE(format,...)
int(* fd_wrapped_fd)(grpc_fd *fd)
bool grpc_is_any_background_poller_thread()
static grpc_error_handle pollset_kick(grpc_pollset *, grpc_pollset_worker *)
static void split(const char *s, char ***ss, size_t *ns)
grpc_poll_function_type grpc_poll_function
void(* pollset_set_del_pollset_set)(grpc_pollset_set *bag, grpc_pollset_set *item)
void grpc_fd_notify_on_error(grpc_fd *fd, grpc_closure *closure)
TraceFlag DebugOnlyTraceFlag
grpc_error_handle(* pollset_work)(grpc_pollset *pollset, grpc_pollset_worker **worker, grpc_core::Timestamp deadline)
const grpc_event_engine_vtable grpc_ev_epoll1_posix
bool(* add_closure_to_background_poller)(grpc_closure *closure, grpc_error_handle error)
grpc_error_handle(* pollset_kick)(grpc_pollset *pollset, grpc_pollset_worker *specific_worker)
void grpc_fd_set_writable(grpc_fd *fd)
void(* fd_set_error)(grpc_fd *fd)
int grpc_fd_wrapped_fd(grpc_fd *fd)
const grpc_event_engine_vtable grpc_ev_poll_posix
static void pollset_init(grpc_pollset *ps, gpr_mu **mu)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:19