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
@@ -14,12 +14,23 @@
|
|
14
14
|
|
15
15
|
#include "absl/debugging/symbolize.h"
|
16
16
|
|
17
|
+
#ifdef _WIN32
|
18
|
+
#include <winapifamily.h>
|
19
|
+
#if !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) || \
|
20
|
+
WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
21
|
+
// UWP doesn't have access to win32 APIs.
|
22
|
+
#define ABSL_INTERNAL_HAVE_SYMBOLIZE_WIN32
|
23
|
+
#endif
|
24
|
+
#endif
|
25
|
+
|
17
26
|
#if defined(ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE)
|
18
27
|
#include "absl/debugging/symbolize_elf.inc"
|
19
|
-
#elif defined(
|
28
|
+
#elif defined(ABSL_INTERNAL_HAVE_SYMBOLIZE_WIN32)
|
20
29
|
// The Windows Symbolizer only works if PDB files containing the debug info
|
21
30
|
// are available to the program at runtime.
|
22
31
|
#include "absl/debugging/symbolize_win32.inc"
|
32
|
+
#elif defined(__APPLE__)
|
33
|
+
#include "absl/debugging/symbolize_darwin.inc"
|
23
34
|
#else
|
24
35
|
#include "absl/debugging/symbolize_unimplemented.inc"
|
25
36
|
#endif
|
@@ -0,0 +1,101 @@
|
|
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
|
+
|
15
|
+
#include <cxxabi.h>
|
16
|
+
#include <execinfo.h>
|
17
|
+
|
18
|
+
#include <algorithm>
|
19
|
+
#include <cstring>
|
20
|
+
|
21
|
+
#include "absl/base/internal/raw_logging.h"
|
22
|
+
#include "absl/debugging/internal/demangle.h"
|
23
|
+
#include "absl/strings/numbers.h"
|
24
|
+
#include "absl/strings/str_cat.h"
|
25
|
+
#include "absl/strings/string_view.h"
|
26
|
+
|
27
|
+
namespace absl {
|
28
|
+
ABSL_NAMESPACE_BEGIN
|
29
|
+
|
30
|
+
void InitializeSymbolizer(const char*) {}
|
31
|
+
|
32
|
+
namespace debugging_internal {
|
33
|
+
namespace {
|
34
|
+
|
35
|
+
static std::string GetSymbolString(absl::string_view backtrace_line) {
|
36
|
+
// Example Backtrace lines:
|
37
|
+
// 0 libimaging_shared.dylib 0x018c152a
|
38
|
+
// _ZNSt11_Deque_baseIN3nik7mediadb4PageESaIS2_EE17_M_initialize_mapEm + 3478
|
39
|
+
//
|
40
|
+
// or
|
41
|
+
// 0 libimaging_shared.dylib 0x0000000001895c39
|
42
|
+
// _ZN3nik4util19register_shared_ptrINS_3gpu7TextureEEEvPKvS5_ + 39
|
43
|
+
//
|
44
|
+
// or
|
45
|
+
// 0 mysterious_app 0x0124000120120009 main + 17
|
46
|
+
auto address_pos = backtrace_line.find(" 0x");
|
47
|
+
if (address_pos == absl::string_view::npos) return std::string();
|
48
|
+
absl::string_view symbol_view = backtrace_line.substr(address_pos + 1);
|
49
|
+
|
50
|
+
auto space_pos = symbol_view.find(" ");
|
51
|
+
if (space_pos == absl::string_view::npos) return std::string();
|
52
|
+
symbol_view = symbol_view.substr(space_pos + 1); // to mangled symbol
|
53
|
+
|
54
|
+
auto plus_pos = symbol_view.find(" + ");
|
55
|
+
if (plus_pos == absl::string_view::npos) return std::string();
|
56
|
+
symbol_view = symbol_view.substr(0, plus_pos); // strip remainng
|
57
|
+
|
58
|
+
return std::string(symbol_view);
|
59
|
+
}
|
60
|
+
|
61
|
+
} // namespace
|
62
|
+
} // namespace debugging_internal
|
63
|
+
|
64
|
+
bool Symbolize(const void* pc, char* out, int out_size) {
|
65
|
+
if (out_size <= 0 || pc == nullptr) {
|
66
|
+
out = nullptr;
|
67
|
+
return false;
|
68
|
+
}
|
69
|
+
|
70
|
+
// This allocates a char* array.
|
71
|
+
char** frame_strings = backtrace_symbols(const_cast<void**>(&pc), 1);
|
72
|
+
|
73
|
+
if (frame_strings == nullptr) return false;
|
74
|
+
|
75
|
+
std::string symbol = debugging_internal::GetSymbolString(frame_strings[0]);
|
76
|
+
free(frame_strings);
|
77
|
+
|
78
|
+
char tmp_buf[1024];
|
79
|
+
if (debugging_internal::Demangle(symbol.c_str(), tmp_buf, sizeof(tmp_buf))) {
|
80
|
+
int len = strlen(tmp_buf);
|
81
|
+
if (len + 1 <= out_size) { // +1 for '\0'
|
82
|
+
assert(len < sizeof(tmp_buf));
|
83
|
+
memmove(out, tmp_buf, len + 1);
|
84
|
+
}
|
85
|
+
} else {
|
86
|
+
strncpy(out, symbol.c_str(), out_size);
|
87
|
+
}
|
88
|
+
|
89
|
+
if (out[out_size - 1] != '\0') {
|
90
|
+
// strncpy() does not '\0' terminate when it truncates.
|
91
|
+
static constexpr char kEllipsis[] = "...";
|
92
|
+
int ellipsis_size = std::min<int>(sizeof(kEllipsis) - 1, out_size - 1);
|
93
|
+
memcpy(out + out_size - ellipsis_size - 1, kEllipsis, ellipsis_size);
|
94
|
+
out[out_size - 1] = '\0';
|
95
|
+
}
|
96
|
+
|
97
|
+
return true;
|
98
|
+
}
|
99
|
+
|
100
|
+
ABSL_NAMESPACE_END
|
101
|
+
} // namespace absl
|
@@ -57,6 +57,7 @@
|
|
57
57
|
#include <unistd.h>
|
58
58
|
|
59
59
|
#include <algorithm>
|
60
|
+
#include <array>
|
60
61
|
#include <atomic>
|
61
62
|
#include <cerrno>
|
62
63
|
#include <cinttypes>
|
@@ -74,6 +75,7 @@
|
|
74
75
|
#include "absl/base/port.h"
|
75
76
|
#include "absl/debugging/internal/demangle.h"
|
76
77
|
#include "absl/debugging/internal/vdso_support.h"
|
78
|
+
#include "absl/strings/string_view.h"
|
77
79
|
|
78
80
|
namespace absl {
|
79
81
|
ABSL_NAMESPACE_BEGIN
|
@@ -82,6 +84,12 @@ ABSL_NAMESPACE_BEGIN
|
|
82
84
|
static char *argv0_value = nullptr;
|
83
85
|
|
84
86
|
void InitializeSymbolizer(const char *argv0) {
|
87
|
+
#ifdef ABSL_HAVE_VDSO_SUPPORT
|
88
|
+
// We need to make sure VDSOSupport::Init() is called before any setuid or
|
89
|
+
// chroot calls, so InitializeSymbolizer() should be called very early in the
|
90
|
+
// life of a program.
|
91
|
+
absl::debugging_internal::VDSOSupport::Init();
|
92
|
+
#endif
|
85
93
|
if (argv0_value != nullptr) {
|
86
94
|
free(argv0_value);
|
87
95
|
argv0_value = nullptr;
|
@@ -149,13 +157,15 @@ struct FileMappingHint {
|
|
149
157
|
// Moreover, we are using only TryLock(), if the decorator list
|
150
158
|
// is being modified (is busy), we skip all decorators, and possibly
|
151
159
|
// loose some info. Sorry, that's the best we could do.
|
152
|
-
base_internal::SpinLock g_decorators_mu(
|
160
|
+
ABSL_CONST_INIT absl::base_internal::SpinLock g_decorators_mu(
|
161
|
+
absl::kConstInit, absl::base_internal::SCHEDULE_KERNEL_ONLY);
|
153
162
|
|
154
163
|
const int kMaxFileMappingHints = 8;
|
155
164
|
int g_num_file_mapping_hints;
|
156
165
|
FileMappingHint g_file_mapping_hints[kMaxFileMappingHints];
|
157
166
|
// Protects g_file_mapping_hints.
|
158
|
-
base_internal::SpinLock g_file_mapping_mu(
|
167
|
+
ABSL_CONST_INIT absl::base_internal::SpinLock g_file_mapping_mu(
|
168
|
+
absl::kConstInit, absl::base_internal::SCHEDULE_KERNEL_ONLY);
|
159
169
|
|
160
170
|
// Async-signal-safe function to zero a buffer.
|
161
171
|
// memset() is not guaranteed to be async-signal-safe.
|
@@ -175,6 +185,7 @@ struct ObjFile {
|
|
175
185
|
fd(-1),
|
176
186
|
elf_type(-1) {
|
177
187
|
SafeMemZero(&elf_header, sizeof(elf_header));
|
188
|
+
SafeMemZero(&phdr[0], sizeof(phdr));
|
178
189
|
}
|
179
190
|
|
180
191
|
char *filename;
|
@@ -187,6 +198,10 @@ struct ObjFile {
|
|
187
198
|
int fd;
|
188
199
|
int elf_type;
|
189
200
|
ElfW(Ehdr) elf_header;
|
201
|
+
|
202
|
+
// PT_LOAD program header describing executable code.
|
203
|
+
// Normally we expect just one, but SWIFT binaries have two.
|
204
|
+
std::array<ElfW(Phdr), 2> phdr;
|
190
205
|
};
|
191
206
|
|
192
207
|
// Build 4-way associative cache for symbols. Within each cache line, symbols
|
@@ -496,7 +511,7 @@ static ABSL_ATTRIBUTE_NOINLINE bool GetSectionHeaderByType(
|
|
496
511
|
const int kMaxSectionNameLen = 64;
|
497
512
|
|
498
513
|
bool ForEachSection(int fd,
|
499
|
-
const std::function<bool(
|
514
|
+
const std::function<bool(absl::string_view name,
|
500
515
|
const ElfW(Shdr) &)> &callback) {
|
501
516
|
ElfW(Ehdr) elf_header;
|
502
517
|
if (!ReadFromOffsetExact(fd, &elf_header, sizeof(elf_header), 0)) {
|
@@ -518,7 +533,7 @@ bool ForEachSection(int fd,
|
|
518
533
|
return false;
|
519
534
|
}
|
520
535
|
off_t name_offset = shstrtab.sh_offset + out.sh_name;
|
521
|
-
char header_name[kMaxSectionNameLen
|
536
|
+
char header_name[kMaxSectionNameLen];
|
522
537
|
ssize_t n_read =
|
523
538
|
ReadFromOffset(fd, &header_name, kMaxSectionNameLen, name_offset);
|
524
539
|
if (n_read == -1) {
|
@@ -527,9 +542,8 @@ bool ForEachSection(int fd,
|
|
527
542
|
// Long read?
|
528
543
|
return false;
|
529
544
|
}
|
530
|
-
header_name[n_read] = '\0';
|
531
545
|
|
532
|
-
|
546
|
+
absl::string_view name(header_name, strnlen(header_name, n_read));
|
533
547
|
if (!callback(name, out)) {
|
534
548
|
break;
|
535
549
|
}
|
@@ -1264,6 +1278,36 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
|
|
1264
1278
|
ABSL_RAW_LOG(WARNING, "%s: failed to read elf header", obj->filename);
|
1265
1279
|
return false;
|
1266
1280
|
}
|
1281
|
+
const int phnum = obj->elf_header.e_phnum;
|
1282
|
+
const int phentsize = obj->elf_header.e_phentsize;
|
1283
|
+
size_t phoff = obj->elf_header.e_phoff;
|
1284
|
+
int num_executable_load_segments = 0;
|
1285
|
+
for (int j = 0; j < phnum; j++) {
|
1286
|
+
ElfW(Phdr) phdr;
|
1287
|
+
if (!ReadFromOffsetExact(obj->fd, &phdr, sizeof(phdr), phoff)) {
|
1288
|
+
ABSL_RAW_LOG(WARNING, "%s: failed to read program header %d",
|
1289
|
+
obj->filename, j);
|
1290
|
+
return false;
|
1291
|
+
}
|
1292
|
+
phoff += phentsize;
|
1293
|
+
constexpr int rx = PF_X | PF_R;
|
1294
|
+
if (phdr.p_type != PT_LOAD || (phdr.p_flags & rx) != rx) {
|
1295
|
+
// Not a LOAD segment, or not executable code.
|
1296
|
+
continue;
|
1297
|
+
}
|
1298
|
+
if (num_executable_load_segments < obj->phdr.size()) {
|
1299
|
+
memcpy(&obj->phdr[num_executable_load_segments++], &phdr, sizeof(phdr));
|
1300
|
+
} else {
|
1301
|
+
ABSL_RAW_LOG(WARNING, "%s: too many executable LOAD segments",
|
1302
|
+
obj->filename);
|
1303
|
+
break;
|
1304
|
+
}
|
1305
|
+
}
|
1306
|
+
if (num_executable_load_segments == 0) {
|
1307
|
+
// This object has no "r-x" LOAD segments. That's unexpected.
|
1308
|
+
ABSL_RAW_LOG(WARNING, "%s: no executable LOAD segments", obj->filename);
|
1309
|
+
return false;
|
1310
|
+
}
|
1267
1311
|
}
|
1268
1312
|
return true;
|
1269
1313
|
}
|
@@ -1287,23 +1331,52 @@ const char *Symbolizer::GetSymbol(const void *const pc) {
|
|
1287
1331
|
int fd = -1;
|
1288
1332
|
if (obj != nullptr) {
|
1289
1333
|
if (MaybeInitializeObjFile(obj)) {
|
1290
|
-
|
1291
|
-
|
1334
|
+
const size_t start_addr = reinterpret_cast<size_t>(obj->start_addr);
|
1335
|
+
if (obj->elf_type == ET_DYN && start_addr >= obj->offset) {
|
1292
1336
|
// This object was relocated.
|
1293
1337
|
//
|
1294
1338
|
// For obj->offset > 0, adjust the relocation since a mapping at offset
|
1295
1339
|
// X in the file will have a start address of [true relocation]+X.
|
1296
|
-
relocation =
|
1340
|
+
relocation = start_addr - obj->offset;
|
1341
|
+
|
1342
|
+
// Note: some binaries have multiple "rx" LOAD segments. We must
|
1343
|
+
// find the right one.
|
1344
|
+
ElfW(Phdr) *phdr = nullptr;
|
1345
|
+
for (int j = 0; j < obj->phdr.size(); j++) {
|
1346
|
+
ElfW(Phdr) &p = obj->phdr[j];
|
1347
|
+
if (p.p_type != PT_LOAD) {
|
1348
|
+
// We only expect PT_LOADs. This must be PT_NULL that we didn't
|
1349
|
+
// write over (i.e. we exhausted all interesting PT_LOADs).
|
1350
|
+
ABSL_RAW_CHECK(p.p_type == PT_NULL, "unexpected p_type");
|
1351
|
+
break;
|
1352
|
+
}
|
1353
|
+
if (pc < reinterpret_cast<void *>(start_addr + p.p_memsz)) {
|
1354
|
+
phdr = &p;
|
1355
|
+
break;
|
1356
|
+
}
|
1357
|
+
}
|
1358
|
+
if (phdr == nullptr) {
|
1359
|
+
// That's unexpected. Hope for the best.
|
1360
|
+
ABSL_RAW_LOG(
|
1361
|
+
WARNING,
|
1362
|
+
"%s: unable to find LOAD segment for pc: %p, start_addr: %zx",
|
1363
|
+
obj->filename, pc, start_addr);
|
1364
|
+
} else {
|
1365
|
+
// Adjust relocation in case phdr.p_vaddr != 0.
|
1366
|
+
// This happens for binaries linked with `lld --rosegment`, and for
|
1367
|
+
// binaries linked with BFD `ld -z separate-code`.
|
1368
|
+
relocation -= phdr->p_vaddr - phdr->p_offset;
|
1369
|
+
}
|
1297
1370
|
}
|
1298
1371
|
|
1299
1372
|
fd = obj->fd;
|
1300
|
-
|
1301
|
-
|
1302
|
-
|
1303
|
-
|
1304
|
-
|
1305
|
-
|
1306
|
-
|
1373
|
+
if (GetSymbolFromObjectFile(*obj, pc, relocation, symbol_buf_,
|
1374
|
+
sizeof(symbol_buf_), tmp_buf_,
|
1375
|
+
sizeof(tmp_buf_)) == SYMBOL_FOUND) {
|
1376
|
+
// Only try to demangle the symbol name if it fit into symbol_buf_.
|
1377
|
+
DemangleInplace(symbol_buf_, sizeof(symbol_buf_), tmp_buf_,
|
1378
|
+
sizeof(tmp_buf_));
|
1379
|
+
}
|
1307
1380
|
}
|
1308
1381
|
} else {
|
1309
1382
|
#if ABSL_HAVE_VDSO_SUPPORT
|
@@ -1374,7 +1447,7 @@ int InstallSymbolDecorator(SymbolDecorator decorator, void *arg) {
|
|
1374
1447
|
|
1375
1448
|
if (!g_decorators_mu.TryLock()) {
|
1376
1449
|
// Someone else is using decorators. Get out.
|
1377
|
-
return
|
1450
|
+
return -2;
|
1378
1451
|
}
|
1379
1452
|
int ret = ticket;
|
1380
1453
|
if (g_num_decorators >= kMaxDecorators) {
|
@@ -1402,7 +1475,7 @@ bool RegisterFileMappingHint(const void *start, const void *end, uint64_t offset
|
|
1402
1475
|
if (g_num_file_mapping_hints >= kMaxFileMappingHints) {
|
1403
1476
|
ret = false;
|
1404
1477
|
} else {
|
1405
|
-
// TODO(ckennelly): Move this into a
|
1478
|
+
// TODO(ckennelly): Move this into a string copy routine.
|
1406
1479
|
int len = strlen(filename);
|
1407
1480
|
char *dst = static_cast<char *>(
|
1408
1481
|
base_internal::LowLevelAlloc::AllocWithArena(len + 1, SigSafeArena()));
|
@@ -1453,7 +1526,7 @@ bool GetFileMappingHint(const void **start, const void **end, uint64_t *offset,
|
|
1453
1526
|
|
1454
1527
|
bool Symbolize(const void *pc, char *out, int out_size) {
|
1455
1528
|
// Symbolization is very slow under tsan.
|
1456
|
-
|
1529
|
+
ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN();
|
1457
1530
|
SAFE_ASSERT(out_size >= 0);
|
1458
1531
|
debugging_internal::Symbolizer *s = debugging_internal::AllocateSymbolizer();
|
1459
1532
|
const char *name = s->GetSymbol(pc);
|
@@ -1472,9 +1545,16 @@ bool Symbolize(const void *pc, char *out, int out_size) {
|
|
1472
1545
|
}
|
1473
1546
|
}
|
1474
1547
|
debugging_internal::FreeSymbolizer(s);
|
1475
|
-
|
1548
|
+
ABSL_ANNOTATE_IGNORE_READS_AND_WRITES_END();
|
1476
1549
|
return ok;
|
1477
1550
|
}
|
1478
1551
|
|
1479
1552
|
ABSL_NAMESPACE_END
|
1480
1553
|
} // namespace absl
|
1554
|
+
|
1555
|
+
extern "C" bool AbslInternalGetFileMappingHint(const void **start,
|
1556
|
+
const void **end, uint64_t *offset,
|
1557
|
+
const char **filename) {
|
1558
|
+
return absl::debugging_internal::GetFileMappingHint(start, end, offset,
|
1559
|
+
filename);
|
1560
|
+
}
|
@@ -0,0 +1,184 @@
|
|
1
|
+
// Copyright 2018 The Abseil Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
//
|
15
|
+
// -----------------------------------------------------------------------------
|
16
|
+
// File: bind_front.h
|
17
|
+
// -----------------------------------------------------------------------------
|
18
|
+
//
|
19
|
+
// `absl::bind_front()` returns a functor by binding a number of arguments to
|
20
|
+
// the front of a provided (usually more generic) functor. Unlike `std::bind`,
|
21
|
+
// it does not require the use of argument placeholders. The simpler syntax of
|
22
|
+
// `absl::bind_front()` allows you to avoid known misuses with `std::bind()`.
|
23
|
+
//
|
24
|
+
// `absl::bind_front()` is meant as a drop-in replacement for C++20's upcoming
|
25
|
+
// `std::bind_front()`, which similarly resolves these issues with
|
26
|
+
// `std::bind()`. Both `bind_front()` alternatives, unlike `std::bind()`, allow
|
27
|
+
// partial function application. (See
|
28
|
+
// https://en.wikipedia.org/wiki/Partial_application).
|
29
|
+
|
30
|
+
#ifndef ABSL_FUNCTIONAL_BIND_FRONT_H_
|
31
|
+
#define ABSL_FUNCTIONAL_BIND_FRONT_H_
|
32
|
+
|
33
|
+
#include "absl/functional/internal/front_binder.h"
|
34
|
+
#include "absl/utility/utility.h"
|
35
|
+
|
36
|
+
namespace absl {
|
37
|
+
ABSL_NAMESPACE_BEGIN
|
38
|
+
|
39
|
+
// bind_front()
|
40
|
+
//
|
41
|
+
// Binds the first N arguments of an invocable object and stores them by value.
|
42
|
+
//
|
43
|
+
// Like `std::bind()`, `absl::bind_front()` is implicitly convertible to
|
44
|
+
// `std::function`. In particular, it may be used as a simpler replacement for
|
45
|
+
// `std::bind()` in most cases, as it does not require placeholders to be
|
46
|
+
// specified. More importantly, it provides more reliable correctness guarantees
|
47
|
+
// than `std::bind()`; while `std::bind()` will silently ignore passing more
|
48
|
+
// parameters than expected, for example, `absl::bind_front()` will report such
|
49
|
+
// mis-uses as errors.
|
50
|
+
//
|
51
|
+
// absl::bind_front(a...) can be seen as storing the results of
|
52
|
+
// std::make_tuple(a...).
|
53
|
+
//
|
54
|
+
// Example: Binding a free function.
|
55
|
+
//
|
56
|
+
// int Minus(int a, int b) { return a - b; }
|
57
|
+
//
|
58
|
+
// assert(absl::bind_front(Minus)(3, 2) == 3 - 2);
|
59
|
+
// assert(absl::bind_front(Minus, 3)(2) == 3 - 2);
|
60
|
+
// assert(absl::bind_front(Minus, 3, 2)() == 3 - 2);
|
61
|
+
//
|
62
|
+
// Example: Binding a member function.
|
63
|
+
//
|
64
|
+
// struct Math {
|
65
|
+
// int Double(int a) const { return 2 * a; }
|
66
|
+
// };
|
67
|
+
//
|
68
|
+
// Math math;
|
69
|
+
//
|
70
|
+
// assert(absl::bind_front(&Math::Double)(&math, 3) == 2 * 3);
|
71
|
+
// // Stores a pointer to math inside the functor.
|
72
|
+
// assert(absl::bind_front(&Math::Double, &math)(3) == 2 * 3);
|
73
|
+
// // Stores a copy of math inside the functor.
|
74
|
+
// assert(absl::bind_front(&Math::Double, math)(3) == 2 * 3);
|
75
|
+
// // Stores std::unique_ptr<Math> inside the functor.
|
76
|
+
// assert(absl::bind_front(&Math::Double,
|
77
|
+
// std::unique_ptr<Math>(new Math))(3) == 2 * 3);
|
78
|
+
//
|
79
|
+
// Example: Using `absl::bind_front()`, instead of `std::bind()`, with
|
80
|
+
// `std::function`.
|
81
|
+
//
|
82
|
+
// class FileReader {
|
83
|
+
// public:
|
84
|
+
// void ReadFileAsync(const std::string& filename, std::string* content,
|
85
|
+
// const std::function<void()>& done) {
|
86
|
+
// // Calls Executor::Schedule(std::function<void()>).
|
87
|
+
// Executor::DefaultExecutor()->Schedule(
|
88
|
+
// absl::bind_front(&FileReader::BlockingRead, this,
|
89
|
+
// filename, content, done));
|
90
|
+
// }
|
91
|
+
//
|
92
|
+
// private:
|
93
|
+
// void BlockingRead(const std::string& filename, std::string* content,
|
94
|
+
// const std::function<void()>& done) {
|
95
|
+
// CHECK_OK(file::GetContents(filename, content, {}));
|
96
|
+
// done();
|
97
|
+
// }
|
98
|
+
// };
|
99
|
+
//
|
100
|
+
// `absl::bind_front()` stores bound arguments explicitly using the type passed
|
101
|
+
// rather than implicitly based on the type accepted by its functor.
|
102
|
+
//
|
103
|
+
// Example: Binding arguments explicitly.
|
104
|
+
//
|
105
|
+
// void LogStringView(absl::string_view sv) {
|
106
|
+
// LOG(INFO) << sv;
|
107
|
+
// }
|
108
|
+
//
|
109
|
+
// Executor* e = Executor::DefaultExecutor();
|
110
|
+
// std::string s = "hello";
|
111
|
+
// absl::string_view sv = s;
|
112
|
+
//
|
113
|
+
// // absl::bind_front(LogStringView, arg) makes a copy of arg and stores it.
|
114
|
+
// e->Schedule(absl::bind_front(LogStringView, sv)); // ERROR: dangling
|
115
|
+
// // string_view.
|
116
|
+
//
|
117
|
+
// e->Schedule(absl::bind_front(LogStringView, s)); // OK: stores a copy of
|
118
|
+
// // s.
|
119
|
+
//
|
120
|
+
// To store some of the arguments passed to `absl::bind_front()` by reference,
|
121
|
+
// use std::ref()` and `std::cref()`.
|
122
|
+
//
|
123
|
+
// Example: Storing some of the bound arguments by reference.
|
124
|
+
//
|
125
|
+
// class Service {
|
126
|
+
// public:
|
127
|
+
// void Serve(const Request& req, std::function<void()>* done) {
|
128
|
+
// // The request protocol buffer won't be deleted until done is called.
|
129
|
+
// // It's safe to store a reference to it inside the functor.
|
130
|
+
// Executor::DefaultExecutor()->Schedule(
|
131
|
+
// absl::bind_front(&Service::BlockingServe, this, std::cref(req),
|
132
|
+
// done));
|
133
|
+
// }
|
134
|
+
//
|
135
|
+
// private:
|
136
|
+
// void BlockingServe(const Request& req, std::function<void()>* done);
|
137
|
+
// };
|
138
|
+
//
|
139
|
+
// Example: Storing bound arguments by reference.
|
140
|
+
//
|
141
|
+
// void Print(const std::string& a, const std::string& b) {
|
142
|
+
// std::cerr << a << b;
|
143
|
+
// }
|
144
|
+
//
|
145
|
+
// std::string hi = "Hello, ";
|
146
|
+
// std::vector<std::string> names = {"Chuk", "Gek"};
|
147
|
+
// // Doesn't copy hi.
|
148
|
+
// for_each(names.begin(), names.end(),
|
149
|
+
// absl::bind_front(Print, std::ref(hi)));
|
150
|
+
//
|
151
|
+
// // DO NOT DO THIS: the functor may outlive "hi", resulting in
|
152
|
+
// // dangling references.
|
153
|
+
// foo->DoInFuture(absl::bind_front(Print, std::ref(hi), "Guest")); // BAD!
|
154
|
+
// auto f = absl::bind_front(Print, std::ref(hi), "Guest"); // BAD!
|
155
|
+
//
|
156
|
+
// Example: Storing reference-like types.
|
157
|
+
//
|
158
|
+
// void Print(absl::string_view a, const std::string& b) {
|
159
|
+
// std::cerr << a << b;
|
160
|
+
// }
|
161
|
+
//
|
162
|
+
// std::string hi = "Hello, ";
|
163
|
+
// // Copies "hi".
|
164
|
+
// absl::bind_front(Print, hi)("Chuk");
|
165
|
+
//
|
166
|
+
// // Compile error: std::reference_wrapper<const string> is not implicitly
|
167
|
+
// // convertible to string_view.
|
168
|
+
// // absl::bind_front(Print, std::cref(hi))("Chuk");
|
169
|
+
//
|
170
|
+
// // Doesn't copy "hi".
|
171
|
+
// absl::bind_front(Print, absl::string_view(hi))("Chuk");
|
172
|
+
//
|
173
|
+
template <class F, class... BoundArgs>
|
174
|
+
constexpr functional_internal::bind_front_t<F, BoundArgs...> bind_front(
|
175
|
+
F&& func, BoundArgs&&... args) {
|
176
|
+
return functional_internal::bind_front_t<F, BoundArgs...>(
|
177
|
+
absl::in_place, absl::forward<F>(func),
|
178
|
+
absl::forward<BoundArgs>(args)...);
|
179
|
+
}
|
180
|
+
|
181
|
+
ABSL_NAMESPACE_END
|
182
|
+
} // namespace absl
|
183
|
+
|
184
|
+
#endif // ABSL_FUNCTIONAL_BIND_FRONT_H_
|