grpc 1.37.1 → 1.40.0.pre1
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 +112 -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 +330 -0
- data/include/grpc/event_engine/port.h +41 -0
- data/include/grpc/event_engine/slice_allocator.h +66 -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 +44 -19
- data/include/grpc/impl/codegen/port_platform.h +46 -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 +975 -3282
- data/src/core/ext/filters/client_channel/client_channel.h +513 -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 +20 -7
- 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 +53 -51
- 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 +14 -23
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +16 -16
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +734 -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 +10 -17
- 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 +17 -20
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +53 -65
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +36 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +33 -55
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +151 -163
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +70 -46
- 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 +158 -102
- 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 +2598 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -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_call_data.h +45 -5
- 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 +19 -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 +33 -23
- 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 +49 -46
- 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/bin_decoder.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +141 -126
- 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 +9 -9
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +12 -12
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -16
- 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 +11 -10
- 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 +652 -736
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
- 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 +33 -28
- data/src/core/ext/transport/chttp2/transport/parsing.cc +129 -106
- data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
- 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/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +56 -35
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +180 -76
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -27
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +97 -48
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +45 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +67 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +66 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +227 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +32 -24
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -73
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +4 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +8 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +27 -19
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +1 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -7
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +57 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +29 -17
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +72 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +15 -11
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +85 -43
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +274 -91
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +11 -8
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +30 -13
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +115 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +1 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +82 -66
- data/src/core/ext/upb-generated/validate/validate.upb.h +220 -124
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +53 -52
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +318 -277
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +437 -410
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +198 -170
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +219 -163
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +15 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +29 -25
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +135 -125
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +131 -123
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +32 -24
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -55
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +684 -664
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +13 -10
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +441 -375
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +122 -114
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +112 -79
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -160
- 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 +665 -317
- data/src/core/ext/xds/xds_api.h +52 -14
- data/src/core/ext/xds/xds_bootstrap.cc +101 -160
- 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 +370 -215
- data/src/core/ext/xds/xds_client.h +38 -28
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_http_filters.cc +3 -2
- data/src/core/ext/xds/xds_http_filters.h +3 -0
- 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/call_tracer.h +85 -0
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +11 -10
- 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/context.h +3 -0
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/channel/status_util.h +4 -0
- data/src/core/lib/compression/stream_compression.h +1 -1
- data/src/core/lib/compression/stream_compression_gzip.h +1 -1
- data/src/core/lib/compression/stream_compression_identity.h +1 -1
- data/src/core/lib/debug/stats.h +1 -1
- 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/sockaddr.cc +40 -0
- data/src/core/lib/event_engine/sockaddr.h +44 -0
- data/src/core/lib/gpr/murmur_hash.cc +4 -2
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/manual_constructor.h +1 -1
- data/src/core/lib/gprpp/orphanable.h +3 -3
- 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/gprpp/sync.h +2 -30
- 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 +8 -10
- 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_apple.h +1 -1
- 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 +192 -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 +263 -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 +2 -2
- 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 +13 -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 +7 -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 +29 -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/timer_manager.cc +1 -1
- 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 +5 -6
- data/src/core/lib/matchers/matchers.cc +46 -58
- data/src/core/lib/matchers/matchers.h +30 -29
- 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 +68 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -0
- 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 +60 -76
- 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 +45 -36
- data/src/core/lib/security/transport/server_auth_filter.cc +17 -18
- 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/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +72 -52
- 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 +31 -23
- data/src/core/lib/surface/server.h +19 -18
- 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 +2 -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
- data/third_party/xxhash/xxhash.h +77 -195
- metadata +116 -51
- data/src/core/lib/gpr/arena.h +0 -47
- 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
@@ -0,0 +1,154 @@
|
|
1
|
+
// Copyright 2020 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
|
+
#ifndef ABSL_SYNCHRONIZATION_INTERNAL_FUTEX_H_
|
15
|
+
#define ABSL_SYNCHRONIZATION_INTERNAL_FUTEX_H_
|
16
|
+
|
17
|
+
#include "absl/base/config.h"
|
18
|
+
|
19
|
+
#ifdef _WIN32
|
20
|
+
#include <windows.h>
|
21
|
+
#else
|
22
|
+
#include <sys/time.h>
|
23
|
+
#include <unistd.h>
|
24
|
+
#endif
|
25
|
+
|
26
|
+
#ifdef __linux__
|
27
|
+
#include <linux/futex.h>
|
28
|
+
#include <sys/syscall.h>
|
29
|
+
#endif
|
30
|
+
|
31
|
+
#include <errno.h>
|
32
|
+
#include <stdio.h>
|
33
|
+
#include <time.h>
|
34
|
+
|
35
|
+
#include <atomic>
|
36
|
+
#include <cstdint>
|
37
|
+
|
38
|
+
#include "absl/base/optimization.h"
|
39
|
+
#include "absl/synchronization/internal/kernel_timeout.h"
|
40
|
+
|
41
|
+
#ifdef ABSL_INTERNAL_HAVE_FUTEX
|
42
|
+
#error ABSL_INTERNAL_HAVE_FUTEX may not be set on the command line
|
43
|
+
#elif defined(__BIONIC__)
|
44
|
+
// Bionic supports all the futex operations we need even when some of the futex
|
45
|
+
// definitions are missing.
|
46
|
+
#define ABSL_INTERNAL_HAVE_FUTEX
|
47
|
+
#elif defined(__linux__) && defined(FUTEX_CLOCK_REALTIME)
|
48
|
+
// FUTEX_CLOCK_REALTIME requires Linux >= 2.6.28.
|
49
|
+
#define ABSL_INTERNAL_HAVE_FUTEX
|
50
|
+
#endif
|
51
|
+
|
52
|
+
#ifdef ABSL_INTERNAL_HAVE_FUTEX
|
53
|
+
|
54
|
+
namespace absl {
|
55
|
+
ABSL_NAMESPACE_BEGIN
|
56
|
+
namespace synchronization_internal {
|
57
|
+
|
58
|
+
// Some Android headers are missing these definitions even though they
|
59
|
+
// support these futex operations.
|
60
|
+
#ifdef __BIONIC__
|
61
|
+
#ifndef SYS_futex
|
62
|
+
#define SYS_futex __NR_futex
|
63
|
+
#endif
|
64
|
+
#ifndef FUTEX_WAIT_BITSET
|
65
|
+
#define FUTEX_WAIT_BITSET 9
|
66
|
+
#endif
|
67
|
+
#ifndef FUTEX_PRIVATE_FLAG
|
68
|
+
#define FUTEX_PRIVATE_FLAG 128
|
69
|
+
#endif
|
70
|
+
#ifndef FUTEX_CLOCK_REALTIME
|
71
|
+
#define FUTEX_CLOCK_REALTIME 256
|
72
|
+
#endif
|
73
|
+
#ifndef FUTEX_BITSET_MATCH_ANY
|
74
|
+
#define FUTEX_BITSET_MATCH_ANY 0xFFFFFFFF
|
75
|
+
#endif
|
76
|
+
#endif
|
77
|
+
|
78
|
+
#if defined(__NR_futex_time64) && !defined(SYS_futex_time64)
|
79
|
+
#define SYS_futex_time64 __NR_futex_time64
|
80
|
+
#endif
|
81
|
+
|
82
|
+
#if defined(SYS_futex_time64) && !defined(SYS_futex)
|
83
|
+
#define SYS_futex SYS_futex_time64
|
84
|
+
#endif
|
85
|
+
|
86
|
+
class FutexImpl {
|
87
|
+
public:
|
88
|
+
static int WaitUntil(std::atomic<int32_t> *v, int32_t val,
|
89
|
+
KernelTimeout t) {
|
90
|
+
int err = 0;
|
91
|
+
if (t.has_timeout()) {
|
92
|
+
// https://locklessinc.com/articles/futex_cheat_sheet/
|
93
|
+
// Unlike FUTEX_WAIT, FUTEX_WAIT_BITSET uses absolute time.
|
94
|
+
struct timespec abs_timeout = t.MakeAbsTimespec();
|
95
|
+
// Atomically check that the futex value is still 0, and if it
|
96
|
+
// is, sleep until abs_timeout or until woken by FUTEX_WAKE.
|
97
|
+
err = syscall(
|
98
|
+
SYS_futex, reinterpret_cast<int32_t *>(v),
|
99
|
+
FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME, val,
|
100
|
+
&abs_timeout, nullptr, FUTEX_BITSET_MATCH_ANY);
|
101
|
+
} else {
|
102
|
+
// Atomically check that the futex value is still 0, and if it
|
103
|
+
// is, sleep until woken by FUTEX_WAKE.
|
104
|
+
err = syscall(SYS_futex, reinterpret_cast<int32_t *>(v),
|
105
|
+
FUTEX_WAIT | FUTEX_PRIVATE_FLAG, val, nullptr);
|
106
|
+
}
|
107
|
+
if (ABSL_PREDICT_FALSE(err != 0)) {
|
108
|
+
err = -errno;
|
109
|
+
}
|
110
|
+
return err;
|
111
|
+
}
|
112
|
+
|
113
|
+
static int WaitBitsetAbsoluteTimeout(std::atomic<int32_t> *v, int32_t val,
|
114
|
+
int32_t bits,
|
115
|
+
const struct timespec *abstime) {
|
116
|
+
int err = syscall(SYS_futex, reinterpret_cast<int32_t *>(v),
|
117
|
+
FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG, val, abstime,
|
118
|
+
nullptr, bits);
|
119
|
+
if (ABSL_PREDICT_FALSE(err != 0)) {
|
120
|
+
err = -errno;
|
121
|
+
}
|
122
|
+
return err;
|
123
|
+
}
|
124
|
+
|
125
|
+
static int Wake(std::atomic<int32_t> *v, int32_t count) {
|
126
|
+
int err = syscall(SYS_futex, reinterpret_cast<int32_t *>(v),
|
127
|
+
FUTEX_WAKE | FUTEX_PRIVATE_FLAG, count);
|
128
|
+
if (ABSL_PREDICT_FALSE(err < 0)) {
|
129
|
+
err = -errno;
|
130
|
+
}
|
131
|
+
return err;
|
132
|
+
}
|
133
|
+
|
134
|
+
// FUTEX_WAKE_BITSET
|
135
|
+
static int WakeBitset(std::atomic<int32_t> *v, int32_t count, int32_t bits) {
|
136
|
+
int err = syscall(SYS_futex, reinterpret_cast<int32_t *>(v),
|
137
|
+
FUTEX_WAKE_BITSET | FUTEX_PRIVATE_FLAG, count, nullptr,
|
138
|
+
nullptr, bits);
|
139
|
+
if (ABSL_PREDICT_FALSE(err < 0)) {
|
140
|
+
err = -errno;
|
141
|
+
}
|
142
|
+
return err;
|
143
|
+
}
|
144
|
+
};
|
145
|
+
|
146
|
+
class Futex : public FutexImpl {};
|
147
|
+
|
148
|
+
} // namespace synchronization_internal
|
149
|
+
ABSL_NAMESPACE_END
|
150
|
+
} // namespace absl
|
151
|
+
|
152
|
+
#endif // ABSL_INTERNAL_HAVE_FUTEX
|
153
|
+
|
154
|
+
#endif // ABSL_SYNCHRONIZATION_INTERNAL_FUTEX_H_
|
@@ -26,6 +26,7 @@
|
|
26
26
|
#define ABSL_SYNCHRONIZATION_INTERNAL_KERNEL_TIMEOUT_H_
|
27
27
|
|
28
28
|
#include <time.h>
|
29
|
+
|
29
30
|
#include <algorithm>
|
30
31
|
#include <limits>
|
31
32
|
|
@@ -142,7 +143,7 @@ inline struct timespec KernelTimeout::MakeAbsTimespec() {
|
|
142
143
|
|
143
144
|
struct timespec abstime;
|
144
145
|
int64_t seconds = (std::min)(n / kNanosPerSecond,
|
145
|
-
|
146
|
+
int64_t{(std::numeric_limits<time_t>::max)()});
|
146
147
|
abstime.tv_sec = static_cast<time_t>(seconds);
|
147
148
|
abstime.tv_nsec = static_cast<decltype(abstime.tv_nsec)>(n % kNanosPerSecond);
|
148
149
|
return abstime;
|
@@ -68,12 +68,12 @@ ABSL_NAMESPACE_END
|
|
68
68
|
|
69
69
|
extern "C" {
|
70
70
|
|
71
|
-
ABSL_ATTRIBUTE_WEAK void AbslInternalPerThreadSemPost(
|
71
|
+
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)(
|
72
72
|
absl::base_internal::ThreadIdentity *identity) {
|
73
73
|
absl::synchronization_internal::Waiter::GetWaiter(identity)->Post();
|
74
74
|
}
|
75
75
|
|
76
|
-
ABSL_ATTRIBUTE_WEAK bool AbslInternalPerThreadSemWait(
|
76
|
+
ABSL_ATTRIBUTE_WEAK bool ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemWait)(
|
77
77
|
absl::synchronization_internal::KernelTimeout t) {
|
78
78
|
bool timeout = false;
|
79
79
|
absl::base_internal::ThreadIdentity *identity;
|
@@ -96,20 +96,20 @@ ABSL_NAMESPACE_END
|
|
96
96
|
// By changing our extension points to be extern "C", we dodge this
|
97
97
|
// check.
|
98
98
|
extern "C" {
|
99
|
-
void AbslInternalPerThreadSemPost(
|
99
|
+
void ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)(
|
100
100
|
absl::base_internal::ThreadIdentity* identity);
|
101
|
-
bool AbslInternalPerThreadSemWait(
|
101
|
+
bool ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemWait)(
|
102
102
|
absl::synchronization_internal::KernelTimeout t);
|
103
103
|
} // extern "C"
|
104
104
|
|
105
105
|
void absl::synchronization_internal::PerThreadSem::Post(
|
106
106
|
absl::base_internal::ThreadIdentity* identity) {
|
107
|
-
AbslInternalPerThreadSemPost(identity);
|
107
|
+
ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemPost)(identity);
|
108
108
|
}
|
109
109
|
|
110
110
|
bool absl::synchronization_internal::PerThreadSem::Wait(
|
111
111
|
absl::synchronization_internal::KernelTimeout t) {
|
112
|
-
return AbslInternalPerThreadSemWait(t);
|
112
|
+
return ABSL_INTERNAL_C_SYMBOL(AbslInternalPerThreadSemWait)(t);
|
113
113
|
}
|
114
114
|
|
115
115
|
#endif // ABSL_SYNCHRONIZATION_INTERNAL_PER_THREAD_SEM_H_
|
@@ -48,6 +48,7 @@
|
|
48
48
|
#include "absl/base/optimization.h"
|
49
49
|
#include "absl/synchronization/internal/kernel_timeout.h"
|
50
50
|
|
51
|
+
|
51
52
|
namespace absl {
|
52
53
|
ABSL_NAMESPACE_BEGIN
|
53
54
|
namespace synchronization_internal {
|
@@ -66,71 +67,6 @@ static void MaybeBecomeIdle() {
|
|
66
67
|
|
67
68
|
#if ABSL_WAITER_MODE == ABSL_WAITER_MODE_FUTEX
|
68
69
|
|
69
|
-
// Some Android headers are missing these definitions even though they
|
70
|
-
// support these futex operations.
|
71
|
-
#ifdef __BIONIC__
|
72
|
-
#ifndef SYS_futex
|
73
|
-
#define SYS_futex __NR_futex
|
74
|
-
#endif
|
75
|
-
#ifndef FUTEX_WAIT_BITSET
|
76
|
-
#define FUTEX_WAIT_BITSET 9
|
77
|
-
#endif
|
78
|
-
#ifndef FUTEX_PRIVATE_FLAG
|
79
|
-
#define FUTEX_PRIVATE_FLAG 128
|
80
|
-
#endif
|
81
|
-
#ifndef FUTEX_CLOCK_REALTIME
|
82
|
-
#define FUTEX_CLOCK_REALTIME 256
|
83
|
-
#endif
|
84
|
-
#ifndef FUTEX_BITSET_MATCH_ANY
|
85
|
-
#define FUTEX_BITSET_MATCH_ANY 0xFFFFFFFF
|
86
|
-
#endif
|
87
|
-
#endif
|
88
|
-
|
89
|
-
#if defined(__NR_futex_time64) && !defined(SYS_futex_time64)
|
90
|
-
#define SYS_futex_time64 __NR_futex_time64
|
91
|
-
#endif
|
92
|
-
|
93
|
-
#if defined(SYS_futex_time64) && !defined(SYS_futex)
|
94
|
-
#define SYS_futex SYS_futex_time64
|
95
|
-
#endif
|
96
|
-
|
97
|
-
class Futex {
|
98
|
-
public:
|
99
|
-
static int WaitUntil(std::atomic<int32_t> *v, int32_t val,
|
100
|
-
KernelTimeout t) {
|
101
|
-
int err = 0;
|
102
|
-
if (t.has_timeout()) {
|
103
|
-
// https://locklessinc.com/articles/futex_cheat_sheet/
|
104
|
-
// Unlike FUTEX_WAIT, FUTEX_WAIT_BITSET uses absolute time.
|
105
|
-
struct timespec abs_timeout = t.MakeAbsTimespec();
|
106
|
-
// Atomically check that the futex value is still 0, and if it
|
107
|
-
// is, sleep until abs_timeout or until woken by FUTEX_WAKE.
|
108
|
-
err = syscall(
|
109
|
-
SYS_futex, reinterpret_cast<int32_t *>(v),
|
110
|
-
FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG | FUTEX_CLOCK_REALTIME, val,
|
111
|
-
&abs_timeout, nullptr, FUTEX_BITSET_MATCH_ANY);
|
112
|
-
} else {
|
113
|
-
// Atomically check that the futex value is still 0, and if it
|
114
|
-
// is, sleep until woken by FUTEX_WAKE.
|
115
|
-
err = syscall(SYS_futex, reinterpret_cast<int32_t *>(v),
|
116
|
-
FUTEX_WAIT | FUTEX_PRIVATE_FLAG, val, nullptr);
|
117
|
-
}
|
118
|
-
if (err != 0) {
|
119
|
-
err = -errno;
|
120
|
-
}
|
121
|
-
return err;
|
122
|
-
}
|
123
|
-
|
124
|
-
static int Wake(std::atomic<int32_t> *v, int32_t count) {
|
125
|
-
int err = syscall(SYS_futex, reinterpret_cast<int32_t *>(v),
|
126
|
-
FUTEX_WAKE | FUTEX_PRIVATE_FLAG, count);
|
127
|
-
if (ABSL_PREDICT_FALSE(err < 0)) {
|
128
|
-
err = -errno;
|
129
|
-
}
|
130
|
-
return err;
|
131
|
-
}
|
132
|
-
};
|
133
|
-
|
134
70
|
Waiter::Waiter() {
|
135
71
|
futex_.store(0, std::memory_order_relaxed);
|
136
72
|
}
|
@@ -36,6 +36,7 @@
|
|
36
36
|
#include <cstdint>
|
37
37
|
|
38
38
|
#include "absl/base/internal/thread_identity.h"
|
39
|
+
#include "absl/synchronization/internal/futex.h"
|
39
40
|
#include "absl/synchronization/internal/kernel_timeout.h"
|
40
41
|
|
41
42
|
// May be chosen at compile time via -DABSL_FORCE_WAITER_MODE=<index>
|
@@ -48,12 +49,7 @@
|
|
48
49
|
#define ABSL_WAITER_MODE ABSL_FORCE_WAITER_MODE
|
49
50
|
#elif defined(_WIN32) && _WIN32_WINNT >= _WIN32_WINNT_VISTA
|
50
51
|
#define ABSL_WAITER_MODE ABSL_WAITER_MODE_WIN32
|
51
|
-
#elif defined(
|
52
|
-
// Bionic supports all the futex operations we need even when some of the futex
|
53
|
-
// definitions are missing.
|
54
|
-
#define ABSL_WAITER_MODE ABSL_WAITER_MODE_FUTEX
|
55
|
-
#elif defined(__linux__) && defined(FUTEX_CLOCK_REALTIME)
|
56
|
-
// FUTEX_CLOCK_REALTIME requires Linux >= 2.6.28.
|
52
|
+
#elif defined(ABSL_INTERNAL_HAVE_FUTEX)
|
57
53
|
#define ABSL_WAITER_MODE ABSL_WAITER_MODE_FUTEX
|
58
54
|
#elif defined(ABSL_HAVE_SEMAPHORE_H)
|
59
55
|
#define ABSL_WAITER_MODE ABSL_WAITER_MODE_SEM
|
@@ -70,7 +70,9 @@ using absl::synchronization_internal::KernelTimeout;
|
|
70
70
|
using absl::synchronization_internal::PerThreadSem;
|
71
71
|
|
72
72
|
extern "C" {
|
73
|
-
ABSL_ATTRIBUTE_WEAK void AbslInternalMutexYield() {
|
73
|
+
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalMutexYield)() {
|
74
|
+
std::this_thread::yield();
|
75
|
+
}
|
74
76
|
} // extern "C"
|
75
77
|
|
76
78
|
namespace absl {
|
@@ -89,8 +91,8 @@ ABSL_CONST_INIT std::atomic<OnDeadlockCycle> synch_deadlock_detection(
|
|
89
91
|
ABSL_CONST_INIT std::atomic<bool> synch_check_invariants(false);
|
90
92
|
|
91
93
|
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
|
92
|
-
|
93
|
-
|
94
|
+
absl::base_internal::AtomicHook<void (*)(int64_t wait_cycles)>
|
95
|
+
submit_profile_data;
|
94
96
|
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES absl::base_internal::AtomicHook<void (*)(
|
95
97
|
const char *msg, const void *obj, int64_t wait_cycles)>
|
96
98
|
mutex_tracer;
|
@@ -124,35 +126,44 @@ void RegisterSymbolizer(bool (*fn)(const void *pc, char *out, int out_size)) {
|
|
124
126
|
symbolizer.Store(fn);
|
125
127
|
}
|
126
128
|
|
129
|
+
namespace {
|
130
|
+
// Represents the strategy for spin and yield.
|
131
|
+
// See the comment in GetMutexGlobals() for more information.
|
132
|
+
enum DelayMode { AGGRESSIVE, GENTLE };
|
133
|
+
|
127
134
|
struct ABSL_CACHELINE_ALIGNED MutexGlobals {
|
128
135
|
absl::once_flag once;
|
129
|
-
int num_cpus = 0;
|
130
136
|
int spinloop_iterations = 0;
|
137
|
+
int32_t mutex_sleep_limit[2] = {};
|
131
138
|
};
|
132
139
|
|
133
|
-
|
140
|
+
const MutexGlobals &GetMutexGlobals() {
|
134
141
|
ABSL_CONST_INIT static MutexGlobals data;
|
135
142
|
absl::base_internal::LowLevelCallOnce(&data.once, [&]() {
|
136
|
-
|
137
|
-
data.spinloop_iterations =
|
143
|
+
const int num_cpus = absl::base_internal::NumCPUs();
|
144
|
+
data.spinloop_iterations = num_cpus > 1 ? 1500 : 0;
|
145
|
+
// If this a uniprocessor, only yield/sleep. Otherwise, if the mode is
|
146
|
+
// aggressive then spin many times before yielding. If the mode is
|
147
|
+
// gentle then spin only a few times before yielding. Aggressive spinning
|
148
|
+
// is used to ensure that an Unlock() call, which must get the spin lock
|
149
|
+
// for any thread to make progress gets it without undue delay.
|
150
|
+
if (num_cpus > 1) {
|
151
|
+
data.mutex_sleep_limit[AGGRESSIVE] = 5000;
|
152
|
+
data.mutex_sleep_limit[GENTLE] = 250;
|
153
|
+
} else {
|
154
|
+
data.mutex_sleep_limit[AGGRESSIVE] = 0;
|
155
|
+
data.mutex_sleep_limit[GENTLE] = 0;
|
156
|
+
}
|
138
157
|
});
|
139
158
|
return data;
|
140
159
|
}
|
141
|
-
|
142
|
-
// Spinlock delay on iteration c. Returns new c.
|
143
|
-
namespace {
|
144
|
-
enum DelayMode { AGGRESSIVE, GENTLE };
|
145
|
-
};
|
160
|
+
} // namespace
|
146
161
|
|
147
162
|
namespace synchronization_internal {
|
163
|
+
// Returns the Mutex delay on iteration `c` depending on the given `mode`.
|
164
|
+
// The returned value should be used as `c` for the next call to `MutexDelay`.
|
148
165
|
int MutexDelay(int32_t c, int mode) {
|
149
|
-
|
150
|
-
// aggressive then spin many times before yielding. If the mode is
|
151
|
-
// gentle then spin only a few times before yielding. Aggressive spinning is
|
152
|
-
// used to ensure that an Unlock() call, which must get the spin lock for
|
153
|
-
// any thread to make progress gets it without undue delay.
|
154
|
-
const int32_t limit =
|
155
|
-
GetMutexGlobals().num_cpus > 1 ? (mode == AGGRESSIVE ? 5000 : 250) : 0;
|
166
|
+
const int32_t limit = GetMutexGlobals().mutex_sleep_limit[mode];
|
156
167
|
if (c < limit) {
|
157
168
|
// Spin.
|
158
169
|
c++;
|
@@ -161,7 +172,7 @@ int MutexDelay(int32_t c, int mode) {
|
|
161
172
|
ABSL_TSAN_MUTEX_PRE_DIVERT(nullptr, 0);
|
162
173
|
if (c == limit) {
|
163
174
|
// Yield once.
|
164
|
-
AbslInternalMutexYield();
|
175
|
+
ABSL_INTERNAL_C_SYMBOL(AbslInternalMutexYield)();
|
165
176
|
c++;
|
166
177
|
} else {
|
167
178
|
// Then wait.
|
@@ -492,7 +503,7 @@ struct SynchWaitParams {
|
|
492
503
|
std::atomic<intptr_t> *cv_word;
|
493
504
|
|
494
505
|
int64_t contention_start_cycles; // Time (in cycles) when this thread started
|
495
|
-
|
506
|
+
// to contend for the mutex.
|
496
507
|
};
|
497
508
|
|
498
509
|
struct SynchLocksHeld {
|
@@ -548,7 +559,7 @@ static SynchLocksHeld *Synch_GetAllLocks() {
|
|
548
559
|
}
|
549
560
|
|
550
561
|
// Post on "w"'s associated PerThreadSem.
|
551
|
-
|
562
|
+
void Mutex::IncrementSynchSem(Mutex *mu, PerThreadSynch *w) {
|
552
563
|
if (mu) {
|
553
564
|
ABSL_TSAN_MUTEX_PRE_DIVERT(mu, 0);
|
554
565
|
}
|
@@ -752,11 +763,13 @@ void SetMutexDeadlockDetectionMode(OnDeadlockCycle mode) {
|
|
752
763
|
synch_deadlock_detection.store(mode, std::memory_order_release);
|
753
764
|
}
|
754
765
|
|
755
|
-
// Return true iff threads x and y are
|
756
|
-
//
|
757
|
-
//
|
758
|
-
|
759
|
-
|
766
|
+
// Return true iff threads x and y are part of the same equivalence
|
767
|
+
// class of waiters. An equivalence class is defined as the set of
|
768
|
+
// waiters with the same condition, type of lock, and thread priority.
|
769
|
+
//
|
770
|
+
// Requires that x and y be waiting on the same Mutex queue.
|
771
|
+
static bool MuEquivalentWaiter(PerThreadSynch *x, PerThreadSynch *y) {
|
772
|
+
return x->waitp->how == y->waitp->how && x->priority == y->priority &&
|
760
773
|
Condition::GuaranteedEqual(x->waitp->cond, y->waitp->cond);
|
761
774
|
}
|
762
775
|
|
@@ -775,18 +788,19 @@ static inline PerThreadSynch *GetPerThreadSynch(intptr_t v) {
|
|
775
788
|
// - invalid (iff x is not in a Mutex wait queue),
|
776
789
|
// - null, or
|
777
790
|
// - a pointer to a distinct thread waiting later in the same Mutex queue
|
778
|
-
// such that all threads in [x, x->skip] have the same condition
|
779
|
-
// lock type (
|
791
|
+
// such that all threads in [x, x->skip] have the same condition, priority
|
792
|
+
// and lock type (MuEquivalentWaiter() is true for all pairs in [x,
|
793
|
+
// x->skip]).
|
780
794
|
// In addition, if x->skip is valid, (x->may_skip || x->skip == null)
|
781
795
|
//
|
782
|
-
// By the spec of
|
796
|
+
// By the spec of MuEquivalentWaiter(), it is not necessary when removing the
|
783
797
|
// first runnable thread y from the front a Mutex queue to adjust the skip
|
784
798
|
// field of another thread x because if x->skip==y, x->skip must (have) become
|
785
799
|
// invalid before y is removed. The function TryRemove can remove a specified
|
786
800
|
// thread from an arbitrary position in the queue whether runnable or not, so
|
787
801
|
// it fixes up skip fields that would otherwise be left dangling.
|
788
802
|
// The statement
|
789
|
-
// if (x->may_skip &&
|
803
|
+
// if (x->may_skip && MuEquivalentWaiter(x, x->next)) { x->skip = x->next; }
|
790
804
|
// maintains the invariant provided x is not the last waiter in a Mutex queue
|
791
805
|
// The statement
|
792
806
|
// if (x->skip != null) { x->skip = x->skip->skip; }
|
@@ -920,24 +934,17 @@ static PerThreadSynch *Enqueue(PerThreadSynch *head,
|
|
920
934
|
if (s->priority > head->priority) { // s's priority is above head's
|
921
935
|
// try to put s in priority-fifo order, or failing that at the front.
|
922
936
|
if (!head->maybe_unlocking) {
|
923
|
-
// No unlocker can be scanning the queue, so we can insert
|
924
|
-
//
|
925
|
-
//
|
926
|
-
// skip
|
937
|
+
// No unlocker can be scanning the queue, so we can insert into the
|
938
|
+
// middle of the queue.
|
939
|
+
//
|
940
|
+
// Within a skip chain, all waiters have the same priority, so we can
|
941
|
+
// skip forward through the chains until we find one with a lower
|
942
|
+
// priority than the waiter to be enqueued.
|
927
943
|
PerThreadSynch *advance_to = head; // next value of enqueue_after
|
928
|
-
PerThreadSynch *cur; // successor of enqueue_after
|
929
944
|
do {
|
930
945
|
enqueue_after = advance_to;
|
931
|
-
|
932
|
-
advance_to = Skip(
|
933
|
-
// (side-effect: optimizes skip chain)
|
934
|
-
if (advance_to != cur && s->priority > advance_to->priority &&
|
935
|
-
MuSameCondition(s, cur)) {
|
936
|
-
// but this skip chain is not a singleton, s has higher priority
|
937
|
-
// than its tail and has the same condition as the chain,
|
938
|
-
// so we can insert within the skip-chain
|
939
|
-
advance_to = cur; // advance by just one
|
940
|
-
}
|
946
|
+
// (side-effect: optimizes skip chain)
|
947
|
+
advance_to = Skip(enqueue_after->next);
|
941
948
|
} while (s->priority <= advance_to->priority);
|
942
949
|
// termination guaranteed because s->priority > head->priority
|
943
950
|
// and head is the end of a skip chain
|
@@ -956,21 +963,21 @@ static PerThreadSynch *Enqueue(PerThreadSynch *head,
|
|
956
963
|
|
957
964
|
// enqueue_after can be: head, Skip(...), or cur.
|
958
965
|
// The first two imply enqueue_after->skip == nullptr, and
|
959
|
-
// the last is used only if
|
966
|
+
// the last is used only if MuEquivalentWaiter(s, cur).
|
960
967
|
// We require this because clearing enqueue_after->skip
|
961
968
|
// is impossible; enqueue_after's predecessors might also
|
962
969
|
// incorrectly skip over s if we were to allow other
|
963
970
|
// insertion points.
|
964
|
-
ABSL_RAW_CHECK(
|
965
|
-
|
966
|
-
|
971
|
+
ABSL_RAW_CHECK(enqueue_after->skip == nullptr ||
|
972
|
+
MuEquivalentWaiter(enqueue_after, s),
|
973
|
+
"Mutex Enqueue failure");
|
967
974
|
|
968
975
|
if (enqueue_after != head && enqueue_after->may_skip &&
|
969
|
-
|
976
|
+
MuEquivalentWaiter(enqueue_after, enqueue_after->next)) {
|
970
977
|
// enqueue_after can skip to its new successor, s
|
971
978
|
enqueue_after->skip = enqueue_after->next;
|
972
979
|
}
|
973
|
-
if (
|
980
|
+
if (MuEquivalentWaiter(s, s->next)) { // s->may_skip is known to be true
|
974
981
|
s->skip = s->next; // s may skip to its successor
|
975
982
|
}
|
976
983
|
} else { // enqueue not done any other way, so
|
@@ -980,7 +987,7 @@ static PerThreadSynch *Enqueue(PerThreadSynch *head,
|
|
980
987
|
head->next = s;
|
981
988
|
s->readers = head->readers; // reader count is from previous head
|
982
989
|
s->maybe_unlocking = head->maybe_unlocking; // same for unlock hint
|
983
|
-
if (head->may_skip &&
|
990
|
+
if (head->may_skip && MuEquivalentWaiter(head, s)) {
|
984
991
|
// head now has successor; may skip
|
985
992
|
head->skip = s;
|
986
993
|
}
|
@@ -1000,7 +1007,7 @@ static PerThreadSynch *Dequeue(PerThreadSynch *head, PerThreadSynch *pw) {
|
|
1000
1007
|
pw->next = w->next; // snip w out of list
|
1001
1008
|
if (head == w) { // we removed the head
|
1002
1009
|
head = (pw == w) ? nullptr : pw; // either emptied list, or pw is new head
|
1003
|
-
} else if (pw != head &&
|
1010
|
+
} else if (pw != head && MuEquivalentWaiter(pw, pw->next)) {
|
1004
1011
|
// pw can skip to its new successor
|
1005
1012
|
if (pw->next->skip !=
|
1006
1013
|
nullptr) { // either skip to its successors skip target
|
@@ -1070,11 +1077,13 @@ void Mutex::TryRemove(PerThreadSynch *s) {
|
|
1070
1077
|
PerThreadSynch *w;
|
1071
1078
|
if ((w = pw->next) != s) { // search for thread,
|
1072
1079
|
do { // processing at least one element
|
1073
|
-
|
1080
|
+
// If the current element isn't equivalent to the waiter to be
|
1081
|
+
// removed, we can skip the entire chain.
|
1082
|
+
if (!MuEquivalentWaiter(s, w)) {
|
1074
1083
|
pw = Skip(w); // so skip all that won't match
|
1075
1084
|
// we don't have to worry about dangling skip fields
|
1076
1085
|
// in the threads we skipped; none can point to s
|
1077
|
-
// because
|
1086
|
+
// because they are in a different equivalence class.
|
1078
1087
|
} else { // seeking same condition
|
1079
1088
|
FixSkip(w, s); // fix up any skip pointer from w to s
|
1080
1089
|
pw = w;
|
@@ -1365,7 +1374,9 @@ static GraphId DeadlockCheck(Mutex *mu) {
|
|
1365
1374
|
len += static_cast<int>(strlen(&b->buf[len]));
|
1366
1375
|
}
|
1367
1376
|
}
|
1368
|
-
ABSL_RAW_LOG(ERROR,
|
1377
|
+
ABSL_RAW_LOG(ERROR,
|
1378
|
+
"Acquiring absl::Mutex %p while holding %s; a cycle in the "
|
1379
|
+
"historical lock ordering graph has been observed",
|
1369
1380
|
static_cast<void *>(mu), b->buf);
|
1370
1381
|
ABSL_RAW_LOG(ERROR, "Cycle: ");
|
1371
1382
|
int path_len = deadlock_graph->FindPath(
|
@@ -2139,7 +2150,7 @@ ABSL_ATTRIBUTE_NOINLINE void Mutex::UnlockSlow(SynchWaitParams *waitp) {
|
|
2139
2150
|
!old_h->may_skip) { // we used old_h as a terminator
|
2140
2151
|
old_h->may_skip = true; // allow old_h to skip once more
|
2141
2152
|
ABSL_RAW_CHECK(old_h->skip == nullptr, "illegal skip from head");
|
2142
|
-
if (h != old_h &&
|
2153
|
+
if (h != old_h && MuEquivalentWaiter(old_h, old_h->next)) {
|
2143
2154
|
old_h->skip = old_h->next; // old_h not head & can skip to successor
|
2144
2155
|
}
|
2145
2156
|
}
|
@@ -2312,7 +2323,8 @@ ABSL_ATTRIBUTE_NOINLINE void Mutex::UnlockSlow(SynchWaitParams *waitp) {
|
|
2312
2323
|
if (!cond_waiter) {
|
2313
2324
|
// Sample lock contention events only if the (first) waiter was trying to
|
2314
2325
|
// acquire the lock, not waiting on a condition variable or Condition.
|
2315
|
-
int64_t wait_cycles =
|
2326
|
+
int64_t wait_cycles =
|
2327
|
+
base_internal::CycleClock::Now() - enqueue_timestamp;
|
2316
2328
|
mutex_tracer("slow release", this, wait_cycles);
|
2317
2329
|
ABSL_TSAN_MUTEX_PRE_DIVERT(this, 0);
|
2318
2330
|
submit_profile_data(enqueue_timestamp);
|