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
@@ -14,6 +14,8 @@
|
|
14
14
|
//
|
15
15
|
// absl::base_internal::invoke(f, args...) is an implementation of
|
16
16
|
// INVOKE(f, args...) from section [func.require] of the C++ standard.
|
17
|
+
// When compiled as C++17 and later versions, it is implemented as an alias of
|
18
|
+
// std::invoke.
|
17
19
|
//
|
18
20
|
// [func.require]
|
19
21
|
// Define INVOKE (f, t1, t2, ..., tN) as follows:
|
@@ -35,6 +37,26 @@
|
|
35
37
|
#ifndef ABSL_BASE_INTERNAL_INVOKE_H_
|
36
38
|
#define ABSL_BASE_INTERNAL_INVOKE_H_
|
37
39
|
|
40
|
+
#include "absl/base/config.h"
|
41
|
+
|
42
|
+
#if ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L
|
43
|
+
|
44
|
+
#include <functional>
|
45
|
+
|
46
|
+
namespace absl {
|
47
|
+
ABSL_NAMESPACE_BEGIN
|
48
|
+
namespace base_internal {
|
49
|
+
|
50
|
+
using std::invoke;
|
51
|
+
using std::invoke_result_t;
|
52
|
+
using std::is_invocable_r;
|
53
|
+
|
54
|
+
} // namespace base_internal
|
55
|
+
ABSL_NAMESPACE_END
|
56
|
+
} // namespace absl
|
57
|
+
|
58
|
+
#else // ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L
|
59
|
+
|
38
60
|
#include <algorithm>
|
39
61
|
#include <type_traits>
|
40
62
|
#include <utility>
|
@@ -80,8 +102,18 @@ struct MemFunAndRef : StrippedAccept<MemFunAndRef> {
|
|
80
102
|
static decltype((std::declval<Obj>().*
|
81
103
|
std::declval<MemFun>())(std::declval<Args>()...))
|
82
104
|
Invoke(MemFun&& mem_fun, Obj&& obj, Args&&... args) {
|
105
|
+
// Ignore bogus GCC warnings on this line.
|
106
|
+
// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101436 for similar example.
|
107
|
+
#if ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(11, 0)
|
108
|
+
#pragma GCC diagnostic push
|
109
|
+
#pragma GCC diagnostic ignored "-Warray-bounds"
|
110
|
+
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
111
|
+
#endif
|
83
112
|
return (std::forward<Obj>(obj).*
|
84
113
|
std::forward<MemFun>(mem_fun))(std::forward<Args>(args)...);
|
114
|
+
#if ABSL_INTERNAL_HAVE_MIN_GNUC_VERSION(11, 0)
|
115
|
+
#pragma GCC diagnostic pop
|
116
|
+
#endif
|
85
117
|
}
|
86
118
|
};
|
87
119
|
|
@@ -180,8 +212,30 @@ invoke_result_t<F, Args...> invoke(F&& f, Args&&... args) {
|
|
180
212
|
return Invoker<F, Args...>::type::Invoke(std::forward<F>(f),
|
181
213
|
std::forward<Args>(args)...);
|
182
214
|
}
|
215
|
+
|
216
|
+
template <typename AlwaysVoid, typename, typename, typename...>
|
217
|
+
struct IsInvocableRImpl : std::false_type {};
|
218
|
+
|
219
|
+
template <typename R, typename F, typename... Args>
|
220
|
+
struct IsInvocableRImpl<
|
221
|
+
absl::void_t<absl::base_internal::invoke_result_t<F, Args...> >, R, F,
|
222
|
+
Args...>
|
223
|
+
: std::integral_constant<
|
224
|
+
bool,
|
225
|
+
std::is_convertible<absl::base_internal::invoke_result_t<F, Args...>,
|
226
|
+
R>::value ||
|
227
|
+
std::is_void<R>::value> {};
|
228
|
+
|
229
|
+
// Type trait whose member `value` is true if invoking `F` with `Args` is valid,
|
230
|
+
// and either the return type is convertible to `R`, or `R` is void.
|
231
|
+
// C++11-compatible version of `std::is_invocable_r`.
|
232
|
+
template <typename R, typename F, typename... Args>
|
233
|
+
using is_invocable_r = IsInvocableRImpl<void, R, F, Args...>;
|
234
|
+
|
183
235
|
} // namespace base_internal
|
184
236
|
ABSL_NAMESPACE_END
|
185
237
|
} // namespace absl
|
186
238
|
|
239
|
+
#endif // ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L
|
240
|
+
|
187
241
|
#endif // ABSL_BASE_INTERNAL_INVOKE_H_
|
@@ -0,0 +1,138 @@
|
|
1
|
+
// Copyright 2022 The Abseil Authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef ABSL_BASE_INTERNAL_PREFETCH_H_
|
16
|
+
#define ABSL_BASE_INTERNAL_PREFETCH_H_
|
17
|
+
|
18
|
+
#include "absl/base/config.h"
|
19
|
+
|
20
|
+
#ifdef __SSE__
|
21
|
+
#include <xmmintrin.h>
|
22
|
+
#endif
|
23
|
+
|
24
|
+
#if defined(_MSC_VER) && defined(ABSL_INTERNAL_HAVE_SSE)
|
25
|
+
#include <intrin.h>
|
26
|
+
#pragma intrinsic(_mm_prefetch)
|
27
|
+
#endif
|
28
|
+
|
29
|
+
// Compatibility wrappers around __builtin_prefetch, to prefetch data
|
30
|
+
// for read if supported by the toolchain.
|
31
|
+
|
32
|
+
// Move data into the cache before it is read, or "prefetch" it.
|
33
|
+
//
|
34
|
+
// The value of `addr` is the address of the memory to prefetch. If
|
35
|
+
// the target and compiler support it, data prefetch instructions are
|
36
|
+
// generated. If the prefetch is done some time before the memory is
|
37
|
+
// read, it may be in the cache by the time the read occurs.
|
38
|
+
//
|
39
|
+
// The function names specify the temporal locality heuristic applied,
|
40
|
+
// using the names of Intel prefetch instructions:
|
41
|
+
//
|
42
|
+
// T0 - high degree of temporal locality; data should be left in as
|
43
|
+
// many levels of the cache possible
|
44
|
+
// T1 - moderate degree of temporal locality
|
45
|
+
// T2 - low degree of temporal locality
|
46
|
+
// Nta - no temporal locality, data need not be left in the cache
|
47
|
+
// after the read
|
48
|
+
//
|
49
|
+
// Incorrect or gratuitous use of these functions can degrade
|
50
|
+
// performance, so use them only when representative benchmarks show
|
51
|
+
// an improvement.
|
52
|
+
//
|
53
|
+
// Example usage:
|
54
|
+
//
|
55
|
+
// absl::base_internal::PrefetchT0(addr);
|
56
|
+
//
|
57
|
+
// Currently, the different prefetch calls behave on some Intel
|
58
|
+
// architectures as follows:
|
59
|
+
//
|
60
|
+
// SNB..SKL SKX
|
61
|
+
// PrefetchT0() L1/L2/L3 L1/L2
|
62
|
+
// PrefetchT1() L2/L3 L2
|
63
|
+
// PrefetchT2() L2/L3 L2
|
64
|
+
// PrefetchNta() L1/--/L3 L1*
|
65
|
+
//
|
66
|
+
// * On SKX PrefetchNta() will bring the line into L1 but will evict
|
67
|
+
// from L3 cache. This might result in surprising behavior.
|
68
|
+
//
|
69
|
+
// SNB = Sandy Bridge, SKL = Skylake, SKX = Skylake Xeon.
|
70
|
+
//
|
71
|
+
namespace absl {
|
72
|
+
ABSL_NAMESPACE_BEGIN
|
73
|
+
namespace base_internal {
|
74
|
+
|
75
|
+
void PrefetchT0(const void* addr);
|
76
|
+
void PrefetchT1(const void* addr);
|
77
|
+
void PrefetchT2(const void* addr);
|
78
|
+
void PrefetchNta(const void* addr);
|
79
|
+
|
80
|
+
// Implementation details follow.
|
81
|
+
|
82
|
+
#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
|
83
|
+
|
84
|
+
#define ABSL_INTERNAL_HAVE_PREFETCH 1
|
85
|
+
|
86
|
+
// See __builtin_prefetch:
|
87
|
+
// https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html.
|
88
|
+
//
|
89
|
+
// These functions speculatively load for read only. This is
|
90
|
+
// safe for all currently supported platforms. However, prefetch for
|
91
|
+
// store may have problems depending on the target platform.
|
92
|
+
//
|
93
|
+
inline void PrefetchT0(const void* addr) {
|
94
|
+
// Note: this uses prefetcht0 on Intel.
|
95
|
+
__builtin_prefetch(addr, 0, 3);
|
96
|
+
}
|
97
|
+
inline void PrefetchT1(const void* addr) {
|
98
|
+
// Note: this uses prefetcht1 on Intel.
|
99
|
+
__builtin_prefetch(addr, 0, 2);
|
100
|
+
}
|
101
|
+
inline void PrefetchT2(const void* addr) {
|
102
|
+
// Note: this uses prefetcht2 on Intel.
|
103
|
+
__builtin_prefetch(addr, 0, 1);
|
104
|
+
}
|
105
|
+
inline void PrefetchNta(const void* addr) {
|
106
|
+
// Note: this uses prefetchtnta on Intel.
|
107
|
+
__builtin_prefetch(addr, 0, 0);
|
108
|
+
}
|
109
|
+
|
110
|
+
#elif defined(ABSL_INTERNAL_HAVE_SSE)
|
111
|
+
|
112
|
+
#define ABSL_INTERNAL_HAVE_PREFETCH 1
|
113
|
+
|
114
|
+
inline void PrefetchT0(const void* addr) {
|
115
|
+
_mm_prefetch(reinterpret_cast<const char*>(addr), _MM_HINT_T0);
|
116
|
+
}
|
117
|
+
inline void PrefetchT1(const void* addr) {
|
118
|
+
_mm_prefetch(reinterpret_cast<const char*>(addr), _MM_HINT_T1);
|
119
|
+
}
|
120
|
+
inline void PrefetchT2(const void* addr) {
|
121
|
+
_mm_prefetch(reinterpret_cast<const char*>(addr), _MM_HINT_T2);
|
122
|
+
}
|
123
|
+
inline void PrefetchNta(const void* addr) {
|
124
|
+
_mm_prefetch(reinterpret_cast<const char*>(addr), _MM_HINT_NTA);
|
125
|
+
}
|
126
|
+
|
127
|
+
#else
|
128
|
+
inline void PrefetchT0(const void*) {}
|
129
|
+
inline void PrefetchT1(const void*) {}
|
130
|
+
inline void PrefetchT2(const void*) {}
|
131
|
+
inline void PrefetchNta(const void*) {}
|
132
|
+
#endif
|
133
|
+
|
134
|
+
} // namespace base_internal
|
135
|
+
ABSL_NAMESPACE_END
|
136
|
+
} // namespace absl
|
137
|
+
|
138
|
+
#endif // ABSL_BASE_INTERNAL_PREFETCH_H_
|
@@ -14,15 +14,17 @@
|
|
14
14
|
|
15
15
|
#include "absl/base/internal/raw_logging.h"
|
16
16
|
|
17
|
-
#include <stddef.h>
|
18
17
|
#include <cstdarg>
|
18
|
+
#include <cstddef>
|
19
19
|
#include <cstdio>
|
20
20
|
#include <cstdlib>
|
21
21
|
#include <cstring>
|
22
|
+
#include <string>
|
22
23
|
|
23
24
|
#include "absl/base/attributes.h"
|
24
25
|
#include "absl/base/config.h"
|
25
26
|
#include "absl/base/internal/atomic_hook.h"
|
27
|
+
#include "absl/base/internal/errno_saver.h"
|
26
28
|
#include "absl/base/log_severity.h"
|
27
29
|
|
28
30
|
// We know how to perform low-level writes to stderr in POSIX and Windows. For
|
@@ -36,8 +38,8 @@
|
|
36
38
|
// This preprocessor token is also defined in raw_io.cc. If you need to copy
|
37
39
|
// this, consider moving both to config.h instead.
|
38
40
|
#if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \
|
39
|
-
defined(__Fuchsia__) || defined(__native_client__) ||
|
40
|
-
defined(__EMSCRIPTEN__) || defined(__ASYLO__)
|
41
|
+
defined(__Fuchsia__) || defined(__native_client__) || \
|
42
|
+
defined(__OpenBSD__) || defined(__EMSCRIPTEN__) || defined(__ASYLO__)
|
41
43
|
|
42
44
|
#include <unistd.h>
|
43
45
|
|
@@ -50,7 +52,8 @@
|
|
50
52
|
// ABSL_HAVE_SYSCALL_WRITE is defined when the platform provides the syscall
|
51
53
|
// syscall(SYS_write, /*int*/ fd, /*char* */ buf, /*size_t*/ len);
|
52
54
|
// for low level operations that want to avoid libc.
|
53
|
-
#if (defined(__linux__) || defined(__FreeBSD__)
|
55
|
+
#if (defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__)) && \
|
56
|
+
!defined(__ANDROID__)
|
54
57
|
#include <sys/syscall.h>
|
55
58
|
#define ABSL_HAVE_SYSCALL_WRITE 1
|
56
59
|
#define ABSL_LOW_LEVEL_WRITE_SUPPORTED 1
|
@@ -76,13 +79,6 @@ namespace {
|
|
76
79
|
// Explicitly `#error` out when not `ABSL_LOW_LEVEL_WRITE_SUPPORTED`, except for
|
77
80
|
// a selected set of platforms for which we expect not to be able to raw log.
|
78
81
|
|
79
|
-
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
|
80
|
-
absl::base_internal::AtomicHook<LogPrefixHook>
|
81
|
-
log_prefix_hook;
|
82
|
-
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
|
83
|
-
absl::base_internal::AtomicHook<AbortHook>
|
84
|
-
abort_hook;
|
85
|
-
|
86
82
|
#ifdef ABSL_LOW_LEVEL_WRITE_SUPPORTED
|
87
83
|
constexpr char kTruncated[] = " ... (message truncated)\n";
|
88
84
|
|
@@ -130,6 +126,18 @@ bool DoRawLog(char** buf, int* size, const char* format, ...) {
|
|
130
126
|
return true;
|
131
127
|
}
|
132
128
|
|
129
|
+
bool DefaultLogFilterAndPrefix(absl::LogSeverity, const char* file, int line,
|
130
|
+
char** buf, int* buf_size) {
|
131
|
+
DoRawLog(buf, buf_size, "[%s : %d] RAW: ", file, line);
|
132
|
+
return true;
|
133
|
+
}
|
134
|
+
|
135
|
+
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
|
136
|
+
absl::base_internal::AtomicHook<LogFilterAndPrefixHook>
|
137
|
+
log_filter_and_prefix_hook(DefaultLogFilterAndPrefix);
|
138
|
+
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
|
139
|
+
absl::base_internal::AtomicHook<AbortHook> abort_hook;
|
140
|
+
|
133
141
|
void RawLogVA(absl::LogSeverity severity, const char* file, int line,
|
134
142
|
const char* format, va_list ap) ABSL_PRINTF_ATTRIBUTE(4, 0);
|
135
143
|
void RawLogVA(absl::LogSeverity severity, const char* file, int line,
|
@@ -150,14 +158,7 @@ void RawLogVA(absl::LogSeverity severity, const char* file, int line,
|
|
150
158
|
}
|
151
159
|
#endif
|
152
160
|
|
153
|
-
|
154
|
-
if (log_prefix_hook_ptr) {
|
155
|
-
enabled = log_prefix_hook_ptr(severity, file, line, &buf, &size);
|
156
|
-
} else {
|
157
|
-
if (enabled) {
|
158
|
-
DoRawLog(&buf, &size, "[%s : %d] RAW: ", file, line);
|
159
|
-
}
|
160
|
-
}
|
161
|
+
enabled = log_filter_and_prefix_hook(severity, file, line, &buf, &size);
|
161
162
|
const char* const prefix_end = buf;
|
162
163
|
|
163
164
|
#ifdef ABSL_LOW_LEVEL_WRITE_SUPPORTED
|
@@ -168,11 +169,12 @@ void RawLogVA(absl::LogSeverity severity, const char* file, int line,
|
|
168
169
|
} else {
|
169
170
|
DoRawLog(&buf, &size, "%s", kTruncated);
|
170
171
|
}
|
171
|
-
|
172
|
+
AsyncSignalSafeWriteToStderr(buffer, strlen(buffer));
|
172
173
|
}
|
173
174
|
#else
|
174
175
|
static_cast<void>(format);
|
175
176
|
static_cast<void>(ap);
|
177
|
+
static_cast<void>(enabled);
|
176
178
|
#endif
|
177
179
|
|
178
180
|
// Abort the process after logging a FATAL message, even if the output itself
|
@@ -195,8 +197,11 @@ void DefaultInternalLog(absl::LogSeverity severity, const char* file, int line,
|
|
195
197
|
|
196
198
|
} // namespace
|
197
199
|
|
198
|
-
void
|
200
|
+
void AsyncSignalSafeWriteToStderr(const char* s, size_t len) {
|
201
|
+
absl::base_internal::ErrnoSaver errno_saver;
|
199
202
|
#if defined(ABSL_HAVE_SYSCALL_WRITE)
|
203
|
+
// We prefer calling write via `syscall` to minimize the risk of libc doing
|
204
|
+
// something "helpful".
|
200
205
|
syscall(SYS_write, STDERR_FILENO, s, len);
|
201
206
|
#elif defined(ABSL_HAVE_POSIX_WRITE)
|
202
207
|
write(STDERR_FILENO, s, len);
|
@@ -229,7 +234,9 @@ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES ABSL_DLL
|
|
229
234
|
absl::base_internal::AtomicHook<InternalLogFunction>
|
230
235
|
internal_log_function(DefaultInternalLog);
|
231
236
|
|
232
|
-
void
|
237
|
+
void RegisterLogFilterAndPrefixHook(LogFilterAndPrefixHook func) {
|
238
|
+
log_filter_and_prefix_hook.Store(func);
|
239
|
+
}
|
233
240
|
|
234
241
|
void RegisterAbortHook(AbortHook func) { abort_hook.Store(func); }
|
235
242
|
|
@@ -109,12 +109,9 @@ namespace raw_logging_internal {
|
|
109
109
|
void RawLog(absl::LogSeverity severity, const char* file, int line,
|
110
110
|
const char* format, ...) ABSL_PRINTF_ATTRIBUTE(4, 5);
|
111
111
|
|
112
|
-
// Writes the provided buffer directly to stderr, in a safe, low-level
|
113
|
-
//
|
114
|
-
|
115
|
-
// not malloc. If the platform supports the SYS_write syscall, we invoke that
|
116
|
-
// directly to side-step any libc interception.
|
117
|
-
void SafeWriteToStderr(const char *s, size_t len);
|
112
|
+
// Writes the provided buffer directly to stderr, in a signal-safe, low-level
|
113
|
+
// manner.
|
114
|
+
void AsyncSignalSafeWriteToStderr(const char* s, size_t len);
|
118
115
|
|
119
116
|
// compile-time function to get the "base" filename, that is, the part of
|
120
117
|
// a filename after the last "/" or "\" path separator. The search starts at
|
@@ -148,11 +145,12 @@ bool RawLoggingFullySupported();
|
|
148
145
|
// 'severity' is the severity level of the message being written.
|
149
146
|
// 'file' and 'line' are the file and line number where the ABSL_RAW_LOG macro
|
150
147
|
// was located.
|
151
|
-
// '
|
152
|
-
// hook writes a prefix, it must increment *
|
148
|
+
// 'buf' and 'buf_size' are pointers to the buffer and buffer size. If the
|
149
|
+
// hook writes a prefix, it must increment *buf and decrement *buf_size
|
153
150
|
// accordingly.
|
154
|
-
using
|
155
|
-
|
151
|
+
using LogFilterAndPrefixHook = bool (*)(absl::LogSeverity severity,
|
152
|
+
const char* file, int line, char** buf,
|
153
|
+
int* buf_size);
|
156
154
|
|
157
155
|
// Function type for a raw_logging customization hook called to abort a process
|
158
156
|
// when a FATAL message is logged. If the provided AbortHook() returns, the
|
@@ -162,7 +160,10 @@ using LogPrefixHook = bool (*)(absl::LogSeverity severity, const char* file,
|
|
162
160
|
// was located.
|
163
161
|
// The NUL-terminated logged message lives in the buffer between 'buf_start'
|
164
162
|
// and 'buf_end'. 'prefix_end' points to the first non-prefix character of the
|
165
|
-
// buffer (as written by the
|
163
|
+
// buffer (as written by the LogFilterAndPrefixHook.)
|
164
|
+
//
|
165
|
+
// The lifetime of the filename and message buffers will not end while the
|
166
|
+
// process remains alive.
|
166
167
|
using AbortHook = void (*)(const char* file, int line, const char* buf_start,
|
167
168
|
const char* prefix_end, const char* buf_end);
|
168
169
|
|
@@ -184,7 +185,7 @@ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES ABSL_DLL extern base_internal::AtomicHook<
|
|
184
185
|
//
|
185
186
|
// These functions are safe to call at any point during initialization; they do
|
186
187
|
// not block or malloc, and are async-signal safe.
|
187
|
-
void
|
188
|
+
void RegisterLogFilterAndPrefixHook(LogFilterAndPrefixHook func);
|
188
189
|
void RegisterAbortHook(AbortHook func);
|
189
190
|
void RegisterInternalLogFunction(InternalLogFunction func);
|
190
191
|
|
@@ -19,6 +19,7 @@
|
|
19
19
|
#include <limits>
|
20
20
|
|
21
21
|
#include "absl/base/attributes.h"
|
22
|
+
#include "absl/base/config.h"
|
22
23
|
#include "absl/base/internal/atomic_hook.h"
|
23
24
|
#include "absl/base/internal/cycleclock.h"
|
24
25
|
#include "absl/base/internal/spinlock_wait.h"
|
@@ -66,12 +67,14 @@ void RegisterSpinLockProfiler(void (*fn)(const void *contendedlock,
|
|
66
67
|
submit_profile_data.Store(fn);
|
67
68
|
}
|
68
69
|
|
70
|
+
#ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
|
69
71
|
// Static member variable definitions.
|
70
72
|
constexpr uint32_t SpinLock::kSpinLockHeld;
|
71
73
|
constexpr uint32_t SpinLock::kSpinLockCooperative;
|
72
74
|
constexpr uint32_t SpinLock::kSpinLockDisabledScheduling;
|
73
75
|
constexpr uint32_t SpinLock::kSpinLockSleeper;
|
74
76
|
constexpr uint32_t SpinLock::kWaitTimeMask;
|
77
|
+
#endif
|
75
78
|
|
76
79
|
// Uncommon constructors.
|
77
80
|
SpinLock::SpinLock(base_internal::SchedulingMode mode)
|
@@ -120,6 +120,14 @@ class ABSL_LOCKABLE SpinLock {
|
|
120
120
|
return (lockword_.load(std::memory_order_relaxed) & kSpinLockHeld) != 0;
|
121
121
|
}
|
122
122
|
|
123
|
+
// Return immediately if this thread holds the SpinLock exclusively.
|
124
|
+
// Otherwise, report an error by crashing with a diagnostic.
|
125
|
+
inline void AssertHeld() const ABSL_ASSERT_EXCLUSIVE_LOCK() {
|
126
|
+
if (!IsHeld()) {
|
127
|
+
ABSL_RAW_LOG(FATAL, "thread should hold the lock on SpinLock");
|
128
|
+
}
|
129
|
+
}
|
130
|
+
|
123
131
|
protected:
|
124
132
|
// These should not be exported except for testing.
|
125
133
|
|
@@ -57,13 +57,10 @@ static_assert(sizeof(std::atomic<uint32_t>) == sizeof(int),
|
|
57
57
|
extern "C" {
|
58
58
|
|
59
59
|
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
|
60
|
-
std::atomic<uint32_t> *w, uint32_t value, int
|
60
|
+
std::atomic<uint32_t> *w, uint32_t value, int,
|
61
61
|
absl::base_internal::SchedulingMode) {
|
62
62
|
absl::base_internal::ErrnoSaver errno_saver;
|
63
|
-
|
64
|
-
tm.tv_sec = 0;
|
65
|
-
tm.tv_nsec = absl::base_internal::SpinLockSuggestedDelayNS(loop);
|
66
|
-
syscall(SYS_futex, w, FUTEX_WAIT | FUTEX_PRIVATE_FLAG, value, &tm);
|
63
|
+
syscall(SYS_futex, w, FUTEX_WAIT | FUTEX_PRIVATE_FLAG, value, nullptr);
|
67
64
|
}
|
68
65
|
|
69
66
|
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
|
@@ -0,0 +1,88 @@
|
|
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 "absl/base/internal/strerror.h"
|
16
|
+
|
17
|
+
#include <array>
|
18
|
+
#include <cerrno>
|
19
|
+
#include <cstddef>
|
20
|
+
#include <cstdio>
|
21
|
+
#include <cstring>
|
22
|
+
#include <string>
|
23
|
+
#include <type_traits>
|
24
|
+
|
25
|
+
#include "absl/base/internal/errno_saver.h"
|
26
|
+
|
27
|
+
namespace absl {
|
28
|
+
ABSL_NAMESPACE_BEGIN
|
29
|
+
namespace base_internal {
|
30
|
+
namespace {
|
31
|
+
|
32
|
+
const char* StrErrorAdaptor(int errnum, char* buf, size_t buflen) {
|
33
|
+
#if defined(_WIN32)
|
34
|
+
int rc = strerror_s(buf, buflen, errnum);
|
35
|
+
buf[buflen - 1] = '\0'; // guarantee NUL termination
|
36
|
+
if (rc == 0 && strncmp(buf, "Unknown error", buflen) == 0) *buf = '\0';
|
37
|
+
return buf;
|
38
|
+
#else
|
39
|
+
// The type of `ret` is platform-specific; both of these branches must compile
|
40
|
+
// either way but only one will execute on any given platform:
|
41
|
+
auto ret = strerror_r(errnum, buf, buflen);
|
42
|
+
if (std::is_same<decltype(ret), int>::value) {
|
43
|
+
// XSI `strerror_r`; `ret` is `int`:
|
44
|
+
if (ret) *buf = '\0';
|
45
|
+
return buf;
|
46
|
+
} else {
|
47
|
+
// GNU `strerror_r`; `ret` is `char *`:
|
48
|
+
return reinterpret_cast<const char*>(ret);
|
49
|
+
}
|
50
|
+
#endif
|
51
|
+
}
|
52
|
+
|
53
|
+
std::string StrErrorInternal(int errnum) {
|
54
|
+
char buf[100];
|
55
|
+
const char* str = StrErrorAdaptor(errnum, buf, sizeof buf);
|
56
|
+
if (*str == '\0') {
|
57
|
+
snprintf(buf, sizeof buf, "Unknown error %d", errnum);
|
58
|
+
str = buf;
|
59
|
+
}
|
60
|
+
return str;
|
61
|
+
}
|
62
|
+
|
63
|
+
// kSysNerr is the number of errors from a recent glibc. `StrError()` falls back
|
64
|
+
// to `StrErrorAdaptor()` if the value is larger than this.
|
65
|
+
constexpr int kSysNerr = 135;
|
66
|
+
|
67
|
+
std::array<std::string, kSysNerr>* NewStrErrorTable() {
|
68
|
+
auto* table = new std::array<std::string, kSysNerr>;
|
69
|
+
for (int i = 0; i < static_cast<int>(table->size()); ++i) {
|
70
|
+
(*table)[i] = StrErrorInternal(i);
|
71
|
+
}
|
72
|
+
return table;
|
73
|
+
}
|
74
|
+
|
75
|
+
} // namespace
|
76
|
+
|
77
|
+
std::string StrError(int errnum) {
|
78
|
+
absl::base_internal::ErrnoSaver errno_saver;
|
79
|
+
static const auto* table = NewStrErrorTable();
|
80
|
+
if (errnum >= 0 && errnum < static_cast<int>(table->size())) {
|
81
|
+
return (*table)[errnum];
|
82
|
+
}
|
83
|
+
return StrErrorInternal(errnum);
|
84
|
+
}
|
85
|
+
|
86
|
+
} // namespace base_internal
|
87
|
+
ABSL_NAMESPACE_END
|
88
|
+
} // namespace absl
|
@@ -0,0 +1,39 @@
|
|
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
|
+
#ifndef ABSL_BASE_INTERNAL_STRERROR_H_
|
16
|
+
#define ABSL_BASE_INTERNAL_STRERROR_H_
|
17
|
+
|
18
|
+
#include <string>
|
19
|
+
|
20
|
+
#include "absl/base/config.h"
|
21
|
+
|
22
|
+
namespace absl {
|
23
|
+
ABSL_NAMESPACE_BEGIN
|
24
|
+
namespace base_internal {
|
25
|
+
|
26
|
+
// A portable and thread-safe alternative to C89's `strerror`.
|
27
|
+
//
|
28
|
+
// The C89 specification of `strerror` is not suitable for use in a
|
29
|
+
// multi-threaded application as the returned string may be changed by calls to
|
30
|
+
// `strerror` from another thread. The many non-stdlib alternatives differ
|
31
|
+
// enough in their names, availability, and semantics to justify this wrapper
|
32
|
+
// around them. `errno` will not be modified by a call to `absl::StrError`.
|
33
|
+
std::string StrError(int errnum);
|
34
|
+
|
35
|
+
} // namespace base_internal
|
36
|
+
ABSL_NAMESPACE_END
|
37
|
+
} // namespace absl
|
38
|
+
|
39
|
+
#endif // ABSL_BASE_INTERNAL_STRERROR_H_
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
#include "absl/base/internal/thread_identity.h"
|
16
16
|
|
17
|
-
#
|
17
|
+
#if !defined(_WIN32) || defined(__MINGW32__)
|
18
18
|
#include <pthread.h>
|
19
19
|
#include <signal.h>
|
20
20
|
#endif
|
@@ -56,6 +56,7 @@ void AllocateThreadIdentityKey(ThreadIdentityReclaimerFunction reclaimer) {
|
|
56
56
|
// *different* instances of this ptr.
|
57
57
|
// Apple platforms have the visibility attribute, but issue a compile warning
|
58
58
|
// that protected visibility is unsupported.
|
59
|
+
ABSL_CONST_INIT // Must come before __attribute__((visibility("protected")))
|
59
60
|
#if ABSL_HAVE_ATTRIBUTE(visibility) && !defined(__APPLE__)
|
60
61
|
__attribute__((visibility("protected")))
|
61
62
|
#endif // ABSL_HAVE_ATTRIBUTE(visibility) && !defined(__APPLE__)
|
@@ -24,8 +24,13 @@
|
|
24
24
|
#ifdef __GLIBC__
|
25
25
|
#include <sys/platform/ppc.h>
|
26
26
|
#elif defined(__FreeBSD__)
|
27
|
-
|
27
|
+
// clang-format off
|
28
|
+
// This order does actually matter =(.
|
28
29
|
#include <sys/types.h>
|
30
|
+
#include <sys/sysctl.h>
|
31
|
+
// clang-format on
|
32
|
+
|
33
|
+
#include "absl/base/call_once.h"
|
29
34
|
#endif
|
30
35
|
#endif
|
31
36
|
|
@@ -49,12 +54,6 @@ double UnscaledCycleClock::Frequency() {
|
|
49
54
|
|
50
55
|
#elif defined(__x86_64__)
|
51
56
|
|
52
|
-
int64_t UnscaledCycleClock::Now() {
|
53
|
-
uint64_t low, high;
|
54
|
-
__asm__ volatile("rdtsc" : "=a"(low), "=d"(high));
|
55
|
-
return (high << 32) | low;
|
56
|
-
}
|
57
|
-
|
58
57
|
double UnscaledCycleClock::Frequency() {
|
59
58
|
return base_internal::NominalCPUFrequency();
|
60
59
|
}
|
@@ -47,7 +47,7 @@
|
|
47
47
|
// The following platforms have an implementation of a hardware counter.
|
48
48
|
#if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
|
49
49
|
defined(__powerpc__) || defined(__ppc__) || defined(__riscv) || \
|
50
|
-
defined(_M_IX86) || defined(_M_X64)
|
50
|
+
defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))
|
51
51
|
#define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
|
52
52
|
#else
|
53
53
|
#define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 0
|
@@ -59,8 +59,7 @@
|
|
59
59
|
// CycleClock that runs at atleast 1 MHz. We've found some Android
|
60
60
|
// ARM64 devices where this is not the case, so we disable it by
|
61
61
|
// default on Android ARM64.
|
62
|
-
#if defined(__native_client__) ||
|
63
|
-
(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || \
|
62
|
+
#if defined(__native_client__) || (defined(__APPLE__)) || \
|
64
63
|
(defined(__ANDROID__) && defined(__aarch64__))
|
65
64
|
#define ABSL_USE_UNSCALED_CYCLECLOCK_DEFAULT 0
|
66
65
|
#else
|
@@ -115,6 +114,16 @@ class UnscaledCycleClock {
|
|
115
114
|
friend class base_internal::UnscaledCycleClockWrapperForInitializeFrequency;
|
116
115
|
};
|
117
116
|
|
117
|
+
#if defined(__x86_64__)
|
118
|
+
|
119
|
+
inline int64_t UnscaledCycleClock::Now() {
|
120
|
+
uint64_t low, high;
|
121
|
+
__asm__ volatile("rdtsc" : "=a"(low), "=d"(high));
|
122
|
+
return (high << 32) | low;
|
123
|
+
}
|
124
|
+
|
125
|
+
#endif
|
126
|
+
|
118
127
|
} // namespace base_internal
|
119
128
|
ABSL_NAMESPACE_END
|
120
129
|
} // namespace absl
|