grpc 1.47.0 → 1.48.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +105 -47
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/event_engine.h +20 -11
- data/include/grpc/event_engine/slice_buffer.h +8 -2
- data/include/grpc/grpc.h +3 -3
- data/include/grpc/impl/codegen/compression_types.h +2 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -1
- data/include/grpc/impl/codegen/gpr_types.h +2 -1
- data/include/grpc/impl/codegen/grpc_types.h +2 -1
- data/include/grpc/impl/codegen/port_platform.h +6 -3
- data/src/core/ext/filters/census/grpc_context.cc +3 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
- data/src/core/ext/filters/client_channel/client_channel.h +19 -4
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
- data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
- data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
- data/src/core/ext/filters/client_channel/subchannel.h +6 -22
- data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
- data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
- data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
- data/src/core/ext/filters/http/client_authority_filter.h +5 -2
- data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
- data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
- data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
- data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
- data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
- data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
- data/src/core/ext/xds/certificate_provider_factory.h +6 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
- data/src/core/ext/xds/certificate_provider_registry.h +3 -1
- data/src/core/ext/xds/certificate_provider_store.cc +2 -0
- data/src/core/ext/xds/certificate_provider_store.h +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
- data/src/core/ext/xds/upb_utils.h +1 -2
- data/src/core/ext/xds/xds_api.cc +16 -18
- data/src/core/ext/xds/xds_api.h +12 -5
- data/src/core/ext/xds/xds_bootstrap.cc +37 -24
- data/src/core/ext/xds/xds_bootstrap.h +9 -11
- data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
- data/src/core/ext/xds/xds_certificate_provider.h +16 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
- data/src/core/ext/xds/xds_client.cc +71 -22
- data/src/core/ext/xds/xds_client.h +17 -3
- data/src/core/ext/xds/xds_client_stats.cc +3 -4
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +21 -10
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
- data/src/core/ext/xds/xds_common_types.cc +36 -22
- data/src/core/ext/xds/xds_common_types.h +12 -4
- data/src/core/ext/xds/xds_endpoint.cc +25 -15
- data/src/core/ext/xds/xds_endpoint.h +13 -5
- data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
- data/src/core/ext/xds/xds_http_filters.cc +7 -0
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
- data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
- data/src/core/ext/xds/xds_listener.cc +51 -33
- data/src/core/ext/xds/xds_listener.h +10 -1
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
- data/src/core/ext/xds/xds_route_config.cc +56 -28
- data/src/core/ext/xds/xds_route_config.h +11 -2
- data/src/core/ext/xds/xds_routing.cc +16 -0
- data/src/core/ext/xds/xds_routing.h +7 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
- data/src/core/lib/address_utils/parse_address.cc +5 -8
- data/src/core/lib/address_utils/parse_address.h +3 -2
- data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
- data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/backoff/backoff.h +1 -1
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.h +1 -0
- data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
- data/src/core/lib/channel/channel_fwd.h +26 -0
- data/src/core/lib/channel/channel_stack.cc +4 -4
- data/src/core/lib/channel/channel_stack.h +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +2 -5
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
- data/src/core/lib/channel/channelz.cc +2 -1
- data/src/core/lib/channel/channelz.h +2 -3
- data/src/core/lib/channel/channelz_registry.cc +4 -5
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +11 -5
- data/src/core/lib/channel/promise_based_filter.h +2 -0
- data/src/core/lib/compression/compression.cc +6 -1
- data/src/core/lib/compression/compression_internal.cc +3 -6
- data/src/core/lib/compression/compression_internal.h +3 -2
- data/src/core/lib/compression/message_compress.cc +3 -1
- data/src/core/lib/compression/message_compress.h +2 -3
- data/src/core/lib/debug/stats.cc +9 -9
- data/src/core/lib/debug/stats.h +2 -1
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +0 -4
- data/src/core/lib/debug/trace.h +13 -12
- data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
- data/src/core/lib/event_engine/event_engine.cc +24 -19
- data/src/core/lib/event_engine/event_engine_factory.h +2 -2
- data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
- data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
- data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
- data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
- data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
- data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
- data/src/core/lib/event_engine/promise.h +69 -0
- data/src/core/lib/gpr/time_posix.cc +6 -9
- data/src/core/lib/gpr/time_windows.cc +10 -7
- data/src/core/lib/gprpp/manual_constructor.h +0 -67
- data/src/core/lib/gprpp/status_helper.cc +44 -30
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +4 -0
- data/src/core/lib/http/format_request.cc +5 -4
- data/src/core/lib/http/format_request.h +1 -1
- data/src/core/lib/http/httpcli.cc +18 -12
- data/src/core/lib/http/httpcli.h +19 -3
- data/src/core/lib/http/httpcli_security_connector.cc +16 -4
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
- data/src/core/lib/http/parser.cc +6 -7
- data/src/core/lib/http/parser.h +3 -0
- data/src/core/lib/iomgr/call_combiner.cc +2 -2
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error.cc +11 -9
- data/src/core/lib/iomgr/error.h +9 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
- data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
- data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
- data/src/core/lib/iomgr/ev_posix.cc +54 -92
- data/src/core/lib/iomgr/ev_posix.h +5 -3
- data/src/core/lib/iomgr/fork_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr.cc +7 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
- data/src/core/lib/iomgr/load_file.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
- data/src/core/lib/iomgr/tcp_client.cc +12 -7
- data/src/core/lib/iomgr/tcp_client.h +24 -13
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
- data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
- data/src/core/lib/iomgr/tcp_posix.cc +91 -29
- data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
- data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
- data/src/core/lib/iomgr/tcp_windows.cc +5 -5
- data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
- data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
- data/src/core/lib/iomgr/work_serializer.h +2 -3
- data/src/core/lib/matchers/matchers.cc +6 -3
- data/src/core/lib/matchers/matchers.h +2 -0
- data/src/core/lib/promise/activity.cc +0 -1
- data/src/core/lib/promise/activity.h +7 -13
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/promise.h +1 -0
- data/src/core/lib/promise/sleep.cc +36 -31
- data/src/core/lib/promise/sleep.h +25 -25
- data/src/core/lib/resolver/resolver.cc +5 -0
- data/src/core/lib/resolver/resolver.h +3 -0
- data/src/core/lib/resolver/resolver_factory.h +5 -2
- data/src/core/lib/resolver/resolver_registry.cc +2 -9
- data/src/core/lib/resolver/resolver_registry.h +12 -1
- data/src/core/lib/resolver/server_address.cc +8 -0
- data/src/core/lib/resolver/server_address.h +9 -2
- data/src/core/lib/resource_quota/memory_quota.cc +18 -60
- data/src/core/lib/resource_quota/memory_quota.h +11 -25
- data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
- data/src/core/lib/security/authorization/evaluate_args.h +6 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
- data/src/core/lib/security/authorization/matchers.cc +9 -1
- data/src/core/lib/security/authorization/matchers.h +7 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
- data/src/core/lib/security/authorization/rbac_policy.h +7 -0
- data/src/core/lib/security/context/security_context.cc +5 -2
- data/src/core/lib/security/context/security_context.h +14 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
- data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
- data/src/core/lib/security/credentials/call_creds_util.h +1 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
- data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
- data/src/core/lib/security/credentials/credentials.cc +4 -8
- data/src/core/lib/security/credentials/credentials.h +10 -8
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
- data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
- data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
- data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
- data/src/core/lib/security/security_connector/security_connector.cc +20 -18
- data/src/core/lib/security/security_connector/security_connector.h +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
- data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
- data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
- data/src/core/lib/security/transport/secure_endpoint.h +4 -3
- data/src/core/lib/security/transport/security_handshaker.cc +44 -11
- data/src/core/lib/security/transport/security_handshaker.h +4 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
- data/src/core/lib/security/util/json_util.cc +3 -2
- data/src/core/lib/security/util/json_util.h +0 -2
- data/src/core/lib/service_config/service_config_call_data.h +2 -1
- data/src/core/lib/service_config/service_config_impl.cc +6 -6
- data/src/core/lib/service_config/service_config_impl.h +1 -3
- data/src/core/lib/service_config/service_config_parser.cc +2 -4
- data/src/core/lib/slice/slice_buffer.cc +30 -1
- data/src/core/lib/slice/slice_buffer.h +37 -6
- data/src/core/lib/slice/slice_string_helpers.cc +0 -20
- data/src/core/lib/slice/slice_string_helpers.h +0 -4
- data/src/core/lib/surface/call.cc +53 -115
- data/src/core/lib/surface/call.h +5 -1
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +15 -14
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/init.cc +0 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +14 -8
- data/src/core/lib/surface/server.h +4 -1
- data/src/core/lib/surface/validate_metadata.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.cc +13 -7
- data/src/core/lib/transport/handshaker.cc +3 -3
- data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
- data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
- data/src/core/lib/transport/transport.cc +0 -3
- data/src/core/lib/transport/transport.h +20 -14
- data/src/core/lib/transport/transport_fwd.h +20 -0
- data/src/core/lib/transport/transport_impl.h +1 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -9
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
- data/src/core/tsi/fake_transport_security.cc +13 -1
- data/src/core/tsi/fake_transport_security.h +6 -0
- data/src/core/tsi/ssl_transport_security.cc +1 -1
- data/src/core/tsi/transport_security_grpc.cc +3 -2
- data/src/core/tsi/transport_security_grpc.h +5 -2
- data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
- data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
- data/src/ruby/ext/grpc/ext-export.clang +1 -0
- data/src/ruby/ext/grpc/ext-export.gcc +1 -0
- data/src/ruby/ext/grpc/extconf.rb +49 -18
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/errors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
- data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
- data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
- data/third_party/abseil-cpp/absl/base/casts.h +61 -68
- data/third_party/abseil-cpp/absl/base/config.h +182 -41
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
- data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
- data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
- data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
- data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
- data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
- data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
- data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
- data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
- data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
- data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
- data/third_party/abseil-cpp/absl/status/status.cc +174 -2
- data/third_party/abseil-cpp/absl/status/status.h +22 -12
- data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
- data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
- data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
- data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
- data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
- data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
- data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
- data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
- data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
- data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
- data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
- data/third_party/abseil-cpp/absl/time/time.h +16 -12
- data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
- data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
- data/third_party/abseil-cpp/absl/types/optional.h +17 -14
- data/third_party/abseil-cpp/absl/types/span.h +2 -1
- metadata +39 -15
- data/src/core/lib/slice/slice_split.cc +0 -103
- data/src/core/lib/slice/slice_split.h +0 -36
- data/src/core/lib/transport/byte_stream.cc +0 -165
- data/src/core/lib/transport/byte_stream.h +0 -170
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -30,16 +30,12 @@ bool AddressIsReadable(const void* /* addr */) { return true; }
|
|
30
30
|
ABSL_NAMESPACE_END
|
31
31
|
} // namespace absl
|
32
32
|
|
33
|
-
#else
|
33
|
+
#else // __linux__ && !__ANDROID__
|
34
34
|
|
35
|
-
#include <
|
36
|
-
#include <
|
35
|
+
#include <stdint.h>
|
36
|
+
#include <syscall.h>
|
37
37
|
#include <unistd.h>
|
38
38
|
|
39
|
-
#include <atomic>
|
40
|
-
#include <cerrno>
|
41
|
-
#include <cstdint>
|
42
|
-
|
43
39
|
#include "absl/base/internal/errno_saver.h"
|
44
40
|
#include "absl/base/internal/raw_logging.h"
|
45
41
|
|
@@ -47,93 +43,54 @@ namespace absl {
|
|
47
43
|
ABSL_NAMESPACE_BEGIN
|
48
44
|
namespace debugging_internal {
|
49
45
|
|
50
|
-
//
|
51
|
-
//
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
//
|
59
|
-
|
60
|
-
|
61
|
-
*pid = x >> 48;
|
62
|
-
*read_fd = (x >> 24) & 0xffffff;
|
63
|
-
*write_fd = x & 0xffffff;
|
64
|
-
}
|
46
|
+
// NOTE: be extra careful about adding any interposable function calls here
|
47
|
+
// (such as open(), read(), etc.). These symbols may be interposed and will get
|
48
|
+
// invoked in contexts they don't expect.
|
49
|
+
//
|
50
|
+
// NOTE: any new system calls here may also require sandbox reconfiguration.
|
51
|
+
//
|
52
|
+
bool AddressIsReadable(const void *addr) {
|
53
|
+
// Align address on 8-byte boundary. On aarch64, checking last
|
54
|
+
// byte before inaccessible page returned unexpected EFAULT.
|
55
|
+
const uintptr_t u_addr = reinterpret_cast<uintptr_t>(addr) & ~7;
|
56
|
+
addr = reinterpret_cast<const void *>(u_addr);
|
65
57
|
|
66
|
-
//
|
67
|
-
|
68
|
-
// unimplemented.
|
69
|
-
// This is a namespace-scoped variable for correct zero-initialization.
|
70
|
-
static std::atomic<uint64_t> pid_and_fds; // initially 0, an invalid pid.
|
58
|
+
// rt_sigprocmask below will succeed for this input.
|
59
|
+
if (addr == nullptr) return false;
|
71
60
|
|
72
|
-
bool AddressIsReadable(const void *addr) {
|
73
61
|
absl::base_internal::ErrnoSaver errno_saver;
|
74
|
-
|
75
|
-
//
|
76
|
-
//
|
77
|
-
//
|
78
|
-
//
|
79
|
-
//
|
80
|
-
//
|
81
|
-
//
|
82
|
-
//
|
83
|
-
//
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
local_pid_and_fds, new_pid_and_fds, std::memory_order_release,
|
103
|
-
std::memory_order_relaxed)) {
|
104
|
-
local_pid_and_fds = new_pid_and_fds; // fds exposed to other threads
|
105
|
-
} else { // fds not exposed to other threads; we can close them.
|
106
|
-
close(p[0]);
|
107
|
-
close(p[1]);
|
108
|
-
local_pid_and_fds = pid_and_fds.load(std::memory_order_acquire);
|
109
|
-
}
|
110
|
-
Unpack(local_pid_and_fds, &pid, &read_fd, &write_fd);
|
111
|
-
}
|
112
|
-
errno = 0;
|
113
|
-
// Use syscall(SYS_write, ...) instead of write() to prevent ASAN
|
114
|
-
// and other checkers from complaining about accesses to arbitrary
|
115
|
-
// memory.
|
116
|
-
do {
|
117
|
-
bytes_written = syscall(SYS_write, write_fd, addr, 1);
|
118
|
-
} while (bytes_written == -1 && errno == EINTR);
|
119
|
-
if (bytes_written == 1) { // remove the byte from the pipe
|
120
|
-
char c;
|
121
|
-
while (read(read_fd, &c, 1) == -1 && errno == EINTR) {
|
122
|
-
}
|
123
|
-
}
|
124
|
-
if (errno == EBADF) { // Descriptors invalid.
|
125
|
-
// If pid_and_fds contains the problematic file descriptors we just used,
|
126
|
-
// this call will forget them, and the loop will try again.
|
127
|
-
pid_and_fds.compare_exchange_strong(local_pid_and_fds, 0,
|
128
|
-
std::memory_order_release,
|
129
|
-
std::memory_order_relaxed);
|
130
|
-
}
|
131
|
-
} while (errno == EBADF);
|
132
|
-
return bytes_written == 1;
|
62
|
+
|
63
|
+
// Here we probe with some syscall which
|
64
|
+
// - accepts an 8-byte region of user memory as input
|
65
|
+
// - tests for EFAULT before other validation
|
66
|
+
// - has no problematic side-effects
|
67
|
+
//
|
68
|
+
// rt_sigprocmask(2) works for this. It copies sizeof(kernel_sigset_t)==8
|
69
|
+
// bytes from the address into the kernel memory before any validation.
|
70
|
+
//
|
71
|
+
// The call can never succeed, since the `how` parameter is not one of
|
72
|
+
// SIG_BLOCK, SIG_UNBLOCK, SIG_SETMASK.
|
73
|
+
//
|
74
|
+
// This strategy depends on Linux implementation details,
|
75
|
+
// so we rely on the test to alert us if it stops working.
|
76
|
+
//
|
77
|
+
// Some discarded past approaches:
|
78
|
+
// - msync() doesn't reject PROT_NONE regions
|
79
|
+
// - write() on /dev/null doesn't return EFAULT
|
80
|
+
// - write() on a pipe requires creating it and draining the writes
|
81
|
+
// - connect() works but is problematic for sandboxes and needs a valid
|
82
|
+
// file descriptor
|
83
|
+
//
|
84
|
+
// This can never succeed (invalid first argument to sigprocmask).
|
85
|
+
ABSL_RAW_CHECK(syscall(SYS_rt_sigprocmask, ~0, addr, nullptr,
|
86
|
+
/*sizeof(kernel_sigset_t)*/ 8) == -1,
|
87
|
+
"unexpected success");
|
88
|
+
ABSL_RAW_CHECK(errno == EFAULT || errno == EINVAL, "unexpected errno");
|
89
|
+
return errno != EFAULT;
|
133
90
|
}
|
134
91
|
|
135
92
|
} // namespace debugging_internal
|
136
93
|
ABSL_NAMESPACE_END
|
137
94
|
} // namespace absl
|
138
95
|
|
139
|
-
#endif
|
96
|
+
#endif // __linux__ && !__ANDROID__
|
@@ -351,7 +351,11 @@ void ElfMemImage::SymbolIterator::Update(int increment) {
|
|
351
351
|
const ElfW(Versym) *version_symbol = image->GetVersym(index_);
|
352
352
|
ABSL_RAW_CHECK(symbol && version_symbol, "");
|
353
353
|
const char *const symbol_name = image->GetDynstr(symbol->st_name);
|
354
|
+
#if defined(__NetBSD__)
|
355
|
+
const int version_index = version_symbol->vs_vers & VERSYM_VERSION;
|
356
|
+
#else
|
354
357
|
const ElfW(Versym) version_index = version_symbol[0] & VERSYM_VERSION;
|
358
|
+
#endif
|
355
359
|
const ElfW(Verdef) *version_definition = nullptr;
|
356
360
|
const char *version_name = "";
|
357
361
|
if (symbol->st_shndx == SHN_UNDEF) {
|
@@ -31,8 +31,9 @@
|
|
31
31
|
#error ABSL_HAVE_ELF_MEM_IMAGE cannot be directly set
|
32
32
|
#endif
|
33
33
|
|
34
|
-
#if defined(__ELF__) && !defined(
|
35
|
-
!defined(
|
34
|
+
#if defined(__ELF__) && !defined(__OpenBSD__) && !defined(__QNX__) && \
|
35
|
+
!defined(__native_client__) && !defined(__asmjs__) && \
|
36
|
+
!defined(__wasm__) && !defined(__HAIKU__)
|
36
37
|
#define ABSL_HAVE_ELF_MEM_IMAGE 1
|
37
38
|
#endif
|
38
39
|
|
@@ -176,12 +176,17 @@ static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
|
|
176
176
|
// Implementation detail: we clamp the max of frames we are willing to
|
177
177
|
// count, so as not to spend too much time in the loop below.
|
178
178
|
const int kMaxUnwind = 200;
|
179
|
-
int
|
180
|
-
for (; frame_pointer != nullptr && j < kMaxUnwind; j++) {
|
179
|
+
int num_dropped_frames = 0;
|
180
|
+
for (int j = 0; frame_pointer != nullptr && j < kMaxUnwind; j++) {
|
181
|
+
if (skip_count > 0) {
|
182
|
+
skip_count--;
|
183
|
+
} else {
|
184
|
+
num_dropped_frames++;
|
185
|
+
}
|
181
186
|
frame_pointer =
|
182
187
|
NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(frame_pointer, ucp);
|
183
188
|
}
|
184
|
-
*min_dropped_frames =
|
189
|
+
*min_dropped_frames = num_dropped_frames;
|
185
190
|
}
|
186
191
|
return n;
|
187
192
|
}
|
@@ -112,11 +112,16 @@ static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
|
|
112
112
|
// Implementation detail: we clamp the max of frames we are willing to
|
113
113
|
// count, so as not to spend too much time in the loop below.
|
114
114
|
const int kMaxUnwind = 200;
|
115
|
-
int
|
116
|
-
for (; sp != nullptr && j < kMaxUnwind; j++) {
|
115
|
+
int num_dropped_frames = 0;
|
116
|
+
for (int j = 0; sp != nullptr && j < kMaxUnwind; j++) {
|
117
|
+
if (skip_count > 0) {
|
118
|
+
skip_count--;
|
119
|
+
} else {
|
120
|
+
num_dropped_frames++;
|
121
|
+
}
|
117
122
|
sp = NextStackFrame<!IS_STACK_FRAMES>(sp);
|
118
123
|
}
|
119
|
-
*min_dropped_frames =
|
124
|
+
*min_dropped_frames = num_dropped_frames;
|
120
125
|
}
|
121
126
|
return n;
|
122
127
|
}
|
@@ -37,7 +37,8 @@
|
|
37
37
|
"absl/debugging/internal/stacktrace_generic-inl.inc"
|
38
38
|
#endif // defined(ABSL_HAVE_THREAD_LOCAL)
|
39
39
|
|
40
|
-
|
40
|
+
// Emscripten stacktraces rely on JS. Do not use them in standalone mode.
|
41
|
+
#elif defined(__EMSCRIPTEN__) && !defined(STANDALONE_WASM)
|
41
42
|
#define ABSL_STACKTRACE_INL_HEADER \
|
42
43
|
"absl/debugging/internal/stacktrace_emscripten-inl.inc"
|
43
44
|
|
@@ -231,11 +231,16 @@ static int UnwindImpl(void** result, int* sizes, int max_depth, int skip_count,
|
|
231
231
|
// Implementation detail: we clamp the max of frames we are willing to
|
232
232
|
// count, so as not to spend too much time in the loop below.
|
233
233
|
const int kMaxUnwind = 1000;
|
234
|
-
int
|
235
|
-
for (; next_sp != nullptr && j < kMaxUnwind; j++) {
|
234
|
+
int num_dropped_frames = 0;
|
235
|
+
for (int j = 0; next_sp != nullptr && j < kMaxUnwind; j++) {
|
236
|
+
if (skip_count > 0) {
|
237
|
+
skip_count--;
|
238
|
+
} else {
|
239
|
+
num_dropped_frames++;
|
240
|
+
}
|
236
241
|
next_sp = NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(next_sp, ucp);
|
237
242
|
}
|
238
|
-
*min_dropped_frames =
|
243
|
+
*min_dropped_frames = num_dropped_frames;
|
239
244
|
}
|
240
245
|
return n;
|
241
246
|
}
|
@@ -56,7 +56,7 @@ static const unsigned char *GetKernelRtSigreturnAddress() {
|
|
56
56
|
absl::debugging_internal::VDSOSupport::SymbolInfo symbol_info;
|
57
57
|
// Symbol versioning pulled from arch/riscv/kernel/vdso/vdso.lds at v5.10.
|
58
58
|
auto lookup = [&](int type) {
|
59
|
-
return vdso.LookupSymbol("
|
59
|
+
return vdso.LookupSymbol("__vdso_rt_sigreturn", "LINUX_4.15", type,
|
60
60
|
&symbol_info);
|
61
61
|
};
|
62
62
|
if ((!lookup(STT_FUNC) && !lookup(STT_NOTYPE)) ||
|
@@ -171,26 +171,21 @@ ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
|
|
171
171
|
ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
|
172
172
|
static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count,
|
173
173
|
const void *ucp, int *min_dropped_frames) {
|
174
|
+
// The `frame_pointer` that is computed here points to the top of the frame.
|
175
|
+
// The two words preceding the address are the return address and the previous
|
176
|
+
// frame pointer.
|
174
177
|
#if defined(__GNUC__)
|
175
178
|
void **frame_pointer = reinterpret_cast<void **>(__builtin_frame_address(0));
|
176
179
|
#else
|
177
180
|
#error reading stack pointer not yet supported on this platform
|
178
181
|
#endif
|
179
182
|
|
180
|
-
skip_count++; // Skip the frame for this function.
|
181
183
|
int n = 0;
|
182
|
-
|
183
|
-
// The `frame_pointer` that is computed here points to the top of the frame.
|
184
|
-
// The two words preceding the address are the return address and the previous
|
185
|
-
// frame pointer. To find a PC value associated with the current frame, we
|
186
|
-
// need to go down a level in the call chain. So we remember the return
|
187
|
-
// address of the last frame seen. This does not work for the first stack
|
188
|
-
// frame, which belongs to `UnwindImp()` but we skip the frame for
|
189
|
-
// `UnwindImp()` anyway.
|
190
|
-
void *prev_return_address = nullptr;
|
191
|
-
|
184
|
+
void *return_address = nullptr;
|
192
185
|
while (frame_pointer && n < max_depth) {
|
193
|
-
|
186
|
+
return_address = frame_pointer[-1];
|
187
|
+
|
188
|
+
// The absl::GetStackFrames routine is called when we are in some
|
194
189
|
// informational context (the failure signal handler for example). Use the
|
195
190
|
// non-strict unwinding rules to produce a stack trace that is as complete
|
196
191
|
// as possible (even if it contains a few bogus entries in some rare cases).
|
@@ -200,26 +195,33 @@ static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count,
|
|
200
195
|
if (skip_count > 0) {
|
201
196
|
skip_count--;
|
202
197
|
} else {
|
203
|
-
result[n] =
|
198
|
+
result[n] = return_address;
|
204
199
|
if (IS_STACK_FRAMES) {
|
205
200
|
sizes[n] = ComputeStackFrameSize(frame_pointer, next_frame_pointer);
|
206
201
|
}
|
207
202
|
n++;
|
208
203
|
}
|
209
|
-
|
204
|
+
|
210
205
|
frame_pointer = next_frame_pointer;
|
211
206
|
}
|
207
|
+
|
212
208
|
if (min_dropped_frames != nullptr) {
|
213
209
|
// Implementation detail: we clamp the max of frames we are willing to
|
214
210
|
// count, so as not to spend too much time in the loop below.
|
215
211
|
const int kMaxUnwind = 200;
|
216
|
-
int
|
217
|
-
for (; frame_pointer != nullptr && j < kMaxUnwind; j++) {
|
212
|
+
int num_dropped_frames = 0;
|
213
|
+
for (int j = 0; frame_pointer != nullptr && j < kMaxUnwind; j++) {
|
214
|
+
if (skip_count > 0) {
|
215
|
+
skip_count--;
|
216
|
+
} else {
|
217
|
+
num_dropped_frames++;
|
218
|
+
}
|
218
219
|
frame_pointer =
|
219
220
|
NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(frame_pointer, ucp);
|
220
221
|
}
|
221
|
-
*min_dropped_frames =
|
222
|
+
*min_dropped_frames = num_dropped_frames;
|
222
223
|
}
|
224
|
+
|
223
225
|
return n;
|
224
226
|
}
|
225
227
|
|
@@ -341,12 +341,17 @@ static int UnwindImpl(void **result, int *sizes, int max_depth, int skip_count,
|
|
341
341
|
// Implementation detail: we clamp the max of frames we are willing to
|
342
342
|
// count, so as not to spend too much time in the loop below.
|
343
343
|
const int kMaxUnwind = 1000;
|
344
|
-
int
|
345
|
-
for (; fp != nullptr && j < kMaxUnwind; j++) {
|
344
|
+
int num_dropped_frames = 0;
|
345
|
+
for (int j = 0; fp != nullptr && j < kMaxUnwind; j++) {
|
346
|
+
if (skip_count > 0) {
|
347
|
+
skip_count--;
|
348
|
+
} else {
|
349
|
+
num_dropped_frames++;
|
350
|
+
}
|
346
351
|
fp = NextStackFrame<!IS_STACK_FRAMES, IS_WITH_CONTEXT>(fp, ucp, stack_low,
|
347
352
|
stack_high);
|
348
353
|
}
|
349
|
-
*min_dropped_frames =
|
354
|
+
*min_dropped_frames = num_dropped_frames;
|
350
355
|
}
|
351
356
|
return n;
|
352
357
|
}
|
@@ -33,7 +33,7 @@
|
|
33
33
|
#endif
|
34
34
|
#include <unistd.h>
|
35
35
|
|
36
|
-
#if defined(__GLIBC__) && \
|
36
|
+
#if !defined(__UCLIBC__) && defined(__GLIBC__) && \
|
37
37
|
(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 16))
|
38
38
|
#define ABSL_HAVE_GETAUXVAL
|
39
39
|
#endif
|
@@ -50,8 +50,14 @@
|
|
50
50
|
#define AT_SYSINFO_EHDR 33 // for crosstoolv10
|
51
51
|
#endif
|
52
52
|
|
53
|
+
#if defined(__NetBSD__)
|
54
|
+
using Elf32_auxv_t = Aux32Info;
|
55
|
+
using Elf64_auxv_t = Aux64Info;
|
56
|
+
#endif
|
53
57
|
#if defined(__FreeBSD__)
|
58
|
+
#if defined(__ELF_WORD_SIZE) && __ELF_WORD_SIZE == 64
|
54
59
|
using Elf64_auxv_t = Elf64_Auxinfo;
|
60
|
+
#endif
|
55
61
|
using Elf32_auxv_t = Elf32_Auxinfo;
|
56
62
|
#endif
|
57
63
|
|
@@ -63,7 +69,9 @@ ABSL_CONST_INIT
|
|
63
69
|
std::atomic<const void *> VDSOSupport::vdso_base_(
|
64
70
|
debugging_internal::ElfMemImage::kInvalidBase);
|
65
71
|
|
66
|
-
std::atomic<VDSOSupport::GetCpuFn> VDSOSupport::getcpu_fn_(
|
72
|
+
ABSL_CONST_INIT std::atomic<VDSOSupport::GetCpuFn> VDSOSupport::getcpu_fn_(
|
73
|
+
&InitAndGetCPU);
|
74
|
+
|
67
75
|
VDSOSupport::VDSOSupport()
|
68
76
|
// If vdso_base_ is still set to kInvalidBase, we got here
|
69
77
|
// before VDSOSupport::Init has been called. Call it now.
|
@@ -104,8 +112,13 @@ const void *VDSOSupport::Init() {
|
|
104
112
|
ElfW(auxv_t) aux;
|
105
113
|
while (read(fd, &aux, sizeof(aux)) == sizeof(aux)) {
|
106
114
|
if (aux.a_type == AT_SYSINFO_EHDR) {
|
115
|
+
#if defined(__NetBSD__)
|
116
|
+
vdso_base_.store(reinterpret_cast<void *>(aux.a_v),
|
117
|
+
std::memory_order_relaxed);
|
118
|
+
#else
|
107
119
|
vdso_base_.store(reinterpret_cast<void *>(aux.a_un.a_val),
|
108
120
|
std::memory_order_relaxed);
|
121
|
+
#endif
|
109
122
|
break;
|
110
123
|
}
|
111
124
|
}
|
@@ -23,6 +23,11 @@
|
|
23
23
|
#endif
|
24
24
|
#endif
|
25
25
|
|
26
|
+
// Emscripten symbolization relies on JS. Do not use them in standalone mode.
|
27
|
+
#if defined(__EMSCRIPTEN__) && !defined(STANDALONE_WASM)
|
28
|
+
#define ABSL_INTERNAL_HAVE_SYMBOLIZE_WASM
|
29
|
+
#endif
|
30
|
+
|
26
31
|
#if defined(ABSL_INTERNAL_HAVE_ELF_SYMBOLIZE)
|
27
32
|
#include "absl/debugging/symbolize_elf.inc"
|
28
33
|
#elif defined(ABSL_INTERNAL_HAVE_SYMBOLIZE_WIN32)
|
@@ -31,7 +36,7 @@
|
|
31
36
|
#include "absl/debugging/symbolize_win32.inc"
|
32
37
|
#elif defined(__APPLE__)
|
33
38
|
#include "absl/debugging/symbolize_darwin.inc"
|
34
|
-
#elif defined(
|
39
|
+
#elif defined(ABSL_INTERNAL_HAVE_SYMBOLIZE_WASM)
|
35
40
|
#include "absl/debugging/symbolize_emscripten.inc"
|
36
41
|
#else
|
37
42
|
#include "absl/debugging/symbolize_unimplemented.inc"
|
@@ -323,6 +323,7 @@ class Symbolizer {
|
|
323
323
|
const ptrdiff_t relocation,
|
324
324
|
char *out, int out_size,
|
325
325
|
char *tmp_buf, int tmp_buf_size);
|
326
|
+
const char *GetUncachedSymbol(const void *pc);
|
326
327
|
|
327
328
|
enum {
|
328
329
|
SYMBOL_BUF_SIZE = 3072,
|
@@ -1145,6 +1146,14 @@ bool Symbolizer::RegisterObjFile(const char *filename,
|
|
1145
1146
|
reinterpret_cast<uintptr_t>(old->end_addr), old->filename);
|
1146
1147
|
}
|
1147
1148
|
return true;
|
1149
|
+
} else if (old->end_addr == start_addr &&
|
1150
|
+
reinterpret_cast<uintptr_t>(old->start_addr) - old->offset ==
|
1151
|
+
reinterpret_cast<uintptr_t>(start_addr) - offset &&
|
1152
|
+
strcmp(old->filename, filename) == 0) {
|
1153
|
+
// Two contiguous map entries that span a contiguous region of the file,
|
1154
|
+
// perhaps because some part of the file was mlock()ed. Combine them.
|
1155
|
+
old->end_addr = end_addr;
|
1156
|
+
return true;
|
1148
1157
|
}
|
1149
1158
|
}
|
1150
1159
|
ObjFile *obj = impl->addr_map_.Add();
|
@@ -1333,13 +1342,7 @@ static bool MaybeInitializeObjFile(ObjFile *obj) {
|
|
1333
1342
|
// they are called here as well.
|
1334
1343
|
// To keep stack consumption low, we would like this function to not
|
1335
1344
|
// get inlined.
|
1336
|
-
const char *Symbolizer::
|
1337
|
-
const char *entry = FindSymbolInCache(pc);
|
1338
|
-
if (entry != nullptr) {
|
1339
|
-
return entry;
|
1340
|
-
}
|
1341
|
-
symbol_buf_[0] = '\0';
|
1342
|
-
|
1345
|
+
const char *Symbolizer::GetUncachedSymbol(const void *pc) {
|
1343
1346
|
ObjFile *const obj = FindObjFile(pc, 1);
|
1344
1347
|
ptrdiff_t relocation = 0;
|
1345
1348
|
int fd = -1;
|
@@ -1427,6 +1430,42 @@ const char *Symbolizer::GetSymbol(const void *const pc) {
|
|
1427
1430
|
return InsertSymbolInCache(pc, symbol_buf_);
|
1428
1431
|
}
|
1429
1432
|
|
1433
|
+
const char *Symbolizer::GetSymbol(const void *pc) {
|
1434
|
+
const char *entry = FindSymbolInCache(pc);
|
1435
|
+
if (entry != nullptr) {
|
1436
|
+
return entry;
|
1437
|
+
}
|
1438
|
+
symbol_buf_[0] = '\0';
|
1439
|
+
|
1440
|
+
#ifdef __hppa__
|
1441
|
+
{
|
1442
|
+
// In some contexts (e.g., return addresses), PA-RISC uses the lowest two
|
1443
|
+
// bits of the address to indicate the privilege level. Clear those bits
|
1444
|
+
// before trying to symbolize.
|
1445
|
+
const auto pc_bits = reinterpret_cast<uintptr_t>(pc);
|
1446
|
+
const auto address = pc_bits & ~0x3;
|
1447
|
+
entry = GetUncachedSymbol(reinterpret_cast<const void *>(address));
|
1448
|
+
if (entry != nullptr) {
|
1449
|
+
return entry;
|
1450
|
+
}
|
1451
|
+
|
1452
|
+
// In some contexts, PA-RISC also uses bit 1 of the address to indicate that
|
1453
|
+
// this is a cross-DSO function pointer. Such function pointers actually
|
1454
|
+
// point to a procedure label, a struct whose first 32-bit (pointer) element
|
1455
|
+
// actually points to the function text. With no symbol found for this
|
1456
|
+
// address so far, try interpreting it as a cross-DSO function pointer and
|
1457
|
+
// see how that goes.
|
1458
|
+
if (pc_bits & 0x2) {
|
1459
|
+
return GetUncachedSymbol(*reinterpret_cast<const void *const *>(address));
|
1460
|
+
}
|
1461
|
+
|
1462
|
+
return nullptr;
|
1463
|
+
}
|
1464
|
+
#else
|
1465
|
+
return GetUncachedSymbol(pc);
|
1466
|
+
#endif
|
1467
|
+
}
|
1468
|
+
|
1430
1469
|
bool RemoveAllSymbolDecorators(void) {
|
1431
1470
|
if (!g_decorators_mu.TryLock()) {
|
1432
1471
|
// Someone else is using decorators. Get out.
|
@@ -30,6 +30,10 @@
|
|
30
30
|
#ifndef ABSL_FUNCTIONAL_BIND_FRONT_H_
|
31
31
|
#define ABSL_FUNCTIONAL_BIND_FRONT_H_
|
32
32
|
|
33
|
+
#if defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L
|
34
|
+
#include <functional> // For std::bind_front.
|
35
|
+
#endif // defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L
|
36
|
+
|
33
37
|
#include "absl/functional/internal/front_binder.h"
|
34
38
|
#include "absl/utility/utility.h"
|
35
39
|
|
@@ -46,7 +50,8 @@ ABSL_NAMESPACE_BEGIN
|
|
46
50
|
// specified. More importantly, it provides more reliable correctness guarantees
|
47
51
|
// than `std::bind()`; while `std::bind()` will silently ignore passing more
|
48
52
|
// parameters than expected, for example, `absl::bind_front()` will report such
|
49
|
-
// mis-uses as errors.
|
53
|
+
// mis-uses as errors. In C++20, `absl::bind_front` is replaced by
|
54
|
+
// `std::bind_front`.
|
50
55
|
//
|
51
56
|
// absl::bind_front(a...) can be seen as storing the results of
|
52
57
|
// std::make_tuple(a...).
|
@@ -170,6 +175,9 @@ ABSL_NAMESPACE_BEGIN
|
|
170
175
|
// // Doesn't copy "hi".
|
171
176
|
// absl::bind_front(Print, absl::string_view(hi))("Chuk");
|
172
177
|
//
|
178
|
+
#if defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L
|
179
|
+
using std::bind_front;
|
180
|
+
#else // defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L
|
173
181
|
template <class F, class... BoundArgs>
|
174
182
|
constexpr functional_internal::bind_front_t<F, BoundArgs...> bind_front(
|
175
183
|
F&& func, BoundArgs&&... args) {
|
@@ -177,6 +185,7 @@ constexpr functional_internal::bind_front_t<F, BoundArgs...> bind_front(
|
|
177
185
|
absl::in_place, absl::forward<F>(func),
|
178
186
|
absl::forward<BoundArgs>(args)...);
|
179
187
|
}
|
188
|
+
#endif // defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L
|
180
189
|
|
181
190
|
ABSL_NAMESPACE_END
|
182
191
|
} // namespace absl
|
@@ -69,7 +69,8 @@ class FunctionRef;
|
|
69
69
|
// An `absl::FunctionRef` is a lightweight wrapper to any invokable object with
|
70
70
|
// a compatible signature. Generally, an `absl::FunctionRef` should only be used
|
71
71
|
// as an argument type and should be preferred as an argument over a const
|
72
|
-
// reference to a `std::function`.
|
72
|
+
// reference to a `std::function`. `absl::FunctionRef` itself does not allocate,
|
73
|
+
// although the wrapped invokable may.
|
73
74
|
//
|
74
75
|
// Example:
|
75
76
|
//
|