grpc 1.33.0.pre1 → 1.34.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 +342 -134
- data/include/grpc/grpc.h +1 -2
- data/include/grpc/grpc_security.h +149 -172
- data/include/grpc/impl/codegen/grpc_types.h +9 -2
- data/include/grpc/impl/codegen/port_platform.h +22 -55
- data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
- data/src/core/ext/filters/client_channel/config_selector.h +2 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
- data/src/core/ext/filters/client_channel/resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver.h +4 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
- data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
- data/src/core/ext/filters/client_channel/server_address.h +0 -4
- data/src/core/ext/filters/client_channel/service_config.cc +3 -1
- data/src/core/ext/filters/client_channel/service_config.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
- data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
- data/src/core/ext/xds/certificate_provider_factory.h +7 -5
- data/src/core/ext/xds/certificate_provider_store.cc +84 -0
- data/src/core/ext/xds/certificate_provider_store.h +65 -8
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
- data/src/core/ext/xds/xds_api.cc +241 -718
- data/src/core/ext/xds/xds_api.h +50 -9
- data/src/core/ext/xds/xds_bootstrap.cc +172 -25
- data/src/core/ext/xds/xds_bootstrap.h +23 -7
- data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
- data/src/core/ext/xds/xds_certificate_provider.h +74 -0
- data/src/core/ext/xds/xds_client.cc +161 -128
- data/src/core/ext/xds/xds_client.h +12 -11
- data/src/core/ext/xds/xds_client_stats.cc +41 -4
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/lib/channel/channel_args.cc +2 -1
- data/src/core/lib/channel/channel_trace.cc +4 -2
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/handshaker.h +2 -2
- data/src/core/lib/compression/compression.cc +8 -4
- data/src/core/lib/compression/compression_internal.cc +10 -5
- data/src/core/lib/compression/compression_internal.h +2 -1
- data/src/core/lib/compression/stream_compression_identity.cc +1 -3
- data/src/core/lib/debug/stats_data.cc +1 -0
- data/src/core/lib/gpr/cpu_iphone.cc +10 -2
- data/src/core/lib/gpr/log_linux.cc +17 -3
- data/src/core/lib/gpr/log_posix.cc +13 -1
- data/src/core/lib/gpr/log_windows.cc +16 -4
- data/src/core/lib/gpr/murmur_hash.cc +1 -1
- data/src/core/lib/gpr/string.cc +1 -1
- data/src/core/lib/gpr/time_precise.cc +3 -2
- data/src/core/lib/gpr/tls.h +4 -0
- data/src/core/lib/gpr/tls_msvc.h +2 -0
- data/src/core/lib/gpr/tls_stdcpp.h +48 -0
- data/src/core/lib/gpr/useful.h +5 -4
- data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
- data/src/core/lib/gprpp/examine_stack.cc +43 -0
- data/src/core/lib/gprpp/examine_stack.h +46 -0
- data/src/core/lib/gprpp/fork.cc +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +1 -1
- data/src/core/lib/gprpp/orphanable.h +4 -8
- data/src/core/lib/gprpp/ref_counted.h +40 -46
- data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
- data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
- data/src/core/lib/gprpp/stat_posix.cc +49 -0
- data/src/core/lib/gprpp/stat_windows.cc +48 -0
- data/src/core/lib/gprpp/thd.h +2 -2
- data/src/core/lib/gprpp/thd_posix.cc +36 -36
- data/src/core/lib/http/parser.cc +46 -25
- data/src/core/lib/iomgr/error.cc +2 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
- data/src/core/lib/iomgr/exec_ctx.cc +1 -1
- data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
- data/src/core/lib/iomgr/executor/threadpool.h +3 -3
- data/src/core/lib/iomgr/parse_address.cc +84 -6
- data/src/core/lib/iomgr/parse_address.h +20 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
- data/src/core/lib/iomgr/python_util.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
- data/src/core/lib/iomgr/tcp_posix.cc +3 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
- data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/json/json.h +2 -2
- data/src/core/lib/json/json_reader.cc +8 -4
- data/src/core/lib/json/json_util.h +167 -0
- data/src/core/lib/json/json_writer.cc +2 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
- data/src/core/lib/security/context/security_context.h +3 -1
- data/src/core/lib/security/credentials/credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +3 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
- data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
- data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
- data/src/core/lib/security/transport/security_handshaker.cc +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
- data/src/core/lib/security/util/json_util.h +1 -0
- data/src/core/lib/slice/slice.cc +7 -4
- data/src/core/lib/slice/slice_buffer.cc +2 -1
- data/src/core/lib/slice/slice_intern.cc +2 -2
- data/src/core/lib/surface/call.cc +9 -8
- data/src/core/lib/surface/completion_queue.cc +7 -6
- data/src/core/lib/surface/server.cc +4 -2
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.h +2 -0
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -3
- data/src/core/lib/transport/connectivity_state.h +3 -3
- data/src/core/lib/transport/metadata.h +2 -2
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/lib/transport/transport.cc +5 -3
- data/src/core/lib/transport/transport.h +1 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +1 -0
- data/src/core/tsi/local_transport_security.cc +5 -1
- data/src/core/tsi/local_transport_security.h +6 -7
- data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
- data/src/core/tsi/ssl_transport_security.cc +14 -7
- data/src/core/tsi/ssl_transport_security.h +3 -0
- data/src/core/tsi/transport_security.cc +4 -2
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
- data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
- data/third_party/abseil-cpp/absl/base/casts.h +9 -6
- data/third_party/abseil-cpp/absl/base/config.h +60 -17
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
- data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
- data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
- data/third_party/abseil-cpp/absl/base/macros.h +36 -109
- data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
- data/third_party/abseil-cpp/absl/base/options.h +31 -4
- data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
- data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
- data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
- data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
- data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
- data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
- data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
- data/third_party/abseil-cpp/absl/status/status.cc +4 -6
- data/third_party/abseil-cpp/absl/status/status.h +502 -113
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
- data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
- data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
- data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
- data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
- data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
- data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
- data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
- data/third_party/abseil-cpp/absl/time/format.cc +43 -36
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
- data/third_party/abseil-cpp/absl/time/time.h +15 -16
- data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
- data/third_party/abseil-cpp/absl/types/optional.h +9 -9
- data/third_party/abseil-cpp/absl/types/span.h +49 -36
- data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
- data/third_party/boringssl-with-bazel/err_data.c +340 -336
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +55 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
- data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +36 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
- data/third_party/upb/upb/def.c +2169 -0
- data/third_party/upb/upb/def.h +330 -0
- data/third_party/upb/upb/def.hpp +525 -0
- data/third_party/upb/upb/reflection.c +391 -0
- data/third_party/upb/upb/reflection.h +168 -0
- data/third_party/upb/upb/text_encode.c +398 -0
- data/third_party/upb/upb/text_encode.h +35 -0
- metadata +227 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -57,6 +57,10 @@ class KernelTimeout {
|
|
57
57
|
|
58
58
|
bool has_timeout() const { return ns_ != 0; }
|
59
59
|
|
60
|
+
// Convert to parameter for sem_timedwait/futex/similar. Only for approved
|
61
|
+
// users. Do not call if !has_timeout.
|
62
|
+
struct timespec MakeAbsTimespec();
|
63
|
+
|
60
64
|
private:
|
61
65
|
// internal rep, not user visible: ns after unix epoch.
|
62
66
|
// zero = no timeout.
|
@@ -82,34 +86,6 @@ class KernelTimeout {
|
|
82
86
|
return x;
|
83
87
|
}
|
84
88
|
|
85
|
-
// Convert to parameter for sem_timedwait/futex/similar. Only for approved
|
86
|
-
// users. Do not call if !has_timeout.
|
87
|
-
struct timespec MakeAbsTimespec() {
|
88
|
-
int64_t n = ns_;
|
89
|
-
static const int64_t kNanosPerSecond = 1000 * 1000 * 1000;
|
90
|
-
if (n == 0) {
|
91
|
-
ABSL_RAW_LOG(
|
92
|
-
ERROR,
|
93
|
-
"Tried to create a timespec from a non-timeout; never do this.");
|
94
|
-
// But we'll try to continue sanely. no-timeout ~= saturated timeout.
|
95
|
-
n = (std::numeric_limits<int64_t>::max)();
|
96
|
-
}
|
97
|
-
|
98
|
-
// Kernel APIs validate timespecs as being at or after the epoch,
|
99
|
-
// despite the kernel time type being signed. However, no one can
|
100
|
-
// tell the difference between a timeout at or before the epoch (since
|
101
|
-
// all such timeouts have expired!)
|
102
|
-
if (n < 0) n = 0;
|
103
|
-
|
104
|
-
struct timespec abstime;
|
105
|
-
int64_t seconds = (std::min)(n / kNanosPerSecond,
|
106
|
-
int64_t{(std::numeric_limits<time_t>::max)()});
|
107
|
-
abstime.tv_sec = static_cast<time_t>(seconds);
|
108
|
-
abstime.tv_nsec =
|
109
|
-
static_cast<decltype(abstime.tv_nsec)>(n % kNanosPerSecond);
|
110
|
-
return abstime;
|
111
|
-
}
|
112
|
-
|
113
89
|
#ifdef _WIN32
|
114
90
|
// Converts to milliseconds from now, or INFINITE when
|
115
91
|
// !has_timeout(). For use by SleepConditionVariableSRW on
|
@@ -148,6 +124,30 @@ class KernelTimeout {
|
|
148
124
|
friend class Waiter;
|
149
125
|
};
|
150
126
|
|
127
|
+
inline struct timespec KernelTimeout::MakeAbsTimespec() {
|
128
|
+
int64_t n = ns_;
|
129
|
+
static const int64_t kNanosPerSecond = 1000 * 1000 * 1000;
|
130
|
+
if (n == 0) {
|
131
|
+
ABSL_RAW_LOG(
|
132
|
+
ERROR, "Tried to create a timespec from a non-timeout; never do this.");
|
133
|
+
// But we'll try to continue sanely. no-timeout ~= saturated timeout.
|
134
|
+
n = (std::numeric_limits<int64_t>::max)();
|
135
|
+
}
|
136
|
+
|
137
|
+
// Kernel APIs validate timespecs as being at or after the epoch,
|
138
|
+
// despite the kernel time type being signed. However, no one can
|
139
|
+
// tell the difference between a timeout at or before the epoch (since
|
140
|
+
// all such timeouts have expired!)
|
141
|
+
if (n < 0) n = 0;
|
142
|
+
|
143
|
+
struct timespec abstime;
|
144
|
+
int64_t seconds = (std::min)(n / kNanosPerSecond,
|
145
|
+
int64_t{(std::numeric_limits<time_t>::max)()});
|
146
|
+
abstime.tv_sec = static_cast<time_t>(seconds);
|
147
|
+
abstime.tv_nsec = static_cast<decltype(abstime.tv_nsec)>(n % kNanosPerSecond);
|
148
|
+
return abstime;
|
149
|
+
}
|
150
|
+
|
151
151
|
} // namespace synchronization_internal
|
152
152
|
ABSL_NAMESPACE_END
|
153
153
|
} // namespace absl
|
@@ -209,31 +209,22 @@ class SynchronizationStorage {
|
|
209
209
|
// Instances allocated on the heap or on the stack should use the default
|
210
210
|
// constructor.
|
211
211
|
SynchronizationStorage()
|
212
|
-
:
|
213
|
-
|
214
|
-
// Instances allocated in static storage (not on the heap, not on the
|
215
|
-
// stack) should use this constructor.
|
216
|
-
explicit SynchronizationStorage(base_internal::LinkerInitialized) {}
|
212
|
+
: destruct_(true), once_() {}
|
217
213
|
|
218
214
|
constexpr explicit SynchronizationStorage(absl::ConstInitType)
|
219
|
-
:
|
215
|
+
: destruct_(false), once_(), space_{{0}} {}
|
220
216
|
|
221
217
|
SynchronizationStorage(SynchronizationStorage&) = delete;
|
222
218
|
SynchronizationStorage& operator=(SynchronizationStorage&) = delete;
|
223
219
|
|
224
220
|
~SynchronizationStorage() {
|
225
|
-
if (
|
221
|
+
if (destruct_) {
|
226
222
|
get()->~T();
|
227
223
|
}
|
228
224
|
}
|
229
225
|
|
230
226
|
// Retrieve the object in storage. This is fast and thread safe, but does
|
231
227
|
// incur the cost of absl::call_once().
|
232
|
-
//
|
233
|
-
// For instances in static storage constructed with the
|
234
|
-
// LinkerInitialized constructor, may be called at any time without
|
235
|
-
// regard for order of dynamic initialization or destruction of objects
|
236
|
-
// in static storage. See the class comment for caveats.
|
237
228
|
T* get() {
|
238
229
|
absl::call_once(once_, SynchronizationStorage::Construct, this);
|
239
230
|
return reinterpret_cast<T*>(&space_);
|
@@ -245,10 +236,7 @@ class SynchronizationStorage {
|
|
245
236
|
}
|
246
237
|
|
247
238
|
// When true, T's destructor is run when this is destructed.
|
248
|
-
|
249
|
-
// The LinkerInitialized constructor assumes this value will be set
|
250
|
-
// false by static initialization.
|
251
|
-
bool is_dynamic_;
|
239
|
+
const bool destruct_;
|
252
240
|
|
253
241
|
absl::once_flag once_;
|
254
242
|
|
@@ -78,7 +78,7 @@ class PerThreadSem {
|
|
78
78
|
// !t.has_timeout() => Wait(t) will return true.
|
79
79
|
static inline bool Wait(KernelTimeout t);
|
80
80
|
|
81
|
-
//
|
81
|
+
// Permitted callers.
|
82
82
|
friend class PerThreadSemTest;
|
83
83
|
friend class absl::Mutex;
|
84
84
|
friend absl::base_internal::ThreadIdentity* CreateThreadIdentity();
|
@@ -86,6 +86,14 @@ static void MaybeBecomeIdle() {
|
|
86
86
|
#endif
|
87
87
|
#endif
|
88
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
|
+
|
89
97
|
class Futex {
|
90
98
|
public:
|
91
99
|
static int WaitUntil(std::atomic<int32_t> *v, int32_t val,
|
@@ -100,8 +100,8 @@ class Waiter {
|
|
100
100
|
}
|
101
101
|
|
102
102
|
// How many periods to remain idle before releasing resources
|
103
|
-
#ifndef
|
104
|
-
static
|
103
|
+
#ifndef ABSL_HAVE_THREAD_SANITIZER
|
104
|
+
static constexpr int kIdlePeriods = 60;
|
105
105
|
#else
|
106
106
|
// Memory consumption under ThreadSanitizer is a serious concern,
|
107
107
|
// so we release resources sooner. The value of 1 leads to 1 to 2 second
|
@@ -39,6 +39,7 @@
|
|
39
39
|
#include <thread> // NOLINT(build/c++11)
|
40
40
|
|
41
41
|
#include "absl/base/attributes.h"
|
42
|
+
#include "absl/base/call_once.h"
|
42
43
|
#include "absl/base/config.h"
|
43
44
|
#include "absl/base/dynamic_annotations.h"
|
44
45
|
#include "absl/base/internal/atomic_hook.h"
|
@@ -49,6 +50,7 @@
|
|
49
50
|
#include "absl/base/internal/spinlock.h"
|
50
51
|
#include "absl/base/internal/sysinfo.h"
|
51
52
|
#include "absl/base/internal/thread_identity.h"
|
53
|
+
#include "absl/base/internal/tsan_mutex_interface.h"
|
52
54
|
#include "absl/base/port.h"
|
53
55
|
#include "absl/debugging/stacktrace.h"
|
54
56
|
#include "absl/debugging/symbolize.h"
|
@@ -58,6 +60,7 @@
|
|
58
60
|
|
59
61
|
using absl::base_internal::CurrentThreadIdentityIfPresent;
|
60
62
|
using absl::base_internal::PerThreadSynch;
|
63
|
+
using absl::base_internal::SchedulingGuard;
|
61
64
|
using absl::base_internal::ThreadIdentity;
|
62
65
|
using absl::synchronization_internal::GetOrCreateCurrentThreadIdentity;
|
63
66
|
using absl::synchronization_internal::GraphCycles;
|
@@ -75,7 +78,7 @@ ABSL_NAMESPACE_BEGIN
|
|
75
78
|
|
76
79
|
namespace {
|
77
80
|
|
78
|
-
#if defined(
|
81
|
+
#if defined(ABSL_HAVE_THREAD_SANITIZER)
|
79
82
|
constexpr OnDeadlockCycle kDeadlockDetectionDefault = OnDeadlockCycle::kIgnore;
|
80
83
|
#else
|
81
84
|
constexpr OnDeadlockCycle kDeadlockDetectionDefault = OnDeadlockCycle::kAbort;
|
@@ -85,28 +88,6 @@ ABSL_CONST_INIT std::atomic<OnDeadlockCycle> synch_deadlock_detection(
|
|
85
88
|
kDeadlockDetectionDefault);
|
86
89
|
ABSL_CONST_INIT std::atomic<bool> synch_check_invariants(false);
|
87
90
|
|
88
|
-
// ------------------------------------------ spinlock support
|
89
|
-
|
90
|
-
// Make sure read-only globals used in the Mutex code are contained on the
|
91
|
-
// same cacheline and cacheline aligned to eliminate any false sharing with
|
92
|
-
// other globals from this and other modules.
|
93
|
-
static struct MutexGlobals {
|
94
|
-
MutexGlobals() {
|
95
|
-
// Find machine-specific data needed for Delay() and
|
96
|
-
// TryAcquireWithSpinning(). This runs in the global constructor
|
97
|
-
// sequence, and before that zeros are safe values.
|
98
|
-
num_cpus = absl::base_internal::NumCPUs();
|
99
|
-
spinloop_iterations = num_cpus > 1 ? 1500 : 0;
|
100
|
-
}
|
101
|
-
int num_cpus;
|
102
|
-
int spinloop_iterations;
|
103
|
-
// Pad this struct to a full cacheline to prevent false sharing.
|
104
|
-
char padding[ABSL_CACHELINE_SIZE - 2 * sizeof(int)];
|
105
|
-
} ABSL_CACHELINE_ALIGNED mutex_globals;
|
106
|
-
static_assert(
|
107
|
-
sizeof(MutexGlobals) == ABSL_CACHELINE_SIZE,
|
108
|
-
"MutexGlobals must occupy an entire cacheline to prevent false sharing");
|
109
|
-
|
110
91
|
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
|
111
92
|
absl::base_internal::AtomicHook<void (*)(int64_t wait_cycles)>
|
112
93
|
submit_profile_data;
|
@@ -143,33 +124,55 @@ void RegisterSymbolizer(bool (*fn)(const void *pc, char *out, int out_size)) {
|
|
143
124
|
symbolizer.Store(fn);
|
144
125
|
}
|
145
126
|
|
146
|
-
|
127
|
+
struct ABSL_CACHELINE_ALIGNED MutexGlobals {
|
128
|
+
absl::once_flag once;
|
129
|
+
int num_cpus = 0;
|
130
|
+
int spinloop_iterations = 0;
|
131
|
+
};
|
132
|
+
|
133
|
+
static const MutexGlobals& GetMutexGlobals() {
|
134
|
+
ABSL_CONST_INIT static MutexGlobals data;
|
135
|
+
absl::base_internal::LowLevelCallOnce(&data.once, [&]() {
|
136
|
+
data.num_cpus = absl::base_internal::NumCPUs();
|
137
|
+
data.spinloop_iterations = data.num_cpus > 1 ? 1500 : 0;
|
138
|
+
});
|
139
|
+
return data;
|
140
|
+
}
|
141
|
+
|
142
|
+
// Spinlock delay on iteration c. Returns new c.
|
147
143
|
namespace {
|
148
144
|
enum DelayMode { AGGRESSIVE, GENTLE };
|
149
145
|
};
|
150
|
-
|
146
|
+
|
147
|
+
namespace synchronization_internal {
|
148
|
+
int MutexDelay(int32_t c, int mode) {
|
151
149
|
// If this a uniprocessor, only yield/sleep. Otherwise, if the mode is
|
152
150
|
// aggressive then spin many times before yielding. If the mode is
|
153
151
|
// gentle then spin only a few times before yielding. Aggressive spinning is
|
154
152
|
// used to ensure that an Unlock() call, which must get the spin lock for
|
155
153
|
// any thread to make progress gets it without undue delay.
|
156
|
-
int32_t limit =
|
157
|
-
((mode == AGGRESSIVE
|
154
|
+
const int32_t limit =
|
155
|
+
GetMutexGlobals().num_cpus > 1 ? (mode == AGGRESSIVE ? 5000 : 250) : 0;
|
158
156
|
if (c < limit) {
|
159
|
-
|
157
|
+
// Spin.
|
158
|
+
c++;
|
160
159
|
} else {
|
160
|
+
SchedulingGuard::ScopedEnable enable_rescheduling;
|
161
161
|
ABSL_TSAN_MUTEX_PRE_DIVERT(nullptr, 0);
|
162
|
-
if (c == limit) {
|
162
|
+
if (c == limit) {
|
163
|
+
// Yield once.
|
163
164
|
AbslInternalMutexYield();
|
164
165
|
c++;
|
165
|
-
} else {
|
166
|
+
} else {
|
167
|
+
// Then wait.
|
166
168
|
absl::SleepFor(absl::Microseconds(10));
|
167
169
|
c = 0;
|
168
170
|
}
|
169
171
|
ABSL_TSAN_MUTEX_POST_DIVERT(nullptr, 0);
|
170
172
|
}
|
171
|
-
return
|
173
|
+
return c;
|
172
174
|
}
|
175
|
+
} // namespace synchronization_internal
|
173
176
|
|
174
177
|
// --------------------------Generic atomic ops
|
175
178
|
// Ensure that "(*pv & bits) == bits" by doing an atomic update of "*pv" to
|
@@ -207,12 +210,12 @@ static void AtomicClearBits(std::atomic<intptr_t>* pv, intptr_t bits,
|
|
207
210
|
//------------------------------------------------------------------
|
208
211
|
|
209
212
|
// Data for doing deadlock detection.
|
210
|
-
static absl::base_internal::SpinLock deadlock_graph_mu(
|
211
|
-
absl::base_internal::
|
213
|
+
ABSL_CONST_INIT static absl::base_internal::SpinLock deadlock_graph_mu(
|
214
|
+
absl::kConstInit, base_internal::SCHEDULE_KERNEL_ONLY);
|
212
215
|
|
213
|
-
//
|
214
|
-
static GraphCycles *deadlock_graph
|
215
|
-
ABSL_PT_GUARDED_BY(deadlock_graph_mu);
|
216
|
+
// Graph used to detect deadlocks.
|
217
|
+
ABSL_CONST_INIT static GraphCycles *deadlock_graph
|
218
|
+
ABSL_GUARDED_BY(deadlock_graph_mu) ABSL_PT_GUARDED_BY(deadlock_graph_mu);
|
216
219
|
|
217
220
|
//------------------------------------------------------------------
|
218
221
|
// An event mechanism for debugging mutex use.
|
@@ -273,13 +276,12 @@ static const struct {
|
|
273
276
|
{0, "SignalAll on "},
|
274
277
|
};
|
275
278
|
|
276
|
-
static absl::base_internal::SpinLock synch_event_mu(
|
277
|
-
absl::base_internal::
|
278
|
-
// protects synch_event
|
279
|
+
ABSL_CONST_INIT static absl::base_internal::SpinLock synch_event_mu(
|
280
|
+
absl::kConstInit, base_internal::SCHEDULE_KERNEL_ONLY);
|
279
281
|
|
280
282
|
// Hash table size; should be prime > 2.
|
281
283
|
// Can't be too small, as it's used for deadlock detection information.
|
282
|
-
static
|
284
|
+
static constexpr uint32_t kNSynchEvent = 1031;
|
283
285
|
|
284
286
|
static struct SynchEvent { // this is a trivial hash table for the events
|
285
287
|
// struct is freed when refcount reaches 0
|
@@ -299,7 +301,7 @@ static struct SynchEvent { // this is a trivial hash table for the events
|
|
299
301
|
bool log; // logging turned on
|
300
302
|
|
301
303
|
// Constant after initialization
|
302
|
-
char name[1]; // actually longer---NUL-terminated
|
304
|
+
char name[1]; // actually longer---NUL-terminated string
|
303
305
|
} * synch_event[kNSynchEvent] ABSL_GUARDED_BY(synch_event_mu);
|
304
306
|
|
305
307
|
// Ensure that the object at "addr" has a SynchEvent struct associated with it,
|
@@ -704,7 +706,7 @@ static constexpr bool kDebugMode = false;
|
|
704
706
|
static constexpr bool kDebugMode = true;
|
705
707
|
#endif
|
706
708
|
|
707
|
-
#ifdef
|
709
|
+
#ifdef ABSL_INTERNAL_HAVE_TSAN_INTERFACE
|
708
710
|
static unsigned TsanFlags(Mutex::MuHow how) {
|
709
711
|
return how == kShared ? __tsan_mutex_read_lock : 0;
|
710
712
|
}
|
@@ -1055,6 +1057,7 @@ static PerThreadSynch *DequeueAllWakeable(PerThreadSynch *head,
|
|
1055
1057
|
// Try to remove thread s from the list of waiters on this mutex.
|
1056
1058
|
// Does nothing if s is not on the waiter list.
|
1057
1059
|
void Mutex::TryRemove(PerThreadSynch *s) {
|
1060
|
+
SchedulingGuard::ScopedDisable disable_rescheduling;
|
1058
1061
|
intptr_t v = mu_.load(std::memory_order_relaxed);
|
1059
1062
|
// acquire spinlock & lock
|
1060
1063
|
if ((v & (kMuWait | kMuSpin | kMuWriter | kMuReader)) == kMuWait &&
|
@@ -1119,7 +1122,7 @@ ABSL_XRAY_LOG_ARGS(1) void Mutex::Block(PerThreadSynch *s) {
|
|
1119
1122
|
this->TryRemove(s);
|
1120
1123
|
int c = 0;
|
1121
1124
|
while (s->next != nullptr) {
|
1122
|
-
c =
|
1125
|
+
c = synchronization_internal::MutexDelay(c, GENTLE);
|
1123
1126
|
this->TryRemove(s);
|
1124
1127
|
}
|
1125
1128
|
if (kDebugMode) {
|
@@ -1438,21 +1441,19 @@ void Mutex::AssertNotHeld() const {
|
|
1438
1441
|
// Attempt to acquire *mu, and return whether successful. The implementation
|
1439
1442
|
// may spin for a short while if the lock cannot be acquired immediately.
|
1440
1443
|
static bool TryAcquireWithSpinning(std::atomic<intptr_t>* mu) {
|
1441
|
-
int c =
|
1442
|
-
int result = -1; // result of operation: 0=false, 1=true, -1=unknown
|
1443
|
-
|
1444
|
+
int c = GetMutexGlobals().spinloop_iterations;
|
1444
1445
|
do { // do/while somewhat faster on AMD
|
1445
1446
|
intptr_t v = mu->load(std::memory_order_relaxed);
|
1446
|
-
if ((v & (kMuReader|kMuEvent)) != 0) {
|
1447
|
-
|
1447
|
+
if ((v & (kMuReader|kMuEvent)) != 0) {
|
1448
|
+
return false; // a reader or tracing -> give up
|
1448
1449
|
} else if (((v & kMuWriter) == 0) && // no holder -> try to acquire
|
1449
1450
|
mu->compare_exchange_strong(v, kMuWriter | v,
|
1450
1451
|
std::memory_order_acquire,
|
1451
1452
|
std::memory_order_relaxed)) {
|
1452
|
-
|
1453
|
+
return true;
|
1453
1454
|
}
|
1454
|
-
} while (
|
1455
|
-
return
|
1455
|
+
} while (--c > 0);
|
1456
|
+
return false;
|
1456
1457
|
}
|
1457
1458
|
|
1458
1459
|
ABSL_XRAY_LOG_ARGS(1) void Mutex::Lock() {
|
@@ -1751,7 +1752,8 @@ static const intptr_t ignore_waiting_writers[] = {
|
|
1751
1752
|
};
|
1752
1753
|
|
1753
1754
|
// Internal version of LockWhen(). See LockSlowWithDeadline()
|
1754
|
-
void Mutex::LockSlow(MuHow how, const Condition *cond,
|
1755
|
+
ABSL_ATTRIBUTE_NOINLINE void Mutex::LockSlow(MuHow how, const Condition *cond,
|
1756
|
+
int flags) {
|
1755
1757
|
ABSL_RAW_CHECK(
|
1756
1758
|
this->LockSlowWithDeadline(how, cond, KernelTimeout::Never(), flags),
|
1757
1759
|
"condition untrue on return from LockSlow");
|
@@ -1766,7 +1768,7 @@ static inline bool EvalConditionAnnotated(const Condition *cond, Mutex *mu,
|
|
1766
1768
|
// All memory accesses are ignored inside of mutex operations + for unlock
|
1767
1769
|
// operation tsan considers that we've already released the mutex.
|
1768
1770
|
bool res = false;
|
1769
|
-
#ifdef
|
1771
|
+
#ifdef ABSL_INTERNAL_HAVE_TSAN_INTERFACE
|
1770
1772
|
const int flags = read_lock ? __tsan_mutex_read_lock : 0;
|
1771
1773
|
const int tryflags = flags | (trylock ? __tsan_mutex_try_lock : 0);
|
1772
1774
|
#endif
|
@@ -1816,9 +1818,9 @@ static inline bool EvalConditionIgnored(Mutex *mu, const Condition *cond) {
|
|
1816
1818
|
// So we "divert" (which un-ignores both memory accesses and synchronization)
|
1817
1819
|
// and then separately turn on ignores of memory accesses.
|
1818
1820
|
ABSL_TSAN_MUTEX_PRE_DIVERT(mu, 0);
|
1819
|
-
|
1821
|
+
ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN();
|
1820
1822
|
bool res = cond->Eval();
|
1821
|
-
|
1823
|
+
ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END();
|
1822
1824
|
ABSL_TSAN_MUTEX_POST_DIVERT(mu, 0);
|
1823
1825
|
static_cast<void>(mu); // Prevent unused param warning in non-TSAN builds.
|
1824
1826
|
return res;
|
@@ -1899,6 +1901,7 @@ static void CheckForMutexCorruption(intptr_t v, const char* label) {
|
|
1899
1901
|
}
|
1900
1902
|
|
1901
1903
|
void Mutex::LockSlowLoop(SynchWaitParams *waitp, int flags) {
|
1904
|
+
SchedulingGuard::ScopedDisable disable_rescheduling;
|
1902
1905
|
int c = 0;
|
1903
1906
|
intptr_t v = mu_.load(std::memory_order_relaxed);
|
1904
1907
|
if ((v & kMuEvent) != 0) {
|
@@ -2000,7 +2003,8 @@ void Mutex::LockSlowLoop(SynchWaitParams *waitp, int flags) {
|
|
2000
2003
|
ABSL_RAW_CHECK(
|
2001
2004
|
waitp->thread->waitp == nullptr || waitp->thread->suppress_fatal_errors,
|
2002
2005
|
"detected illegal recursion into Mutex code");
|
2003
|
-
|
2006
|
+
// delay, then try again
|
2007
|
+
c = synchronization_internal::MutexDelay(c, GENTLE);
|
2004
2008
|
}
|
2005
2009
|
ABSL_RAW_CHECK(
|
2006
2010
|
waitp->thread->waitp == nullptr || waitp->thread->suppress_fatal_errors,
|
@@ -2017,7 +2021,8 @@ void Mutex::LockSlowLoop(SynchWaitParams *waitp, int flags) {
|
|
2017
2021
|
// which holds the lock but is not runnable because its condition is false
|
2018
2022
|
// or it is in the process of blocking on a condition variable; it must requeue
|
2019
2023
|
// itself on the mutex/condvar to wait for its condition to become true.
|
2020
|
-
void Mutex::UnlockSlow(SynchWaitParams *waitp) {
|
2024
|
+
ABSL_ATTRIBUTE_NOINLINE void Mutex::UnlockSlow(SynchWaitParams *waitp) {
|
2025
|
+
SchedulingGuard::ScopedDisable disable_rescheduling;
|
2021
2026
|
intptr_t v = mu_.load(std::memory_order_relaxed);
|
2022
2027
|
this->AssertReaderHeld();
|
2023
2028
|
CheckForMutexCorruption(v, "Unlock");
|
@@ -2294,7 +2299,8 @@ void Mutex::UnlockSlow(SynchWaitParams *waitp) {
|
|
2294
2299
|
mu_.store(nv, std::memory_order_release);
|
2295
2300
|
break; // out of for(;;)-loop
|
2296
2301
|
}
|
2297
|
-
|
2302
|
+
// aggressive here; no one can proceed till we do
|
2303
|
+
c = synchronization_internal::MutexDelay(c, AGGRESSIVE);
|
2298
2304
|
} // end of for(;;)-loop
|
2299
2305
|
|
2300
2306
|
if (wake_list != kPerThreadSynchNull) {
|
@@ -2333,6 +2339,7 @@ void Mutex::Trans(MuHow how) {
|
|
2333
2339
|
// It will later acquire the mutex with high probability. Otherwise, we
|
2334
2340
|
// enqueue thread w on this mutex.
|
2335
2341
|
void Mutex::Fer(PerThreadSynch *w) {
|
2342
|
+
SchedulingGuard::ScopedDisable disable_rescheduling;
|
2336
2343
|
int c = 0;
|
2337
2344
|
ABSL_RAW_CHECK(w->waitp->cond == nullptr,
|
2338
2345
|
"Mutex::Fer while waiting on Condition");
|
@@ -2382,7 +2389,7 @@ void Mutex::Fer(PerThreadSynch *w) {
|
|
2382
2389
|
return;
|
2383
2390
|
}
|
2384
2391
|
}
|
2385
|
-
c =
|
2392
|
+
c = synchronization_internal::MutexDelay(c, GENTLE);
|
2386
2393
|
}
|
2387
2394
|
}
|
2388
2395
|
|
@@ -2431,6 +2438,7 @@ CondVar::~CondVar() {
|
|
2431
2438
|
|
2432
2439
|
// Remove thread s from the list of waiters on this condition variable.
|
2433
2440
|
void CondVar::Remove(PerThreadSynch *s) {
|
2441
|
+
SchedulingGuard::ScopedDisable disable_rescheduling;
|
2434
2442
|
intptr_t v;
|
2435
2443
|
int c = 0;
|
2436
2444
|
for (v = cv_.load(std::memory_order_relaxed);;
|
@@ -2459,7 +2467,8 @@ void CondVar::Remove(PerThreadSynch *s) {
|
|
2459
2467
|
std::memory_order_release);
|
2460
2468
|
return;
|
2461
2469
|
} else {
|
2462
|
-
|
2470
|
+
// try again after a delay
|
2471
|
+
c = synchronization_internal::MutexDelay(c, GENTLE);
|
2463
2472
|
}
|
2464
2473
|
}
|
2465
2474
|
}
|
@@ -2492,7 +2501,7 @@ static void CondVarEnqueue(SynchWaitParams *waitp) {
|
|
2492
2501
|
!cv_word->compare_exchange_weak(v, v | kCvSpin,
|
2493
2502
|
std::memory_order_acquire,
|
2494
2503
|
std::memory_order_relaxed)) {
|
2495
|
-
c =
|
2504
|
+
c = synchronization_internal::MutexDelay(c, GENTLE);
|
2496
2505
|
v = cv_word->load(std::memory_order_relaxed);
|
2497
2506
|
}
|
2498
2507
|
ABSL_RAW_CHECK(waitp->thread->waitp == nullptr, "waiting when shouldn't be");
|
@@ -2591,6 +2600,7 @@ void CondVar::Wakeup(PerThreadSynch *w) {
|
|
2591
2600
|
}
|
2592
2601
|
|
2593
2602
|
void CondVar::Signal() {
|
2603
|
+
SchedulingGuard::ScopedDisable disable_rescheduling;
|
2594
2604
|
ABSL_TSAN_MUTEX_PRE_SIGNAL(nullptr, 0);
|
2595
2605
|
intptr_t v;
|
2596
2606
|
int c = 0;
|
@@ -2623,7 +2633,7 @@ void CondVar::Signal() {
|
|
2623
2633
|
ABSL_TSAN_MUTEX_POST_SIGNAL(nullptr, 0);
|
2624
2634
|
return;
|
2625
2635
|
} else {
|
2626
|
-
c =
|
2636
|
+
c = synchronization_internal::MutexDelay(c, GENTLE);
|
2627
2637
|
}
|
2628
2638
|
}
|
2629
2639
|
ABSL_TSAN_MUTEX_POST_SIGNAL(nullptr, 0);
|
@@ -2660,7 +2670,8 @@ void CondVar::SignalAll () {
|
|
2660
2670
|
ABSL_TSAN_MUTEX_POST_SIGNAL(nullptr, 0);
|
2661
2671
|
return;
|
2662
2672
|
} else {
|
2663
|
-
|
2673
|
+
// try again after a delay
|
2674
|
+
c = synchronization_internal::MutexDelay(c, GENTLE);
|
2664
2675
|
}
|
2665
2676
|
}
|
2666
2677
|
ABSL_TSAN_MUTEX_POST_SIGNAL(nullptr, 0);
|
@@ -2673,7 +2684,7 @@ void ReleasableMutexLock::Release() {
|
|
2673
2684
|
this->mu_ = nullptr;
|
2674
2685
|
}
|
2675
2686
|
|
2676
|
-
#ifdef
|
2687
|
+
#ifdef ABSL_HAVE_THREAD_SANITIZER
|
2677
2688
|
extern "C" void __tsan_read1(void *addr);
|
2678
2689
|
#else
|
2679
2690
|
#define __tsan_read1(addr) // do nothing if TSan not enabled
|