grpc 1.37.1 → 1.39.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +96 -59
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/endpoint_config.h +48 -0
- data/include/grpc/event_engine/event_engine.h +334 -0
- data/include/grpc/event_engine/port.h +41 -0
- data/include/grpc/event_engine/slice_allocator.h +91 -0
- data/include/grpc/grpc.h +11 -4
- data/include/grpc/grpc_security.h +32 -0
- data/include/grpc/grpc_security_constants.h +15 -0
- data/include/grpc/impl/codegen/grpc_types.h +28 -13
- data/include/grpc/impl/codegen/port_platform.h +22 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +755 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +25 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +348 -199
- data/src/core/ext/xds/xds_api.h +21 -12
- data/src/core/ext/xds/xds_bootstrap.cc +97 -159
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +310 -178
- data/src/core/ext/xds/xds_client.h +41 -27
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +10 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +21 -13
- data/src/core/lib/channel/channelz.h +3 -0
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/event_engine/endpoint_config.cc +46 -0
- data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
- data/src/core/lib/event_engine/event_engine.cc +50 -0
- data/src/core/lib/event_engine/slice_allocator.cc +89 -0
- data/src/core/lib/event_engine/sockaddr.cc +40 -0
- data/src/core/lib/event_engine/sockaddr.h +44 -0
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +183 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +168 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
- data/src/core/lib/iomgr/event_engine/closure.h +33 -0
- data/src/core/lib/iomgr/event_engine/endpoint.cc +194 -0
- data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
- data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
- data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
- data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
- data/src/core/lib/iomgr/event_engine/promise.h +51 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +243 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
- data/src/core/lib/iomgr/exec_ctx.cc +12 -4
- data/src/core/lib/iomgr/exec_ctx.h +4 -5
- data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
- data/src/core/lib/iomgr/executor/threadpool.h +2 -2
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +2 -2
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +7 -7
- data/src/core/lib/iomgr/pollset_custom.h +3 -1
- data/src/core/lib/iomgr/pollset_uv.cc +3 -1
- data/src/core/lib/iomgr/pollset_uv.h +5 -1
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +7 -5
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +8 -4
- data/src/core/lib/iomgr/resolve_address.h +12 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +11 -10
- data/src/core/lib/iomgr/sockaddr.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +15 -2
- data/src/core/lib/iomgr/socket_mutator.h +26 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +78 -73
- data/src/core/lib/iomgr/tcp_posix.h +8 -0
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
- data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer.h +6 -1
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/matchers/matchers.cc +39 -39
- data/src/core/lib/matchers/matchers.h +28 -28
- data/src/core/lib/security/authorization/authorization_engine.h +44 -0
- data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
- data/src/core/lib/security/authorization/evaluate_args.h +91 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +33 -32
- data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/surface/call.cc +67 -46
- data/src/core/lib/surface/call.h +13 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +68 -69
- data/src/core/lib/surface/completion_queue.h +3 -2
- data/src/core/lib/surface/completion_queue_factory.cc +1 -2
- data/src/core/lib/surface/init.cc +1 -3
- data/src/core/lib/surface/init.h +10 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +28 -22
- data/src/core/lib/surface/server.h +16 -15
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +21 -10
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +6 -4
- data/src/core/lib/transport/transport_op_string.cc +6 -6
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/crypt/gsec.h +6 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +483 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
- data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +94 -46
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -1,88 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2019 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_POLLER_EVENTMANAGER_LIBUV_H
|
20
|
-
#define GRPC_CORE_LIB_IOMGR_POLLER_EVENTMANAGER_LIBUV_H
|
21
|
-
|
22
|
-
#include <grpc/support/port_platform.h>
|
23
|
-
|
24
|
-
#include <string>
|
25
|
-
#include <vector>
|
26
|
-
|
27
|
-
#include "src/core/lib/gprpp/atomic.h"
|
28
|
-
#include "src/core/lib/gprpp/sync.h"
|
29
|
-
#include "src/core/lib/gprpp/thd.h"
|
30
|
-
|
31
|
-
namespace grpc {
|
32
|
-
namespace experimental {
|
33
|
-
|
34
|
-
class LibuvEventManager {
|
35
|
-
public:
|
36
|
-
class Options {
|
37
|
-
public:
|
38
|
-
Options();
|
39
|
-
explicit Options(int num_workers);
|
40
|
-
|
41
|
-
int num_workers() const { return num_workers_; }
|
42
|
-
void set_num_workers(int num) { num_workers_ = num; }
|
43
|
-
|
44
|
-
const std::string& thread_name_prefix() const {
|
45
|
-
return thread_name_prefix_;
|
46
|
-
}
|
47
|
-
void set_thread_name_prefix(const std::string& name) {
|
48
|
-
thread_name_prefix_ = name;
|
49
|
-
}
|
50
|
-
|
51
|
-
private:
|
52
|
-
// Number of worker threads to create at startup. If less than 0, uses the
|
53
|
-
// default value of 32.
|
54
|
-
int num_workers_;
|
55
|
-
// Name prefix used for worker.
|
56
|
-
std::string thread_name_prefix_;
|
57
|
-
};
|
58
|
-
|
59
|
-
explicit LibuvEventManager(const Options& options);
|
60
|
-
virtual ~LibuvEventManager();
|
61
|
-
|
62
|
-
void Shutdown();
|
63
|
-
void ShutdownRef();
|
64
|
-
void ShutdownUnref();
|
65
|
-
|
66
|
-
private:
|
67
|
-
// Function run by the worker threads.
|
68
|
-
void RunWorkerLoop();
|
69
|
-
|
70
|
-
// Whether the EventManager has been shut down.
|
71
|
-
bool ShouldStop();
|
72
|
-
|
73
|
-
const Options options_;
|
74
|
-
// Whether the EventManager workers should be stopped.
|
75
|
-
grpc_core::Atomic<bool> should_stop_{false};
|
76
|
-
// A refcount preventing the EventManager from shutdown.
|
77
|
-
grpc_core::Atomic<int> shutdown_refcount_{0};
|
78
|
-
// Worker threads of the EventManager.
|
79
|
-
std::vector<grpc_core::Thread> workers_;
|
80
|
-
// Mutex and condition variable used for shutdown.
|
81
|
-
grpc_core::Mutex shutdown_mu_;
|
82
|
-
grpc_core::CondVar shutdown_cv_;
|
83
|
-
};
|
84
|
-
|
85
|
-
} // namespace experimental
|
86
|
-
} // namespace grpc
|
87
|
-
|
88
|
-
#endif /* GRPC_CORE_LIB_IOMGR_POLLER_EVENTMANAGER_LIBUV_H */
|
@@ -1,219 +0,0 @@
|
|
1
|
-
// Copyright 2018 The Abseil Authors.
|
2
|
-
//
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
-
// you may not use this file except in compliance with the License.
|
5
|
-
// You may obtain a copy of the License at
|
6
|
-
//
|
7
|
-
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
-
//
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
-
// See the License for the specific language governing permissions and
|
13
|
-
// limitations under the License.
|
14
|
-
|
15
|
-
#ifndef ABSL_BASE_INTERNAL_BITS_H_
|
16
|
-
#define ABSL_BASE_INTERNAL_BITS_H_
|
17
|
-
|
18
|
-
// This file contains bitwise ops which are implementation details of various
|
19
|
-
// absl libraries.
|
20
|
-
|
21
|
-
#include <cstdint>
|
22
|
-
|
23
|
-
#include "absl/base/config.h"
|
24
|
-
|
25
|
-
// Clang on Windows has __builtin_clzll; otherwise we need to use the
|
26
|
-
// windows intrinsic functions.
|
27
|
-
#if defined(_MSC_VER) && !defined(__clang__)
|
28
|
-
#include <intrin.h>
|
29
|
-
#if defined(_M_X64)
|
30
|
-
#pragma intrinsic(_BitScanReverse64)
|
31
|
-
#pragma intrinsic(_BitScanForward64)
|
32
|
-
#endif
|
33
|
-
#pragma intrinsic(_BitScanReverse)
|
34
|
-
#pragma intrinsic(_BitScanForward)
|
35
|
-
#endif
|
36
|
-
|
37
|
-
#include "absl/base/attributes.h"
|
38
|
-
|
39
|
-
#if defined(_MSC_VER) && !defined(__clang__)
|
40
|
-
// We can achieve something similar to attribute((always_inline)) with MSVC by
|
41
|
-
// using the __forceinline keyword, however this is not perfect. MSVC is
|
42
|
-
// much less aggressive about inlining, and even with the __forceinline keyword.
|
43
|
-
#define ABSL_BASE_INTERNAL_FORCEINLINE __forceinline
|
44
|
-
#else
|
45
|
-
// Use default attribute inline.
|
46
|
-
#define ABSL_BASE_INTERNAL_FORCEINLINE inline ABSL_ATTRIBUTE_ALWAYS_INLINE
|
47
|
-
#endif
|
48
|
-
|
49
|
-
|
50
|
-
namespace absl {
|
51
|
-
ABSL_NAMESPACE_BEGIN
|
52
|
-
namespace base_internal {
|
53
|
-
|
54
|
-
ABSL_BASE_INTERNAL_FORCEINLINE int CountLeadingZeros64Slow(uint64_t n) {
|
55
|
-
int zeroes = 60;
|
56
|
-
if (n >> 32) {
|
57
|
-
zeroes -= 32;
|
58
|
-
n >>= 32;
|
59
|
-
}
|
60
|
-
if (n >> 16) {
|
61
|
-
zeroes -= 16;
|
62
|
-
n >>= 16;
|
63
|
-
}
|
64
|
-
if (n >> 8) {
|
65
|
-
zeroes -= 8;
|
66
|
-
n >>= 8;
|
67
|
-
}
|
68
|
-
if (n >> 4) {
|
69
|
-
zeroes -= 4;
|
70
|
-
n >>= 4;
|
71
|
-
}
|
72
|
-
return "\4\3\2\2\1\1\1\1\0\0\0\0\0\0\0"[n] + zeroes;
|
73
|
-
}
|
74
|
-
|
75
|
-
ABSL_BASE_INTERNAL_FORCEINLINE int CountLeadingZeros64(uint64_t n) {
|
76
|
-
#if defined(_MSC_VER) && !defined(__clang__) && defined(_M_X64)
|
77
|
-
// MSVC does not have __buitin_clzll. Use _BitScanReverse64.
|
78
|
-
unsigned long result = 0; // NOLINT(runtime/int)
|
79
|
-
if (_BitScanReverse64(&result, n)) {
|
80
|
-
return 63 - result;
|
81
|
-
}
|
82
|
-
return 64;
|
83
|
-
#elif defined(_MSC_VER) && !defined(__clang__)
|
84
|
-
// MSVC does not have __buitin_clzll. Compose two calls to _BitScanReverse
|
85
|
-
unsigned long result = 0; // NOLINT(runtime/int)
|
86
|
-
if ((n >> 32) &&
|
87
|
-
_BitScanReverse(&result, static_cast<unsigned long>(n >> 32))) {
|
88
|
-
return 31 - result;
|
89
|
-
}
|
90
|
-
if (_BitScanReverse(&result, static_cast<unsigned long>(n))) {
|
91
|
-
return 63 - result;
|
92
|
-
}
|
93
|
-
return 64;
|
94
|
-
#elif defined(__GNUC__) || defined(__clang__)
|
95
|
-
// Use __builtin_clzll, which uses the following instructions:
|
96
|
-
// x86: bsr
|
97
|
-
// ARM64: clz
|
98
|
-
// PPC: cntlzd
|
99
|
-
static_assert(sizeof(unsigned long long) == sizeof(n), // NOLINT(runtime/int)
|
100
|
-
"__builtin_clzll does not take 64-bit arg");
|
101
|
-
|
102
|
-
// Handle 0 as a special case because __builtin_clzll(0) is undefined.
|
103
|
-
if (n == 0) {
|
104
|
-
return 64;
|
105
|
-
}
|
106
|
-
return __builtin_clzll(n);
|
107
|
-
#else
|
108
|
-
return CountLeadingZeros64Slow(n);
|
109
|
-
#endif
|
110
|
-
}
|
111
|
-
|
112
|
-
ABSL_BASE_INTERNAL_FORCEINLINE int CountLeadingZeros32Slow(uint64_t n) {
|
113
|
-
int zeroes = 28;
|
114
|
-
if (n >> 16) {
|
115
|
-
zeroes -= 16;
|
116
|
-
n >>= 16;
|
117
|
-
}
|
118
|
-
if (n >> 8) {
|
119
|
-
zeroes -= 8;
|
120
|
-
n >>= 8;
|
121
|
-
}
|
122
|
-
if (n >> 4) {
|
123
|
-
zeroes -= 4;
|
124
|
-
n >>= 4;
|
125
|
-
}
|
126
|
-
return "\4\3\2\2\1\1\1\1\0\0\0\0\0\0\0"[n] + zeroes;
|
127
|
-
}
|
128
|
-
|
129
|
-
ABSL_BASE_INTERNAL_FORCEINLINE int CountLeadingZeros32(uint32_t n) {
|
130
|
-
#if defined(_MSC_VER) && !defined(__clang__)
|
131
|
-
unsigned long result = 0; // NOLINT(runtime/int)
|
132
|
-
if (_BitScanReverse(&result, n)) {
|
133
|
-
return 31 - result;
|
134
|
-
}
|
135
|
-
return 32;
|
136
|
-
#elif defined(__GNUC__) || defined(__clang__)
|
137
|
-
// Use __builtin_clz, which uses the following instructions:
|
138
|
-
// x86: bsr
|
139
|
-
// ARM64: clz
|
140
|
-
// PPC: cntlzd
|
141
|
-
static_assert(sizeof(int) == sizeof(n),
|
142
|
-
"__builtin_clz does not take 32-bit arg");
|
143
|
-
|
144
|
-
// Handle 0 as a special case because __builtin_clz(0) is undefined.
|
145
|
-
if (n == 0) {
|
146
|
-
return 32;
|
147
|
-
}
|
148
|
-
return __builtin_clz(n);
|
149
|
-
#else
|
150
|
-
return CountLeadingZeros32Slow(n);
|
151
|
-
#endif
|
152
|
-
}
|
153
|
-
|
154
|
-
ABSL_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero64Slow(uint64_t n) {
|
155
|
-
int c = 63;
|
156
|
-
n &= ~n + 1;
|
157
|
-
if (n & 0x00000000FFFFFFFF) c -= 32;
|
158
|
-
if (n & 0x0000FFFF0000FFFF) c -= 16;
|
159
|
-
if (n & 0x00FF00FF00FF00FF) c -= 8;
|
160
|
-
if (n & 0x0F0F0F0F0F0F0F0F) c -= 4;
|
161
|
-
if (n & 0x3333333333333333) c -= 2;
|
162
|
-
if (n & 0x5555555555555555) c -= 1;
|
163
|
-
return c;
|
164
|
-
}
|
165
|
-
|
166
|
-
ABSL_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero64(uint64_t n) {
|
167
|
-
#if defined(_MSC_VER) && !defined(__clang__) && defined(_M_X64)
|
168
|
-
unsigned long result = 0; // NOLINT(runtime/int)
|
169
|
-
_BitScanForward64(&result, n);
|
170
|
-
return result;
|
171
|
-
#elif defined(_MSC_VER) && !defined(__clang__)
|
172
|
-
unsigned long result = 0; // NOLINT(runtime/int)
|
173
|
-
if (static_cast<uint32_t>(n) == 0) {
|
174
|
-
_BitScanForward(&result, static_cast<unsigned long>(n >> 32));
|
175
|
-
return result + 32;
|
176
|
-
}
|
177
|
-
_BitScanForward(&result, static_cast<unsigned long>(n));
|
178
|
-
return result;
|
179
|
-
#elif defined(__GNUC__) || defined(__clang__)
|
180
|
-
static_assert(sizeof(unsigned long long) == sizeof(n), // NOLINT(runtime/int)
|
181
|
-
"__builtin_ctzll does not take 64-bit arg");
|
182
|
-
return __builtin_ctzll(n);
|
183
|
-
#else
|
184
|
-
return CountTrailingZerosNonZero64Slow(n);
|
185
|
-
#endif
|
186
|
-
}
|
187
|
-
|
188
|
-
ABSL_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero32Slow(uint32_t n) {
|
189
|
-
int c = 31;
|
190
|
-
n &= ~n + 1;
|
191
|
-
if (n & 0x0000FFFF) c -= 16;
|
192
|
-
if (n & 0x00FF00FF) c -= 8;
|
193
|
-
if (n & 0x0F0F0F0F) c -= 4;
|
194
|
-
if (n & 0x33333333) c -= 2;
|
195
|
-
if (n & 0x55555555) c -= 1;
|
196
|
-
return c;
|
197
|
-
}
|
198
|
-
|
199
|
-
ABSL_BASE_INTERNAL_FORCEINLINE int CountTrailingZerosNonZero32(uint32_t n) {
|
200
|
-
#if defined(_MSC_VER) && !defined(__clang__)
|
201
|
-
unsigned long result = 0; // NOLINT(runtime/int)
|
202
|
-
_BitScanForward(&result, n);
|
203
|
-
return result;
|
204
|
-
#elif defined(__GNUC__) || defined(__clang__)
|
205
|
-
static_assert(sizeof(int) == sizeof(n),
|
206
|
-
"__builtin_ctz does not take 32-bit arg");
|
207
|
-
return __builtin_ctz(n);
|
208
|
-
#else
|
209
|
-
return CountTrailingZerosNonZero32Slow(n);
|
210
|
-
#endif
|
211
|
-
}
|
212
|
-
|
213
|
-
#undef ABSL_BASE_INTERNAL_FORCEINLINE
|
214
|
-
|
215
|
-
} // namespace base_internal
|
216
|
-
ABSL_NAMESPACE_END
|
217
|
-
} // namespace absl
|
218
|
-
|
219
|
-
#endif // ABSL_BASE_INTERNAL_BITS_H_
|
@@ -1,249 +0,0 @@
|
|
1
|
-
// Do not include. This is an implementation detail of base/mutex.h.
|
2
|
-
//
|
3
|
-
// Declares three classes:
|
4
|
-
//
|
5
|
-
// base::internal::MutexImpl - implementation helper for Mutex
|
6
|
-
// base::internal::CondVarImpl - implementation helper for CondVar
|
7
|
-
// base::internal::SynchronizationStorage<T> - implementation helper for
|
8
|
-
// Mutex, CondVar
|
9
|
-
|
10
|
-
#include <type_traits>
|
11
|
-
|
12
|
-
#if defined(_WIN32)
|
13
|
-
#include <condition_variable>
|
14
|
-
#include <mutex>
|
15
|
-
#else
|
16
|
-
#include <pthread.h>
|
17
|
-
#endif
|
18
|
-
|
19
|
-
#include "absl/base/call_once.h"
|
20
|
-
#include "absl/time/time.h"
|
21
|
-
|
22
|
-
// Declare that Mutex::ReaderLock is actually Lock(). Intended primarily
|
23
|
-
// for tests, and even then as a last resort.
|
24
|
-
#ifdef ABSL_MUTEX_READER_LOCK_IS_EXCLUSIVE
|
25
|
-
#error ABSL_MUTEX_READER_LOCK_IS_EXCLUSIVE cannot be directly set
|
26
|
-
#else
|
27
|
-
#define ABSL_MUTEX_READER_LOCK_IS_EXCLUSIVE 1
|
28
|
-
#endif
|
29
|
-
|
30
|
-
// Declare that Mutex::EnableInvariantDebugging is not implemented.
|
31
|
-
// Intended primarily for tests, and even then as a last resort.
|
32
|
-
#ifdef ABSL_MUTEX_ENABLE_INVARIANT_DEBUGGING_NOT_IMPLEMENTED
|
33
|
-
#error ABSL_MUTEX_ENABLE_INVARIANT_DEBUGGING_NOT_IMPLEMENTED cannot be directly set
|
34
|
-
#else
|
35
|
-
#define ABSL_MUTEX_ENABLE_INVARIANT_DEBUGGING_NOT_IMPLEMENTED 1
|
36
|
-
#endif
|
37
|
-
|
38
|
-
namespace absl {
|
39
|
-
ABSL_NAMESPACE_BEGIN
|
40
|
-
class Condition;
|
41
|
-
|
42
|
-
namespace synchronization_internal {
|
43
|
-
|
44
|
-
class MutexImpl;
|
45
|
-
|
46
|
-
// Do not use this implementation detail of CondVar. Provides most of the
|
47
|
-
// implementation, but should not be placed directly in static storage
|
48
|
-
// because it will not linker initialize properly. See
|
49
|
-
// SynchronizationStorage<T> below for what we mean by linker
|
50
|
-
// initialization.
|
51
|
-
class CondVarImpl {
|
52
|
-
public:
|
53
|
-
CondVarImpl();
|
54
|
-
CondVarImpl(const CondVarImpl&) = delete;
|
55
|
-
CondVarImpl& operator=(const CondVarImpl&) = delete;
|
56
|
-
~CondVarImpl();
|
57
|
-
|
58
|
-
void Signal();
|
59
|
-
void SignalAll();
|
60
|
-
void Wait(MutexImpl* mutex);
|
61
|
-
bool WaitWithDeadline(MutexImpl* mutex, absl::Time deadline);
|
62
|
-
|
63
|
-
private:
|
64
|
-
#if defined(_WIN32)
|
65
|
-
std::condition_variable_any std_cv_;
|
66
|
-
#else
|
67
|
-
pthread_cond_t pthread_cv_;
|
68
|
-
#endif
|
69
|
-
};
|
70
|
-
|
71
|
-
// Do not use this implementation detail of Mutex. Provides most of the
|
72
|
-
// implementation, but should not be placed directly in static storage
|
73
|
-
// because it will not linker initialize properly. See
|
74
|
-
// SynchronizationStorage<T> below for what we mean by linker
|
75
|
-
// initialization.
|
76
|
-
class MutexImpl {
|
77
|
-
public:
|
78
|
-
MutexImpl();
|
79
|
-
MutexImpl(const MutexImpl&) = delete;
|
80
|
-
MutexImpl& operator=(const MutexImpl&) = delete;
|
81
|
-
~MutexImpl();
|
82
|
-
|
83
|
-
void Lock();
|
84
|
-
bool TryLock();
|
85
|
-
void Unlock();
|
86
|
-
void Await(const Condition& cond);
|
87
|
-
bool AwaitWithDeadline(const Condition& cond, absl::Time deadline);
|
88
|
-
|
89
|
-
private:
|
90
|
-
friend class CondVarImpl;
|
91
|
-
|
92
|
-
#if defined(_WIN32)
|
93
|
-
std::mutex std_mutex_;
|
94
|
-
#else
|
95
|
-
pthread_mutex_t pthread_mutex_;
|
96
|
-
#endif
|
97
|
-
|
98
|
-
// True if the underlying mutex is locked. If the destructor is entered
|
99
|
-
// while locked_, the underlying mutex is unlocked. Mutex supports
|
100
|
-
// destruction while locked, but the same is undefined behavior for both
|
101
|
-
// pthread_mutex_t and std::mutex.
|
102
|
-
bool locked_ = false;
|
103
|
-
|
104
|
-
// Signaled before releasing the lock, in support of Await.
|
105
|
-
CondVarImpl released_;
|
106
|
-
};
|
107
|
-
|
108
|
-
// Do not use this implementation detail of CondVar and Mutex. A storage
|
109
|
-
// space for T that supports a LinkerInitialized constructor. T must
|
110
|
-
// have a default constructor, which is called by the first call to
|
111
|
-
// get(). T's destructor is never called if the LinkerInitialized
|
112
|
-
// constructor is called.
|
113
|
-
//
|
114
|
-
// Objects constructed with the default constructor are constructed and
|
115
|
-
// destructed like any other object, and should never be allocated in
|
116
|
-
// static storage.
|
117
|
-
//
|
118
|
-
// Objects constructed with the LinkerInitialized constructor should
|
119
|
-
// always be in static storage. For such objects, calls to get() are always
|
120
|
-
// valid, except from signal handlers.
|
121
|
-
//
|
122
|
-
// Note that this implementation relies on undefined language behavior that
|
123
|
-
// are known to hold for the set of supported compilers. An analysis
|
124
|
-
// follows.
|
125
|
-
//
|
126
|
-
// From the C++11 standard:
|
127
|
-
//
|
128
|
-
// [basic.life] says an object has non-trivial initialization if it is of
|
129
|
-
// class type and it is initialized by a constructor other than a trivial
|
130
|
-
// default constructor. (the LinkerInitialized constructor is
|
131
|
-
// non-trivial)
|
132
|
-
//
|
133
|
-
// [basic.life] says the lifetime of an object with a non-trivial
|
134
|
-
// constructor begins when the call to the constructor is complete.
|
135
|
-
//
|
136
|
-
// [basic.life] says the lifetime of an object with non-trivial destructor
|
137
|
-
// ends when the call to the destructor begins.
|
138
|
-
//
|
139
|
-
// [basic.life] p5 specifies undefined behavior when accessing non-static
|
140
|
-
// members of an instance outside its
|
141
|
-
// lifetime. (SynchronizationStorage::get() access non-static members)
|
142
|
-
//
|
143
|
-
// So, LinkerInitialized object of SynchronizationStorage uses a
|
144
|
-
// non-trivial constructor, which is called at some point during dynamic
|
145
|
-
// initialization, and is therefore subject to order of dynamic
|
146
|
-
// initialization bugs, where get() is called before the object's
|
147
|
-
// constructor is, resulting in undefined behavior.
|
148
|
-
//
|
149
|
-
// Similarly, a LinkerInitialized SynchronizationStorage object has a
|
150
|
-
// non-trivial destructor, and so its lifetime ends at some point during
|
151
|
-
// destruction of objects with static storage duration [basic.start.term]
|
152
|
-
// p4. There is a window where other exit code could call get() after this
|
153
|
-
// occurs, resulting in undefined behavior.
|
154
|
-
//
|
155
|
-
// Combined, these statements imply that LinkerInitialized instances
|
156
|
-
// of SynchronizationStorage<T> rely on undefined behavior.
|
157
|
-
//
|
158
|
-
// However, in practice, the implementation works on all supported
|
159
|
-
// compilers. Specifically, we rely on:
|
160
|
-
//
|
161
|
-
// a) zero-initialization being sufficient to initialize
|
162
|
-
// LinkerInitialized instances for the purposes of calling
|
163
|
-
// get(), regardless of when the constructor is called. This is
|
164
|
-
// because the is_dynamic_ boolean is correctly zero-initialized to
|
165
|
-
// false.
|
166
|
-
//
|
167
|
-
// b) the LinkerInitialized constructor is a NOP, and immaterial to
|
168
|
-
// even to concurrent calls to get().
|
169
|
-
//
|
170
|
-
// c) the destructor being a NOP for LinkerInitialized objects
|
171
|
-
// (guaranteed by a check for !is_dynamic_), and so any concurrent and
|
172
|
-
// subsequent calls to get() functioning as if the destructor were not
|
173
|
-
// called, by virtue of the instances' storage remaining valid after the
|
174
|
-
// destructor runs.
|
175
|
-
//
|
176
|
-
// d) That a-c apply transitively when SynchronizationStorage<T> is the
|
177
|
-
// only member of a class allocated in static storage.
|
178
|
-
//
|
179
|
-
// Nothing in the language standard guarantees that a-d hold. In practice,
|
180
|
-
// these hold in all supported compilers.
|
181
|
-
//
|
182
|
-
// Future direction:
|
183
|
-
//
|
184
|
-
// Ideally, we would simply use std::mutex or a similar class, which when
|
185
|
-
// allocated statically would support use immediately after static
|
186
|
-
// initialization up until static storage is reclaimed (i.e. the properties
|
187
|
-
// we require of all "linker initialized" instances).
|
188
|
-
//
|
189
|
-
// Regarding construction in static storage, std::mutex is required to
|
190
|
-
// provide a constexpr default constructor [thread.mutex.class], which
|
191
|
-
// ensures the instance's lifetime begins with static initialization
|
192
|
-
// [basic.start.init], and so is immune to any problems caused by the order
|
193
|
-
// of dynamic initialization. However, as of this writing Microsoft's
|
194
|
-
// Visual Studio does not provide a constexpr constructor for std::mutex.
|
195
|
-
// See
|
196
|
-
// https://blogs.msdn.microsoft.com/vcblog/2015/06/02/constexpr-complete-for-vs-2015-rtm-c11-compiler-c17-stl/
|
197
|
-
//
|
198
|
-
// Regarding destruction of instances in static storage, [basic.life] does
|
199
|
-
// say an object ends when storage in which the occupies is released, in
|
200
|
-
// the case of non-trivial destructor. However, std::mutex is not specified
|
201
|
-
// to have a trivial destructor.
|
202
|
-
//
|
203
|
-
// So, we would need a class with a constexpr default constructor and a
|
204
|
-
// trivial destructor. Today, we can achieve neither desired property using
|
205
|
-
// std::mutex directly.
|
206
|
-
template <typename T>
|
207
|
-
class SynchronizationStorage {
|
208
|
-
public:
|
209
|
-
// Instances allocated on the heap or on the stack should use the default
|
210
|
-
// constructor.
|
211
|
-
SynchronizationStorage()
|
212
|
-
: destruct_(true), once_() {}
|
213
|
-
|
214
|
-
constexpr explicit SynchronizationStorage(absl::ConstInitType)
|
215
|
-
: destruct_(false), once_(), space_{{0}} {}
|
216
|
-
|
217
|
-
SynchronizationStorage(SynchronizationStorage&) = delete;
|
218
|
-
SynchronizationStorage& operator=(SynchronizationStorage&) = delete;
|
219
|
-
|
220
|
-
~SynchronizationStorage() {
|
221
|
-
if (destruct_) {
|
222
|
-
get()->~T();
|
223
|
-
}
|
224
|
-
}
|
225
|
-
|
226
|
-
// Retrieve the object in storage. This is fast and thread safe, but does
|
227
|
-
// incur the cost of absl::call_once().
|
228
|
-
T* get() {
|
229
|
-
absl::call_once(once_, SynchronizationStorage::Construct, this);
|
230
|
-
return reinterpret_cast<T*>(&space_);
|
231
|
-
}
|
232
|
-
|
233
|
-
private:
|
234
|
-
static void Construct(SynchronizationStorage<T>* self) {
|
235
|
-
new (&self->space_) T();
|
236
|
-
}
|
237
|
-
|
238
|
-
// When true, T's destructor is run when this is destructed.
|
239
|
-
const bool destruct_;
|
240
|
-
|
241
|
-
absl::once_flag once_;
|
242
|
-
|
243
|
-
// An aligned space for the T.
|
244
|
-
alignas(T) unsigned char space_[sizeof(T)];
|
245
|
-
};
|
246
|
-
|
247
|
-
} // namespace synchronization_internal
|
248
|
-
ABSL_NAMESPACE_END
|
249
|
-
} // namespace absl
|