grpc-z 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +1 -0
- data/Makefile +23896 -0
- data/etc/roots.pem +4475 -0
- data/include/grpc/byte_buffer.h +27 -0
- data/include/grpc/byte_buffer_reader.h +26 -0
- data/include/grpc/census.h +40 -0
- data/include/grpc/compression.h +75 -0
- data/include/grpc/fork.h +26 -0
- data/include/grpc/grpc.h +469 -0
- data/include/grpc/grpc_cronet.h +38 -0
- data/include/grpc/grpc_posix.h +67 -0
- data/include/grpc/grpc_security.h +495 -0
- data/include/grpc/grpc_security_constants.h +107 -0
- data/include/grpc/impl/codegen/atm.h +95 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +91 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +83 -0
- data/include/grpc/impl/codegen/atm_windows.h +126 -0
- data/include/grpc/impl/codegen/byte_buffer.h +88 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +42 -0
- data/include/grpc/impl/codegen/compression_types.h +107 -0
- data/include/grpc/impl/codegen/connectivity_state.h +44 -0
- data/include/grpc/impl/codegen/fork.h +48 -0
- data/include/grpc/impl/codegen/gpr_slice.h +69 -0
- data/include/grpc/impl/codegen/gpr_types.h +59 -0
- data/include/grpc/impl/codegen/grpc_types.h +669 -0
- data/include/grpc/impl/codegen/port_platform.h +507 -0
- data/include/grpc/impl/codegen/propagation_bits.h +52 -0
- data/include/grpc/impl/codegen/slice.h +147 -0
- data/include/grpc/impl/codegen/status.h +153 -0
- data/include/grpc/impl/codegen/sync.h +63 -0
- data/include/grpc/impl/codegen/sync_custom.h +38 -0
- data/include/grpc/impl/codegen/sync_generic.h +48 -0
- data/include/grpc/impl/codegen/sync_posix.h +34 -0
- data/include/grpc/impl/codegen/sync_windows.h +36 -0
- data/include/grpc/load_reporting.h +48 -0
- data/include/grpc/module.modulemap +74 -0
- data/include/grpc/slice.h +172 -0
- data/include/grpc/slice_buffer.h +84 -0
- data/include/grpc/status.h +26 -0
- data/include/grpc/support/alloc.h +68 -0
- data/include/grpc/support/atm.h +26 -0
- data/include/grpc/support/atm_gcc_atomic.h +26 -0
- data/include/grpc/support/atm_gcc_sync.h +26 -0
- data/include/grpc/support/atm_windows.h +26 -0
- data/include/grpc/support/cpu.h +44 -0
- data/include/grpc/support/log.h +104 -0
- data/include/grpc/support/log_windows.h +38 -0
- data/include/grpc/support/port_platform.h +24 -0
- data/include/grpc/support/string_util.h +49 -0
- data/include/grpc/support/sync.h +298 -0
- data/include/grpc/support/sync_custom.h +26 -0
- data/include/grpc/support/sync_generic.h +26 -0
- data/include/grpc/support/sync_posix.h +26 -0
- data/include/grpc/support/sync_windows.h +26 -0
- data/include/grpc/support/thd_id.h +44 -0
- data/include/grpc/support/time.h +92 -0
- data/include/grpc/support/workaround_list.h +31 -0
- data/src/boringssl/err_data.c +1348 -0
- data/src/core/ext/census/grpc_context.cc +38 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +174 -0
- data/src/core/ext/filters/client_channel/backup_poller.h +35 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +248 -0
- data/src/core/ext/filters/client_channel/client_channel.cc +3209 -0
- data/src/core/ext/filters/client_channel/client_channel.h +57 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +67 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +74 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +62 -0
- data/src/core/ext/filters/client_channel/connector.cc +41 -0
- data/src/core/ext/filters/client_channel/connector.h +73 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +370 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +34 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +195 -0
- data/src/core/ext/filters/client_channel/http_proxy.h +24 -0
- data/src/core/ext/filters/client_channel/lb_policy.cc +59 -0
- data/src/core/ext/filters/client_channel/lb_policy.h +201 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +138 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +29 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1906 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +36 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +108 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +152 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +67 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +304 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +88 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +102 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +190 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +591 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +687 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +253 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +136 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +155 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +127 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +97 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +54 -0
- data/src/core/ext/filters/client_channel/method_params.cc +178 -0
- data/src/core/ext/filters/client_channel/method_params.h +74 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +192 -0
- data/src/core/ext/filters/client_channel/parse_address.h +50 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.cc +48 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +74 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +122 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +44 -0
- data/src/core/ext/filters/client_channel/resolver.cc +35 -0
- data/src/core/ext/filters/client_channel/resolver.h +134 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +493 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +53 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +351 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +593 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +74 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +59 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +340 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +297 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +83 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +214 -0
- data/src/core/ext/filters/client_channel/resolver_factory.h +71 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +178 -0
- data/src/core/ext/filters/client_channel/resolver_registry.h +83 -0
- data/src/core/ext/filters/client_channel/retry_throttle.cc +191 -0
- data/src/core/ext/filters/client_channel/retry_throttle.h +77 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +815 -0
- data/src/core/ext/filters/client_channel/subchannel.h +183 -0
- data/src/core/ext/filters/client_channel/subchannel_index.cc +254 -0
- data/src/core/ext/filters/client_channel/subchannel_index.h +79 -0
- data/src/core/ext/filters/client_channel/uri_parser.cc +314 -0
- data/src/core/ext/filters/client_channel/uri_parser.h +50 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +386 -0
- data/src/core/ext/filters/deadline/deadline_filter.h +93 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +558 -0
- data/src/core/ext/filters/http/client/http_client_filter.h +31 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +156 -0
- data/src/core/ext/filters/http/client_authority_filter.h +34 -0
- data/src/core/ext/filters/http/http_filters_plugin.cc +89 -0
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +499 -0
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +53 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +434 -0
- data/src/core/ext/filters/http/server/http_server_filter.h +29 -0
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +222 -0
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +30 -0
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +71 -0
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +61 -0
- data/src/core/ext/filters/max_age/max_age_filter.cc +543 -0
- data/src/core/ext/filters/max_age/max_age_filter.h +26 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +324 -0
- data/src/core/ext/filters/message_size/message_size_filter.h +26 -0
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +208 -0
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +27 -0
- data/src/core/ext/filters/workarounds/workaround_utils.cc +53 -0
- data/src/core/ext/filters/workarounds/workaround_utils.h +39 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +44 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.h +36 -0
- data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
- data/src/core/ext/transport/chttp2/client/authority.h +36 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +229 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -0
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +110 -0
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +79 -0
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +230 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +353 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +45 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +74 -0
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +89 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +249 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +56 -0
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +231 -0
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +41 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +35 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3102 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +45 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +405 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +482 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +47 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +314 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.h +84 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +186 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +62 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +131 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +45 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +112 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +43 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +238 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +60 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +122 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +45 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +699 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1680 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +109 -0
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +368 -0
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +95 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +62 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +62 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +92 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +33 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +73 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +49 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +799 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +745 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +216 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +167 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.h +68 -0
- data/src/core/ext/transport/chttp2/transport/varint.cc +56 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +60 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +641 -0
- data/src/core/ext/transport/inproc/inproc_plugin.cc +28 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +1240 -0
- data/src/core/ext/transport/inproc/inproc_transport.h +35 -0
- data/src/core/lib/avl/avl.cc +306 -0
- data/src/core/lib/avl/avl.h +94 -0
- data/src/core/lib/backoff/backoff.cc +78 -0
- data/src/core/lib/backoff/backoff.h +89 -0
- data/src/core/lib/channel/channel_args.cc +413 -0
- data/src/core/lib/channel/channel_args.h +127 -0
- data/src/core/lib/channel/channel_stack.cc +258 -0
- data/src/core/lib/channel/channel_stack.h +280 -0
- data/src/core/lib/channel/channel_stack_builder.cc +314 -0
- data/src/core/lib/channel/channel_stack_builder.h +160 -0
- data/src/core/lib/channel/channel_trace.cc +239 -0
- data/src/core/lib/channel/channel_trace.h +133 -0
- data/src/core/lib/channel/channel_trace_registry.cc +80 -0
- data/src/core/lib/channel/channel_trace_registry.h +43 -0
- data/src/core/lib/channel/connected_channel.cc +236 -0
- data/src/core/lib/channel/connected_channel.h +34 -0
- data/src/core/lib/channel/context.h +49 -0
- data/src/core/lib/channel/handshaker.cc +259 -0
- data/src/core/lib/channel/handshaker.h +166 -0
- data/src/core/lib/channel/handshaker_factory.cc +41 -0
- data/src/core/lib/channel/handshaker_factory.h +50 -0
- data/src/core/lib/channel/handshaker_registry.cc +97 -0
- data/src/core/lib/channel/handshaker_registry.h +48 -0
- data/src/core/lib/channel/status_util.cc +100 -0
- data/src/core/lib/channel/status_util.h +58 -0
- data/src/core/lib/compression/algorithm_metadata.h +61 -0
- data/src/core/lib/compression/compression.cc +174 -0
- data/src/core/lib/compression/compression_internal.cc +276 -0
- data/src/core/lib/compression/compression_internal.h +88 -0
- data/src/core/lib/compression/message_compress.cc +187 -0
- data/src/core/lib/compression/message_compress.h +40 -0
- data/src/core/lib/compression/stream_compression.cc +79 -0
- data/src/core/lib/compression/stream_compression.h +116 -0
- data/src/core/lib/compression/stream_compression_gzip.cc +230 -0
- data/src/core/lib/compression/stream_compression_gzip.h +28 -0
- data/src/core/lib/compression/stream_compression_identity.cc +94 -0
- data/src/core/lib/compression/stream_compression_identity.h +29 -0
- data/src/core/lib/debug/stats.cc +178 -0
- data/src/core/lib/debug/stats.h +61 -0
- data/src/core/lib/debug/stats_data.cc +682 -0
- data/src/core/lib/debug/stats_data.h +435 -0
- data/src/core/lib/debug/trace.cc +144 -0
- data/src/core/lib/debug/trace.h +104 -0
- data/src/core/lib/gpr/alloc.cc +99 -0
- data/src/core/lib/gpr/arena.cc +152 -0
- data/src/core/lib/gpr/arena.h +41 -0
- data/src/core/lib/gpr/atm.cc +35 -0
- data/src/core/lib/gpr/cpu_iphone.cc +36 -0
- data/src/core/lib/gpr/cpu_linux.cc +82 -0
- data/src/core/lib/gpr/cpu_posix.cc +81 -0
- data/src/core/lib/gpr/cpu_windows.cc +33 -0
- data/src/core/lib/gpr/env.h +43 -0
- data/src/core/lib/gpr/env_linux.cc +82 -0
- data/src/core/lib/gpr/env_posix.cc +47 -0
- data/src/core/lib/gpr/env_windows.cc +72 -0
- data/src/core/lib/gpr/fork.cc +78 -0
- data/src/core/lib/gpr/fork.h +35 -0
- data/src/core/lib/gpr/host_port.cc +98 -0
- data/src/core/lib/gpr/host_port.h +43 -0
- data/src/core/lib/gpr/log.cc +96 -0
- data/src/core/lib/gpr/log_android.cc +72 -0
- data/src/core/lib/gpr/log_linux.cc +93 -0
- data/src/core/lib/gpr/log_posix.cc +90 -0
- data/src/core/lib/gpr/log_windows.cc +97 -0
- data/src/core/lib/gpr/mpscq.cc +117 -0
- data/src/core/lib/gpr/mpscq.h +86 -0
- data/src/core/lib/gpr/murmur_hash.cc +80 -0
- data/src/core/lib/gpr/murmur_hash.h +29 -0
- data/src/core/lib/gpr/spinlock.h +46 -0
- data/src/core/lib/gpr/string.cc +319 -0
- data/src/core/lib/gpr/string.h +109 -0
- data/src/core/lib/gpr/string_posix.cc +72 -0
- data/src/core/lib/gpr/string_util_windows.cc +82 -0
- data/src/core/lib/gpr/string_windows.cc +69 -0
- data/src/core/lib/gpr/string_windows.h +32 -0
- data/src/core/lib/gpr/sync.cc +124 -0
- data/src/core/lib/gpr/sync_posix.cc +107 -0
- data/src/core/lib/gpr/sync_windows.cc +118 -0
- data/src/core/lib/gpr/time.cc +251 -0
- data/src/core/lib/gpr/time_posix.cc +167 -0
- data/src/core/lib/gpr/time_precise.cc +78 -0
- data/src/core/lib/gpr/time_precise.h +29 -0
- data/src/core/lib/gpr/time_windows.cc +98 -0
- data/src/core/lib/gpr/tls.h +68 -0
- data/src/core/lib/gpr/tls_gcc.h +52 -0
- data/src/core/lib/gpr/tls_msvc.h +52 -0
- data/src/core/lib/gpr/tls_pthread.cc +30 -0
- data/src/core/lib/gpr/tls_pthread.h +56 -0
- data/src/core/lib/gpr/tmpfile.h +32 -0
- data/src/core/lib/gpr/tmpfile_msys.cc +58 -0
- data/src/core/lib/gpr/tmpfile_posix.cc +70 -0
- data/src/core/lib/gpr/tmpfile_windows.cc +69 -0
- data/src/core/lib/gpr/useful.h +65 -0
- data/src/core/lib/gpr/wrap_memcpy.cc +42 -0
- data/src/core/lib/gprpp/abstract.h +34 -0
- data/src/core/lib/gprpp/atomic.h +30 -0
- data/src/core/lib/gprpp/atomic_with_atm.h +57 -0
- data/src/core/lib/gprpp/atomic_with_std.h +35 -0
- data/src/core/lib/gprpp/debug_location.h +52 -0
- data/src/core/lib/gprpp/inlined_vector.h +136 -0
- data/src/core/lib/gprpp/manual_constructor.h +213 -0
- data/src/core/lib/gprpp/memory.h +111 -0
- data/src/core/lib/gprpp/orphanable.h +199 -0
- data/src/core/lib/gprpp/ref_counted.h +169 -0
- data/src/core/lib/gprpp/ref_counted_ptr.h +112 -0
- data/src/core/lib/gprpp/thd.h +135 -0
- data/src/core/lib/gprpp/thd_posix.cc +209 -0
- data/src/core/lib/gprpp/thd_windows.cc +162 -0
- data/src/core/lib/http/format_request.cc +122 -0
- data/src/core/lib/http/format_request.h +34 -0
- data/src/core/lib/http/httpcli.cc +303 -0
- data/src/core/lib/http/httpcli.h +127 -0
- data/src/core/lib/http/httpcli_security_connector.cc +202 -0
- data/src/core/lib/http/parser.cc +371 -0
- data/src/core/lib/http/parser.h +113 -0
- data/src/core/lib/iomgr/block_annotate.h +57 -0
- data/src/core/lib/iomgr/call_combiner.cc +212 -0
- data/src/core/lib/iomgr/call_combiner.h +112 -0
- data/src/core/lib/iomgr/closure.h +351 -0
- data/src/core/lib/iomgr/combiner.cc +358 -0
- data/src/core/lib/iomgr/combiner.h +66 -0
- data/src/core/lib/iomgr/endpoint.cc +63 -0
- data/src/core/lib/iomgr/endpoint.h +98 -0
- data/src/core/lib/iomgr/endpoint_pair.h +34 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +73 -0
- data/src/core/lib/iomgr/endpoint_pair_uv.cc +40 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +87 -0
- data/src/core/lib/iomgr/error.cc +793 -0
- data/src/core/lib/iomgr/error.h +207 -0
- data/src/core/lib/iomgr/error_internal.h +63 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +1248 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.h +31 -0
- data/src/core/lib/iomgr/ev_epollex_linux.cc +1494 -0
- data/src/core/lib/iomgr/ev_epollex_linux.h +30 -0
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +1735 -0
- data/src/core/lib/iomgr/ev_epollsig_linux.h +35 -0
- data/src/core/lib/iomgr/ev_poll_posix.cc +1758 -0
- data/src/core/lib/iomgr/ev_poll_posix.h +29 -0
- data/src/core/lib/iomgr/ev_posix.cc +330 -0
- data/src/core/lib/iomgr/ev_posix.h +145 -0
- data/src/core/lib/iomgr/ev_windows.cc +30 -0
- data/src/core/lib/iomgr/exec_ctx.cc +147 -0
- data/src/core/lib/iomgr/exec_ctx.h +210 -0
- data/src/core/lib/iomgr/executor.cc +301 -0
- data/src/core/lib/iomgr/executor.h +50 -0
- data/src/core/lib/iomgr/fork_posix.cc +89 -0
- data/src/core/lib/iomgr/fork_windows.cc +41 -0
- data/src/core/lib/iomgr/gethostname.h +26 -0
- data/src/core/lib/iomgr/gethostname_fallback.cc +30 -0
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +40 -0
- data/src/core/lib/iomgr/gethostname_sysconf.cc +40 -0
- data/src/core/lib/iomgr/iocp_windows.cc +152 -0
- data/src/core/lib/iomgr/iocp_windows.h +48 -0
- data/src/core/lib/iomgr/iomgr.cc +178 -0
- data/src/core/lib/iomgr/iomgr.h +36 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +63 -0
- data/src/core/lib/iomgr/iomgr_custom.h +47 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +43 -0
- data/src/core/lib/iomgr/iomgr_internal.h +57 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +67 -0
- data/src/core/lib/iomgr/iomgr_posix.h +26 -0
- data/src/core/lib/iomgr/iomgr_uv.cc +40 -0
- data/src/core/lib/iomgr/iomgr_windows.cc +87 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +104 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.h +36 -0
- data/src/core/lib/iomgr/load_file.cc +80 -0
- data/src/core/lib/iomgr/load_file.h +35 -0
- data/src/core/lib/iomgr/lockfree_event.cc +250 -0
- data/src/core/lib/iomgr/lockfree_event.h +72 -0
- data/src/core/lib/iomgr/nameser.h +106 -0
- data/src/core/lib/iomgr/network_status_tracker.cc +36 -0
- data/src/core/lib/iomgr/network_status_tracker.h +32 -0
- data/src/core/lib/iomgr/polling_entity.cc +87 -0
- data/src/core/lib/iomgr/polling_entity.h +68 -0
- data/src/core/lib/iomgr/pollset.cc +56 -0
- data/src/core/lib/iomgr/pollset.h +99 -0
- data/src/core/lib/iomgr/pollset_custom.cc +106 -0
- data/src/core/lib/iomgr/pollset_custom.h +35 -0
- data/src/core/lib/iomgr/pollset_set.cc +55 -0
- data/src/core/lib/iomgr/pollset_set.h +55 -0
- data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
- data/src/core/lib/iomgr/pollset_set_custom.h +26 -0
- data/src/core/lib/iomgr/pollset_set_windows.cc +51 -0
- data/src/core/lib/iomgr/pollset_set_windows.h +26 -0
- data/src/core/lib/iomgr/pollset_uv.cc +93 -0
- data/src/core/lib/iomgr/pollset_windows.cc +229 -0
- data/src/core/lib/iomgr/pollset_windows.h +70 -0
- data/src/core/lib/iomgr/port.h +147 -0
- data/src/core/lib/iomgr/resolve_address.cc +50 -0
- data/src/core/lib/iomgr/resolve_address.h +83 -0
- data/src/core/lib/iomgr/resolve_address_custom.cc +187 -0
- data/src/core/lib/iomgr/resolve_address_custom.h +43 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +180 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +165 -0
- data/src/core/lib/iomgr/resource_quota.cc +871 -0
- data/src/core/lib/iomgr/resource_quota.h +142 -0
- data/src/core/lib/iomgr/sockaddr.h +32 -0
- data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
- data/src/core/lib/iomgr/sockaddr_posix.h +55 -0
- data/src/core/lib/iomgr/sockaddr_utils.cc +298 -0
- data/src/core/lib/iomgr/sockaddr_utils.h +84 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +55 -0
- data/src/core/lib/iomgr/socket_factory_posix.cc +94 -0
- data/src/core/lib/iomgr/socket_factory_posix.h +69 -0
- data/src/core/lib/iomgr/socket_mutator.cc +83 -0
- data/src/core/lib/iomgr/socket_mutator.h +61 -0
- data/src/core/lib/iomgr/socket_utils.h +38 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +327 -0
- data/src/core/lib/iomgr/socket_utils_linux.cc +43 -0
- data/src/core/lib/iomgr/socket_utils_posix.cc +59 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +134 -0
- data/src/core/lib/iomgr/socket_utils_uv.cc +45 -0
- data/src/core/lib/iomgr/socket_utils_windows.cc +43 -0
- data/src/core/lib/iomgr/socket_windows.cc +151 -0
- data/src/core/lib/iomgr/socket_windows.h +113 -0
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +30 -0
- data/src/core/lib/iomgr/tcp_client.cc +36 -0
- data/src/core/lib/iomgr/tcp_client.h +52 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +151 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +359 -0
- data/src/core/lib/iomgr/tcp_client_posix.h +68 -0
- data/src/core/lib/iomgr/tcp_client_windows.cc +231 -0
- data/src/core/lib/iomgr/tcp_custom.cc +365 -0
- data/src/core/lib/iomgr/tcp_custom.h +81 -0
- data/src/core/lib/iomgr/tcp_posix.cc +814 -0
- data/src/core/lib/iomgr/tcp_posix.h +57 -0
- data/src/core/lib/iomgr/tcp_server.cc +73 -0
- data/src/core/lib/iomgr/tcp_server.h +122 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +472 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +582 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +122 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +208 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +184 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +36 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +559 -0
- data/src/core/lib/iomgr/tcp_uv.cc +417 -0
- data/src/core/lib/iomgr/tcp_windows.cc +455 -0
- data/src/core/lib/iomgr/tcp_windows.h +51 -0
- data/src/core/lib/iomgr/time_averaged_stats.cc +64 -0
- data/src/core/lib/iomgr/time_averaged_stats.h +73 -0
- data/src/core/lib/iomgr/timer.cc +45 -0
- data/src/core/lib/iomgr/timer.h +125 -0
- data/src/core/lib/iomgr/timer_custom.cc +93 -0
- data/src/core/lib/iomgr/timer_custom.h +43 -0
- data/src/core/lib/iomgr/timer_generic.cc +663 -0
- data/src/core/lib/iomgr/timer_heap.cc +135 -0
- data/src/core/lib/iomgr/timer_heap.h +44 -0
- data/src/core/lib/iomgr/timer_manager.cc +347 -0
- data/src/core/lib/iomgr/timer_manager.h +39 -0
- data/src/core/lib/iomgr/timer_uv.cc +63 -0
- data/src/core/lib/iomgr/udp_server.cc +692 -0
- data/src/core/lib/iomgr/udp_server.h +103 -0
- data/src/core/lib/iomgr/unix_sockets_posix.cc +104 -0
- data/src/core/lib/iomgr/unix_sockets_posix.h +43 -0
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +49 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +107 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +69 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +83 -0
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +38 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +100 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +28 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +87 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.h +96 -0
- data/src/core/lib/json/json.cc +86 -0
- data/src/core/lib/json/json.h +94 -0
- data/src/core/lib/json/json_common.h +34 -0
- data/src/core/lib/json/json_reader.cc +663 -0
- data/src/core/lib/json/json_reader.h +146 -0
- data/src/core/lib/json/json_string.cc +367 -0
- data/src/core/lib/json/json_writer.cc +245 -0
- data/src/core/lib/json/json_writer.h +84 -0
- data/src/core/lib/profiling/basic_timers.cc +286 -0
- data/src/core/lib/profiling/stap_timers.cc +50 -0
- data/src/core/lib/profiling/timers.h +94 -0
- data/src/core/lib/security/context/security_context.cc +348 -0
- data/src/core/lib/security/context/security_context.h +115 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +119 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.h +102 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +67 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +114 -0
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +126 -0
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +112 -0
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +58 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +269 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +59 -0
- data/src/core/lib/security/credentials/credentials.cc +286 -0
- data/src/core/lib/security/credentials/credentials.h +246 -0
- data/src/core/lib/security/credentials/credentials_metadata.cc +62 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +136 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.h +64 -0
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +41 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +322 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +45 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +86 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.h +31 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +314 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +75 -0
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +190 -0
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +49 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +934 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +123 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +532 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +106 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +271 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +46 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +349 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +54 -0
- data/src/core/lib/security/security_connector/alts_security_connector.cc +287 -0
- data/src/core/lib/security/security_connector/alts_security_connector.h +69 -0
- data/src/core/lib/security/security_connector/security_connector.cc +1200 -0
- data/src/core/lib/security/security_connector/security_connector.h +283 -0
- data/src/core/lib/security/transport/auth_filters.h +37 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +418 -0
- data/src/core/lib/security/transport/secure_endpoint.cc +429 -0
- data/src/core/lib/security/transport/secure_endpoint.h +41 -0
- data/src/core/lib/security/transport/security_handshaker.cc +526 -0
- data/src/core/lib/security/transport/security_handshaker.h +34 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +269 -0
- data/src/core/lib/security/transport/target_authority_table.cc +75 -0
- data/src/core/lib/security/transport/target_authority_table.h +40 -0
- data/src/core/lib/security/transport/tsi_error.cc +29 -0
- data/src/core/lib/security/transport/tsi_error.h +29 -0
- data/src/core/lib/security/util/json_util.cc +48 -0
- data/src/core/lib/security/util/json_util.h +42 -0
- data/src/core/lib/slice/b64.cc +240 -0
- data/src/core/lib/slice/b64.h +51 -0
- data/src/core/lib/slice/percent_encoding.cc +169 -0
- data/src/core/lib/slice/percent_encoding.h +65 -0
- data/src/core/lib/slice/slice.cc +489 -0
- data/src/core/lib/slice/slice_buffer.cc +359 -0
- data/src/core/lib/slice/slice_hash_table.h +201 -0
- data/src/core/lib/slice/slice_intern.cc +332 -0
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.cc +118 -0
- data/src/core/lib/slice/slice_string_helpers.h +47 -0
- data/src/core/lib/slice/slice_weak_hash_table.h +105 -0
- data/src/core/lib/surface/api_trace.cc +24 -0
- data/src/core/lib/surface/api_trace.h +52 -0
- data/src/core/lib/surface/byte_buffer.cc +92 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +129 -0
- data/src/core/lib/surface/call.cc +2002 -0
- data/src/core/lib/surface/call.h +109 -0
- data/src/core/lib/surface/call_details.cc +42 -0
- data/src/core/lib/surface/call_log_batch.cc +120 -0
- data/src/core/lib/surface/call_test_only.h +43 -0
- data/src/core/lib/surface/channel.cc +450 -0
- data/src/core/lib/surface/channel.h +83 -0
- data/src/core/lib/surface/channel_init.cc +109 -0
- data/src/core/lib/surface/channel_init.h +73 -0
- data/src/core/lib/surface/channel_ping.cc +65 -0
- data/src/core/lib/surface/channel_stack_type.cc +58 -0
- data/src/core/lib/surface/channel_stack_type.h +47 -0
- data/src/core/lib/surface/completion_queue.cc +1262 -0
- data/src/core/lib/surface/completion_queue.h +93 -0
- data/src/core/lib/surface/completion_queue_factory.cc +79 -0
- data/src/core/lib/surface/completion_queue_factory.h +38 -0
- data/src/core/lib/surface/event_string.cc +68 -0
- data/src/core/lib/surface/event_string.h +29 -0
- data/src/core/lib/surface/init.cc +196 -0
- data/src/core/lib/surface/init.h +27 -0
- data/src/core/lib/surface/init_secure.cc +81 -0
- data/src/core/lib/surface/lame_client.cc +180 -0
- data/src/core/lib/surface/lame_client.h +28 -0
- data/src/core/lib/surface/metadata_array.cc +36 -0
- data/src/core/lib/surface/server.cc +1445 -0
- data/src/core/lib/surface/server.h +58 -0
- data/src/core/lib/surface/validate_metadata.cc +95 -0
- data/src/core/lib/surface/validate_metadata.h +30 -0
- data/src/core/lib/surface/version.cc +28 -0
- data/src/core/lib/transport/bdp_estimator.cc +87 -0
- data/src/core/lib/transport/bdp_estimator.h +94 -0
- data/src/core/lib/transport/byte_stream.cc +160 -0
- data/src/core/lib/transport/byte_stream.h +164 -0
- data/src/core/lib/transport/connectivity_state.cc +196 -0
- data/src/core/lib/transport/connectivity_state.h +87 -0
- data/src/core/lib/transport/error_utils.cc +118 -0
- data/src/core/lib/transport/error_utils.h +46 -0
- data/src/core/lib/transport/http2_errors.h +41 -0
- data/src/core/lib/transport/metadata.cc +539 -0
- data/src/core/lib/transport/metadata.h +165 -0
- data/src/core/lib/transport/metadata_batch.cc +329 -0
- data/src/core/lib/transport/metadata_batch.h +150 -0
- data/src/core/lib/transport/pid_controller.cc +51 -0
- data/src/core/lib/transport/pid_controller.h +116 -0
- data/src/core/lib/transport/service_config.cc +106 -0
- data/src/core/lib/transport/service_config.h +249 -0
- data/src/core/lib/transport/static_metadata.cc +601 -0
- data/src/core/lib/transport/static_metadata.h +603 -0
- data/src/core/lib/transport/status_conversion.cc +100 -0
- data/src/core/lib/transport/status_conversion.h +38 -0
- data/src/core/lib/transport/status_metadata.cc +54 -0
- data/src/core/lib/transport/status_metadata.h +30 -0
- data/src/core/lib/transport/timeout_encoding.cc +144 -0
- data/src/core/lib/transport/timeout_encoding.h +37 -0
- data/src/core/lib/transport/transport.cc +278 -0
- data/src/core/lib/transport/transport.h +378 -0
- data/src/core/lib/transport/transport_impl.h +71 -0
- data/src/core/lib/transport/transport_op_string.cc +214 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +97 -0
- data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
- data/src/core/tsi/alts/crypt/gsec.cc +189 -0
- data/src/core/tsi/alts/crypt/gsec.h +454 -0
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
- data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
- data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +316 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +137 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +520 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +323 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +143 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +149 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +73 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_event.h +93 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +483 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +83 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +52 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +58 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +52 -0
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +48 -0
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +64 -0
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +123 -0
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +255 -0
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +50 -0
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +78 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +196 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +163 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +180 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +52 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +100 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +296 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +52 -0
- data/src/core/tsi/alts_transport_security.cc +63 -0
- data/src/core/tsi/alts_transport_security.h +47 -0
- data/src/core/tsi/fake_transport_security.cc +787 -0
- data/src/core/tsi/fake_transport_security.h +45 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +73 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +58 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +211 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +93 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +76 -0
- data/src/core/tsi/ssl_transport_security.cc +1831 -0
- data/src/core/tsi/ssl_transport_security.h +314 -0
- data/src/core/tsi/ssl_types.h +42 -0
- data/src/core/tsi/transport_security.cc +326 -0
- data/src/core/tsi/transport_security.h +127 -0
- data/src/core/tsi/transport_security_adapter.cc +235 -0
- data/src/core/tsi/transport_security_adapter.h +41 -0
- data/src/core/tsi/transport_security_grpc.cc +66 -0
- data/src/core/tsi/transport_security_grpc.h +74 -0
- data/src/core/tsi/transport_security_interface.h +454 -0
- data/src/ruby/bin/apis/google/protobuf/empty.rb +29 -0
- data/src/ruby/bin/apis/pubsub_demo.rb +241 -0
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +159 -0
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +88 -0
- data/src/ruby/bin/math_client.rb +132 -0
- data/src/ruby/bin/math_pb.rb +32 -0
- data/src/ruby/bin/math_server.rb +191 -0
- data/src/ruby/bin/math_services_pb.rb +51 -0
- data/src/ruby/bin/noproto_client.rb +93 -0
- data/src/ruby/bin/noproto_server.rb +97 -0
- data/src/ruby/ext/grpc/extconf.rb +118 -0
- data/src/ruby/ext/grpc/rb_byte_buffer.c +64 -0
- data/src/ruby/ext/grpc/rb_byte_buffer.h +35 -0
- data/src/ruby/ext/grpc/rb_call.c +1041 -0
- data/src/ruby/ext/grpc/rb_call.h +53 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +290 -0
- data/src/ruby/ext/grpc/rb_call_credentials.h +31 -0
- data/src/ruby/ext/grpc/rb_channel.c +828 -0
- data/src/ruby/ext/grpc/rb_channel.h +34 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +155 -0
- data/src/ruby/ext/grpc/rb_channel_args.h +38 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +263 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.h +32 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +100 -0
- data/src/ruby/ext/grpc/rb_completion_queue.h +36 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +468 -0
- data/src/ruby/ext/grpc/rb_compression_options.h +29 -0
- data/src/ruby/ext/grpc/rb_event_thread.c +141 -0
- data/src/ruby/ext/grpc/rb_event_thread.h +21 -0
- data/src/ruby/ext/grpc/rb_grpc.c +340 -0
- data/src/ruby/ext/grpc/rb_grpc.h +72 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +507 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +766 -0
- data/src/ruby/ext/grpc/rb_loader.c +57 -0
- data/src/ruby/ext/grpc/rb_loader.h +25 -0
- data/src/ruby/ext/grpc/rb_server.c +366 -0
- data/src/ruby/ext/grpc/rb_server.h +32 -0
- data/src/ruby/ext/grpc/rb_server_credentials.c +243 -0
- data/src/ruby/ext/grpc/rb_server_credentials.h +32 -0
- data/src/ruby/lib/grpc.rb +35 -0
- data/src/ruby/lib/grpc/core/time_consts.rb +56 -0
- data/src/ruby/lib/grpc/errors.rb +201 -0
- data/src/ruby/lib/grpc/generic/active_call.rb +674 -0
- data/src/ruby/lib/grpc/generic/bidi_call.rb +233 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +501 -0
- data/src/ruby/lib/grpc/generic/interceptor_registry.rb +53 -0
- data/src/ruby/lib/grpc/generic/interceptors.rb +186 -0
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +204 -0
- data/src/ruby/lib/grpc/generic/rpc_server.rb +490 -0
- data/src/ruby/lib/grpc/generic/service.rb +210 -0
- data/src/ruby/lib/grpc/google_rpc_status_utils.rb +35 -0
- data/src/ruby/lib/grpc/grpc.rb +24 -0
- data/src/ruby/lib/grpc/logconfig.rb +44 -0
- data/src/ruby/lib/grpc/notifier.rb +45 -0
- data/src/ruby/lib/grpc/version.rb +18 -0
- data/src/ruby/pb/README.md +42 -0
- data/src/ruby/pb/generate_proto_ruby.sh +43 -0
- data/src/ruby/pb/grpc/health/checker.rb +76 -0
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +28 -0
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +41 -0
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +44 -0
- data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +49 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +15 -0
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +82 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +14 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +102 -0
- data/src/ruby/pb/test/client.rb +764 -0
- data/src/ruby/pb/test/server.rb +252 -0
- data/src/ruby/spec/call_credentials_spec.rb +42 -0
- data/src/ruby/spec/call_spec.rb +180 -0
- data/src/ruby/spec/channel_connection_spec.rb +126 -0
- data/src/ruby/spec/channel_credentials_spec.rb +82 -0
- data/src/ruby/spec/channel_spec.rb +190 -0
- data/src/ruby/spec/client_auth_spec.rb +137 -0
- data/src/ruby/spec/client_server_spec.rb +664 -0
- data/src/ruby/spec/compression_options_spec.rb +149 -0
- data/src/ruby/spec/error_sanity_spec.rb +49 -0
- data/src/ruby/spec/generic/active_call_spec.rb +672 -0
- data/src/ruby/spec/generic/client_interceptors_spec.rb +153 -0
- data/src/ruby/spec/generic/client_stub_spec.rb +1067 -0
- data/src/ruby/spec/generic/interceptor_registry_spec.rb +65 -0
- data/src/ruby/spec/generic/rpc_desc_spec.rb +374 -0
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +127 -0
- data/src/ruby/spec/generic/rpc_server_spec.rb +726 -0
- data/src/ruby/spec/generic/server_interceptors_spec.rb +218 -0
- data/src/ruby/spec/generic/service_spec.rb +261 -0
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +293 -0
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +56 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +236 -0
- data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +54 -0
- data/src/ruby/spec/pb/package_with_underscore/data.proto +23 -0
- data/src/ruby/spec/pb/package_with_underscore/service.proto +23 -0
- data/src/ruby/spec/server_credentials_spec.rb +79 -0
- data/src/ruby/spec/server_spec.rb +209 -0
- data/src/ruby/spec/spec_helper.rb +60 -0
- data/src/ruby/spec/support/helpers.rb +107 -0
- data/src/ruby/spec/support/services.rb +147 -0
- data/src/ruby/spec/testdata/README +1 -0
- data/src/ruby/spec/testdata/ca.pem +15 -0
- data/src/ruby/spec/testdata/client.key +16 -0
- data/src/ruby/spec/testdata/client.pem +14 -0
- data/src/ruby/spec/testdata/server1.key +16 -0
- data/src/ruby/spec/testdata/server1.pem +16 -0
- data/src/ruby/spec/time_consts_spec.rb +74 -0
- data/third_party/address_sorting/address_sorting.c +369 -0
- data/third_party/address_sorting/address_sorting_internal.h +70 -0
- data/third_party/address_sorting/address_sorting_posix.c +97 -0
- data/third_party/address_sorting/address_sorting_windows.c +55 -0
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +110 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +271 -0
- data/third_party/boringssl/crypto/asn1/a_bool.c +110 -0
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +297 -0
- data/third_party/boringssl/crypto/asn1/a_dup.c +111 -0
- data/third_party/boringssl/crypto/asn1/a_enum.c +195 -0
- data/third_party/boringssl/crypto/asn1/a_gentm.c +261 -0
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +150 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +474 -0
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +409 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +275 -0
- data/third_party/boringssl/crypto/asn1/a_octet.c +77 -0
- data/third_party/boringssl/crypto/asn1/a_print.c +93 -0
- data/third_party/boringssl/crypto/asn1/a_strnid.c +312 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +213 -0
- data/third_party/boringssl/crypto/asn1/a_type.c +151 -0
- data/third_party/boringssl/crypto/asn1/a_utctm.c +303 -0
- data/third_party/boringssl/crypto/asn1/a_utf8.c +234 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +442 -0
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +101 -0
- data/third_party/boringssl/crypto/asn1/asn1_par.c +80 -0
- data/third_party/boringssl/crypto/asn1/asn_pack.c +105 -0
- data/third_party/boringssl/crypto/asn1/f_enum.c +93 -0
- data/third_party/boringssl/crypto/asn1/f_int.c +97 -0
- data/third_party/boringssl/crypto/asn1/f_string.c +91 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +1223 -0
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +662 -0
- data/third_party/boringssl/crypto/asn1/tasn_fre.c +244 -0
- data/third_party/boringssl/crypto/asn1/tasn_new.c +387 -0
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +131 -0
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +280 -0
- data/third_party/boringssl/crypto/asn1/time_support.c +206 -0
- data/third_party/boringssl/crypto/base64/base64.c +466 -0
- data/third_party/boringssl/crypto/bio/bio.c +636 -0
- data/third_party/boringssl/crypto/bio/bio_mem.c +330 -0
- data/third_party/boringssl/crypto/bio/connect.c +542 -0
- data/third_party/boringssl/crypto/bio/fd.c +275 -0
- data/third_party/boringssl/crypto/bio/file.c +313 -0
- data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
- data/third_party/boringssl/crypto/bio/internal.h +111 -0
- data/third_party/boringssl/crypto/bio/pair.c +489 -0
- data/third_party/boringssl/crypto/bio/printf.c +115 -0
- data/third_party/boringssl/crypto/bio/socket.c +202 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +114 -0
- data/third_party/boringssl/crypto/bn_extra/bn_asn1.c +64 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +465 -0
- data/third_party/boringssl/crypto/buf/buf.c +231 -0
- data/third_party/boringssl/crypto/bytestring/asn1_compat.c +52 -0
- data/third_party/boringssl/crypto/bytestring/ber.c +264 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +568 -0
- data/third_party/boringssl/crypto/bytestring/cbs.c +487 -0
- data/third_party/boringssl/crypto/bytestring/internal.h +75 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +167 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +114 -0
- data/third_party/boringssl/crypto/cipher_extra/derive_key.c +152 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
- data/third_party/boringssl/crypto/cipher_extra/e_null.c +85 -0
- data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +460 -0
- data/third_party/boringssl/crypto/cipher_extra/e_rc4.c +87 -0
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +460 -0
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +681 -0
- data/third_party/boringssl/crypto/cipher_extra/internal.h +128 -0
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
- data/third_party/boringssl/crypto/cmac/cmac.c +241 -0
- data/third_party/boringssl/crypto/conf/conf.c +803 -0
- data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
- data/third_party/boringssl/crypto/conf/internal.h +31 -0
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +363 -0
- data/third_party/boringssl/crypto/cpu-arm.c +38 -0
- data/third_party/boringssl/crypto/cpu-intel.c +288 -0
- data/third_party/boringssl/crypto/cpu-ppc64le.c +38 -0
- data/third_party/boringssl/crypto/crypto.c +198 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +539 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +247 -0
- data/third_party/boringssl/crypto/dh/check.c +217 -0
- data/third_party/boringssl/crypto/dh/dh.c +519 -0
- data/third_party/boringssl/crypto/dh/dh_asn1.c +160 -0
- data/third_party/boringssl/crypto/dh/params.c +93 -0
- data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
- data/third_party/boringssl/crypto/dsa/dsa.c +984 -0
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +339 -0
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +563 -0
- data/third_party/boringssl/crypto/ecdh/ecdh.c +161 -0
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +275 -0
- data/third_party/boringssl/crypto/engine/engine.c +98 -0
- data/third_party/boringssl/crypto/err/err.c +847 -0
- data/third_party/boringssl/crypto/err/internal.h +58 -0
- data/third_party/boringssl/crypto/evp/digestsign.c +231 -0
- data/third_party/boringssl/crypto/evp/evp.c +362 -0
- data/third_party/boringssl/crypto/evp/evp_asn1.c +337 -0
- data/third_party/boringssl/crypto/evp/evp_ctx.c +446 -0
- data/third_party/boringssl/crypto/evp/internal.h +252 -0
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +268 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +239 -0
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +256 -0
- data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
- data/third_party/boringssl/crypto/evp/p_rsa.c +634 -0
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +189 -0
- data/third_party/boringssl/crypto/evp/pbkdf.c +146 -0
- data/third_party/boringssl/crypto/evp/print.c +489 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
- data/third_party/boringssl/crypto/evp/sign.c +151 -0
- data/third_party/boringssl/crypto/ex_data.c +261 -0
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +1100 -0
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +138 -0
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +112 -0
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/add.c +371 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +540 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +370 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +269 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +254 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +303 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +733 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +1390 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +627 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +710 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +413 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +146 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +483 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +207 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +902 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +894 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +299 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +254 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +305 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +502 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/aead.c +284 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +615 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +1437 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +233 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +129 -0
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
- data/third_party/boringssl/crypto/fipsmodule/des/des.c +785 -0
- data/third_party/boringssl/crypto/fipsmodule/des/internal.h +238 -0
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +256 -0
- data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +280 -0
- data/third_party/boringssl/crypto/fipsmodule/digest/internal.h +112 -0
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +268 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +943 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +517 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +277 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +316 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +404 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +1131 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +1674 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9543 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +456 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +113 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +1052 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util-64.c +109 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +474 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +442 -0
- data/third_party/boringssl/crypto/fipsmodule/hmac/hmac.c +228 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +27 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +254 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +298 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +211 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +234 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +220 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +1063 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +384 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +95 -0
- data/third_party/boringssl/crypto/fipsmodule/modes/polyval.c +91 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +200 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +358 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +302 -0
- data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +263 -0
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +131 -0
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +692 -0
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +857 -0
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +1051 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1-altivec.c +361 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +375 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +337 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +608 -0
- data/third_party/boringssl/crypto/hkdf/hkdf.c +112 -0
- data/third_party/boringssl/crypto/internal.h +676 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +336 -0
- data/third_party/boringssl/crypto/mem.c +237 -0
- data/third_party/boringssl/crypto/obj/obj.c +621 -0
- data/third_party/boringssl/crypto/obj/obj_dat.h +6244 -0
- data/third_party/boringssl/crypto/obj/obj_xref.c +122 -0
- data/third_party/boringssl/crypto/pem/pem_all.c +262 -0
- data/third_party/boringssl/crypto/pem/pem_info.c +379 -0
- data/third_party/boringssl/crypto/pem/pem_lib.c +776 -0
- data/third_party/boringssl/crypto/pem/pem_oth.c +88 -0
- data/third_party/boringssl/crypto/pem/pem_pk8.c +258 -0
- data/third_party/boringssl/crypto/pem/pem_pkey.c +227 -0
- data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
- data/third_party/boringssl/crypto/pem/pem_xaux.c +65 -0
- data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +233 -0
- data/third_party/boringssl/crypto/pkcs8/internal.h +120 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +307 -0
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +513 -0
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
- data/third_party/boringssl/crypto/poly1305/internal.h +41 -0
- data/third_party/boringssl/crypto/poly1305/poly1305.c +318 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +304 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +839 -0
- data/third_party/boringssl/crypto/pool/internal.h +45 -0
- data/third_party/boringssl/crypto/pool/pool.c +200 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +48 -0
- data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +43 -0
- data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
- data/third_party/boringssl/crypto/rand_extra/windows.c +53 -0
- data/third_party/boringssl/crypto/rc4/rc4.c +98 -0
- data/third_party/boringssl/crypto/refcount_c11.c +67 -0
- data/third_party/boringssl/crypto/refcount_lock.c +53 -0
- data/third_party/boringssl/crypto/rsa_extra/rsa_asn1.c +325 -0
- data/third_party/boringssl/crypto/stack/stack.c +380 -0
- data/third_party/boringssl/crypto/thread.c +110 -0
- data/third_party/boringssl/crypto/thread_none.c +59 -0
- data/third_party/boringssl/crypto/thread_pthread.c +176 -0
- data/third_party/boringssl/crypto/thread_win.c +237 -0
- data/third_party/boringssl/crypto/x509/a_digest.c +96 -0
- data/third_party/boringssl/crypto/x509/a_sign.c +128 -0
- data/third_party/boringssl/crypto/x509/a_strex.c +633 -0
- data/third_party/boringssl/crypto/x509/a_verify.c +115 -0
- data/third_party/boringssl/crypto/x509/algorithm.c +153 -0
- data/third_party/boringssl/crypto/x509/asn1_gen.c +841 -0
- data/third_party/boringssl/crypto/x509/by_dir.c +451 -0
- data/third_party/boringssl/crypto/x509/by_file.c +274 -0
- data/third_party/boringssl/crypto/x509/charmap.h +15 -0
- data/third_party/boringssl/crypto/x509/i2d_pr.c +83 -0
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_crl.c +128 -0
- data/third_party/boringssl/crypto/x509/t_req.c +246 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +547 -0
- data/third_party/boringssl/crypto/x509/t_x509a.c +111 -0
- data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
- data/third_party/boringssl/crypto/x509/x509.c +157 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +381 -0
- data/third_party/boringssl/crypto/x509/x509_cmp.c +477 -0
- data/third_party/boringssl/crypto/x509/x509_d2.c +106 -0
- data/third_party/boringssl/crypto/x509/x509_def.c +103 -0
- data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
- data/third_party/boringssl/crypto/x509/x509_lu.c +725 -0
- data/third_party/boringssl/crypto/x509/x509_obj.c +198 -0
- data/third_party/boringssl/crypto/x509/x509_r2x.c +117 -0
- data/third_party/boringssl/crypto/x509/x509_req.c +322 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +164 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +326 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +205 -0
- data/third_party/boringssl/crypto/x509/x509_v3.c +278 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +2472 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +648 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +170 -0
- data/third_party/boringssl/crypto/x509/x509name.c +389 -0
- data/third_party/boringssl/crypto/x509/x509rset.c +81 -0
- data/third_party/boringssl/crypto/x509/x509spki.c +137 -0
- data/third_party/boringssl/crypto/x509/x_algor.c +151 -0
- data/third_party/boringssl/crypto/x509/x_all.c +501 -0
- data/third_party/boringssl/crypto/x509/x_attrib.c +111 -0
- data/third_party/boringssl/crypto/x509/x_crl.c +541 -0
- data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
- data/third_party/boringssl/crypto/x509/x_info.c +98 -0
- data/third_party/boringssl/crypto/x509/x_name.c +541 -0
- data/third_party/boringssl/crypto/x509/x_pkey.c +106 -0
- data/third_party/boringssl/crypto/x509/x_pubkey.c +368 -0
- data/third_party/boringssl/crypto/x509/x_req.c +109 -0
- data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
- data/third_party/boringssl/crypto/x509/x_spki.c +80 -0
- data/third_party/boringssl/crypto/x509/x_val.c +69 -0
- data/third_party/boringssl/crypto/x509/x_x509.c +328 -0
- data/third_party/boringssl/crypto/x509/x_x509a.c +198 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +143 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +284 -0
- data/third_party/boringssl/crypto/x509v3/pcy_data.c +130 -0
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +217 -0
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +155 -0
- data/third_party/boringssl/crypto/x509v3/pcy_map.c +130 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +188 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +840 -0
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +204 -0
- data/third_party/boringssl/crypto/x509v3/v3_akeya.c +72 -0
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +623 -0
- data/third_party/boringssl/crypto/x509v3/v3_bcons.c +133 -0
- data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +462 -0
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +502 -0
- data/third_party/boringssl/crypto/x509v3/v3_crld.c +561 -0
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +100 -0
- data/third_party/boringssl/crypto/x509v3/v3_extku.c +148 -0
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +251 -0
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +122 -0
- data/third_party/boringssl/crypto/x509v3/v3_info.c +219 -0
- data/third_party/boringssl/crypto/x509v3/v3_int.c +91 -0
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +370 -0
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +501 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +287 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcia.c +57 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcons.c +139 -0
- data/third_party/boringssl/crypto/x509v3/v3_pku.c +110 -0
- data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +154 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +229 -0
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +866 -0
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +152 -0
- data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +274 -0
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +1352 -0
- data/third_party/boringssl/include/openssl/aead.h +423 -0
- data/third_party/boringssl/include/openssl/aes.h +170 -0
- data/third_party/boringssl/include/openssl/arm_arch.h +121 -0
- data/third_party/boringssl/include/openssl/asn1.h +982 -0
- data/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
- data/third_party/boringssl/include/openssl/asn1t.h +892 -0
- data/third_party/boringssl/include/openssl/base.h +469 -0
- data/third_party/boringssl/include/openssl/base64.h +187 -0
- data/third_party/boringssl/include/openssl/bio.h +902 -0
- data/third_party/boringssl/include/openssl/blowfish.h +93 -0
- data/third_party/boringssl/include/openssl/bn.h +975 -0
- data/third_party/boringssl/include/openssl/buf.h +137 -0
- data/third_party/boringssl/include/openssl/buffer.h +18 -0
- data/third_party/boringssl/include/openssl/bytestring.h +480 -0
- data/third_party/boringssl/include/openssl/cast.h +96 -0
- data/third_party/boringssl/include/openssl/chacha.h +41 -0
- data/third_party/boringssl/include/openssl/cipher.h +608 -0
- data/third_party/boringssl/include/openssl/cmac.h +87 -0
- data/third_party/boringssl/include/openssl/conf.h +183 -0
- data/third_party/boringssl/include/openssl/cpu.h +196 -0
- data/third_party/boringssl/include/openssl/crypto.h +118 -0
- data/third_party/boringssl/include/openssl/curve25519.h +201 -0
- data/third_party/boringssl/include/openssl/des.h +177 -0
- data/third_party/boringssl/include/openssl/dh.h +298 -0
- data/third_party/boringssl/include/openssl/digest.h +316 -0
- data/third_party/boringssl/include/openssl/dsa.h +435 -0
- data/third_party/boringssl/include/openssl/dtls1.h +16 -0
- data/third_party/boringssl/include/openssl/ec.h +407 -0
- data/third_party/boringssl/include/openssl/ec_key.h +341 -0
- data/third_party/boringssl/include/openssl/ecdh.h +101 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +199 -0
- data/third_party/boringssl/include/openssl/engine.h +109 -0
- data/third_party/boringssl/include/openssl/err.h +458 -0
- data/third_party/boringssl/include/openssl/evp.h +873 -0
- data/third_party/boringssl/include/openssl/ex_data.h +203 -0
- data/third_party/boringssl/include/openssl/hkdf.h +64 -0
- data/third_party/boringssl/include/openssl/hmac.h +186 -0
- data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
- data/third_party/boringssl/include/openssl/lhash.h +174 -0
- data/third_party/boringssl/include/openssl/lhash_macros.h +174 -0
- data/third_party/boringssl/include/openssl/md4.h +106 -0
- data/third_party/boringssl/include/openssl/md5.h +107 -0
- data/third_party/boringssl/include/openssl/mem.h +156 -0
- data/third_party/boringssl/include/openssl/nid.h +4242 -0
- data/third_party/boringssl/include/openssl/obj.h +233 -0
- data/third_party/boringssl/include/openssl/obj_mac.h +18 -0
- data/third_party/boringssl/include/openssl/objects.h +18 -0
- data/third_party/boringssl/include/openssl/opensslconf.h +67 -0
- data/third_party/boringssl/include/openssl/opensslv.h +18 -0
- data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
- data/third_party/boringssl/include/openssl/pem.h +397 -0
- data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
- data/third_party/boringssl/include/openssl/pkcs7.h +82 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +230 -0
- data/third_party/boringssl/include/openssl/poly1305.h +51 -0
- data/third_party/boringssl/include/openssl/pool.h +91 -0
- data/third_party/boringssl/include/openssl/rand.h +125 -0
- data/third_party/boringssl/include/openssl/rc4.h +96 -0
- data/third_party/boringssl/include/openssl/ripemd.h +107 -0
- data/third_party/boringssl/include/openssl/rsa.h +731 -0
- data/third_party/boringssl/include/openssl/safestack.h +16 -0
- data/third_party/boringssl/include/openssl/sha.h +256 -0
- data/third_party/boringssl/include/openssl/span.h +191 -0
- data/third_party/boringssl/include/openssl/srtp.h +18 -0
- data/third_party/boringssl/include/openssl/ssl.h +4592 -0
- data/third_party/boringssl/include/openssl/ssl3.h +333 -0
- data/third_party/boringssl/include/openssl/stack.h +485 -0
- data/third_party/boringssl/include/openssl/thread.h +191 -0
- data/third_party/boringssl/include/openssl/tls1.h +610 -0
- data/third_party/boringssl/include/openssl/type_check.h +91 -0
- data/third_party/boringssl/include/openssl/x509.h +1176 -0
- data/third_party/boringssl/include/openssl/x509_vfy.h +614 -0
- data/third_party/boringssl/include/openssl/x509v3.h +826 -0
- data/third_party/boringssl/ssl/bio_ssl.cc +179 -0
- data/third_party/boringssl/ssl/custom_extensions.cc +265 -0
- data/third_party/boringssl/ssl/d1_both.cc +837 -0
- data/third_party/boringssl/ssl/d1_lib.cc +267 -0
- data/third_party/boringssl/ssl/d1_pkt.cc +274 -0
- data/third_party/boringssl/ssl/d1_srtp.cc +232 -0
- data/third_party/boringssl/ssl/dtls_method.cc +193 -0
- data/third_party/boringssl/ssl/dtls_record.cc +353 -0
- data/third_party/boringssl/ssl/handshake.cc +616 -0
- data/third_party/boringssl/ssl/handshake_client.cc +1836 -0
- data/third_party/boringssl/ssl/handshake_server.cc +1662 -0
- data/third_party/boringssl/ssl/internal.h +3011 -0
- data/third_party/boringssl/ssl/s3_both.cc +585 -0
- data/third_party/boringssl/ssl/s3_lib.cc +224 -0
- data/third_party/boringssl/ssl/s3_pkt.cc +443 -0
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
- data/third_party/boringssl/ssl/ssl_asn1.cc +840 -0
- data/third_party/boringssl/ssl/ssl_buffer.cc +286 -0
- data/third_party/boringssl/ssl/ssl_cert.cc +913 -0
- data/third_party/boringssl/ssl/ssl_cipher.cc +1777 -0
- data/third_party/boringssl/ssl/ssl_file.cc +583 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +250 -0
- data/third_party/boringssl/ssl/ssl_lib.cc +2650 -0
- data/third_party/boringssl/ssl/ssl_privkey.cc +488 -0
- data/third_party/boringssl/ssl/ssl_session.cc +1221 -0
- data/third_party/boringssl/ssl/ssl_stat.cc +224 -0
- data/third_party/boringssl/ssl/ssl_transcript.cc +398 -0
- data/third_party/boringssl/ssl/ssl_versions.cc +472 -0
- data/third_party/boringssl/ssl/ssl_x509.cc +1299 -0
- data/third_party/boringssl/ssl/t1_enc.cc +503 -0
- data/third_party/boringssl/ssl/t1_lib.cc +3457 -0
- data/third_party/boringssl/ssl/tls13_both.cc +551 -0
- data/third_party/boringssl/ssl/tls13_client.cc +977 -0
- data/third_party/boringssl/ssl/tls13_enc.cc +563 -0
- data/third_party/boringssl/ssl/tls13_server.cc +1068 -0
- data/third_party/boringssl/ssl/tls_method.cc +291 -0
- data/third_party/boringssl/ssl/tls_record.cc +712 -0
- data/third_party/boringssl/third_party/fiat/curve25519.c +5062 -0
- data/third_party/boringssl/third_party/fiat/internal.h +142 -0
- data/third_party/cares/ares_build.h +223 -0
- data/third_party/cares/cares/ares.h +658 -0
- data/third_party/cares/cares/ares__close_sockets.c +61 -0
- data/third_party/cares/cares/ares__get_hostent.c +261 -0
- data/third_party/cares/cares/ares__read_line.c +73 -0
- data/third_party/cares/cares/ares__timeval.c +111 -0
- data/third_party/cares/cares/ares_cancel.c +63 -0
- data/third_party/cares/cares/ares_create_query.c +202 -0
- data/third_party/cares/cares/ares_data.c +221 -0
- data/third_party/cares/cares/ares_data.h +72 -0
- data/third_party/cares/cares/ares_destroy.c +108 -0
- data/third_party/cares/cares/ares_dns.h +103 -0
- data/third_party/cares/cares/ares_expand_name.c +209 -0
- data/third_party/cares/cares/ares_expand_string.c +70 -0
- data/third_party/cares/cares/ares_fds.c +59 -0
- data/third_party/cares/cares/ares_free_hostent.c +41 -0
- data/third_party/cares/cares/ares_free_string.c +25 -0
- data/third_party/cares/cares/ares_getenv.c +30 -0
- data/third_party/cares/cares/ares_getenv.h +26 -0
- data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
- data/third_party/cares/cares/ares_gethostbyname.c +518 -0
- data/third_party/cares/cares/ares_getnameinfo.c +442 -0
- data/third_party/cares/cares/ares_getopt.c +122 -0
- data/third_party/cares/cares/ares_getopt.h +53 -0
- data/third_party/cares/cares/ares_getsock.c +66 -0
- data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
- data/third_party/cares/cares/ares_init.c +2514 -0
- data/third_party/cares/cares/ares_iphlpapi.h +221 -0
- data/third_party/cares/cares/ares_ipv6.h +78 -0
- data/third_party/cares/cares/ares_library_init.c +177 -0
- data/third_party/cares/cares/ares_library_init.h +43 -0
- data/third_party/cares/cares/ares_llist.c +63 -0
- data/third_party/cares/cares/ares_llist.h +39 -0
- data/third_party/cares/cares/ares_mkquery.c +24 -0
- data/third_party/cares/cares/ares_nowarn.c +260 -0
- data/third_party/cares/cares/ares_nowarn.h +61 -0
- data/third_party/cares/cares/ares_options.c +402 -0
- data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
- data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
- data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
- data/third_party/cares/cares/ares_parse_naptr_reply.c +193 -0
- data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
- data/third_party/cares/cares/ares_parse_ptr_reply.c +219 -0
- data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
- data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
- data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
- data/third_party/cares/cares/ares_platform.c +11035 -0
- data/third_party/cares/cares/ares_platform.h +43 -0
- data/third_party/cares/cares/ares_private.h +374 -0
- data/third_party/cares/cares/ares_process.c +1448 -0
- data/third_party/cares/cares/ares_query.c +186 -0
- data/third_party/cares/cares/ares_rules.h +125 -0
- data/third_party/cares/cares/ares_search.c +316 -0
- data/third_party/cares/cares/ares_send.c +131 -0
- data/third_party/cares/cares/ares_setup.h +217 -0
- data/third_party/cares/cares/ares_strcasecmp.c +66 -0
- data/third_party/cares/cares/ares_strcasecmp.h +30 -0
- data/third_party/cares/cares/ares_strdup.c +49 -0
- data/third_party/cares/cares/ares_strdup.h +24 -0
- data/third_party/cares/cares/ares_strerror.c +56 -0
- data/third_party/cares/cares/ares_timeout.c +88 -0
- data/third_party/cares/cares/ares_version.c +11 -0
- data/third_party/cares/cares/ares_version.h +24 -0
- data/third_party/cares/cares/ares_writev.c +79 -0
- data/third_party/cares/cares/bitncmp.c +59 -0
- data/third_party/cares/cares/bitncmp.h +26 -0
- data/third_party/cares/cares/config-win32.h +351 -0
- data/third_party/cares/cares/inet_net_pton.c +450 -0
- data/third_party/cares/cares/inet_ntop.c +208 -0
- data/third_party/cares/cares/setup_once.h +554 -0
- data/third_party/cares/cares/windows_port.c +22 -0
- data/third_party/cares/config_darwin/ares_config.h +425 -0
- data/third_party/cares/config_freebsd/ares_config.h +502 -0
- data/third_party/cares/config_linux/ares_config.h +458 -0
- data/third_party/cares/config_openbsd/ares_config.h +502 -0
- data/third_party/nanopb/pb.h +579 -0
- data/third_party/nanopb/pb_common.c +97 -0
- data/third_party/nanopb/pb_common.h +42 -0
- data/third_party/nanopb/pb_decode.c +1347 -0
- data/third_party/nanopb/pb_decode.h +149 -0
- data/third_party/nanopb/pb_encode.c +696 -0
- data/third_party/nanopb/pb_encode.h +154 -0
- data/third_party/zlib/adler32.c +186 -0
- data/third_party/zlib/compress.c +86 -0
- data/third_party/zlib/crc32.c +442 -0
- data/third_party/zlib/crc32.h +441 -0
- data/third_party/zlib/deflate.c +2163 -0
- data/third_party/zlib/deflate.h +349 -0
- data/third_party/zlib/gzclose.c +25 -0
- data/third_party/zlib/gzguts.h +218 -0
- data/third_party/zlib/gzlib.c +637 -0
- data/third_party/zlib/gzread.c +654 -0
- data/third_party/zlib/gzwrite.c +665 -0
- data/third_party/zlib/infback.c +640 -0
- data/third_party/zlib/inffast.c +323 -0
- data/third_party/zlib/inffast.h +11 -0
- data/third_party/zlib/inffixed.h +94 -0
- data/third_party/zlib/inflate.c +1561 -0
- data/third_party/zlib/inflate.h +125 -0
- data/third_party/zlib/inftrees.c +304 -0
- data/third_party/zlib/inftrees.h +62 -0
- data/third_party/zlib/trees.c +1203 -0
- data/third_party/zlib/trees.h +128 -0
- data/third_party/zlib/uncompr.c +93 -0
- data/third_party/zlib/zconf.h +534 -0
- data/third_party/zlib/zlib.h +1912 -0
- data/third_party/zlib/zutil.c +325 -0
- data/third_party/zlib/zutil.h +271 -0
- metadata +1586 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/*
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2016 gRPC authors.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
#ifndef GRPC_CORE_LIB_IOMGR_ERROR_H
|
|
20
|
+
#define GRPC_CORE_LIB_IOMGR_ERROR_H
|
|
21
|
+
|
|
22
|
+
#include <grpc/support/port_platform.h>
|
|
23
|
+
|
|
24
|
+
#include <inttypes.h>
|
|
25
|
+
#include <stdbool.h>
|
|
26
|
+
|
|
27
|
+
#include <grpc/slice.h>
|
|
28
|
+
#include <grpc/status.h>
|
|
29
|
+
#include <grpc/support/log.h>
|
|
30
|
+
#include <grpc/support/time.h>
|
|
31
|
+
|
|
32
|
+
#include "src/core/lib/debug/trace.h"
|
|
33
|
+
|
|
34
|
+
/// Opaque representation of an error.
|
|
35
|
+
/// See https://github.com/grpc/grpc/blob/master/doc/core/grpc-error.md for a
|
|
36
|
+
/// full write up of this object.
|
|
37
|
+
|
|
38
|
+
typedef struct grpc_error grpc_error;
|
|
39
|
+
|
|
40
|
+
extern grpc_core::DebugOnlyTraceFlag grpc_trace_error_refcount;
|
|
41
|
+
|
|
42
|
+
typedef enum {
|
|
43
|
+
/// 'errno' from the operating system
|
|
44
|
+
GRPC_ERROR_INT_ERRNO,
|
|
45
|
+
/// __LINE__ from the call site creating the error
|
|
46
|
+
GRPC_ERROR_INT_FILE_LINE,
|
|
47
|
+
/// stream identifier: for errors that are associated with an individual
|
|
48
|
+
/// wire stream
|
|
49
|
+
GRPC_ERROR_INT_STREAM_ID,
|
|
50
|
+
/// grpc status code representing this error
|
|
51
|
+
GRPC_ERROR_INT_GRPC_STATUS,
|
|
52
|
+
/// offset into some binary blob (usually represented by
|
|
53
|
+
/// GRPC_ERROR_STR_RAW_BYTES) where the error occurred
|
|
54
|
+
GRPC_ERROR_INT_OFFSET,
|
|
55
|
+
/// context sensitive index associated with the error
|
|
56
|
+
GRPC_ERROR_INT_INDEX,
|
|
57
|
+
/// context sensitive size associated with the error
|
|
58
|
+
GRPC_ERROR_INT_SIZE,
|
|
59
|
+
/// http2 error code associated with the error (see the HTTP2 RFC)
|
|
60
|
+
GRPC_ERROR_INT_HTTP2_ERROR,
|
|
61
|
+
/// TSI status code associated with the error
|
|
62
|
+
GRPC_ERROR_INT_TSI_CODE,
|
|
63
|
+
/// grpc_security_status associated with the error
|
|
64
|
+
GRPC_ERROR_INT_SECURITY_STATUS,
|
|
65
|
+
/// WSAGetLastError() reported when this error occurred
|
|
66
|
+
GRPC_ERROR_INT_WSA_ERROR,
|
|
67
|
+
/// File descriptor associated with this error
|
|
68
|
+
GRPC_ERROR_INT_FD,
|
|
69
|
+
/// HTTP status (i.e. 404)
|
|
70
|
+
GRPC_ERROR_INT_HTTP_STATUS,
|
|
71
|
+
/// context sensitive limit associated with the error
|
|
72
|
+
GRPC_ERROR_INT_LIMIT,
|
|
73
|
+
/// chttp2: did the error occur while a write was in progress
|
|
74
|
+
GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
|
|
75
|
+
|
|
76
|
+
/// Must always be last
|
|
77
|
+
GRPC_ERROR_INT_MAX,
|
|
78
|
+
} grpc_error_ints;
|
|
79
|
+
|
|
80
|
+
typedef enum {
|
|
81
|
+
/// top-level textual description of this error
|
|
82
|
+
GRPC_ERROR_STR_DESCRIPTION,
|
|
83
|
+
/// source file in which this error occurred
|
|
84
|
+
GRPC_ERROR_STR_FILE,
|
|
85
|
+
/// operating system description of this error
|
|
86
|
+
GRPC_ERROR_STR_OS_ERROR,
|
|
87
|
+
/// syscall that generated this error
|
|
88
|
+
GRPC_ERROR_STR_SYSCALL,
|
|
89
|
+
/// peer that we were trying to communicate when this error occurred
|
|
90
|
+
GRPC_ERROR_STR_TARGET_ADDRESS,
|
|
91
|
+
/// grpc status message associated with this error
|
|
92
|
+
GRPC_ERROR_STR_GRPC_MESSAGE,
|
|
93
|
+
/// hex dump (or similar) with the data that generated this error
|
|
94
|
+
GRPC_ERROR_STR_RAW_BYTES,
|
|
95
|
+
/// tsi error string associated with this error
|
|
96
|
+
GRPC_ERROR_STR_TSI_ERROR,
|
|
97
|
+
/// filename that we were trying to read/write when this error occurred
|
|
98
|
+
GRPC_ERROR_STR_FILENAME,
|
|
99
|
+
/// which data was queued for writing when the error occurred
|
|
100
|
+
GRPC_ERROR_STR_QUEUED_BUFFERS,
|
|
101
|
+
/// key associated with the error
|
|
102
|
+
GRPC_ERROR_STR_KEY,
|
|
103
|
+
/// value associated with the error
|
|
104
|
+
GRPC_ERROR_STR_VALUE,
|
|
105
|
+
|
|
106
|
+
/// Must always be last
|
|
107
|
+
GRPC_ERROR_STR_MAX,
|
|
108
|
+
} grpc_error_strs;
|
|
109
|
+
|
|
110
|
+
typedef enum {
|
|
111
|
+
/// timestamp of error creation
|
|
112
|
+
GRPC_ERROR_TIME_CREATED,
|
|
113
|
+
|
|
114
|
+
/// Must always be last
|
|
115
|
+
GRPC_ERROR_TIME_MAX,
|
|
116
|
+
} grpc_error_times;
|
|
117
|
+
|
|
118
|
+
/// The following "special" errors can be propagated without allocating memory.
|
|
119
|
+
/// They are always even so that other code (particularly combiner locks,
|
|
120
|
+
/// polling engines) can safely use the lower bit for themselves.
|
|
121
|
+
|
|
122
|
+
#define GRPC_ERROR_NONE ((grpc_error*)NULL)
|
|
123
|
+
#define GRPC_ERROR_OOM ((grpc_error*)2)
|
|
124
|
+
#define GRPC_ERROR_CANCELLED ((grpc_error*)4)
|
|
125
|
+
|
|
126
|
+
const char* grpc_error_string(grpc_error* error);
|
|
127
|
+
|
|
128
|
+
/// Create an error - but use GRPC_ERROR_CREATE instead
|
|
129
|
+
grpc_error* grpc_error_create(const char* file, int line, grpc_slice desc,
|
|
130
|
+
grpc_error** referencing, size_t num_referencing);
|
|
131
|
+
/// Create an error (this is the preferred way of generating an error that is
|
|
132
|
+
/// not due to a system call - for system calls, use GRPC_OS_ERROR or
|
|
133
|
+
/// GRPC_WSA_ERROR as appropriate)
|
|
134
|
+
/// \a referencing is an array of num_referencing elements indicating one or
|
|
135
|
+
/// more errors that are believed to have contributed to this one
|
|
136
|
+
/// err = grpc_error_create(x, y, z, r, nr) is equivalent to:
|
|
137
|
+
/// err = grpc_error_create(x, y, z, NULL, 0);
|
|
138
|
+
/// for (i=0; i<nr; i++) err = grpc_error_add_child(err, r[i]);
|
|
139
|
+
#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc) \
|
|
140
|
+
grpc_error_create(__FILE__, __LINE__, grpc_slice_from_static_string(desc), \
|
|
141
|
+
NULL, 0)
|
|
142
|
+
#define GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc) \
|
|
143
|
+
grpc_error_create(__FILE__, __LINE__, grpc_slice_from_copied_string(desc), \
|
|
144
|
+
NULL, 0)
|
|
145
|
+
|
|
146
|
+
// Create an error that references some other errors. This function adds a
|
|
147
|
+
// reference to each error in errs - it does not consume an existing reference
|
|
148
|
+
#define GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(desc, errs, count) \
|
|
149
|
+
grpc_error_create(__FILE__, __LINE__, grpc_slice_from_static_string(desc), \
|
|
150
|
+
errs, count)
|
|
151
|
+
#define GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(desc, errs, count) \
|
|
152
|
+
grpc_error_create(__FILE__, __LINE__, grpc_slice_from_copied_string(desc), \
|
|
153
|
+
errs, count)
|
|
154
|
+
|
|
155
|
+
#ifndef NDEBUG
|
|
156
|
+
grpc_error* grpc_error_ref(grpc_error* err, const char* file, int line);
|
|
157
|
+
void grpc_error_unref(grpc_error* err, const char* file, int line);
|
|
158
|
+
#define GRPC_ERROR_REF(err) grpc_error_ref(err, __FILE__, __LINE__)
|
|
159
|
+
#define GRPC_ERROR_UNREF(err) grpc_error_unref(err, __FILE__, __LINE__)
|
|
160
|
+
#else
|
|
161
|
+
grpc_error* grpc_error_ref(grpc_error* err);
|
|
162
|
+
void grpc_error_unref(grpc_error* err);
|
|
163
|
+
#define GRPC_ERROR_REF(err) grpc_error_ref(err)
|
|
164
|
+
#define GRPC_ERROR_UNREF(err) grpc_error_unref(err)
|
|
165
|
+
#endif
|
|
166
|
+
|
|
167
|
+
grpc_error* grpc_error_set_int(grpc_error* src, grpc_error_ints which,
|
|
168
|
+
intptr_t value) GRPC_MUST_USE_RESULT;
|
|
169
|
+
bool grpc_error_get_int(grpc_error* error, grpc_error_ints which, intptr_t* p);
|
|
170
|
+
/// This call takes ownership of the slice; the error is responsible for
|
|
171
|
+
/// eventually unref-ing it.
|
|
172
|
+
grpc_error* grpc_error_set_str(grpc_error* src, grpc_error_strs which,
|
|
173
|
+
grpc_slice str) GRPC_MUST_USE_RESULT;
|
|
174
|
+
/// Returns false if the specified string is not set.
|
|
175
|
+
/// Caller does NOT own the slice.
|
|
176
|
+
bool grpc_error_get_str(grpc_error* error, grpc_error_strs which,
|
|
177
|
+
grpc_slice* s);
|
|
178
|
+
|
|
179
|
+
/// Add a child error: an error that is believed to have contributed to this
|
|
180
|
+
/// error occurring. Allows root causing high level errors from lower level
|
|
181
|
+
/// errors that contributed to them. The src error takes ownership of the
|
|
182
|
+
/// child error.
|
|
183
|
+
grpc_error* grpc_error_add_child(grpc_error* src,
|
|
184
|
+
grpc_error* child) GRPC_MUST_USE_RESULT;
|
|
185
|
+
grpc_error* grpc_os_error(const char* file, int line, int err,
|
|
186
|
+
const char* call_name) GRPC_MUST_USE_RESULT;
|
|
187
|
+
|
|
188
|
+
inline grpc_error* grpc_assert_never_ok(grpc_error* error) {
|
|
189
|
+
GPR_ASSERT(error != GRPC_ERROR_NONE);
|
|
190
|
+
return error;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/// create an error associated with errno!=0 (an 'operating system' error)
|
|
194
|
+
#define GRPC_OS_ERROR(err, call_name) \
|
|
195
|
+
grpc_assert_never_ok(grpc_os_error(__FILE__, __LINE__, err, call_name))
|
|
196
|
+
grpc_error* grpc_wsa_error(const char* file, int line, int err,
|
|
197
|
+
const char* call_name) GRPC_MUST_USE_RESULT;
|
|
198
|
+
/// windows only: create an error associated with WSAGetLastError()!=0
|
|
199
|
+
#define GRPC_WSA_ERROR(err, call_name) \
|
|
200
|
+
grpc_wsa_error(__FILE__, __LINE__, err, call_name)
|
|
201
|
+
|
|
202
|
+
bool grpc_log_if_error(const char* what, grpc_error* error, const char* file,
|
|
203
|
+
int line);
|
|
204
|
+
#define GRPC_LOG_IF_ERROR(what, error) \
|
|
205
|
+
grpc_log_if_error((what), (error), __FILE__, __LINE__)
|
|
206
|
+
|
|
207
|
+
#endif /* GRPC_CORE_LIB_IOMGR_ERROR_H */
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/*
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2016 gRPC authors.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
#ifndef GRPC_CORE_LIB_IOMGR_ERROR_INTERNAL_H
|
|
20
|
+
#define GRPC_CORE_LIB_IOMGR_ERROR_INTERNAL_H
|
|
21
|
+
|
|
22
|
+
#include <grpc/support/port_platform.h>
|
|
23
|
+
|
|
24
|
+
#include <inttypes.h>
|
|
25
|
+
#include <stdbool.h> // TODO, do we need this?
|
|
26
|
+
|
|
27
|
+
#include <grpc/support/sync.h>
|
|
28
|
+
#include "src/core/lib/iomgr/error.h"
|
|
29
|
+
|
|
30
|
+
typedef struct grpc_linked_error grpc_linked_error;
|
|
31
|
+
|
|
32
|
+
struct grpc_linked_error {
|
|
33
|
+
grpc_error* err;
|
|
34
|
+
uint8_t next;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// c core representation of an error. See error.h for high level description of
|
|
38
|
+
// this object.
|
|
39
|
+
struct grpc_error {
|
|
40
|
+
// All atomics in grpc_error must be stored in this nested struct. The rest of
|
|
41
|
+
// the object is memcpy-ed in bulk in copy_and_unref.
|
|
42
|
+
struct atomics {
|
|
43
|
+
gpr_refcount refs;
|
|
44
|
+
gpr_atm error_string;
|
|
45
|
+
} atomics;
|
|
46
|
+
// These arrays index into dynamic arena at the bottom of the struct.
|
|
47
|
+
// UINT8_MAX is used as a sentinel value.
|
|
48
|
+
uint8_t ints[GRPC_ERROR_INT_MAX];
|
|
49
|
+
uint8_t strs[GRPC_ERROR_STR_MAX];
|
|
50
|
+
uint8_t times[GRPC_ERROR_TIME_MAX];
|
|
51
|
+
// The child errors are stored in the arena, but are effectively a linked list
|
|
52
|
+
// structure, since they are contained withing grpc_linked_error objects.
|
|
53
|
+
uint8_t first_err;
|
|
54
|
+
uint8_t last_err;
|
|
55
|
+
// The arena is dynamically reallocated with a grow factor of 1.5.
|
|
56
|
+
uint8_t arena_size;
|
|
57
|
+
uint8_t arena_capacity;
|
|
58
|
+
intptr_t arena[0];
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
bool grpc_error_is_special(struct grpc_error* err);
|
|
62
|
+
|
|
63
|
+
#endif /* GRPC_CORE_LIB_IOMGR_ERROR_INTERNAL_H */
|
|
@@ -0,0 +1,1248 @@
|
|
|
1
|
+
/*
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2017 gRPC authors.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
#include <grpc/support/port_platform.h>
|
|
20
|
+
|
|
21
|
+
#include "src/core/lib/iomgr/port.h"
|
|
22
|
+
|
|
23
|
+
#include <grpc/support/log.h>
|
|
24
|
+
|
|
25
|
+
/* This polling engine is only relevant on linux kernels supporting epoll
|
|
26
|
+
epoll_create() or epoll_create1() */
|
|
27
|
+
#ifdef GRPC_LINUX_EPOLL
|
|
28
|
+
#include "src/core/lib/iomgr/ev_epoll1_linux.h"
|
|
29
|
+
|
|
30
|
+
#include <assert.h>
|
|
31
|
+
#include <errno.h>
|
|
32
|
+
#include <fcntl.h>
|
|
33
|
+
#include <limits.h>
|
|
34
|
+
#include <poll.h>
|
|
35
|
+
#include <pthread.h>
|
|
36
|
+
#include <string.h>
|
|
37
|
+
#include <sys/epoll.h>
|
|
38
|
+
#include <sys/socket.h>
|
|
39
|
+
#include <unistd.h>
|
|
40
|
+
|
|
41
|
+
#include <grpc/support/alloc.h>
|
|
42
|
+
#include <grpc/support/cpu.h>
|
|
43
|
+
#include <grpc/support/string_util.h>
|
|
44
|
+
|
|
45
|
+
#include "src/core/lib/debug/stats.h"
|
|
46
|
+
#include "src/core/lib/gpr/string.h"
|
|
47
|
+
#include "src/core/lib/gpr/tls.h"
|
|
48
|
+
#include "src/core/lib/gpr/useful.h"
|
|
49
|
+
#include "src/core/lib/gprpp/manual_constructor.h"
|
|
50
|
+
#include "src/core/lib/iomgr/block_annotate.h"
|
|
51
|
+
#include "src/core/lib/iomgr/ev_posix.h"
|
|
52
|
+
#include "src/core/lib/iomgr/iomgr_internal.h"
|
|
53
|
+
#include "src/core/lib/iomgr/lockfree_event.h"
|
|
54
|
+
#include "src/core/lib/iomgr/wakeup_fd_posix.h"
|
|
55
|
+
#include "src/core/lib/profiling/timers.h"
|
|
56
|
+
|
|
57
|
+
static grpc_wakeup_fd global_wakeup_fd;
|
|
58
|
+
|
|
59
|
+
/*******************************************************************************
|
|
60
|
+
* Singleton epoll set related fields
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
#define MAX_EPOLL_EVENTS 100
|
|
64
|
+
#define MAX_EPOLL_EVENTS_HANDLED_PER_ITERATION 1
|
|
65
|
+
|
|
66
|
+
/* NOTE ON SYNCHRONIZATION:
|
|
67
|
+
* - Fields in this struct are only modified by the designated poller. Hence
|
|
68
|
+
* there is no need for any locks to protect the struct.
|
|
69
|
+
* - num_events and cursor fields have to be of atomic type to provide memory
|
|
70
|
+
* visibility guarantees only. i.e In case of multiple pollers, the designated
|
|
71
|
+
* polling thread keeps changing; the thread that wrote these values may be
|
|
72
|
+
* different from the thread reading the values
|
|
73
|
+
*/
|
|
74
|
+
typedef struct epoll_set {
|
|
75
|
+
int epfd;
|
|
76
|
+
|
|
77
|
+
/* The epoll_events after the last call to epoll_wait() */
|
|
78
|
+
struct epoll_event events[MAX_EPOLL_EVENTS];
|
|
79
|
+
|
|
80
|
+
/* The number of epoll_events after the last call to epoll_wait() */
|
|
81
|
+
gpr_atm num_events;
|
|
82
|
+
|
|
83
|
+
/* Index of the first event in epoll_events that has to be processed. This
|
|
84
|
+
* field is only valid if num_events > 0 */
|
|
85
|
+
gpr_atm cursor;
|
|
86
|
+
} epoll_set;
|
|
87
|
+
|
|
88
|
+
/* The global singleton epoll set */
|
|
89
|
+
static epoll_set g_epoll_set;
|
|
90
|
+
|
|
91
|
+
static int epoll_create_and_cloexec() {
|
|
92
|
+
#ifdef GRPC_LINUX_EPOLL_CREATE1
|
|
93
|
+
int fd = epoll_create1(EPOLL_CLOEXEC);
|
|
94
|
+
if (fd < 0) {
|
|
95
|
+
gpr_log(GPR_ERROR, "epoll_create1 unavailable");
|
|
96
|
+
}
|
|
97
|
+
#else
|
|
98
|
+
int fd = epoll_create(MAX_EPOLL_EVENTS);
|
|
99
|
+
if (fd < 0) {
|
|
100
|
+
gpr_log(GPR_ERROR, "epoll_create unavailable");
|
|
101
|
+
} else if (fcntl(fd, F_SETFD, FD_CLOEXEC) != 0) {
|
|
102
|
+
gpr_log(GPR_ERROR, "fcntl following epoll_create failed");
|
|
103
|
+
return -1;
|
|
104
|
+
}
|
|
105
|
+
#endif
|
|
106
|
+
return fd;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Must be called *only* once */
|
|
110
|
+
static bool epoll_set_init() {
|
|
111
|
+
g_epoll_set.epfd = epoll_create_and_cloexec();
|
|
112
|
+
if (g_epoll_set.epfd < 0) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
gpr_log(GPR_INFO, "grpc epoll fd: %d", g_epoll_set.epfd);
|
|
117
|
+
gpr_atm_no_barrier_store(&g_epoll_set.num_events, 0);
|
|
118
|
+
gpr_atm_no_barrier_store(&g_epoll_set.cursor, 0);
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* epoll_set_init() MUST be called before calling this. */
|
|
123
|
+
static void epoll_set_shutdown() {
|
|
124
|
+
if (g_epoll_set.epfd >= 0) {
|
|
125
|
+
close(g_epoll_set.epfd);
|
|
126
|
+
g_epoll_set.epfd = -1;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/*******************************************************************************
|
|
131
|
+
* Fd Declarations
|
|
132
|
+
*/
|
|
133
|
+
|
|
134
|
+
struct grpc_fd {
|
|
135
|
+
int fd;
|
|
136
|
+
|
|
137
|
+
grpc_core::ManualConstructor<grpc_core::LockfreeEvent> read_closure;
|
|
138
|
+
grpc_core::ManualConstructor<grpc_core::LockfreeEvent> write_closure;
|
|
139
|
+
|
|
140
|
+
struct grpc_fd* freelist_next;
|
|
141
|
+
|
|
142
|
+
/* The pollset that last noticed that the fd is readable. The actual type
|
|
143
|
+
* stored in this is (grpc_pollset *) */
|
|
144
|
+
gpr_atm read_notifier_pollset;
|
|
145
|
+
|
|
146
|
+
grpc_iomgr_object iomgr_object;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
static void fd_global_init(void);
|
|
150
|
+
static void fd_global_shutdown(void);
|
|
151
|
+
|
|
152
|
+
/*******************************************************************************
|
|
153
|
+
* Pollset Declarations
|
|
154
|
+
*/
|
|
155
|
+
|
|
156
|
+
typedef enum { UNKICKED, KICKED, DESIGNATED_POLLER } kick_state;
|
|
157
|
+
|
|
158
|
+
static const char* kick_state_string(kick_state st) {
|
|
159
|
+
switch (st) {
|
|
160
|
+
case UNKICKED:
|
|
161
|
+
return "UNKICKED";
|
|
162
|
+
case KICKED:
|
|
163
|
+
return "KICKED";
|
|
164
|
+
case DESIGNATED_POLLER:
|
|
165
|
+
return "DESIGNATED_POLLER";
|
|
166
|
+
}
|
|
167
|
+
GPR_UNREACHABLE_CODE(return "UNKNOWN");
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
struct grpc_pollset_worker {
|
|
171
|
+
kick_state state;
|
|
172
|
+
int kick_state_mutator; // which line of code last changed kick state
|
|
173
|
+
bool initialized_cv;
|
|
174
|
+
grpc_pollset_worker* next;
|
|
175
|
+
grpc_pollset_worker* prev;
|
|
176
|
+
gpr_cv cv;
|
|
177
|
+
grpc_closure_list schedule_on_end_work;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
#define SET_KICK_STATE(worker, kick_state) \
|
|
181
|
+
do { \
|
|
182
|
+
(worker)->state = (kick_state); \
|
|
183
|
+
(worker)->kick_state_mutator = __LINE__; \
|
|
184
|
+
} while (false)
|
|
185
|
+
|
|
186
|
+
#define MAX_NEIGHBORHOODS 1024
|
|
187
|
+
|
|
188
|
+
typedef struct pollset_neighborhood {
|
|
189
|
+
gpr_mu mu;
|
|
190
|
+
grpc_pollset* active_root;
|
|
191
|
+
char pad[GPR_CACHELINE_SIZE];
|
|
192
|
+
} pollset_neighborhood;
|
|
193
|
+
|
|
194
|
+
struct grpc_pollset {
|
|
195
|
+
gpr_mu mu;
|
|
196
|
+
pollset_neighborhood* neighborhood;
|
|
197
|
+
bool reassigning_neighborhood;
|
|
198
|
+
grpc_pollset_worker* root_worker;
|
|
199
|
+
bool kicked_without_poller;
|
|
200
|
+
|
|
201
|
+
/* Set to true if the pollset is observed to have no workers available to
|
|
202
|
+
poll */
|
|
203
|
+
bool seen_inactive;
|
|
204
|
+
bool shutting_down; /* Is the pollset shutting down ? */
|
|
205
|
+
grpc_closure* shutdown_closure; /* Called after after shutdown is complete */
|
|
206
|
+
|
|
207
|
+
/* Number of workers who are *about-to* attach themselves to the pollset
|
|
208
|
+
* worker list */
|
|
209
|
+
int begin_refs;
|
|
210
|
+
|
|
211
|
+
grpc_pollset* next;
|
|
212
|
+
grpc_pollset* prev;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
/*******************************************************************************
|
|
216
|
+
* Pollset-set Declarations
|
|
217
|
+
*/
|
|
218
|
+
|
|
219
|
+
struct grpc_pollset_set {
|
|
220
|
+
char unused;
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
/*******************************************************************************
|
|
224
|
+
* Common helpers
|
|
225
|
+
*/
|
|
226
|
+
|
|
227
|
+
static bool append_error(grpc_error** composite, grpc_error* error,
|
|
228
|
+
const char* desc) {
|
|
229
|
+
if (error == GRPC_ERROR_NONE) return true;
|
|
230
|
+
if (*composite == GRPC_ERROR_NONE) {
|
|
231
|
+
*composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc);
|
|
232
|
+
}
|
|
233
|
+
*composite = grpc_error_add_child(*composite, error);
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/*******************************************************************************
|
|
238
|
+
* Fd Definitions
|
|
239
|
+
*/
|
|
240
|
+
|
|
241
|
+
/* We need to keep a freelist not because of any concerns of malloc performance
|
|
242
|
+
* but instead so that implementations with multiple threads in (for example)
|
|
243
|
+
* epoll_wait deal with the race between pollset removal and incoming poll
|
|
244
|
+
* notifications.
|
|
245
|
+
*
|
|
246
|
+
* The problem is that the poller ultimately holds a reference to this
|
|
247
|
+
* object, so it is very difficult to know when is safe to free it, at least
|
|
248
|
+
* without some expensive synchronization.
|
|
249
|
+
*
|
|
250
|
+
* If we keep the object freelisted, in the worst case losing this race just
|
|
251
|
+
* becomes a spurious read notification on a reused fd.
|
|
252
|
+
*/
|
|
253
|
+
|
|
254
|
+
/* The alarm system needs to be able to wakeup 'some poller' sometimes
|
|
255
|
+
* (specifically when a new alarm needs to be triggered earlier than the next
|
|
256
|
+
* alarm 'epoch'). This wakeup_fd gives us something to alert on when such a
|
|
257
|
+
* case occurs. */
|
|
258
|
+
|
|
259
|
+
static grpc_fd* fd_freelist = nullptr;
|
|
260
|
+
static gpr_mu fd_freelist_mu;
|
|
261
|
+
|
|
262
|
+
static void fd_global_init(void) { gpr_mu_init(&fd_freelist_mu); }
|
|
263
|
+
|
|
264
|
+
static void fd_global_shutdown(void) {
|
|
265
|
+
gpr_mu_lock(&fd_freelist_mu);
|
|
266
|
+
gpr_mu_unlock(&fd_freelist_mu);
|
|
267
|
+
while (fd_freelist != nullptr) {
|
|
268
|
+
grpc_fd* fd = fd_freelist;
|
|
269
|
+
fd_freelist = fd_freelist->freelist_next;
|
|
270
|
+
gpr_free(fd);
|
|
271
|
+
}
|
|
272
|
+
gpr_mu_destroy(&fd_freelist_mu);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
static grpc_fd* fd_create(int fd, const char* name) {
|
|
276
|
+
grpc_fd* new_fd = nullptr;
|
|
277
|
+
|
|
278
|
+
gpr_mu_lock(&fd_freelist_mu);
|
|
279
|
+
if (fd_freelist != nullptr) {
|
|
280
|
+
new_fd = fd_freelist;
|
|
281
|
+
fd_freelist = fd_freelist->freelist_next;
|
|
282
|
+
}
|
|
283
|
+
gpr_mu_unlock(&fd_freelist_mu);
|
|
284
|
+
|
|
285
|
+
if (new_fd == nullptr) {
|
|
286
|
+
new_fd = static_cast<grpc_fd*>(gpr_malloc(sizeof(grpc_fd)));
|
|
287
|
+
new_fd->read_closure.Init();
|
|
288
|
+
new_fd->write_closure.Init();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
new_fd->fd = fd;
|
|
292
|
+
new_fd->read_closure->InitEvent();
|
|
293
|
+
new_fd->write_closure->InitEvent();
|
|
294
|
+
gpr_atm_no_barrier_store(&new_fd->read_notifier_pollset, (gpr_atm)NULL);
|
|
295
|
+
|
|
296
|
+
new_fd->freelist_next = nullptr;
|
|
297
|
+
|
|
298
|
+
char* fd_name;
|
|
299
|
+
gpr_asprintf(&fd_name, "%s fd=%d", name, fd);
|
|
300
|
+
grpc_iomgr_register_object(&new_fd->iomgr_object, fd_name);
|
|
301
|
+
#ifndef NDEBUG
|
|
302
|
+
if (grpc_trace_fd_refcount.enabled()) {
|
|
303
|
+
gpr_log(GPR_DEBUG, "FD %d %p create %s", fd, new_fd, fd_name);
|
|
304
|
+
}
|
|
305
|
+
#endif
|
|
306
|
+
gpr_free(fd_name);
|
|
307
|
+
|
|
308
|
+
struct epoll_event ev;
|
|
309
|
+
ev.events = static_cast<uint32_t>(EPOLLIN | EPOLLOUT | EPOLLET);
|
|
310
|
+
ev.data.ptr = new_fd;
|
|
311
|
+
if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_ADD, fd, &ev) != 0) {
|
|
312
|
+
gpr_log(GPR_ERROR, "epoll_ctl failed: %s", strerror(errno));
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
return new_fd;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
static int fd_wrapped_fd(grpc_fd* fd) { return fd->fd; }
|
|
319
|
+
|
|
320
|
+
/* if 'releasing_fd' is true, it means that we are going to detach the internal
|
|
321
|
+
* fd from grpc_fd structure (i.e which means we should not be calling
|
|
322
|
+
* shutdown() syscall on that fd) */
|
|
323
|
+
static void fd_shutdown_internal(grpc_fd* fd, grpc_error* why,
|
|
324
|
+
bool releasing_fd) {
|
|
325
|
+
if (fd->read_closure->SetShutdown(GRPC_ERROR_REF(why))) {
|
|
326
|
+
if (!releasing_fd) {
|
|
327
|
+
shutdown(fd->fd, SHUT_RDWR);
|
|
328
|
+
}
|
|
329
|
+
fd->write_closure->SetShutdown(GRPC_ERROR_REF(why));
|
|
330
|
+
}
|
|
331
|
+
GRPC_ERROR_UNREF(why);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* Might be called multiple times */
|
|
335
|
+
static void fd_shutdown(grpc_fd* fd, grpc_error* why) {
|
|
336
|
+
fd_shutdown_internal(fd, why, false);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
static void fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd,
|
|
340
|
+
bool already_closed, const char* reason) {
|
|
341
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
|
342
|
+
bool is_release_fd = (release_fd != nullptr);
|
|
343
|
+
|
|
344
|
+
if (!fd->read_closure->IsShutdown()) {
|
|
345
|
+
fd_shutdown_internal(fd, GRPC_ERROR_CREATE_FROM_COPIED_STRING(reason),
|
|
346
|
+
is_release_fd);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/* If release_fd is not NULL, we should be relinquishing control of the file
|
|
350
|
+
descriptor fd->fd (but we still own the grpc_fd structure). */
|
|
351
|
+
if (is_release_fd) {
|
|
352
|
+
*release_fd = fd->fd;
|
|
353
|
+
} else if (!already_closed) {
|
|
354
|
+
close(fd->fd);
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
GRPC_CLOSURE_SCHED(on_done, GRPC_ERROR_REF(error));
|
|
358
|
+
|
|
359
|
+
grpc_iomgr_unregister_object(&fd->iomgr_object);
|
|
360
|
+
fd->read_closure->DestroyEvent();
|
|
361
|
+
fd->write_closure->DestroyEvent();
|
|
362
|
+
|
|
363
|
+
gpr_mu_lock(&fd_freelist_mu);
|
|
364
|
+
fd->freelist_next = fd_freelist;
|
|
365
|
+
fd_freelist = fd;
|
|
366
|
+
gpr_mu_unlock(&fd_freelist_mu);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
static grpc_pollset* fd_get_read_notifier_pollset(grpc_fd* fd) {
|
|
370
|
+
gpr_atm notifier = gpr_atm_acq_load(&fd->read_notifier_pollset);
|
|
371
|
+
return (grpc_pollset*)notifier;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
static bool fd_is_shutdown(grpc_fd* fd) {
|
|
375
|
+
return fd->read_closure->IsShutdown();
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
static void fd_notify_on_read(grpc_fd* fd, grpc_closure* closure) {
|
|
379
|
+
fd->read_closure->NotifyOn(closure);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
static void fd_notify_on_write(grpc_fd* fd, grpc_closure* closure) {
|
|
383
|
+
fd->write_closure->NotifyOn(closure);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
static void fd_become_readable(grpc_fd* fd, grpc_pollset* notifier) {
|
|
387
|
+
fd->read_closure->SetReady();
|
|
388
|
+
/* Use release store to match with acquire load in fd_get_read_notifier */
|
|
389
|
+
gpr_atm_rel_store(&fd->read_notifier_pollset, (gpr_atm)notifier);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
static void fd_become_writable(grpc_fd* fd) { fd->write_closure->SetReady(); }
|
|
393
|
+
|
|
394
|
+
/*******************************************************************************
|
|
395
|
+
* Pollset Definitions
|
|
396
|
+
*/
|
|
397
|
+
|
|
398
|
+
GPR_TLS_DECL(g_current_thread_pollset);
|
|
399
|
+
GPR_TLS_DECL(g_current_thread_worker);
|
|
400
|
+
|
|
401
|
+
/* The designated poller */
|
|
402
|
+
static gpr_atm g_active_poller;
|
|
403
|
+
|
|
404
|
+
static pollset_neighborhood* g_neighborhoods;
|
|
405
|
+
static size_t g_num_neighborhoods;
|
|
406
|
+
|
|
407
|
+
/* Return true if first in list */
|
|
408
|
+
static bool worker_insert(grpc_pollset* pollset, grpc_pollset_worker* worker) {
|
|
409
|
+
if (pollset->root_worker == nullptr) {
|
|
410
|
+
pollset->root_worker = worker;
|
|
411
|
+
worker->next = worker->prev = worker;
|
|
412
|
+
return true;
|
|
413
|
+
} else {
|
|
414
|
+
worker->next = pollset->root_worker;
|
|
415
|
+
worker->prev = worker->next->prev;
|
|
416
|
+
worker->next->prev = worker;
|
|
417
|
+
worker->prev->next = worker;
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
/* Return true if last in list */
|
|
423
|
+
typedef enum { EMPTIED, NEW_ROOT, REMOVED } worker_remove_result;
|
|
424
|
+
|
|
425
|
+
static worker_remove_result worker_remove(grpc_pollset* pollset,
|
|
426
|
+
grpc_pollset_worker* worker) {
|
|
427
|
+
if (worker == pollset->root_worker) {
|
|
428
|
+
if (worker == worker->next) {
|
|
429
|
+
pollset->root_worker = nullptr;
|
|
430
|
+
return EMPTIED;
|
|
431
|
+
} else {
|
|
432
|
+
pollset->root_worker = worker->next;
|
|
433
|
+
worker->prev->next = worker->next;
|
|
434
|
+
worker->next->prev = worker->prev;
|
|
435
|
+
return NEW_ROOT;
|
|
436
|
+
}
|
|
437
|
+
} else {
|
|
438
|
+
worker->prev->next = worker->next;
|
|
439
|
+
worker->next->prev = worker->prev;
|
|
440
|
+
return REMOVED;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
static size_t choose_neighborhood(void) {
|
|
445
|
+
return static_cast<size_t>(gpr_cpu_current_cpu()) % g_num_neighborhoods;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
static grpc_error* pollset_global_init(void) {
|
|
449
|
+
gpr_tls_init(&g_current_thread_pollset);
|
|
450
|
+
gpr_tls_init(&g_current_thread_worker);
|
|
451
|
+
gpr_atm_no_barrier_store(&g_active_poller, 0);
|
|
452
|
+
global_wakeup_fd.read_fd = -1;
|
|
453
|
+
grpc_error* err = grpc_wakeup_fd_init(&global_wakeup_fd);
|
|
454
|
+
if (err != GRPC_ERROR_NONE) return err;
|
|
455
|
+
struct epoll_event ev;
|
|
456
|
+
ev.events = static_cast<uint32_t>(EPOLLIN | EPOLLET);
|
|
457
|
+
ev.data.ptr = &global_wakeup_fd;
|
|
458
|
+
if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_ADD, global_wakeup_fd.read_fd,
|
|
459
|
+
&ev) != 0) {
|
|
460
|
+
return GRPC_OS_ERROR(errno, "epoll_ctl");
|
|
461
|
+
}
|
|
462
|
+
g_num_neighborhoods = GPR_CLAMP(gpr_cpu_num_cores(), 1, MAX_NEIGHBORHOODS);
|
|
463
|
+
g_neighborhoods = static_cast<pollset_neighborhood*>(
|
|
464
|
+
gpr_zalloc(sizeof(*g_neighborhoods) * g_num_neighborhoods));
|
|
465
|
+
for (size_t i = 0; i < g_num_neighborhoods; i++) {
|
|
466
|
+
gpr_mu_init(&g_neighborhoods[i].mu);
|
|
467
|
+
}
|
|
468
|
+
return GRPC_ERROR_NONE;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
static void pollset_global_shutdown(void) {
|
|
472
|
+
gpr_tls_destroy(&g_current_thread_pollset);
|
|
473
|
+
gpr_tls_destroy(&g_current_thread_worker);
|
|
474
|
+
if (global_wakeup_fd.read_fd != -1) grpc_wakeup_fd_destroy(&global_wakeup_fd);
|
|
475
|
+
for (size_t i = 0; i < g_num_neighborhoods; i++) {
|
|
476
|
+
gpr_mu_destroy(&g_neighborhoods[i].mu);
|
|
477
|
+
}
|
|
478
|
+
gpr_free(g_neighborhoods);
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
|
|
482
|
+
gpr_mu_init(&pollset->mu);
|
|
483
|
+
*mu = &pollset->mu;
|
|
484
|
+
pollset->neighborhood = &g_neighborhoods[choose_neighborhood()];
|
|
485
|
+
pollset->reassigning_neighborhood = false;
|
|
486
|
+
pollset->root_worker = nullptr;
|
|
487
|
+
pollset->kicked_without_poller = false;
|
|
488
|
+
pollset->seen_inactive = true;
|
|
489
|
+
pollset->shutting_down = false;
|
|
490
|
+
pollset->shutdown_closure = nullptr;
|
|
491
|
+
pollset->begin_refs = 0;
|
|
492
|
+
pollset->next = pollset->prev = nullptr;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
static void pollset_destroy(grpc_pollset* pollset) {
|
|
496
|
+
gpr_mu_lock(&pollset->mu);
|
|
497
|
+
if (!pollset->seen_inactive) {
|
|
498
|
+
pollset_neighborhood* neighborhood = pollset->neighborhood;
|
|
499
|
+
gpr_mu_unlock(&pollset->mu);
|
|
500
|
+
retry_lock_neighborhood:
|
|
501
|
+
gpr_mu_lock(&neighborhood->mu);
|
|
502
|
+
gpr_mu_lock(&pollset->mu);
|
|
503
|
+
if (!pollset->seen_inactive) {
|
|
504
|
+
if (pollset->neighborhood != neighborhood) {
|
|
505
|
+
gpr_mu_unlock(&neighborhood->mu);
|
|
506
|
+
neighborhood = pollset->neighborhood;
|
|
507
|
+
gpr_mu_unlock(&pollset->mu);
|
|
508
|
+
goto retry_lock_neighborhood;
|
|
509
|
+
}
|
|
510
|
+
pollset->prev->next = pollset->next;
|
|
511
|
+
pollset->next->prev = pollset->prev;
|
|
512
|
+
if (pollset == pollset->neighborhood->active_root) {
|
|
513
|
+
pollset->neighborhood->active_root =
|
|
514
|
+
pollset->next == pollset ? nullptr : pollset->next;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
gpr_mu_unlock(&pollset->neighborhood->mu);
|
|
518
|
+
}
|
|
519
|
+
gpr_mu_unlock(&pollset->mu);
|
|
520
|
+
gpr_mu_destroy(&pollset->mu);
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
static grpc_error* pollset_kick_all(grpc_pollset* pollset) {
|
|
524
|
+
GPR_TIMER_SCOPE("pollset_kick_all", 0);
|
|
525
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
|
526
|
+
if (pollset->root_worker != nullptr) {
|
|
527
|
+
grpc_pollset_worker* worker = pollset->root_worker;
|
|
528
|
+
do {
|
|
529
|
+
GRPC_STATS_INC_POLLSET_KICK();
|
|
530
|
+
switch (worker->state) {
|
|
531
|
+
case KICKED:
|
|
532
|
+
GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
|
|
533
|
+
break;
|
|
534
|
+
case UNKICKED:
|
|
535
|
+
SET_KICK_STATE(worker, KICKED);
|
|
536
|
+
if (worker->initialized_cv) {
|
|
537
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
|
|
538
|
+
gpr_cv_signal(&worker->cv);
|
|
539
|
+
}
|
|
540
|
+
break;
|
|
541
|
+
case DESIGNATED_POLLER:
|
|
542
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
|
|
543
|
+
SET_KICK_STATE(worker, KICKED);
|
|
544
|
+
append_error(&error, grpc_wakeup_fd_wakeup(&global_wakeup_fd),
|
|
545
|
+
"pollset_kick_all");
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
worker = worker->next;
|
|
550
|
+
} while (worker != pollset->root_worker);
|
|
551
|
+
}
|
|
552
|
+
// TODO: sreek. Check if we need to set 'kicked_without_poller' to true here
|
|
553
|
+
// in the else case
|
|
554
|
+
return error;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
static void pollset_maybe_finish_shutdown(grpc_pollset* pollset) {
|
|
558
|
+
if (pollset->shutdown_closure != nullptr && pollset->root_worker == nullptr &&
|
|
559
|
+
pollset->begin_refs == 0) {
|
|
560
|
+
GPR_TIMER_MARK("pollset_finish_shutdown", 0);
|
|
561
|
+
GRPC_CLOSURE_SCHED(pollset->shutdown_closure, GRPC_ERROR_NONE);
|
|
562
|
+
pollset->shutdown_closure = nullptr;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
|
|
567
|
+
GPR_TIMER_SCOPE("pollset_shutdown", 0);
|
|
568
|
+
GPR_ASSERT(pollset->shutdown_closure == nullptr);
|
|
569
|
+
GPR_ASSERT(!pollset->shutting_down);
|
|
570
|
+
pollset->shutdown_closure = closure;
|
|
571
|
+
pollset->shutting_down = true;
|
|
572
|
+
GRPC_LOG_IF_ERROR("pollset_shutdown", pollset_kick_all(pollset));
|
|
573
|
+
pollset_maybe_finish_shutdown(pollset);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
static int poll_deadline_to_millis_timeout(grpc_millis millis) {
|
|
577
|
+
if (millis == GRPC_MILLIS_INF_FUTURE) return -1;
|
|
578
|
+
grpc_millis delta = millis - grpc_core::ExecCtx::Get()->Now();
|
|
579
|
+
if (delta > INT_MAX) {
|
|
580
|
+
return INT_MAX;
|
|
581
|
+
} else if (delta < 0) {
|
|
582
|
+
return 0;
|
|
583
|
+
} else {
|
|
584
|
+
return static_cast<int>(delta);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
/* Process the epoll events found by do_epoll_wait() function.
|
|
589
|
+
- g_epoll_set.cursor points to the index of the first event to be processed
|
|
590
|
+
- This function then processes up-to MAX_EPOLL_EVENTS_PER_ITERATION and
|
|
591
|
+
updates the g_epoll_set.cursor
|
|
592
|
+
|
|
593
|
+
NOTE ON SYNCRHONIZATION: Similar to do_epoll_wait(), this function is only
|
|
594
|
+
called by g_active_poller thread. So there is no need for synchronization
|
|
595
|
+
when accessing fields in g_epoll_set */
|
|
596
|
+
static grpc_error* process_epoll_events(grpc_pollset* pollset) {
|
|
597
|
+
GPR_TIMER_SCOPE("process_epoll_events", 0);
|
|
598
|
+
|
|
599
|
+
static const char* err_desc = "process_events";
|
|
600
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
|
601
|
+
long num_events = gpr_atm_acq_load(&g_epoll_set.num_events);
|
|
602
|
+
long cursor = gpr_atm_acq_load(&g_epoll_set.cursor);
|
|
603
|
+
for (int idx = 0;
|
|
604
|
+
(idx < MAX_EPOLL_EVENTS_HANDLED_PER_ITERATION) && cursor != num_events;
|
|
605
|
+
idx++) {
|
|
606
|
+
long c = cursor++;
|
|
607
|
+
struct epoll_event* ev = &g_epoll_set.events[c];
|
|
608
|
+
void* data_ptr = ev->data.ptr;
|
|
609
|
+
|
|
610
|
+
if (data_ptr == &global_wakeup_fd) {
|
|
611
|
+
append_error(&error, grpc_wakeup_fd_consume_wakeup(&global_wakeup_fd),
|
|
612
|
+
err_desc);
|
|
613
|
+
} else {
|
|
614
|
+
grpc_fd* fd = static_cast<grpc_fd*>(data_ptr);
|
|
615
|
+
bool cancel = (ev->events & (EPOLLERR | EPOLLHUP)) != 0;
|
|
616
|
+
bool read_ev = (ev->events & (EPOLLIN | EPOLLPRI)) != 0;
|
|
617
|
+
bool write_ev = (ev->events & EPOLLOUT) != 0;
|
|
618
|
+
|
|
619
|
+
if (read_ev || cancel) {
|
|
620
|
+
fd_become_readable(fd, pollset);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
if (write_ev || cancel) {
|
|
624
|
+
fd_become_writable(fd);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
gpr_atm_rel_store(&g_epoll_set.cursor, cursor);
|
|
629
|
+
return error;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
/* Do epoll_wait and store the events in g_epoll_set.events field. This does not
|
|
633
|
+
"process" any of the events yet; that is done in process_epoll_events().
|
|
634
|
+
*See process_epoll_events() function for more details.
|
|
635
|
+
|
|
636
|
+
NOTE ON SYNCHRONIZATION: At any point of time, only the g_active_poller
|
|
637
|
+
(i.e the designated poller thread) will be calling this function. So there is
|
|
638
|
+
no need for any synchronization when accesing fields in g_epoll_set */
|
|
639
|
+
static grpc_error* do_epoll_wait(grpc_pollset* ps, grpc_millis deadline) {
|
|
640
|
+
GPR_TIMER_SCOPE("do_epoll_wait", 0);
|
|
641
|
+
|
|
642
|
+
int r;
|
|
643
|
+
int timeout = poll_deadline_to_millis_timeout(deadline);
|
|
644
|
+
if (timeout != 0) {
|
|
645
|
+
GRPC_SCHEDULING_START_BLOCKING_REGION;
|
|
646
|
+
}
|
|
647
|
+
do {
|
|
648
|
+
GRPC_STATS_INC_SYSCALL_POLL();
|
|
649
|
+
r = epoll_wait(g_epoll_set.epfd, g_epoll_set.events, MAX_EPOLL_EVENTS,
|
|
650
|
+
timeout);
|
|
651
|
+
} while (r < 0 && errno == EINTR);
|
|
652
|
+
if (timeout != 0) {
|
|
653
|
+
GRPC_SCHEDULING_END_BLOCKING_REGION;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
if (r < 0) return GRPC_OS_ERROR(errno, "epoll_wait");
|
|
657
|
+
|
|
658
|
+
GRPC_STATS_INC_POLL_EVENTS_RETURNED(r);
|
|
659
|
+
|
|
660
|
+
if (grpc_polling_trace.enabled()) {
|
|
661
|
+
gpr_log(GPR_DEBUG, "ps: %p poll got %d events", ps, r);
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
gpr_atm_rel_store(&g_epoll_set.num_events, r);
|
|
665
|
+
gpr_atm_rel_store(&g_epoll_set.cursor, 0);
|
|
666
|
+
|
|
667
|
+
return GRPC_ERROR_NONE;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
static bool begin_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
|
|
671
|
+
grpc_pollset_worker** worker_hdl,
|
|
672
|
+
grpc_millis deadline) {
|
|
673
|
+
GPR_TIMER_SCOPE("begin_worker", 0);
|
|
674
|
+
if (worker_hdl != nullptr) *worker_hdl = worker;
|
|
675
|
+
worker->initialized_cv = false;
|
|
676
|
+
SET_KICK_STATE(worker, UNKICKED);
|
|
677
|
+
worker->schedule_on_end_work = (grpc_closure_list)GRPC_CLOSURE_LIST_INIT;
|
|
678
|
+
pollset->begin_refs++;
|
|
679
|
+
|
|
680
|
+
if (grpc_polling_trace.enabled()) {
|
|
681
|
+
gpr_log(GPR_DEBUG, "PS:%p BEGIN_STARTS:%p", pollset, worker);
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
if (pollset->seen_inactive) {
|
|
685
|
+
// pollset has been observed to be inactive, we need to move back to the
|
|
686
|
+
// active list
|
|
687
|
+
bool is_reassigning = false;
|
|
688
|
+
if (!pollset->reassigning_neighborhood) {
|
|
689
|
+
is_reassigning = true;
|
|
690
|
+
pollset->reassigning_neighborhood = true;
|
|
691
|
+
pollset->neighborhood = &g_neighborhoods[choose_neighborhood()];
|
|
692
|
+
}
|
|
693
|
+
pollset_neighborhood* neighborhood = pollset->neighborhood;
|
|
694
|
+
gpr_mu_unlock(&pollset->mu);
|
|
695
|
+
// pollset unlocked: state may change (even worker->kick_state)
|
|
696
|
+
retry_lock_neighborhood:
|
|
697
|
+
gpr_mu_lock(&neighborhood->mu);
|
|
698
|
+
gpr_mu_lock(&pollset->mu);
|
|
699
|
+
if (grpc_polling_trace.enabled()) {
|
|
700
|
+
gpr_log(GPR_DEBUG, "PS:%p BEGIN_REORG:%p kick_state=%s is_reassigning=%d",
|
|
701
|
+
pollset, worker, kick_state_string(worker->state),
|
|
702
|
+
is_reassigning);
|
|
703
|
+
}
|
|
704
|
+
if (pollset->seen_inactive) {
|
|
705
|
+
if (neighborhood != pollset->neighborhood) {
|
|
706
|
+
gpr_mu_unlock(&neighborhood->mu);
|
|
707
|
+
neighborhood = pollset->neighborhood;
|
|
708
|
+
gpr_mu_unlock(&pollset->mu);
|
|
709
|
+
goto retry_lock_neighborhood;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
/* In the brief time we released the pollset locks above, the worker MAY
|
|
713
|
+
have been kicked. In this case, the worker should get out of this
|
|
714
|
+
pollset ASAP and hence this should neither add the pollset to
|
|
715
|
+
neighborhood nor mark the pollset as active.
|
|
716
|
+
|
|
717
|
+
On a side note, the only way a worker's kick state could have changed
|
|
718
|
+
at this point is if it were "kicked specifically". Since the worker has
|
|
719
|
+
not added itself to the pollset yet (by calling worker_insert()), it is
|
|
720
|
+
not visible in the "kick any" path yet */
|
|
721
|
+
if (worker->state == UNKICKED) {
|
|
722
|
+
pollset->seen_inactive = false;
|
|
723
|
+
if (neighborhood->active_root == nullptr) {
|
|
724
|
+
neighborhood->active_root = pollset->next = pollset->prev = pollset;
|
|
725
|
+
/* Make this the designated poller if there isn't one already */
|
|
726
|
+
if (worker->state == UNKICKED &&
|
|
727
|
+
gpr_atm_no_barrier_cas(&g_active_poller, 0, (gpr_atm)worker)) {
|
|
728
|
+
SET_KICK_STATE(worker, DESIGNATED_POLLER);
|
|
729
|
+
}
|
|
730
|
+
} else {
|
|
731
|
+
pollset->next = neighborhood->active_root;
|
|
732
|
+
pollset->prev = pollset->next->prev;
|
|
733
|
+
pollset->next->prev = pollset->prev->next = pollset;
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
if (is_reassigning) {
|
|
738
|
+
GPR_ASSERT(pollset->reassigning_neighborhood);
|
|
739
|
+
pollset->reassigning_neighborhood = false;
|
|
740
|
+
}
|
|
741
|
+
gpr_mu_unlock(&neighborhood->mu);
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
worker_insert(pollset, worker);
|
|
745
|
+
pollset->begin_refs--;
|
|
746
|
+
if (worker->state == UNKICKED && !pollset->kicked_without_poller) {
|
|
747
|
+
GPR_ASSERT(gpr_atm_no_barrier_load(&g_active_poller) != (gpr_atm)worker);
|
|
748
|
+
worker->initialized_cv = true;
|
|
749
|
+
gpr_cv_init(&worker->cv);
|
|
750
|
+
while (worker->state == UNKICKED && !pollset->shutting_down) {
|
|
751
|
+
if (grpc_polling_trace.enabled()) {
|
|
752
|
+
gpr_log(GPR_DEBUG, "PS:%p BEGIN_WAIT:%p kick_state=%s shutdown=%d",
|
|
753
|
+
pollset, worker, kick_state_string(worker->state),
|
|
754
|
+
pollset->shutting_down);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
if (gpr_cv_wait(&worker->cv, &pollset->mu,
|
|
758
|
+
grpc_millis_to_timespec(deadline, GPR_CLOCK_MONOTONIC)) &&
|
|
759
|
+
worker->state == UNKICKED) {
|
|
760
|
+
/* If gpr_cv_wait returns true (i.e a timeout), pretend that the worker
|
|
761
|
+
received a kick */
|
|
762
|
+
SET_KICK_STATE(worker, KICKED);
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
grpc_core::ExecCtx::Get()->InvalidateNow();
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
if (grpc_polling_trace.enabled()) {
|
|
769
|
+
gpr_log(GPR_DEBUG,
|
|
770
|
+
"PS:%p BEGIN_DONE:%p kick_state=%s shutdown=%d "
|
|
771
|
+
"kicked_without_poller: %d",
|
|
772
|
+
pollset, worker, kick_state_string(worker->state),
|
|
773
|
+
pollset->shutting_down, pollset->kicked_without_poller);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/* We release pollset lock in this function at a couple of places:
|
|
777
|
+
* 1. Briefly when assigning pollset to a neighborhood
|
|
778
|
+
* 2. When doing gpr_cv_wait()
|
|
779
|
+
* It is possible that 'kicked_without_poller' was set to true during (1) and
|
|
780
|
+
* 'shutting_down' is set to true during (1) or (2). If either of them is
|
|
781
|
+
* true, this worker cannot do polling */
|
|
782
|
+
/* TODO(sreek): Perhaps there is a better way to handle kicked_without_poller
|
|
783
|
+
* case; especially when the worker is the DESIGNATED_POLLER */
|
|
784
|
+
|
|
785
|
+
if (pollset->kicked_without_poller) {
|
|
786
|
+
pollset->kicked_without_poller = false;
|
|
787
|
+
return false;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
return worker->state == DESIGNATED_POLLER && !pollset->shutting_down;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
static bool check_neighborhood_for_available_poller(
|
|
794
|
+
pollset_neighborhood* neighborhood) {
|
|
795
|
+
GPR_TIMER_SCOPE("check_neighborhood_for_available_poller", 0);
|
|
796
|
+
bool found_worker = false;
|
|
797
|
+
do {
|
|
798
|
+
grpc_pollset* inspect = neighborhood->active_root;
|
|
799
|
+
if (inspect == nullptr) {
|
|
800
|
+
break;
|
|
801
|
+
}
|
|
802
|
+
gpr_mu_lock(&inspect->mu);
|
|
803
|
+
GPR_ASSERT(!inspect->seen_inactive);
|
|
804
|
+
grpc_pollset_worker* inspect_worker = inspect->root_worker;
|
|
805
|
+
if (inspect_worker != nullptr) {
|
|
806
|
+
do {
|
|
807
|
+
switch (inspect_worker->state) {
|
|
808
|
+
case UNKICKED:
|
|
809
|
+
if (gpr_atm_no_barrier_cas(&g_active_poller, 0,
|
|
810
|
+
(gpr_atm)inspect_worker)) {
|
|
811
|
+
if (grpc_polling_trace.enabled()) {
|
|
812
|
+
gpr_log(GPR_DEBUG, " .. choose next poller to be %p",
|
|
813
|
+
inspect_worker);
|
|
814
|
+
}
|
|
815
|
+
SET_KICK_STATE(inspect_worker, DESIGNATED_POLLER);
|
|
816
|
+
if (inspect_worker->initialized_cv) {
|
|
817
|
+
GPR_TIMER_MARK("signal worker", 0);
|
|
818
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
|
|
819
|
+
gpr_cv_signal(&inspect_worker->cv);
|
|
820
|
+
}
|
|
821
|
+
} else {
|
|
822
|
+
if (grpc_polling_trace.enabled()) {
|
|
823
|
+
gpr_log(GPR_DEBUG, " .. beaten to choose next poller");
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
// even if we didn't win the cas, there's a worker, we can stop
|
|
827
|
+
found_worker = true;
|
|
828
|
+
break;
|
|
829
|
+
case KICKED:
|
|
830
|
+
break;
|
|
831
|
+
case DESIGNATED_POLLER:
|
|
832
|
+
found_worker = true; // ok, so someone else found the worker, but
|
|
833
|
+
// we'll accept that
|
|
834
|
+
break;
|
|
835
|
+
}
|
|
836
|
+
inspect_worker = inspect_worker->next;
|
|
837
|
+
} while (!found_worker && inspect_worker != inspect->root_worker);
|
|
838
|
+
}
|
|
839
|
+
if (!found_worker) {
|
|
840
|
+
if (grpc_polling_trace.enabled()) {
|
|
841
|
+
gpr_log(GPR_DEBUG, " .. mark pollset %p inactive", inspect);
|
|
842
|
+
}
|
|
843
|
+
inspect->seen_inactive = true;
|
|
844
|
+
if (inspect == neighborhood->active_root) {
|
|
845
|
+
neighborhood->active_root =
|
|
846
|
+
inspect->next == inspect ? nullptr : inspect->next;
|
|
847
|
+
}
|
|
848
|
+
inspect->next->prev = inspect->prev;
|
|
849
|
+
inspect->prev->next = inspect->next;
|
|
850
|
+
inspect->next = inspect->prev = nullptr;
|
|
851
|
+
}
|
|
852
|
+
gpr_mu_unlock(&inspect->mu);
|
|
853
|
+
} while (!found_worker);
|
|
854
|
+
return found_worker;
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
static void end_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
|
|
858
|
+
grpc_pollset_worker** worker_hdl) {
|
|
859
|
+
GPR_TIMER_SCOPE("end_worker", 0);
|
|
860
|
+
if (grpc_polling_trace.enabled()) {
|
|
861
|
+
gpr_log(GPR_DEBUG, "PS:%p END_WORKER:%p", pollset, worker);
|
|
862
|
+
}
|
|
863
|
+
if (worker_hdl != nullptr) *worker_hdl = nullptr;
|
|
864
|
+
/* Make sure we appear kicked */
|
|
865
|
+
SET_KICK_STATE(worker, KICKED);
|
|
866
|
+
grpc_closure_list_move(&worker->schedule_on_end_work,
|
|
867
|
+
grpc_core::ExecCtx::Get()->closure_list());
|
|
868
|
+
if (gpr_atm_no_barrier_load(&g_active_poller) == (gpr_atm)worker) {
|
|
869
|
+
if (worker->next != worker && worker->next->state == UNKICKED) {
|
|
870
|
+
if (grpc_polling_trace.enabled()) {
|
|
871
|
+
gpr_log(GPR_DEBUG, " .. choose next poller to be peer %p", worker);
|
|
872
|
+
}
|
|
873
|
+
GPR_ASSERT(worker->next->initialized_cv);
|
|
874
|
+
gpr_atm_no_barrier_store(&g_active_poller, (gpr_atm)worker->next);
|
|
875
|
+
SET_KICK_STATE(worker->next, DESIGNATED_POLLER);
|
|
876
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
|
|
877
|
+
gpr_cv_signal(&worker->next->cv);
|
|
878
|
+
if (grpc_core::ExecCtx::Get()->HasWork()) {
|
|
879
|
+
gpr_mu_unlock(&pollset->mu);
|
|
880
|
+
grpc_core::ExecCtx::Get()->Flush();
|
|
881
|
+
gpr_mu_lock(&pollset->mu);
|
|
882
|
+
}
|
|
883
|
+
} else {
|
|
884
|
+
gpr_atm_no_barrier_store(&g_active_poller, 0);
|
|
885
|
+
size_t poller_neighborhood_idx =
|
|
886
|
+
static_cast<size_t>(pollset->neighborhood - g_neighborhoods);
|
|
887
|
+
gpr_mu_unlock(&pollset->mu);
|
|
888
|
+
bool found_worker = false;
|
|
889
|
+
bool scan_state[MAX_NEIGHBORHOODS];
|
|
890
|
+
for (size_t i = 0; !found_worker && i < g_num_neighborhoods; i++) {
|
|
891
|
+
pollset_neighborhood* neighborhood =
|
|
892
|
+
&g_neighborhoods[(poller_neighborhood_idx + i) %
|
|
893
|
+
g_num_neighborhoods];
|
|
894
|
+
if (gpr_mu_trylock(&neighborhood->mu)) {
|
|
895
|
+
found_worker = check_neighborhood_for_available_poller(neighborhood);
|
|
896
|
+
gpr_mu_unlock(&neighborhood->mu);
|
|
897
|
+
scan_state[i] = true;
|
|
898
|
+
} else {
|
|
899
|
+
scan_state[i] = false;
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
for (size_t i = 0; !found_worker && i < g_num_neighborhoods; i++) {
|
|
903
|
+
if (scan_state[i]) continue;
|
|
904
|
+
pollset_neighborhood* neighborhood =
|
|
905
|
+
&g_neighborhoods[(poller_neighborhood_idx + i) %
|
|
906
|
+
g_num_neighborhoods];
|
|
907
|
+
gpr_mu_lock(&neighborhood->mu);
|
|
908
|
+
found_worker = check_neighborhood_for_available_poller(neighborhood);
|
|
909
|
+
gpr_mu_unlock(&neighborhood->mu);
|
|
910
|
+
}
|
|
911
|
+
grpc_core::ExecCtx::Get()->Flush();
|
|
912
|
+
gpr_mu_lock(&pollset->mu);
|
|
913
|
+
}
|
|
914
|
+
} else if (grpc_core::ExecCtx::Get()->HasWork()) {
|
|
915
|
+
gpr_mu_unlock(&pollset->mu);
|
|
916
|
+
grpc_core::ExecCtx::Get()->Flush();
|
|
917
|
+
gpr_mu_lock(&pollset->mu);
|
|
918
|
+
}
|
|
919
|
+
if (worker->initialized_cv) {
|
|
920
|
+
gpr_cv_destroy(&worker->cv);
|
|
921
|
+
}
|
|
922
|
+
if (grpc_polling_trace.enabled()) {
|
|
923
|
+
gpr_log(GPR_DEBUG, " .. remove worker");
|
|
924
|
+
}
|
|
925
|
+
if (EMPTIED == worker_remove(pollset, worker)) {
|
|
926
|
+
pollset_maybe_finish_shutdown(pollset);
|
|
927
|
+
}
|
|
928
|
+
GPR_ASSERT(gpr_atm_no_barrier_load(&g_active_poller) != (gpr_atm)worker);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
/* pollset->po.mu lock must be held by the caller before calling this.
|
|
932
|
+
The function pollset_work() may temporarily release the lock (pollset->po.mu)
|
|
933
|
+
during the course of its execution but it will always re-acquire the lock and
|
|
934
|
+
ensure that it is held by the time the function returns */
|
|
935
|
+
static grpc_error* pollset_work(grpc_pollset* ps,
|
|
936
|
+
grpc_pollset_worker** worker_hdl,
|
|
937
|
+
grpc_millis deadline) {
|
|
938
|
+
GPR_TIMER_SCOPE("pollset_work", 0);
|
|
939
|
+
grpc_pollset_worker worker;
|
|
940
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
|
941
|
+
static const char* err_desc = "pollset_work";
|
|
942
|
+
if (ps->kicked_without_poller) {
|
|
943
|
+
ps->kicked_without_poller = false;
|
|
944
|
+
return GRPC_ERROR_NONE;
|
|
945
|
+
}
|
|
946
|
+
|
|
947
|
+
if (begin_worker(ps, &worker, worker_hdl, deadline)) {
|
|
948
|
+
gpr_tls_set(&g_current_thread_pollset, (intptr_t)ps);
|
|
949
|
+
gpr_tls_set(&g_current_thread_worker, (intptr_t)&worker);
|
|
950
|
+
GPR_ASSERT(!ps->shutting_down);
|
|
951
|
+
GPR_ASSERT(!ps->seen_inactive);
|
|
952
|
+
|
|
953
|
+
gpr_mu_unlock(&ps->mu); /* unlock */
|
|
954
|
+
/* This is the designated polling thread at this point and should ideally do
|
|
955
|
+
polling. However, if there are unprocessed events left from a previous
|
|
956
|
+
call to do_epoll_wait(), skip calling epoll_wait() in this iteration and
|
|
957
|
+
process the pending epoll events.
|
|
958
|
+
|
|
959
|
+
The reason for decoupling do_epoll_wait and process_epoll_events is to
|
|
960
|
+
better distrubute the work (i.e handling epoll events) across multiple
|
|
961
|
+
threads
|
|
962
|
+
|
|
963
|
+
process_epoll_events() returns very quickly: It just queues the work on
|
|
964
|
+
exec_ctx but does not execute it (the actual exectution or more
|
|
965
|
+
accurately grpc_core::ExecCtx::Get()->Flush() happens in end_worker()
|
|
966
|
+
AFTER selecting a designated poller). So we are not waiting long periods
|
|
967
|
+
without a designated poller */
|
|
968
|
+
if (gpr_atm_acq_load(&g_epoll_set.cursor) ==
|
|
969
|
+
gpr_atm_acq_load(&g_epoll_set.num_events)) {
|
|
970
|
+
append_error(&error, do_epoll_wait(ps, deadline), err_desc);
|
|
971
|
+
}
|
|
972
|
+
append_error(&error, process_epoll_events(ps), err_desc);
|
|
973
|
+
|
|
974
|
+
gpr_mu_lock(&ps->mu); /* lock */
|
|
975
|
+
|
|
976
|
+
gpr_tls_set(&g_current_thread_worker, 0);
|
|
977
|
+
} else {
|
|
978
|
+
gpr_tls_set(&g_current_thread_pollset, (intptr_t)ps);
|
|
979
|
+
}
|
|
980
|
+
end_worker(ps, &worker, worker_hdl);
|
|
981
|
+
|
|
982
|
+
gpr_tls_set(&g_current_thread_pollset, 0);
|
|
983
|
+
return error;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
static grpc_error* pollset_kick(grpc_pollset* pollset,
|
|
987
|
+
grpc_pollset_worker* specific_worker) {
|
|
988
|
+
GPR_TIMER_SCOPE("pollset_kick", 0);
|
|
989
|
+
GRPC_STATS_INC_POLLSET_KICK();
|
|
990
|
+
grpc_error* ret_err = GRPC_ERROR_NONE;
|
|
991
|
+
if (grpc_polling_trace.enabled()) {
|
|
992
|
+
gpr_strvec log;
|
|
993
|
+
gpr_strvec_init(&log);
|
|
994
|
+
char* tmp;
|
|
995
|
+
gpr_asprintf(&tmp, "PS:%p KICK:%p curps=%p curworker=%p root=%p", pollset,
|
|
996
|
+
specific_worker, (void*)gpr_tls_get(&g_current_thread_pollset),
|
|
997
|
+
(void*)gpr_tls_get(&g_current_thread_worker),
|
|
998
|
+
pollset->root_worker);
|
|
999
|
+
gpr_strvec_add(&log, tmp);
|
|
1000
|
+
if (pollset->root_worker != nullptr) {
|
|
1001
|
+
gpr_asprintf(&tmp, " {kick_state=%s next=%p {kick_state=%s}}",
|
|
1002
|
+
kick_state_string(pollset->root_worker->state),
|
|
1003
|
+
pollset->root_worker->next,
|
|
1004
|
+
kick_state_string(pollset->root_worker->next->state));
|
|
1005
|
+
gpr_strvec_add(&log, tmp);
|
|
1006
|
+
}
|
|
1007
|
+
if (specific_worker != nullptr) {
|
|
1008
|
+
gpr_asprintf(&tmp, " worker_kick_state=%s",
|
|
1009
|
+
kick_state_string(specific_worker->state));
|
|
1010
|
+
gpr_strvec_add(&log, tmp);
|
|
1011
|
+
}
|
|
1012
|
+
tmp = gpr_strvec_flatten(&log, nullptr);
|
|
1013
|
+
gpr_strvec_destroy(&log);
|
|
1014
|
+
gpr_log(GPR_DEBUG, "%s", tmp);
|
|
1015
|
+
gpr_free(tmp);
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
if (specific_worker == nullptr) {
|
|
1019
|
+
if (gpr_tls_get(&g_current_thread_pollset) != (intptr_t)pollset) {
|
|
1020
|
+
grpc_pollset_worker* root_worker = pollset->root_worker;
|
|
1021
|
+
if (root_worker == nullptr) {
|
|
1022
|
+
GRPC_STATS_INC_POLLSET_KICKED_WITHOUT_POLLER();
|
|
1023
|
+
pollset->kicked_without_poller = true;
|
|
1024
|
+
if (grpc_polling_trace.enabled()) {
|
|
1025
|
+
gpr_log(GPR_DEBUG, " .. kicked_without_poller");
|
|
1026
|
+
}
|
|
1027
|
+
goto done;
|
|
1028
|
+
}
|
|
1029
|
+
grpc_pollset_worker* next_worker = root_worker->next;
|
|
1030
|
+
if (root_worker->state == KICKED) {
|
|
1031
|
+
GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
|
|
1032
|
+
if (grpc_polling_trace.enabled()) {
|
|
1033
|
+
gpr_log(GPR_DEBUG, " .. already kicked %p", root_worker);
|
|
1034
|
+
}
|
|
1035
|
+
SET_KICK_STATE(root_worker, KICKED);
|
|
1036
|
+
goto done;
|
|
1037
|
+
} else if (next_worker->state == KICKED) {
|
|
1038
|
+
GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
|
|
1039
|
+
if (grpc_polling_trace.enabled()) {
|
|
1040
|
+
gpr_log(GPR_DEBUG, " .. already kicked %p", next_worker);
|
|
1041
|
+
}
|
|
1042
|
+
SET_KICK_STATE(next_worker, KICKED);
|
|
1043
|
+
goto done;
|
|
1044
|
+
} else if (root_worker ==
|
|
1045
|
+
next_worker && // only try and wake up a poller if
|
|
1046
|
+
// there is no next worker
|
|
1047
|
+
root_worker == (grpc_pollset_worker*)gpr_atm_no_barrier_load(
|
|
1048
|
+
&g_active_poller)) {
|
|
1049
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
|
|
1050
|
+
if (grpc_polling_trace.enabled()) {
|
|
1051
|
+
gpr_log(GPR_DEBUG, " .. kicked %p", root_worker);
|
|
1052
|
+
}
|
|
1053
|
+
SET_KICK_STATE(root_worker, KICKED);
|
|
1054
|
+
ret_err = grpc_wakeup_fd_wakeup(&global_wakeup_fd);
|
|
1055
|
+
goto done;
|
|
1056
|
+
} else if (next_worker->state == UNKICKED) {
|
|
1057
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
|
|
1058
|
+
if (grpc_polling_trace.enabled()) {
|
|
1059
|
+
gpr_log(GPR_DEBUG, " .. kicked %p", next_worker);
|
|
1060
|
+
}
|
|
1061
|
+
GPR_ASSERT(next_worker->initialized_cv);
|
|
1062
|
+
SET_KICK_STATE(next_worker, KICKED);
|
|
1063
|
+
gpr_cv_signal(&next_worker->cv);
|
|
1064
|
+
goto done;
|
|
1065
|
+
} else if (next_worker->state == DESIGNATED_POLLER) {
|
|
1066
|
+
if (root_worker->state != DESIGNATED_POLLER) {
|
|
1067
|
+
if (grpc_polling_trace.enabled()) {
|
|
1068
|
+
gpr_log(
|
|
1069
|
+
GPR_DEBUG,
|
|
1070
|
+
" .. kicked root non-poller %p (initialized_cv=%d) (poller=%p)",
|
|
1071
|
+
root_worker, root_worker->initialized_cv, next_worker);
|
|
1072
|
+
}
|
|
1073
|
+
SET_KICK_STATE(root_worker, KICKED);
|
|
1074
|
+
if (root_worker->initialized_cv) {
|
|
1075
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
|
|
1076
|
+
gpr_cv_signal(&root_worker->cv);
|
|
1077
|
+
}
|
|
1078
|
+
goto done;
|
|
1079
|
+
} else {
|
|
1080
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
|
|
1081
|
+
if (grpc_polling_trace.enabled()) {
|
|
1082
|
+
gpr_log(GPR_DEBUG, " .. non-root poller %p (root=%p)", next_worker,
|
|
1083
|
+
root_worker);
|
|
1084
|
+
}
|
|
1085
|
+
SET_KICK_STATE(next_worker, KICKED);
|
|
1086
|
+
ret_err = grpc_wakeup_fd_wakeup(&global_wakeup_fd);
|
|
1087
|
+
goto done;
|
|
1088
|
+
}
|
|
1089
|
+
} else {
|
|
1090
|
+
GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
|
|
1091
|
+
GPR_ASSERT(next_worker->state == KICKED);
|
|
1092
|
+
SET_KICK_STATE(next_worker, KICKED);
|
|
1093
|
+
goto done;
|
|
1094
|
+
}
|
|
1095
|
+
} else {
|
|
1096
|
+
GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD();
|
|
1097
|
+
if (grpc_polling_trace.enabled()) {
|
|
1098
|
+
gpr_log(GPR_DEBUG, " .. kicked while waking up");
|
|
1099
|
+
}
|
|
1100
|
+
goto done;
|
|
1101
|
+
}
|
|
1102
|
+
|
|
1103
|
+
GPR_UNREACHABLE_CODE(goto done);
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
if (specific_worker->state == KICKED) {
|
|
1107
|
+
if (grpc_polling_trace.enabled()) {
|
|
1108
|
+
gpr_log(GPR_DEBUG, " .. specific worker already kicked");
|
|
1109
|
+
}
|
|
1110
|
+
goto done;
|
|
1111
|
+
} else if (gpr_tls_get(&g_current_thread_worker) ==
|
|
1112
|
+
(intptr_t)specific_worker) {
|
|
1113
|
+
GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD();
|
|
1114
|
+
if (grpc_polling_trace.enabled()) {
|
|
1115
|
+
gpr_log(GPR_DEBUG, " .. mark %p kicked", specific_worker);
|
|
1116
|
+
}
|
|
1117
|
+
SET_KICK_STATE(specific_worker, KICKED);
|
|
1118
|
+
goto done;
|
|
1119
|
+
} else if (specific_worker ==
|
|
1120
|
+
(grpc_pollset_worker*)gpr_atm_no_barrier_load(&g_active_poller)) {
|
|
1121
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
|
|
1122
|
+
if (grpc_polling_trace.enabled()) {
|
|
1123
|
+
gpr_log(GPR_DEBUG, " .. kick active poller");
|
|
1124
|
+
}
|
|
1125
|
+
SET_KICK_STATE(specific_worker, KICKED);
|
|
1126
|
+
ret_err = grpc_wakeup_fd_wakeup(&global_wakeup_fd);
|
|
1127
|
+
goto done;
|
|
1128
|
+
} else if (specific_worker->initialized_cv) {
|
|
1129
|
+
GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
|
|
1130
|
+
if (grpc_polling_trace.enabled()) {
|
|
1131
|
+
gpr_log(GPR_DEBUG, " .. kick waiting worker");
|
|
1132
|
+
}
|
|
1133
|
+
SET_KICK_STATE(specific_worker, KICKED);
|
|
1134
|
+
gpr_cv_signal(&specific_worker->cv);
|
|
1135
|
+
goto done;
|
|
1136
|
+
} else {
|
|
1137
|
+
GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
|
|
1138
|
+
if (grpc_polling_trace.enabled()) {
|
|
1139
|
+
gpr_log(GPR_DEBUG, " .. kick non-waiting worker");
|
|
1140
|
+
}
|
|
1141
|
+
SET_KICK_STATE(specific_worker, KICKED);
|
|
1142
|
+
goto done;
|
|
1143
|
+
}
|
|
1144
|
+
done:
|
|
1145
|
+
return ret_err;
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
static void pollset_add_fd(grpc_pollset* pollset, grpc_fd* fd) {}
|
|
1149
|
+
|
|
1150
|
+
/*******************************************************************************
|
|
1151
|
+
* Pollset-set Definitions
|
|
1152
|
+
*/
|
|
1153
|
+
|
|
1154
|
+
static grpc_pollset_set* pollset_set_create(void) {
|
|
1155
|
+
return (grpc_pollset_set*)(static_cast<intptr_t>(0xdeafbeef));
|
|
1156
|
+
}
|
|
1157
|
+
|
|
1158
|
+
static void pollset_set_destroy(grpc_pollset_set* pss) {}
|
|
1159
|
+
|
|
1160
|
+
static void pollset_set_add_fd(grpc_pollset_set* pss, grpc_fd* fd) {}
|
|
1161
|
+
|
|
1162
|
+
static void pollset_set_del_fd(grpc_pollset_set* pss, grpc_fd* fd) {}
|
|
1163
|
+
|
|
1164
|
+
static void pollset_set_add_pollset(grpc_pollset_set* pss, grpc_pollset* ps) {}
|
|
1165
|
+
|
|
1166
|
+
static void pollset_set_del_pollset(grpc_pollset_set* pss, grpc_pollset* ps) {}
|
|
1167
|
+
|
|
1168
|
+
static void pollset_set_add_pollset_set(grpc_pollset_set* bag,
|
|
1169
|
+
grpc_pollset_set* item) {}
|
|
1170
|
+
|
|
1171
|
+
static void pollset_set_del_pollset_set(grpc_pollset_set* bag,
|
|
1172
|
+
grpc_pollset_set* item) {}
|
|
1173
|
+
|
|
1174
|
+
/*******************************************************************************
|
|
1175
|
+
* Event engine binding
|
|
1176
|
+
*/
|
|
1177
|
+
|
|
1178
|
+
static void shutdown_engine(void) {
|
|
1179
|
+
fd_global_shutdown();
|
|
1180
|
+
pollset_global_shutdown();
|
|
1181
|
+
epoll_set_shutdown();
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
static const grpc_event_engine_vtable vtable = {
|
|
1185
|
+
sizeof(grpc_pollset),
|
|
1186
|
+
|
|
1187
|
+
fd_create,
|
|
1188
|
+
fd_wrapped_fd,
|
|
1189
|
+
fd_orphan,
|
|
1190
|
+
fd_shutdown,
|
|
1191
|
+
fd_notify_on_read,
|
|
1192
|
+
fd_notify_on_write,
|
|
1193
|
+
fd_is_shutdown,
|
|
1194
|
+
fd_get_read_notifier_pollset,
|
|
1195
|
+
|
|
1196
|
+
pollset_init,
|
|
1197
|
+
pollset_shutdown,
|
|
1198
|
+
pollset_destroy,
|
|
1199
|
+
pollset_work,
|
|
1200
|
+
pollset_kick,
|
|
1201
|
+
pollset_add_fd,
|
|
1202
|
+
|
|
1203
|
+
pollset_set_create,
|
|
1204
|
+
pollset_set_destroy,
|
|
1205
|
+
pollset_set_add_pollset,
|
|
1206
|
+
pollset_set_del_pollset,
|
|
1207
|
+
pollset_set_add_pollset_set,
|
|
1208
|
+
pollset_set_del_pollset_set,
|
|
1209
|
+
pollset_set_add_fd,
|
|
1210
|
+
pollset_set_del_fd,
|
|
1211
|
+
|
|
1212
|
+
shutdown_engine,
|
|
1213
|
+
};
|
|
1214
|
+
|
|
1215
|
+
/* It is possible that GLIBC has epoll but the underlying kernel doesn't.
|
|
1216
|
+
* Create epoll_fd (epoll_set_init() takes care of that) to make sure epoll
|
|
1217
|
+
* support is available */
|
|
1218
|
+
const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
|
|
1219
|
+
if (!grpc_has_wakeup_fd()) {
|
|
1220
|
+
gpr_log(GPR_ERROR, "Skipping epoll1 because of no wakeup fd.");
|
|
1221
|
+
return nullptr;
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
if (!epoll_set_init()) {
|
|
1225
|
+
return nullptr;
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
fd_global_init();
|
|
1229
|
+
|
|
1230
|
+
if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
|
|
1231
|
+
fd_global_shutdown();
|
|
1232
|
+
epoll_set_shutdown();
|
|
1233
|
+
return nullptr;
|
|
1234
|
+
}
|
|
1235
|
+
|
|
1236
|
+
return &vtable;
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
#else /* defined(GRPC_LINUX_EPOLL) */
|
|
1240
|
+
#if defined(GRPC_POSIX_SOCKET)
|
|
1241
|
+
#include "src/core/lib/iomgr/ev_epoll1_linux.h"
|
|
1242
|
+
/* If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return
|
|
1243
|
+
* NULL */
|
|
1244
|
+
const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
|
|
1245
|
+
return nullptr;
|
|
1246
|
+
}
|
|
1247
|
+
#endif /* defined(GRPC_POSIX_SOCKET) */
|
|
1248
|
+
#endif /* !defined(GRPC_LINUX_EPOLL) */
|