grpc 1.50.0-x86_64-linux → 1.51.0-x86_64-linux
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +131 -42
- data/include/grpc/event_engine/event_engine.h +10 -3
- data/include/grpc/event_engine/slice_buffer.h +17 -0
- data/include/grpc/grpc.h +0 -10
- data/include/grpc/impl/codegen/grpc_types.h +1 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -3
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
- data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
- data/src/core/ext/filters/client_channel/client_channel.h +3 -4
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
- data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
- data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
- data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
- data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
- data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
- data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
- data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
- data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
- data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
- data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
- data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
- data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
- data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
- data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
- data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
- data/src/core/ext/xds/certificate_provider_store.cc +4 -4
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
- data/src/core/ext/xds/xds_api.cc +15 -68
- data/src/core/ext/xds/xds_api.h +3 -7
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
- data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
- data/src/core/ext/xds/xds_client.cc +122 -90
- data/src/core/ext/xds/xds_client.h +7 -2
- data/src/core/ext/xds/xds_client_grpc.cc +5 -24
- data/src/core/ext/xds/xds_cluster.cc +291 -183
- data/src/core/ext/xds/xds_cluster.h +11 -15
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
- data/src/core/ext/xds/xds_common_types.cc +208 -141
- data/src/core/ext/xds/xds_common_types.h +19 -13
- data/src/core/ext/xds/xds_endpoint.cc +214 -129
- data/src/core/ext/xds/xds_endpoint.h +4 -7
- data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
- data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
- data/src/core/ext/xds/xds_http_filters.cc +60 -73
- data/src/core/ext/xds/xds_http_filters.h +67 -19
- data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
- data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
- data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
- data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
- data/src/core/ext/xds/xds_listener.cc +459 -417
- data/src/core/ext/xds/xds_listener.h +43 -47
- data/src/core/ext/xds/xds_resource_type.h +3 -11
- data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
- data/src/core/ext/xds/xds_route_config.cc +94 -80
- data/src/core/ext/xds/xds_route_config.h +10 -10
- data/src/core/ext/xds/xds_routing.cc +2 -1
- data/src/core/ext/xds/xds_routing.h +2 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
- data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
- data/src/core/lib/address_utils/parse_address.cc +11 -10
- data/src/core/lib/channel/channel_args.h +16 -1
- data/src/core/lib/channel/channel_stack.cc +23 -20
- data/src/core/lib/channel/channel_stack.h +17 -4
- data/src/core/lib/channel/channel_stack_builder.cc +4 -7
- data/src/core/lib/channel/channel_stack_builder.h +14 -6
- data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +4 -5
- data/src/core/lib/channel/channelz.cc +1 -1
- data/src/core/lib/channel/connected_channel.cc +695 -35
- data/src/core/lib/channel/connected_channel.h +0 -4
- data/src/core/lib/channel/promise_based_filter.cc +1004 -140
- data/src/core/lib/channel/promise_based_filter.h +364 -87
- data/src/core/lib/compression/message_compress.cc +5 -5
- data/src/core/lib/debug/event_log.cc +88 -0
- data/src/core/lib/debug/event_log.h +81 -0
- data/src/core/lib/debug/histogram_view.cc +69 -0
- data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
- data/src/core/lib/debug/stats.cc +22 -119
- data/src/core/lib/debug/stats.h +29 -35
- data/src/core/lib/debug/stats_data.cc +224 -73
- data/src/core/lib/debug/stats_data.h +263 -122
- data/src/core/lib/event_engine/common_closures.h +71 -0
- data/src/core/lib/event_engine/default_event_engine.cc +38 -15
- data/src/core/lib/event_engine/default_event_engine.h +15 -3
- data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
- data/src/core/lib/event_engine/memory_allocator.cc +1 -1
- data/src/core/lib/event_engine/poller.h +10 -4
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
- data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
- data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
- data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
- data/src/core/lib/event_engine/slice.cc +7 -6
- data/src/core/lib/event_engine/slice_buffer.cc +2 -2
- data/src/core/lib/event_engine/thread_pool.cc +106 -25
- data/src/core/lib/event_engine/thread_pool.h +32 -9
- data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
- data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
- data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
- data/src/core/lib/experiments/config.cc +1 -1
- data/src/core/lib/experiments/experiments.cc +13 -2
- data/src/core/lib/experiments/experiments.h +8 -1
- data/src/core/lib/gpr/cpu_linux.cc +6 -2
- data/src/core/lib/gpr/log_linux.cc +3 -4
- data/src/core/lib/gpr/string.h +1 -1
- data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
- data/src/core/lib/gprpp/load_file.cc +75 -0
- data/src/core/lib/gprpp/load_file.h +33 -0
- data/src/core/lib/gprpp/per_cpu.h +46 -0
- data/src/core/lib/gprpp/stat_posix.cc +5 -4
- data/src/core/lib/gprpp/stat_windows.cc +3 -2
- data/src/core/lib/gprpp/status_helper.h +1 -3
- data/src/core/lib/gprpp/strerror.cc +41 -0
- data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
- data/src/core/lib/gprpp/thd_windows.cc +1 -2
- data/src/core/lib/gprpp/time.cc +3 -4
- data/src/core/lib/gprpp/time.h +13 -2
- data/src/core/lib/gprpp/validation_errors.h +18 -1
- data/src/core/lib/http/httpcli.cc +40 -44
- data/src/core/lib/http/httpcli.h +6 -5
- data/src/core/lib/http/httpcli_security_connector.cc +4 -6
- data/src/core/lib/http/parser.cc +54 -65
- data/src/core/lib/iomgr/buffer_list.cc +105 -116
- data/src/core/lib/iomgr/buffer_list.h +60 -44
- data/src/core/lib/iomgr/call_combiner.cc +11 -10
- data/src/core/lib/iomgr/call_combiner.h +3 -4
- data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
- data/src/core/lib/iomgr/closure.h +49 -5
- data/src/core/lib/iomgr/combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
- data/src/core/lib/iomgr/error.cc +27 -42
- data/src/core/lib/iomgr/error.h +22 -152
- data/src/core/lib/iomgr/ev_apple.cc +4 -4
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
- data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +2 -3
- data/src/core/lib/iomgr/executor.cc +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
- data/src/core/lib/iomgr/load_file.cc +5 -9
- data/src/core/lib/iomgr/lockfree_event.cc +10 -10
- data/src/core/lib/iomgr/pollset_windows.cc +4 -4
- data/src/core/lib/iomgr/python_util.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +8 -3
- data/src/core/lib/iomgr/resolve_address.h +3 -4
- data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
- data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
- data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
- data/src/core/lib/iomgr/socket_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
- data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
- data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
- data/src/core/lib/iomgr/tcp_posix.cc +92 -108
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
- data/src/core/lib/iomgr/tcp_windows.cc +27 -34
- data/src/core/lib/iomgr/timer.h +8 -8
- data/src/core/lib/iomgr/timer_generic.cc +9 -15
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
- data/src/core/lib/json/json_channel_args.h +42 -0
- data/src/core/lib/json/json_object_loader.cc +7 -2
- data/src/core/lib/json/json_object_loader.h +22 -0
- data/src/core/lib/json/json_util.cc +5 -5
- data/src/core/lib/json/json_util.h +4 -4
- data/src/core/lib/load_balancing/lb_policy.cc +1 -1
- data/src/core/lib/load_balancing/lb_policy.h +4 -0
- data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
- data/src/core/lib/matchers/matchers.cc +3 -4
- data/src/core/lib/promise/activity.cc +16 -2
- data/src/core/lib/promise/activity.h +38 -15
- data/src/core/lib/promise/arena_promise.h +80 -51
- data/src/core/lib/promise/context.h +13 -6
- data/src/core/lib/promise/detail/basic_seq.h +9 -28
- data/src/core/lib/promise/detail/promise_factory.h +58 -10
- data/src/core/lib/promise/detail/status.h +28 -0
- data/src/core/lib/promise/detail/switch.h +1455 -0
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
- data/src/core/lib/promise/for_each.h +129 -0
- data/src/core/lib/promise/loop.h +7 -5
- data/src/core/lib/promise/map_pipe.h +87 -0
- data/src/core/lib/promise/pipe.cc +19 -0
- data/src/core/lib/promise/pipe.h +505 -0
- data/src/core/lib/promise/poll.h +13 -0
- data/src/core/lib/promise/seq.h +3 -5
- data/src/core/lib/promise/sleep.cc +5 -4
- data/src/core/lib/promise/sleep.h +1 -2
- data/src/core/lib/promise/try_concurrently.h +341 -0
- data/src/core/lib/promise/try_seq.h +10 -13
- data/src/core/lib/resolver/server_address.cc +1 -0
- data/src/core/lib/resolver/server_address.h +1 -3
- data/src/core/lib/resource_quota/api.cc +0 -1
- data/src/core/lib/resource_quota/arena.cc +19 -0
- data/src/core/lib/resource_quota/arena.h +89 -0
- data/src/core/lib/resource_quota/memory_quota.cc +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
- data/src/core/lib/security/authorization/matchers.cc +25 -22
- data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
- data/src/core/lib/security/context/security_context.h +10 -0
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
- data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
- data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
- data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
- data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
- data/src/core/lib/security/transport/security_handshaker.cc +53 -53
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/security/transport/tsi_error.cc +6 -3
- data/src/core/lib/security/util/json_util.cc +4 -5
- data/src/core/lib/service_config/service_config.h +1 -1
- data/src/core/lib/service_config/service_config_impl.cc +111 -158
- data/src/core/lib/service_config/service_config_impl.h +14 -17
- data/src/core/lib/service_config/service_config_parser.cc +14 -31
- data/src/core/lib/service_config/service_config_parser.h +14 -10
- data/src/core/lib/slice/b64.cc +2 -2
- data/src/core/lib/slice/slice.cc +7 -1
- data/src/core/lib/slice/slice.h +19 -6
- data/src/core/lib/slice/slice_buffer.cc +13 -14
- data/src/core/lib/slice/slice_internal.h +13 -21
- data/src/core/lib/slice/slice_refcount.h +34 -19
- data/src/core/lib/surface/byte_buffer.cc +3 -4
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +1366 -239
- data/src/core/lib/surface/call.h +44 -0
- data/src/core/lib/surface/call_details.cc +3 -3
- data/src/core/lib/surface/call_trace.cc +113 -0
- data/src/core/lib/surface/call_trace.h +30 -0
- data/src/core/lib/surface/channel.cc +44 -49
- data/src/core/lib/surface/channel.h +9 -1
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/channel_stack_type.cc +4 -0
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.cc +38 -52
- data/src/core/lib/surface/init.cc +8 -39
- data/src/core/lib/surface/init_internally.h +8 -0
- data/src/core/lib/surface/lame_client.cc +10 -8
- data/src/core/lib/surface/server.cc +48 -70
- data/src/core/lib/surface/server.h +3 -4
- data/src/core/lib/surface/validate_metadata.cc +11 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/connectivity_state.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +34 -28
- data/src/core/lib/transport/error_utils.h +3 -3
- data/src/core/lib/transport/handshaker.cc +14 -14
- data/src/core/lib/transport/handshaker.h +1 -1
- data/src/core/lib/transport/handshaker_factory.h +26 -0
- data/src/core/lib/transport/handshaker_registry.cc +8 -2
- data/src/core/lib/transport/handshaker_registry.h +3 -4
- data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
- data/src/core/lib/transport/metadata_batch.h +17 -1
- data/src/core/lib/transport/parsed_metadata.cc +2 -6
- data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
- data/src/core/lib/transport/transport.cc +63 -17
- data/src/core/lib/transport/transport.h +64 -68
- data/src/core/lib/transport/transport_impl.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +7 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
- data/src/core/tsi/fake_transport_security.cc +3 -3
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/channel_spec.rb +0 -43
- data/src/ruby/spec/generic/active_call_spec.rb +12 -3
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/zlib/compress.c +3 -3
- data/third_party/zlib/crc32.c +21 -12
- data/third_party/zlib/deflate.c +112 -106
- data/third_party/zlib/deflate.h +2 -2
- data/third_party/zlib/gzlib.c +1 -1
- data/third_party/zlib/gzread.c +3 -5
- data/third_party/zlib/gzwrite.c +1 -1
- data/third_party/zlib/infback.c +10 -7
- data/third_party/zlib/inflate.c +5 -2
- data/third_party/zlib/inftrees.c +2 -2
- data/third_party/zlib/inftrees.h +1 -1
- data/third_party/zlib/trees.c +61 -62
- data/third_party/zlib/uncompr.c +2 -2
- data/third_party/zlib/zconf.h +16 -3
- data/third_party/zlib/zlib.h +10 -10
- data/third_party/zlib/zutil.c +9 -7
- data/third_party/zlib/zutil.h +1 -0
- metadata +55 -18
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
- data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
- data/src/core/lib/gpr/murmur_hash.cc +0 -82
- data/src/core/lib/gpr/murmur_hash.h +0 -29
- data/src/core/lib/gpr/tls.h +0 -156
- data/src/core/lib/promise/call_push_pull.h +0 -148
- data/src/core/lib/slice/slice_api.cc +0 -39
- data/src/core/lib/slice/slice_buffer_api.cc +0 -35
- data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -23,129 +23,270 @@
|
|
23
23
|
|
24
24
|
#include <grpc/support/port_platform.h>
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
GRPC_STATS_COUNTER_TCP_READ_ALLOC_8K,
|
37
|
-
GRPC_STATS_COUNTER_TCP_READ_ALLOC_64K,
|
38
|
-
GRPC_STATS_COUNTER_HTTP2_SETTINGS_WRITES,
|
39
|
-
GRPC_STATS_COUNTER_HTTP2_PINGS_SENT,
|
40
|
-
GRPC_STATS_COUNTER_HTTP2_WRITES_BEGUN,
|
41
|
-
GRPC_STATS_COUNTER_HTTP2_TRANSPORT_STALLS,
|
42
|
-
GRPC_STATS_COUNTER_HTTP2_STREAM_STALLS,
|
43
|
-
GRPC_STATS_COUNTER_CQ_PLUCK_CREATES,
|
44
|
-
GRPC_STATS_COUNTER_CQ_NEXT_CREATES,
|
45
|
-
GRPC_STATS_COUNTER_CQ_CALLBACK_CREATES,
|
46
|
-
GRPC_STATS_COUNTER_COUNT
|
47
|
-
} grpc_stats_counters;
|
48
|
-
extern const char* grpc_stats_counter_name[GRPC_STATS_COUNTER_COUNT];
|
49
|
-
extern const char* grpc_stats_counter_doc[GRPC_STATS_COUNTER_COUNT];
|
50
|
-
typedef enum {
|
51
|
-
GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE,
|
52
|
-
GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE,
|
53
|
-
GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE,
|
54
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_SIZE,
|
55
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_OFFER,
|
56
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE,
|
57
|
-
GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE,
|
58
|
-
GRPC_STATS_HISTOGRAM_COUNT
|
59
|
-
} grpc_stats_histograms;
|
60
|
-
extern const char* grpc_stats_histogram_name[GRPC_STATS_HISTOGRAM_COUNT];
|
61
|
-
extern const char* grpc_stats_histogram_doc[GRPC_STATS_HISTOGRAM_COUNT];
|
62
|
-
typedef enum {
|
63
|
-
GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE_FIRST_SLOT = 0,
|
64
|
-
GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE_BUCKETS = 24,
|
65
|
-
GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE_FIRST_SLOT = 24,
|
66
|
-
GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE_BUCKETS = 20,
|
67
|
-
GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE_FIRST_SLOT = 44,
|
68
|
-
GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE_BUCKETS = 10,
|
69
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_SIZE_FIRST_SLOT = 54,
|
70
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_SIZE_BUCKETS = 20,
|
71
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_FIRST_SLOT = 74,
|
72
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_BUCKETS = 20,
|
73
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE_FIRST_SLOT = 94,
|
74
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE_BUCKETS = 10,
|
75
|
-
GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE_FIRST_SLOT = 104,
|
76
|
-
GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE_BUCKETS = 20,
|
77
|
-
GRPC_STATS_HISTOGRAM_BUCKETS = 124
|
78
|
-
} grpc_stats_histogram_constants;
|
79
|
-
#define GRPC_STATS_INC_CLIENT_CALLS_CREATED() \
|
80
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CLIENT_CALLS_CREATED)
|
81
|
-
#define GRPC_STATS_INC_SERVER_CALLS_CREATED() \
|
82
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SERVER_CALLS_CREATED)
|
83
|
-
#define GRPC_STATS_INC_CLIENT_CHANNELS_CREATED() \
|
84
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CLIENT_CHANNELS_CREATED)
|
85
|
-
#define GRPC_STATS_INC_CLIENT_SUBCHANNELS_CREATED() \
|
86
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CLIENT_SUBCHANNELS_CREATED)
|
87
|
-
#define GRPC_STATS_INC_SERVER_CHANNELS_CREATED() \
|
88
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SERVER_CHANNELS_CREATED)
|
89
|
-
#define GRPC_STATS_INC_SYSCALL_WRITE() \
|
90
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SYSCALL_WRITE)
|
91
|
-
#define GRPC_STATS_INC_SYSCALL_READ() \
|
92
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_SYSCALL_READ)
|
93
|
-
#define GRPC_STATS_INC_TCP_READ_ALLOC_8K() \
|
94
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_TCP_READ_ALLOC_8K)
|
95
|
-
#define GRPC_STATS_INC_TCP_READ_ALLOC_64K() \
|
96
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_TCP_READ_ALLOC_64K)
|
97
|
-
#define GRPC_STATS_INC_HTTP2_SETTINGS_WRITES() \
|
98
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_SETTINGS_WRITES)
|
99
|
-
#define GRPC_STATS_INC_HTTP2_PINGS_SENT() \
|
100
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_PINGS_SENT)
|
101
|
-
#define GRPC_STATS_INC_HTTP2_WRITES_BEGUN() \
|
102
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_WRITES_BEGUN)
|
103
|
-
#define GRPC_STATS_INC_HTTP2_TRANSPORT_STALLS() \
|
104
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_TRANSPORT_STALLS)
|
105
|
-
#define GRPC_STATS_INC_HTTP2_STREAM_STALLS() \
|
106
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_HTTP2_STREAM_STALLS)
|
107
|
-
#define GRPC_STATS_INC_CQ_PLUCK_CREATES() \
|
108
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CQ_PLUCK_CREATES)
|
109
|
-
#define GRPC_STATS_INC_CQ_NEXT_CREATES() \
|
110
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CQ_NEXT_CREATES)
|
111
|
-
#define GRPC_STATS_INC_CQ_CALLBACK_CREATES() \
|
112
|
-
GRPC_STATS_INC_COUNTER(GRPC_STATS_COUNTER_CQ_CALLBACK_CREATES)
|
113
|
-
#define GRPC_STATS_INC_CALL_INITIAL_SIZE(value) \
|
114
|
-
GRPC_STATS_INC_HISTOGRAM( \
|
115
|
-
GRPC_STATS_HISTOGRAM_CALL_INITIAL_SIZE, \
|
116
|
-
grpc_core::BucketForHistogramValue_32768_24(static_cast<int>(value)))
|
117
|
-
#define GRPC_STATS_INC_TCP_WRITE_SIZE(value) \
|
118
|
-
GRPC_STATS_INC_HISTOGRAM( \
|
119
|
-
GRPC_STATS_HISTOGRAM_TCP_WRITE_SIZE, \
|
120
|
-
grpc_core::BucketForHistogramValue_16777216_20(static_cast<int>(value)))
|
121
|
-
#define GRPC_STATS_INC_TCP_WRITE_IOV_SIZE(value) \
|
122
|
-
GRPC_STATS_INC_HISTOGRAM( \
|
123
|
-
GRPC_STATS_HISTOGRAM_TCP_WRITE_IOV_SIZE, \
|
124
|
-
grpc_core::BucketForHistogramValue_80_10(static_cast<int>(value)))
|
125
|
-
#define GRPC_STATS_INC_TCP_READ_SIZE(value) \
|
126
|
-
GRPC_STATS_INC_HISTOGRAM( \
|
127
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_SIZE, \
|
128
|
-
grpc_core::BucketForHistogramValue_16777216_20(static_cast<int>(value)))
|
129
|
-
#define GRPC_STATS_INC_TCP_READ_OFFER(value) \
|
130
|
-
GRPC_STATS_INC_HISTOGRAM( \
|
131
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_OFFER, \
|
132
|
-
grpc_core::BucketForHistogramValue_16777216_20(static_cast<int>(value)))
|
133
|
-
#define GRPC_STATS_INC_TCP_READ_OFFER_IOV_SIZE(value) \
|
134
|
-
GRPC_STATS_INC_HISTOGRAM( \
|
135
|
-
GRPC_STATS_HISTOGRAM_TCP_READ_OFFER_IOV_SIZE, \
|
136
|
-
grpc_core::BucketForHistogramValue_80_10(static_cast<int>(value)))
|
137
|
-
#define GRPC_STATS_INC_HTTP2_SEND_MESSAGE_SIZE(value) \
|
138
|
-
GRPC_STATS_INC_HISTOGRAM( \
|
139
|
-
GRPC_STATS_HISTOGRAM_HTTP2_SEND_MESSAGE_SIZE, \
|
140
|
-
grpc_core::BucketForHistogramValue_16777216_20(static_cast<int>(value)))
|
26
|
+
#include <stdint.h>
|
27
|
+
|
28
|
+
#include <atomic>
|
29
|
+
#include <memory>
|
30
|
+
|
31
|
+
#include "absl/strings/string_view.h"
|
32
|
+
|
33
|
+
#include "src/core/lib/debug/histogram_view.h"
|
34
|
+
#include "src/core/lib/gprpp/per_cpu.h"
|
35
|
+
|
141
36
|
namespace grpc_core {
|
142
|
-
|
143
|
-
|
144
|
-
|
37
|
+
class HistogramCollector_32768_24;
|
38
|
+
class Histogram_32768_24 {
|
39
|
+
public:
|
40
|
+
static int BucketFor(int value);
|
41
|
+
const uint64_t* buckets() const { return buckets_; }
|
42
|
+
friend Histogram_32768_24 operator-(const Histogram_32768_24& left,
|
43
|
+
const Histogram_32768_24& right);
|
44
|
+
|
45
|
+
private:
|
46
|
+
friend class HistogramCollector_32768_24;
|
47
|
+
uint64_t buckets_[24]{};
|
48
|
+
};
|
49
|
+
class HistogramCollector_32768_24 {
|
50
|
+
public:
|
51
|
+
void Increment(int value) {
|
52
|
+
buckets_[Histogram_32768_24::BucketFor(value)].fetch_add(
|
53
|
+
1, std::memory_order_relaxed);
|
54
|
+
}
|
55
|
+
void Collect(Histogram_32768_24* result) const;
|
56
|
+
|
57
|
+
private:
|
58
|
+
std::atomic<uint64_t> buckets_[24]{};
|
59
|
+
};
|
60
|
+
class HistogramCollector_16777216_20;
|
61
|
+
class Histogram_16777216_20 {
|
62
|
+
public:
|
63
|
+
static int BucketFor(int value);
|
64
|
+
const uint64_t* buckets() const { return buckets_; }
|
65
|
+
friend Histogram_16777216_20 operator-(const Histogram_16777216_20& left,
|
66
|
+
const Histogram_16777216_20& right);
|
67
|
+
|
68
|
+
private:
|
69
|
+
friend class HistogramCollector_16777216_20;
|
70
|
+
uint64_t buckets_[20]{};
|
71
|
+
};
|
72
|
+
class HistogramCollector_16777216_20 {
|
73
|
+
public:
|
74
|
+
void Increment(int value) {
|
75
|
+
buckets_[Histogram_16777216_20::BucketFor(value)].fetch_add(
|
76
|
+
1, std::memory_order_relaxed);
|
77
|
+
}
|
78
|
+
void Collect(Histogram_16777216_20* result) const;
|
79
|
+
|
80
|
+
private:
|
81
|
+
std::atomic<uint64_t> buckets_[20]{};
|
82
|
+
};
|
83
|
+
class HistogramCollector_80_10;
|
84
|
+
class Histogram_80_10 {
|
85
|
+
public:
|
86
|
+
static int BucketFor(int value);
|
87
|
+
const uint64_t* buckets() const { return buckets_; }
|
88
|
+
friend Histogram_80_10 operator-(const Histogram_80_10& left,
|
89
|
+
const Histogram_80_10& right);
|
90
|
+
|
91
|
+
private:
|
92
|
+
friend class HistogramCollector_80_10;
|
93
|
+
uint64_t buckets_[10]{};
|
94
|
+
};
|
95
|
+
class HistogramCollector_80_10 {
|
96
|
+
public:
|
97
|
+
void Increment(int value) {
|
98
|
+
buckets_[Histogram_80_10::BucketFor(value)].fetch_add(
|
99
|
+
1, std::memory_order_relaxed);
|
100
|
+
}
|
101
|
+
void Collect(Histogram_80_10* result) const;
|
102
|
+
|
103
|
+
private:
|
104
|
+
std::atomic<uint64_t> buckets_[10]{};
|
105
|
+
};
|
106
|
+
struct GlobalStats {
|
107
|
+
enum class Counter {
|
108
|
+
kClientCallsCreated,
|
109
|
+
kServerCallsCreated,
|
110
|
+
kClientChannelsCreated,
|
111
|
+
kClientSubchannelsCreated,
|
112
|
+
kServerChannelsCreated,
|
113
|
+
kSyscallWrite,
|
114
|
+
kSyscallRead,
|
115
|
+
kTcpReadAlloc8k,
|
116
|
+
kTcpReadAlloc64k,
|
117
|
+
kHttp2SettingsWrites,
|
118
|
+
kHttp2PingsSent,
|
119
|
+
kHttp2WritesBegun,
|
120
|
+
kHttp2TransportStalls,
|
121
|
+
kHttp2StreamStalls,
|
122
|
+
kCqPluckCreates,
|
123
|
+
kCqNextCreates,
|
124
|
+
kCqCallbackCreates,
|
125
|
+
COUNT
|
126
|
+
};
|
127
|
+
enum class Histogram {
|
128
|
+
kCallInitialSize,
|
129
|
+
kTcpWriteSize,
|
130
|
+
kTcpWriteIovSize,
|
131
|
+
kTcpReadSize,
|
132
|
+
kTcpReadOffer,
|
133
|
+
kTcpReadOfferIovSize,
|
134
|
+
kHttp2SendMessageSize,
|
135
|
+
COUNT
|
136
|
+
};
|
137
|
+
GlobalStats();
|
138
|
+
static const absl::string_view counter_name[static_cast<int>(Counter::COUNT)];
|
139
|
+
static const absl::string_view
|
140
|
+
histogram_name[static_cast<int>(Histogram::COUNT)];
|
141
|
+
static const absl::string_view counter_doc[static_cast<int>(Counter::COUNT)];
|
142
|
+
static const absl::string_view
|
143
|
+
histogram_doc[static_cast<int>(Histogram::COUNT)];
|
144
|
+
union {
|
145
|
+
struct {
|
146
|
+
uint64_t client_calls_created;
|
147
|
+
uint64_t server_calls_created;
|
148
|
+
uint64_t client_channels_created;
|
149
|
+
uint64_t client_subchannels_created;
|
150
|
+
uint64_t server_channels_created;
|
151
|
+
uint64_t syscall_write;
|
152
|
+
uint64_t syscall_read;
|
153
|
+
uint64_t tcp_read_alloc_8k;
|
154
|
+
uint64_t tcp_read_alloc_64k;
|
155
|
+
uint64_t http2_settings_writes;
|
156
|
+
uint64_t http2_pings_sent;
|
157
|
+
uint64_t http2_writes_begun;
|
158
|
+
uint64_t http2_transport_stalls;
|
159
|
+
uint64_t http2_stream_stalls;
|
160
|
+
uint64_t cq_pluck_creates;
|
161
|
+
uint64_t cq_next_creates;
|
162
|
+
uint64_t cq_callback_creates;
|
163
|
+
};
|
164
|
+
uint64_t counters[static_cast<int>(Counter::COUNT)];
|
165
|
+
};
|
166
|
+
Histogram_32768_24 call_initial_size;
|
167
|
+
Histogram_16777216_20 tcp_write_size;
|
168
|
+
Histogram_80_10 tcp_write_iov_size;
|
169
|
+
Histogram_16777216_20 tcp_read_size;
|
170
|
+
Histogram_16777216_20 tcp_read_offer;
|
171
|
+
Histogram_80_10 tcp_read_offer_iov_size;
|
172
|
+
Histogram_16777216_20 http2_send_message_size;
|
173
|
+
HistogramView histogram(Histogram which) const;
|
174
|
+
std::unique_ptr<GlobalStats> Diff(const GlobalStats& other) const;
|
175
|
+
};
|
176
|
+
class GlobalStatsCollector {
|
177
|
+
public:
|
178
|
+
std::unique_ptr<GlobalStats> Collect() const;
|
179
|
+
void IncrementClientCallsCreated() {
|
180
|
+
data_.this_cpu().client_calls_created.fetch_add(1,
|
181
|
+
std::memory_order_relaxed);
|
182
|
+
}
|
183
|
+
void IncrementServerCallsCreated() {
|
184
|
+
data_.this_cpu().server_calls_created.fetch_add(1,
|
185
|
+
std::memory_order_relaxed);
|
186
|
+
}
|
187
|
+
void IncrementClientChannelsCreated() {
|
188
|
+
data_.this_cpu().client_channels_created.fetch_add(
|
189
|
+
1, std::memory_order_relaxed);
|
190
|
+
}
|
191
|
+
void IncrementClientSubchannelsCreated() {
|
192
|
+
data_.this_cpu().client_subchannels_created.fetch_add(
|
193
|
+
1, std::memory_order_relaxed);
|
194
|
+
}
|
195
|
+
void IncrementServerChannelsCreated() {
|
196
|
+
data_.this_cpu().server_channels_created.fetch_add(
|
197
|
+
1, std::memory_order_relaxed);
|
198
|
+
}
|
199
|
+
void IncrementSyscallWrite() {
|
200
|
+
data_.this_cpu().syscall_write.fetch_add(1, std::memory_order_relaxed);
|
201
|
+
}
|
202
|
+
void IncrementSyscallRead() {
|
203
|
+
data_.this_cpu().syscall_read.fetch_add(1, std::memory_order_relaxed);
|
204
|
+
}
|
205
|
+
void IncrementTcpReadAlloc8k() {
|
206
|
+
data_.this_cpu().tcp_read_alloc_8k.fetch_add(1, std::memory_order_relaxed);
|
207
|
+
}
|
208
|
+
void IncrementTcpReadAlloc64k() {
|
209
|
+
data_.this_cpu().tcp_read_alloc_64k.fetch_add(1, std::memory_order_relaxed);
|
210
|
+
}
|
211
|
+
void IncrementHttp2SettingsWrites() {
|
212
|
+
data_.this_cpu().http2_settings_writes.fetch_add(1,
|
213
|
+
std::memory_order_relaxed);
|
214
|
+
}
|
215
|
+
void IncrementHttp2PingsSent() {
|
216
|
+
data_.this_cpu().http2_pings_sent.fetch_add(1, std::memory_order_relaxed);
|
217
|
+
}
|
218
|
+
void IncrementHttp2WritesBegun() {
|
219
|
+
data_.this_cpu().http2_writes_begun.fetch_add(1, std::memory_order_relaxed);
|
220
|
+
}
|
221
|
+
void IncrementHttp2TransportStalls() {
|
222
|
+
data_.this_cpu().http2_transport_stalls.fetch_add(
|
223
|
+
1, std::memory_order_relaxed);
|
224
|
+
}
|
225
|
+
void IncrementHttp2StreamStalls() {
|
226
|
+
data_.this_cpu().http2_stream_stalls.fetch_add(1,
|
227
|
+
std::memory_order_relaxed);
|
228
|
+
}
|
229
|
+
void IncrementCqPluckCreates() {
|
230
|
+
data_.this_cpu().cq_pluck_creates.fetch_add(1, std::memory_order_relaxed);
|
231
|
+
}
|
232
|
+
void IncrementCqNextCreates() {
|
233
|
+
data_.this_cpu().cq_next_creates.fetch_add(1, std::memory_order_relaxed);
|
234
|
+
}
|
235
|
+
void IncrementCqCallbackCreates() {
|
236
|
+
data_.this_cpu().cq_callback_creates.fetch_add(1,
|
237
|
+
std::memory_order_relaxed);
|
238
|
+
}
|
239
|
+
void IncrementCallInitialSize(int value) {
|
240
|
+
data_.this_cpu().call_initial_size.Increment(value);
|
241
|
+
}
|
242
|
+
void IncrementTcpWriteSize(int value) {
|
243
|
+
data_.this_cpu().tcp_write_size.Increment(value);
|
244
|
+
}
|
245
|
+
void IncrementTcpWriteIovSize(int value) {
|
246
|
+
data_.this_cpu().tcp_write_iov_size.Increment(value);
|
247
|
+
}
|
248
|
+
void IncrementTcpReadSize(int value) {
|
249
|
+
data_.this_cpu().tcp_read_size.Increment(value);
|
250
|
+
}
|
251
|
+
void IncrementTcpReadOffer(int value) {
|
252
|
+
data_.this_cpu().tcp_read_offer.Increment(value);
|
253
|
+
}
|
254
|
+
void IncrementTcpReadOfferIovSize(int value) {
|
255
|
+
data_.this_cpu().tcp_read_offer_iov_size.Increment(value);
|
256
|
+
}
|
257
|
+
void IncrementHttp2SendMessageSize(int value) {
|
258
|
+
data_.this_cpu().http2_send_message_size.Increment(value);
|
259
|
+
}
|
260
|
+
|
261
|
+
private:
|
262
|
+
struct Data {
|
263
|
+
std::atomic<uint64_t> client_calls_created{0};
|
264
|
+
std::atomic<uint64_t> server_calls_created{0};
|
265
|
+
std::atomic<uint64_t> client_channels_created{0};
|
266
|
+
std::atomic<uint64_t> client_subchannels_created{0};
|
267
|
+
std::atomic<uint64_t> server_channels_created{0};
|
268
|
+
std::atomic<uint64_t> syscall_write{0};
|
269
|
+
std::atomic<uint64_t> syscall_read{0};
|
270
|
+
std::atomic<uint64_t> tcp_read_alloc_8k{0};
|
271
|
+
std::atomic<uint64_t> tcp_read_alloc_64k{0};
|
272
|
+
std::atomic<uint64_t> http2_settings_writes{0};
|
273
|
+
std::atomic<uint64_t> http2_pings_sent{0};
|
274
|
+
std::atomic<uint64_t> http2_writes_begun{0};
|
275
|
+
std::atomic<uint64_t> http2_transport_stalls{0};
|
276
|
+
std::atomic<uint64_t> http2_stream_stalls{0};
|
277
|
+
std::atomic<uint64_t> cq_pluck_creates{0};
|
278
|
+
std::atomic<uint64_t> cq_next_creates{0};
|
279
|
+
std::atomic<uint64_t> cq_callback_creates{0};
|
280
|
+
HistogramCollector_32768_24 call_initial_size;
|
281
|
+
HistogramCollector_16777216_20 tcp_write_size;
|
282
|
+
HistogramCollector_80_10 tcp_write_iov_size;
|
283
|
+
HistogramCollector_16777216_20 tcp_read_size;
|
284
|
+
HistogramCollector_16777216_20 tcp_read_offer;
|
285
|
+
HistogramCollector_80_10 tcp_read_offer_iov_size;
|
286
|
+
HistogramCollector_16777216_20 http2_send_message_size;
|
287
|
+
};
|
288
|
+
PerCpu<Data> data_;
|
289
|
+
};
|
145
290
|
} // namespace grpc_core
|
146
|
-
extern const int grpc_stats_histo_buckets[7];
|
147
|
-
extern const int grpc_stats_histo_start[7];
|
148
|
-
extern const int* const grpc_stats_histo_bucket_boundaries[7];
|
149
|
-
extern int (*const grpc_stats_get_bucket[7])(int value);
|
150
291
|
|
151
292
|
#endif /* GRPC_CORE_LIB_DEBUG_STATS_DATA_H */
|
@@ -0,0 +1,71 @@
|
|
1
|
+
// Copyright 2022 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_LIB_EVENT_ENGINE_COMMON_CLOSURES_H
|
16
|
+
#define GRPC_CORE_LIB_EVENT_ENGINE_COMMON_CLOSURES_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <utility>
|
21
|
+
|
22
|
+
#include "absl/functional/any_invocable.h"
|
23
|
+
|
24
|
+
#include <grpc/event_engine/event_engine.h>
|
25
|
+
|
26
|
+
namespace grpc_event_engine {
|
27
|
+
namespace experimental {
|
28
|
+
|
29
|
+
class AnyInvocableClosure : public EventEngine::Closure {
|
30
|
+
public:
|
31
|
+
explicit AnyInvocableClosure(absl::AnyInvocable<void()> cb)
|
32
|
+
: cb_(std::move(cb)) {}
|
33
|
+
void Run() override { cb_(); }
|
34
|
+
|
35
|
+
private:
|
36
|
+
absl::AnyInvocable<void()> cb_;
|
37
|
+
};
|
38
|
+
|
39
|
+
class SelfDeletingClosure : public EventEngine::Closure {
|
40
|
+
public:
|
41
|
+
// Creates a SelfDeletingClosure.
|
42
|
+
// The closure will be deleted after Run is called.
|
43
|
+
static Closure* Create(absl::AnyInvocable<void()> cb) {
|
44
|
+
return new SelfDeletingClosure(std::move(cb), nullptr);
|
45
|
+
}
|
46
|
+
// Creates a SelfDeletingClosure with a custom destructor.
|
47
|
+
static Closure* Create(absl::AnyInvocable<void()> cb,
|
48
|
+
absl::AnyInvocable<void()> dest_cb) {
|
49
|
+
return new SelfDeletingClosure(std::move(cb), std::move(dest_cb));
|
50
|
+
}
|
51
|
+
~SelfDeletingClosure() override {
|
52
|
+
if (dest_cb_) dest_cb_();
|
53
|
+
};
|
54
|
+
|
55
|
+
void Run() override {
|
56
|
+
cb_();
|
57
|
+
delete this;
|
58
|
+
}
|
59
|
+
|
60
|
+
private:
|
61
|
+
explicit SelfDeletingClosure(absl::AnyInvocable<void()> cb,
|
62
|
+
absl::AnyInvocable<void()> dest_cb)
|
63
|
+
: cb_(std::move(cb)), dest_cb_(std::move(dest_cb)) {}
|
64
|
+
absl::AnyInvocable<void()> cb_;
|
65
|
+
absl::AnyInvocable<void()> dest_cb_;
|
66
|
+
};
|
67
|
+
|
68
|
+
} // namespace experimental
|
69
|
+
} // namespace grpc_event_engine
|
70
|
+
|
71
|
+
#endif // GRPC_CORE_LIB_EVENT_ENGINE_COMMON_CLOSURES_H
|
@@ -23,7 +23,13 @@
|
|
23
23
|
|
24
24
|
#include <grpc/event_engine/event_engine.h>
|
25
25
|
|
26
|
+
#include "src/core/lib/channel/channel_args.h"
|
27
|
+
#include "src/core/lib/config/core_configuration.h"
|
28
|
+
#include "src/core/lib/debug/trace.h"
|
26
29
|
#include "src/core/lib/event_engine/default_event_engine_factory.h"
|
30
|
+
#include "src/core/lib/event_engine/trace.h"
|
31
|
+
#include "src/core/lib/gprpp/no_destruct.h"
|
32
|
+
#include "src/core/lib/gprpp/sync.h"
|
27
33
|
|
28
34
|
namespace grpc_event_engine {
|
29
35
|
namespace experimental {
|
@@ -31,14 +37,23 @@ namespace experimental {
|
|
31
37
|
namespace {
|
32
38
|
std::atomic<absl::AnyInvocable<std::unique_ptr<EventEngine>()>*>
|
33
39
|
g_event_engine_factory{nullptr};
|
34
|
-
|
40
|
+
grpc_core::NoDestruct<grpc_core::Mutex> g_mu;
|
41
|
+
grpc_core::NoDestruct<std::weak_ptr<EventEngine>> g_event_engine;
|
35
42
|
} // namespace
|
36
43
|
|
37
|
-
void
|
44
|
+
void SetEventEngineFactory(
|
38
45
|
absl::AnyInvocable<std::unique_ptr<EventEngine>()> factory) {
|
39
46
|
delete g_event_engine_factory.exchange(
|
40
47
|
new absl::AnyInvocable<std::unique_ptr<EventEngine>()>(
|
41
48
|
std::move(factory)));
|
49
|
+
// Forget any previous EventEngines
|
50
|
+
grpc_core::MutexLock lock(&*g_mu);
|
51
|
+
g_event_engine->reset();
|
52
|
+
}
|
53
|
+
|
54
|
+
void EventEngineFactoryReset() {
|
55
|
+
delete g_event_engine_factory.exchange(nullptr);
|
56
|
+
g_event_engine->reset();
|
42
57
|
}
|
43
58
|
|
44
59
|
std::unique_ptr<EventEngine> CreateEventEngine() {
|
@@ -48,23 +63,31 @@ std::unique_ptr<EventEngine> CreateEventEngine() {
|
|
48
63
|
return DefaultEventEngineFactory();
|
49
64
|
}
|
50
65
|
|
51
|
-
EventEngine
|
52
|
-
|
53
|
-
if (engine
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
std::memory_order_acquire)) {
|
58
|
-
engine = created;
|
59
|
-
} else {
|
60
|
-
delete created;
|
61
|
-
}
|
66
|
+
std::shared_ptr<EventEngine> GetDefaultEventEngine() {
|
67
|
+
grpc_core::MutexLock lock(&*g_mu);
|
68
|
+
if (std::shared_ptr<EventEngine> engine = g_event_engine->lock()) {
|
69
|
+
GRPC_EVENT_ENGINE_TRACE("DefaultEventEngine::%p use_count:%ld",
|
70
|
+
engine.get(), engine.use_count());
|
71
|
+
return engine;
|
62
72
|
}
|
73
|
+
std::shared_ptr<EventEngine> engine{CreateEventEngine()};
|
74
|
+
GRPC_EVENT_ENGINE_TRACE("Created DefaultEventEngine::%p", engine.get());
|
75
|
+
*g_event_engine = engine;
|
63
76
|
return engine;
|
64
77
|
}
|
65
78
|
|
66
|
-
|
67
|
-
|
79
|
+
namespace {
|
80
|
+
grpc_core::ChannelArgs EnsureEventEngineInChannelArgs(
|
81
|
+
grpc_core::ChannelArgs args) {
|
82
|
+
if (args.ContainsObject<EventEngine>()) return args;
|
83
|
+
return args.SetObject<EventEngine>(GetDefaultEventEngine());
|
84
|
+
}
|
85
|
+
} // namespace
|
86
|
+
|
87
|
+
void RegisterEventEngineChannelArgPreconditioning(
|
88
|
+
grpc_core::CoreConfiguration::Builder* builder) {
|
89
|
+
builder->channel_args_preconditioning()->RegisterStage(
|
90
|
+
grpc_event_engine::experimental::EnsureEventEngineInChannelArgs);
|
68
91
|
}
|
69
92
|
|
70
93
|
} // namespace experimental
|
@@ -17,8 +17,18 @@
|
|
17
17
|
|
18
18
|
#include <grpc/support/port_platform.h>
|
19
19
|
|
20
|
+
#include <memory>
|
21
|
+
|
20
22
|
#include <grpc/event_engine/event_engine.h>
|
21
23
|
|
24
|
+
#include "src/core/lib/config/core_configuration.h"
|
25
|
+
#include "src/core/lib/promise/context.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
template <>
|
29
|
+
struct ContextType<grpc_event_engine::experimental::EventEngine> {};
|
30
|
+
} // namespace grpc_core
|
31
|
+
|
22
32
|
namespace grpc_event_engine {
|
23
33
|
namespace experimental {
|
24
34
|
|
@@ -26,10 +36,12 @@ namespace experimental {
|
|
26
36
|
///
|
27
37
|
/// The concept of a global EventEngine may go away in a post-iomgr world.
|
28
38
|
/// Strongly consider whether you could use \a CreateEventEngine instead.
|
29
|
-
EventEngine
|
39
|
+
std::shared_ptr<EventEngine> GetDefaultEventEngine();
|
30
40
|
|
31
|
-
///
|
32
|
-
|
41
|
+
/// On ingress, ensure that an EventEngine exists in channel args via
|
42
|
+
/// preconditioning.
|
43
|
+
void RegisterEventEngineChannelArgPreconditioning(
|
44
|
+
grpc_core::CoreConfiguration::Builder* builder);
|
33
45
|
|
34
46
|
} // namespace experimental
|
35
47
|
} // namespace grpc_event_engine
|
@@ -18,8 +18,6 @@
|
|
18
18
|
|
19
19
|
#include <memory>
|
20
20
|
|
21
|
-
#include "absl/memory/memory.h"
|
22
|
-
|
23
21
|
#include <grpc/event_engine/event_engine.h>
|
24
22
|
|
25
23
|
#ifdef GPR_WINDOWS
|
@@ -29,7 +27,7 @@ namespace grpc_event_engine {
|
|
29
27
|
namespace experimental {
|
30
28
|
|
31
29
|
std::unique_ptr<EventEngine> DefaultEventEngineFactory() {
|
32
|
-
return
|
30
|
+
return std::make_unique<WindowsEventEngine>();
|
33
31
|
}
|
34
32
|
|
35
33
|
} // namespace experimental
|
@@ -41,7 +39,7 @@ namespace grpc_event_engine {
|
|
41
39
|
namespace experimental {
|
42
40
|
|
43
41
|
std::unique_ptr<EventEngine> DefaultEventEngineFactory() {
|
44
|
-
return
|
42
|
+
return std::make_unique<PosixEventEngine>();
|
45
43
|
}
|
46
44
|
|
47
45
|
} // namespace experimental
|
@@ -40,10 +40,16 @@ class Poller {
|
|
40
40
|
// polling.
|
41
41
|
//
|
42
42
|
// Returns:
|
43
|
-
// * Poller::WorkResult::kKicked if it was Kicked.
|
44
|
-
//
|
45
|
-
//
|
46
|
-
//
|
43
|
+
// * Poller::WorkResult::kKicked if it was Kicked. A poller that was Kicked
|
44
|
+
// may still process some events and if so, it may have run the
|
45
|
+
// schedule_poll_again callback function synchronously. When the poller
|
46
|
+
// returns Poller::WorkResult::kKicked tts upto the user to determine
|
47
|
+
// if the schedule_poll_again callback has run or not.
|
48
|
+
// * Poller::WorkResult::kDeadlineExceeded if timeout occurred. The
|
49
|
+
// schedule_poll_again callback is not run in this case.
|
50
|
+
// * Poller::WorkResult::kOk, otherwise indicating that the
|
51
|
+
// schedule_poll_again callback function was run synchonously before some
|
52
|
+
// events were processed.
|
47
53
|
virtual WorkResult Work(EventEngine::Duration timeout,
|
48
54
|
absl::FunctionRef<void()> schedule_poll_again) = 0;
|
49
55
|
// Trigger the threads executing Work(..) to break out as soon as possible.
|