grpc 1.37.1 → 1.38.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 +64 -58
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/channel_args.h +28 -0
- data/include/grpc/event_engine/event_engine.h +336 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/event_engine/slice_allocator.h +81 -0
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security_constants.h +14 -0
- data/include/grpc/impl/codegen/grpc_types.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +5 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +101 -93
- data/src/core/ext/xds/xds_api.h +6 -6
- data/src/core/ext/xds/xds_bootstrap.cc +97 -159
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +310 -178
- data/src/core/ext/xds/xds_client.h +41 -27
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +10 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +21 -13
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/event_engine/slice_allocator.cc +59 -0
- data/src/core/lib/event_engine/sockaddr.cc +38 -0
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +180 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/exec_ctx.cc +4 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +5 -5
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +3 -3
- data/src/core/lib/iomgr/resolve_address.h +6 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +11 -10
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +36 -34
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
- data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/matchers/matchers.cc +39 -39
- data/src/core/lib/matchers/matchers.h +28 -28
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +33 -32
- data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/surface/call.cc +46 -45
- data/src/core/lib/surface/call.h +2 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +46 -47
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +28 -22
- data/src/core/lib/surface/server.h +16 -15
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +19 -8
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/tsi/alts/crypt/gsec.h +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +477 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +68 -45
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -67,28 +67,32 @@
|
|
67
67
|
#undef ABSL_HAVE_RAW_IO
|
68
68
|
#endif
|
69
69
|
|
70
|
+
namespace absl {
|
71
|
+
ABSL_NAMESPACE_BEGIN
|
72
|
+
namespace raw_logging_internal {
|
73
|
+
namespace {
|
74
|
+
|
70
75
|
// TODO(gfalcon): We want raw-logging to work on as many platforms as possible.
|
71
|
-
// Explicitly
|
72
|
-
// selected set of platforms for which we expect not to be able to raw log.
|
76
|
+
// Explicitly `#error` out when not `ABSL_LOW_LEVEL_WRITE_SUPPORTED`, except for
|
77
|
+
// a selected set of platforms for which we expect not to be able to raw log.
|
73
78
|
|
74
|
-
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
|
75
|
-
absl::
|
76
|
-
|
77
|
-
ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
|
78
|
-
absl::
|
79
|
-
|
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;
|
80
85
|
|
81
86
|
#ifdef ABSL_LOW_LEVEL_WRITE_SUPPORTED
|
82
|
-
|
87
|
+
constexpr char kTruncated[] = " ... (message truncated)\n";
|
83
88
|
|
84
89
|
// sprintf the format to the buffer, adjusting *buf and *size to reflect the
|
85
90
|
// consumed bytes, and return whether the message fit without truncation. If
|
86
91
|
// truncation occurred, if possible leave room in the buffer for the message
|
87
92
|
// kTruncated[].
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
const char* format, va_list ap) {
|
93
|
+
bool VADoRawLog(char** buf, int* size, const char* format, va_list ap)
|
94
|
+
ABSL_PRINTF_ATTRIBUTE(3, 0);
|
95
|
+
bool VADoRawLog(char** buf, int* size, const char* format, va_list ap) {
|
92
96
|
int n = vsnprintf(*buf, *size, format, ap);
|
93
97
|
bool result = true;
|
94
98
|
if (n < 0 || n > *size) {
|
@@ -96,7 +100,7 @@ inline static bool VADoRawLog(char** buf, int* size,
|
|
96
100
|
if (static_cast<size_t>(*size) > sizeof(kTruncated)) {
|
97
101
|
n = *size - sizeof(kTruncated); // room for truncation message
|
98
102
|
} else {
|
99
|
-
n = 0;
|
103
|
+
n = 0; // no room for truncation message
|
100
104
|
}
|
101
105
|
}
|
102
106
|
*size -= n;
|
@@ -105,9 +109,7 @@ inline static bool VADoRawLog(char** buf, int* size,
|
|
105
109
|
}
|
106
110
|
#endif // ABSL_LOW_LEVEL_WRITE_SUPPORTED
|
107
111
|
|
108
|
-
|
109
|
-
|
110
|
-
namespace {
|
112
|
+
constexpr int kLogBufSize = 3000;
|
111
113
|
|
112
114
|
// CAVEAT: vsnprintf called from *DoRawLog below has some (exotic) code paths
|
113
115
|
// that invoke malloc() and getenv() that might acquire some locks.
|
@@ -166,7 +168,7 @@ void RawLogVA(absl::LogSeverity severity, const char* file, int line,
|
|
166
168
|
} else {
|
167
169
|
DoRawLog(&buf, &size, "%s", kTruncated);
|
168
170
|
}
|
169
|
-
|
171
|
+
SafeWriteToStderr(buffer, strlen(buffer));
|
170
172
|
}
|
171
173
|
#else
|
172
174
|
static_cast<void>(format);
|
@@ -181,11 +183,18 @@ void RawLogVA(absl::LogSeverity severity, const char* file, int line,
|
|
181
183
|
}
|
182
184
|
}
|
183
185
|
|
186
|
+
// Non-formatting version of RawLog().
|
187
|
+
//
|
188
|
+
// TODO(gfalcon): When string_view no longer depends on base, change this
|
189
|
+
// interface to take its message as a string_view instead.
|
190
|
+
void DefaultInternalLog(absl::LogSeverity severity, const char* file, int line,
|
191
|
+
const std::string& message) {
|
192
|
+
RawLog(severity, file, line, "%.*s", static_cast<int>(message.size()),
|
193
|
+
message.data());
|
194
|
+
}
|
195
|
+
|
184
196
|
} // namespace
|
185
197
|
|
186
|
-
namespace absl {
|
187
|
-
ABSL_NAMESPACE_BEGIN
|
188
|
-
namespace raw_logging_internal {
|
189
198
|
void SafeWriteToStderr(const char *s, size_t len) {
|
190
199
|
#if defined(ABSL_HAVE_SYSCALL_WRITE)
|
191
200
|
syscall(SYS_write, STDERR_FILENO, s, len);
|
@@ -200,8 +209,6 @@ void SafeWriteToStderr(const char *s, size_t len) {
|
|
200
209
|
#endif
|
201
210
|
}
|
202
211
|
|
203
|
-
void RawLog(absl::LogSeverity severity, const char* file, int line,
|
204
|
-
const char* format, ...) ABSL_PRINTF_ATTRIBUTE(4, 5);
|
205
212
|
void RawLog(absl::LogSeverity severity, const char* file, int line,
|
206
213
|
const char* format, ...) {
|
207
214
|
va_list ap;
|
@@ -210,15 +217,6 @@ void RawLog(absl::LogSeverity severity, const char* file, int line,
|
|
210
217
|
va_end(ap);
|
211
218
|
}
|
212
219
|
|
213
|
-
// Non-formatting version of RawLog().
|
214
|
-
//
|
215
|
-
// TODO(gfalcon): When string_view no longer depends on base, change this
|
216
|
-
// interface to take its message as a string_view instead.
|
217
|
-
static void DefaultInternalLog(absl::LogSeverity severity, const char* file,
|
218
|
-
int line, const std::string& message) {
|
219
|
-
RawLog(severity, file, line, "%s", message.c_str());
|
220
|
-
}
|
221
|
-
|
222
220
|
bool RawLoggingFullySupported() {
|
223
221
|
#ifdef ABSL_LOW_LEVEL_WRITE_SUPPORTED
|
224
222
|
return true;
|
@@ -231,6 +229,10 @@ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES ABSL_DLL
|
|
231
229
|
absl::base_internal::AtomicHook<InternalLogFunction>
|
232
230
|
internal_log_function(DefaultInternalLog);
|
233
231
|
|
232
|
+
void RegisterLogPrefixHook(LogPrefixHook func) { log_prefix_hook.Store(func); }
|
233
|
+
|
234
|
+
void RegisterAbortHook(AbortHook func) { abort_hook.Store(func); }
|
235
|
+
|
234
236
|
void RegisterInternalLogFunction(InternalLogFunction func) {
|
235
237
|
internal_log_function.Store(func);
|
236
238
|
}
|
@@ -72,12 +72,14 @@
|
|
72
72
|
//
|
73
73
|
// The API is a subset of the above: each macro only takes two arguments. Use
|
74
74
|
// StrCat if you need to build a richer message.
|
75
|
-
#define ABSL_INTERNAL_LOG(severity, message)
|
76
|
-
do {
|
77
|
-
constexpr const char* absl_raw_logging_internal_filename = __FILE__;
|
78
|
-
::absl::raw_logging_internal::internal_log_function(
|
79
|
-
ABSL_RAW_LOGGING_INTERNAL_##severity,
|
80
|
-
absl_raw_logging_internal_filename, __LINE__, message);
|
75
|
+
#define ABSL_INTERNAL_LOG(severity, message) \
|
76
|
+
do { \
|
77
|
+
constexpr const char* absl_raw_logging_internal_filename = __FILE__; \
|
78
|
+
::absl::raw_logging_internal::internal_log_function( \
|
79
|
+
ABSL_RAW_LOGGING_INTERNAL_##severity, \
|
80
|
+
absl_raw_logging_internal_filename, __LINE__, message); \
|
81
|
+
if (ABSL_RAW_LOGGING_INTERNAL_##severity == ::absl::LogSeverity::kFatal) \
|
82
|
+
ABSL_INTERNAL_UNREACHABLE; \
|
81
83
|
} while (0)
|
82
84
|
|
83
85
|
#define ABSL_INTERNAL_CHECK(condition, message) \
|
@@ -176,6 +178,14 @@ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES ABSL_DLL extern base_internal::AtomicHook<
|
|
176
178
|
InternalLogFunction>
|
177
179
|
internal_log_function;
|
178
180
|
|
181
|
+
// Registers hooks of the above types. Only a single hook of each type may be
|
182
|
+
// registered. It is an error to call these functions multiple times with
|
183
|
+
// different input arguments.
|
184
|
+
//
|
185
|
+
// These functions are safe to call at any point during initialization; they do
|
186
|
+
// not block or malloc, and are async-signal safe.
|
187
|
+
void RegisterLogPrefixHook(LogPrefixHook func);
|
188
|
+
void RegisterAbortHook(AbortHook func);
|
179
189
|
void RegisterInternalLogFunction(InternalLogFunction func);
|
180
190
|
|
181
191
|
} // namespace raw_logging_internal
|
@@ -125,8 +125,9 @@ void SpinLock::SlowLock() {
|
|
125
125
|
// it as having a sleeper.
|
126
126
|
if ((lock_value & kWaitTimeMask) == 0) {
|
127
127
|
// Here, just "mark" that the thread is going to sleep. Don't store the
|
128
|
-
// lock wait time in the lock
|
129
|
-
//
|
128
|
+
// lock wait time in the lock -- the lock word stores the amount of time
|
129
|
+
// that the current holder waited before acquiring the lock, not the wait
|
130
|
+
// time of any thread currently waiting to acquire it.
|
130
131
|
if (lockword_.compare_exchange_strong(
|
131
132
|
lock_value, lock_value | kSpinLockSleeper,
|
132
133
|
std::memory_order_relaxed, std::memory_order_relaxed)) {
|
@@ -140,6 +141,14 @@ void SpinLock::SlowLock() {
|
|
140
141
|
// this thread obtains the lock.
|
141
142
|
lock_value = TryLockInternal(lock_value, wait_cycles);
|
142
143
|
continue; // Skip the delay at the end of the loop.
|
144
|
+
} else if ((lock_value & kWaitTimeMask) == 0) {
|
145
|
+
// The lock is still held, without a waiter being marked, but something
|
146
|
+
// else about the lock word changed, causing our CAS to fail. For
|
147
|
+
// example, a new lock holder may have acquired the lock with
|
148
|
+
// kSpinLockDisabledScheduling set, whereas the previous holder had not
|
149
|
+
// set that flag. In this case, attempt again to mark ourselves as a
|
150
|
+
// waiter.
|
151
|
+
continue;
|
143
152
|
}
|
144
153
|
}
|
145
154
|
|
@@ -15,11 +15,8 @@
|
|
15
15
|
//
|
16
16
|
|
17
17
|
// Most users requiring mutual exclusion should use Mutex.
|
18
|
-
// SpinLock is provided for use in
|
18
|
+
// SpinLock is provided for use in two situations:
|
19
19
|
// - for use in code that Mutex itself depends on
|
20
|
-
// - to get a faster fast-path release under low contention (without an
|
21
|
-
// atomic read-modify-write) In return, SpinLock has worse behaviour under
|
22
|
-
// contention, which is why Mutex is preferred in most situations.
|
23
20
|
// - for async signal safety (see below)
|
24
21
|
|
25
22
|
// SpinLock is async signal safe. If a spinlock is used within a signal
|
@@ -140,8 +137,20 @@ class ABSL_LOCKABLE SpinLock {
|
|
140
137
|
//
|
141
138
|
// bit[0] encodes whether a lock is being held.
|
142
139
|
// bit[1] encodes whether a lock uses cooperative scheduling.
|
143
|
-
// bit[2] encodes whether
|
140
|
+
// bit[2] encodes whether the current lock holder disabled scheduling when
|
141
|
+
// acquiring the lock. Only set when kSpinLockHeld is also set.
|
144
142
|
// bit[3:31] encodes time a lock spent on waiting as a 29-bit unsigned int.
|
143
|
+
// This is set by the lock holder to indicate how long it waited on
|
144
|
+
// the lock before eventually acquiring it. The number of cycles is
|
145
|
+
// encoded as a 29-bit unsigned int, or in the case that the current
|
146
|
+
// holder did not wait but another waiter is queued, the LSB
|
147
|
+
// (kSpinLockSleeper) is set. The implementation does not explicitly
|
148
|
+
// track the number of queued waiters beyond this. It must always be
|
149
|
+
// assumed that waiters may exist if the current holder was required to
|
150
|
+
// queue.
|
151
|
+
//
|
152
|
+
// Invariant: if the lock is not held, the value is either 0 or
|
153
|
+
// kSpinLockCooperative.
|
145
154
|
static constexpr uint32_t kSpinLockHeld = 1;
|
146
155
|
static constexpr uint32_t kSpinLockCooperative = 2;
|
147
156
|
static constexpr uint32_t kSpinLockDisabledScheduling = 4;
|
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
extern "C" {
|
22
22
|
|
23
|
-
ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
|
23
|
+
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
|
24
24
|
std::atomic<uint32_t>* /* lock_word */, uint32_t /* value */,
|
25
25
|
int /* loop */, absl::base_internal::SchedulingMode /* mode */) {
|
26
26
|
// In Akaros, one must take care not to call anything that could cause a
|
@@ -29,7 +29,7 @@ ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
|
|
29
29
|
// arbitrary code.
|
30
30
|
}
|
31
31
|
|
32
|
-
ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockWake(
|
32
|
+
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
|
33
33
|
std::atomic<uint32_t>* /* lock_word */, bool /* all */) {}
|
34
34
|
|
35
35
|
} // extern "C"
|
@@ -56,7 +56,7 @@ static_assert(sizeof(std::atomic<uint32_t>) == sizeof(int),
|
|
56
56
|
|
57
57
|
extern "C" {
|
58
58
|
|
59
|
-
ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
|
59
|
+
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
|
60
60
|
std::atomic<uint32_t> *w, uint32_t value, int loop,
|
61
61
|
absl::base_internal::SchedulingMode) {
|
62
62
|
absl::base_internal::ErrnoSaver errno_saver;
|
@@ -66,8 +66,8 @@ ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
|
|
66
66
|
syscall(SYS_futex, w, FUTEX_WAIT | FUTEX_PRIVATE_FLAG, value, &tm);
|
67
67
|
}
|
68
68
|
|
69
|
-
ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockWake(
|
70
|
-
|
69
|
+
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
|
70
|
+
std::atomic<uint32_t> *w, bool all) {
|
71
71
|
syscall(SYS_futex, w, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, all ? INT_MAX : 1, 0);
|
72
72
|
}
|
73
73
|
|
@@ -25,7 +25,7 @@
|
|
25
25
|
|
26
26
|
extern "C" {
|
27
27
|
|
28
|
-
ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
|
28
|
+
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
|
29
29
|
std::atomic<uint32_t>* /* lock_word */, uint32_t /* value */, int loop,
|
30
30
|
absl::base_internal::SchedulingMode /* mode */) {
|
31
31
|
absl::base_internal::ErrnoSaver errno_saver;
|
@@ -40,7 +40,7 @@ ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
|
|
40
40
|
}
|
41
41
|
}
|
42
42
|
|
43
|
-
ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockWake(
|
43
|
+
ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
|
44
44
|
std::atomic<uint32_t>* /* lock_word */, bool /* all */) {}
|
45
45
|
|
46
46
|
} // extern "C"
|
@@ -43,18 +43,16 @@ uint32_t SpinLockWait(std::atomic<uint32_t> *w, int n,
|
|
43
43
|
const SpinLockWaitTransition trans[],
|
44
44
|
SchedulingMode scheduling_mode);
|
45
45
|
|
46
|
-
// If possible, wake some thread that has called SpinLockDelay(w, ...). If
|
47
|
-
//
|
48
|
-
// systems
|
49
|
-
//
|
46
|
+
// If possible, wake some thread that has called SpinLockDelay(w, ...). If `all`
|
47
|
+
// is true, wake all such threads. On some systems, this may be a no-op; on
|
48
|
+
// those systems, threads calling SpinLockDelay() will always wake eventually
|
49
|
+
// even if SpinLockWake() is never called.
|
50
50
|
void SpinLockWake(std::atomic<uint32_t> *w, bool all);
|
51
51
|
|
52
52
|
// Wait for an appropriate spin delay on iteration "loop" of a
|
53
53
|
// spin loop on location *w, whose previously observed value was "value".
|
54
54
|
// SpinLockDelay() may do nothing, may yield the CPU, may sleep a clock tick,
|
55
|
-
// or may wait for a
|
56
|
-
// In all cases, it must return in bounded time even if SpinLockWake() is not
|
57
|
-
// called.
|
55
|
+
// or may wait for a call to SpinLockWake(w).
|
58
56
|
void SpinLockDelay(std::atomic<uint32_t> *w, uint32_t value, int loop,
|
59
57
|
base_internal::SchedulingMode scheduling_mode);
|
60
58
|
|
@@ -73,21 +71,23 @@ ABSL_NAMESPACE_END
|
|
73
71
|
// By changing our extension points to be extern "C", we dodge this
|
74
72
|
// check.
|
75
73
|
extern "C" {
|
76
|
-
void AbslInternalSpinLockWake(std::atomic<uint32_t> *w,
|
77
|
-
|
74
|
+
void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(std::atomic<uint32_t> *w,
|
75
|
+
bool all);
|
76
|
+
void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
|
78
77
|
std::atomic<uint32_t> *w, uint32_t value, int loop,
|
79
78
|
absl::base_internal::SchedulingMode scheduling_mode);
|
80
79
|
}
|
81
80
|
|
82
81
|
inline void absl::base_internal::SpinLockWake(std::atomic<uint32_t> *w,
|
83
82
|
bool all) {
|
84
|
-
AbslInternalSpinLockWake(w, all);
|
83
|
+
ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(w, all);
|
85
84
|
}
|
86
85
|
|
87
86
|
inline void absl::base_internal::SpinLockDelay(
|
88
87
|
std::atomic<uint32_t> *w, uint32_t value, int loop,
|
89
88
|
absl::base_internal::SchedulingMode scheduling_mode) {
|
90
|
-
AbslInternalSpinLockDelay
|
89
|
+
ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)
|
90
|
+
(w, value, loop, scheduling_mode);
|
91
91
|
}
|
92
92
|
|
93
93
|
#endif // ABSL_BASE_INTERNAL_SPINLOCK_WAIT_H_
|
@@ -20,9 +20,9 @@
|
|
20
20
|
|
21
21
|
extern "C" {
|
22
22
|
|
23
|
-
void AbslInternalSpinLockDelay(
|
24
|
-
|
25
|
-
|
23
|
+
void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
|
24
|
+
std::atomic<uint32_t>* /* lock_word */, uint32_t /* value */, int loop,
|
25
|
+
absl::base_internal::SchedulingMode /* mode */) {
|
26
26
|
if (loop == 0) {
|
27
27
|
} else if (loop == 1) {
|
28
28
|
Sleep(0);
|
@@ -31,7 +31,7 @@ void AbslInternalSpinLockDelay(std::atomic<uint32_t>* /* lock_word */,
|
|
31
31
|
}
|
32
32
|
}
|
33
33
|
|
34
|
-
void AbslInternalSpinLockWake(
|
35
|
-
|
34
|
+
void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
|
35
|
+
std::atomic<uint32_t>* /* lock_word */, bool /* all */) {}
|
36
36
|
|
37
37
|
} // extern "C"
|
@@ -426,7 +426,7 @@ pid_t GetTID() {
|
|
426
426
|
// userspace construct) to avoid unnecessary system calls. Without this caching,
|
427
427
|
// it can take roughly 98ns, while it takes roughly 1ns with this caching.
|
428
428
|
pid_t GetCachedTID() {
|
429
|
-
#
|
429
|
+
#ifdef ABSL_HAVE_THREAD_LOCAL
|
430
430
|
static thread_local pid_t thread_id = GetTID();
|
431
431
|
return thread_id;
|
432
432
|
#else
|
@@ -23,6 +23,7 @@
|
|
23
23
|
#include <cassert>
|
24
24
|
#include <memory>
|
25
25
|
|
26
|
+
#include "absl/base/attributes.h"
|
26
27
|
#include "absl/base/call_once.h"
|
27
28
|
#include "absl/base/internal/raw_logging.h"
|
28
29
|
#include "absl/base/internal/spinlock.h"
|
@@ -53,9 +54,11 @@ void AllocateThreadIdentityKey(ThreadIdentityReclaimerFunction reclaimer) {
|
|
53
54
|
// exist within a process (via dlopen() or similar), references to
|
54
55
|
// thread_identity_ptr from each instance of the code will refer to
|
55
56
|
// *different* instances of this ptr.
|
56
|
-
|
57
|
+
// Apple platforms have the visibility attribute, but issue a compile warning
|
58
|
+
// that protected visibility is unsupported.
|
59
|
+
#if ABSL_HAVE_ATTRIBUTE(visibility) && !defined(__APPLE__)
|
57
60
|
__attribute__((visibility("protected")))
|
58
|
-
#endif //
|
61
|
+
#endif // ABSL_HAVE_ATTRIBUTE(visibility) && !defined(__APPLE__)
|
59
62
|
#if ABSL_PER_THREAD_TLS
|
60
63
|
// Prefer __thread to thread_local as benchmarks indicate it is a bit faster.
|
61
64
|
ABSL_PER_THREAD_TLS_KEYWORD ThreadIdentity* thread_identity_ptr = nullptr;
|
@@ -32,6 +32,7 @@
|
|
32
32
|
|
33
33
|
#include "absl/base/config.h"
|
34
34
|
#include "absl/base/internal/per_thread_tls.h"
|
35
|
+
#include "absl/base/optimization.h"
|
35
36
|
|
36
37
|
namespace absl {
|
37
38
|
ABSL_NAMESPACE_BEGIN
|
@@ -69,30 +70,28 @@ struct PerThreadSynch {
|
|
69
70
|
// is using this PerThreadSynch as a terminator. Its
|
70
71
|
// skip field must not be filled in because the loop
|
71
72
|
// might then skip over the terminator.
|
72
|
-
|
73
|
-
//
|
74
|
-
//
|
75
|
-
//
|
76
|
-
//
|
77
|
-
//
|
78
|
-
|
79
|
-
//
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
//
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
// When priority will next be read (cycles).
|
95
|
-
int64_t next_priority_read_cycles;
|
73
|
+
bool wake; // This thread is to be woken from a Mutex.
|
74
|
+
// If "x" is on a waiter list for a mutex, "x->cond_waiter" is true iff the
|
75
|
+
// waiter is waiting on the mutex as part of a CV Wait or Mutex Await.
|
76
|
+
//
|
77
|
+
// The value of "x->cond_waiter" is meaningless if "x" is not on a
|
78
|
+
// Mutex waiter list.
|
79
|
+
bool cond_waiter;
|
80
|
+
bool maybe_unlocking; // Valid at head of Mutex waiter queue;
|
81
|
+
// true if UnlockSlow could be searching
|
82
|
+
// for a waiter to wake. Used for an optimization
|
83
|
+
// in Enqueue(). true is always a valid value.
|
84
|
+
// Can be reset to false when the unlocker or any
|
85
|
+
// writer releases the lock, or a reader fully
|
86
|
+
// releases the lock. It may not be set to false
|
87
|
+
// by a reader that decrements the count to
|
88
|
+
// non-zero. protected by mutex spinlock
|
89
|
+
bool suppress_fatal_errors; // If true, try to proceed even in the face
|
90
|
+
// of broken invariants. This is used within
|
91
|
+
// fatal signal handlers to improve the
|
92
|
+
// chances of debug logging information being
|
93
|
+
// output successfully.
|
94
|
+
int priority; // Priority of thread (updated every so often).
|
96
95
|
|
97
96
|
// State values:
|
98
97
|
// kAvailable: This PerThreadSynch is available.
|
@@ -111,30 +110,30 @@ struct PerThreadSynch {
|
|
111
110
|
};
|
112
111
|
std::atomic<State> state;
|
113
112
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
113
|
+
// The wait parameters of the current wait. waitp is null if the
|
114
|
+
// thread is not waiting. Transitions from null to non-null must
|
115
|
+
// occur before the enqueue commit point (state = kQueued in
|
116
|
+
// Enqueue() and CondVarEnqueue()). Transitions from non-null to
|
117
|
+
// null must occur after the wait is finished (state = kAvailable in
|
118
|
+
// Mutex::Block() and CondVar::WaitCommon()). This field may be
|
119
|
+
// changed only by the thread that describes this PerThreadSynch. A
|
120
|
+
// special case is Fer(), which calls Enqueue() on another thread,
|
121
|
+
// but with an identical SynchWaitParams pointer, thus leaving the
|
122
|
+
// pointer unchanged.
|
123
|
+
SynchWaitParams* waitp;
|
123
124
|
|
124
|
-
|
125
|
+
intptr_t readers; // Number of readers in mutex.
|
125
126
|
|
126
|
-
//
|
127
|
-
|
128
|
-
//
|
129
|
-
// The value of "x->cond_waiter" is meaningless if "x" is not on a
|
130
|
-
// Mutex waiter list.
|
131
|
-
bool cond_waiter;
|
127
|
+
// When priority will next be read (cycles).
|
128
|
+
int64_t next_priority_read_cycles;
|
132
129
|
|
133
130
|
// Locks held; used during deadlock detection.
|
134
131
|
// Allocated in Synch_GetAllLocks() and freed in ReclaimThreadIdentity().
|
135
132
|
SynchLocksHeld *all_locks;
|
136
133
|
};
|
137
134
|
|
135
|
+
// The instances of this class are allocated in NewThreadIdentity() with an
|
136
|
+
// alignment of PerThreadSynch::kAlignment.
|
138
137
|
struct ThreadIdentity {
|
139
138
|
// Must be the first member. The Mutex implementation requires that
|
140
139
|
// the PerThreadSynch object associated with each thread is
|
@@ -144,7 +143,7 @@ struct ThreadIdentity {
|
|
144
143
|
|
145
144
|
// Private: Reserved for absl::synchronization_internal::Waiter.
|
146
145
|
struct WaiterState {
|
147
|
-
char data[128];
|
146
|
+
alignas(void*) char data[128];
|
148
147
|
} waiter_state;
|
149
148
|
|
150
149
|
// Used by PerThreadSem::{Get,Set}ThreadBlockedCounter().
|
@@ -212,7 +211,9 @@ void ClearCurrentThreadIdentity();
|
|
212
211
|
#define ABSL_THREAD_IDENTITY_MODE ABSL_FORCE_THREAD_IDENTITY_MODE
|
213
212
|
#elif defined(_WIN32) && !defined(__MINGW32__)
|
214
213
|
#define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_CPP11
|
215
|
-
#elif
|
214
|
+
#elif defined(__APPLE__) && defined(ABSL_HAVE_THREAD_LOCAL)
|
215
|
+
#define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_CPP11
|
216
|
+
#elif ABSL_PER_THREAD_TLS && defined(__GOOGLE_GRTE_VERSION__) && \
|
216
217
|
(__GOOGLE_GRTE_VERSION__ >= 20140228L)
|
217
218
|
// Support for async-safe TLS was specifically added in GRTEv4. It's not
|
218
219
|
// present in the upstream eglibc.
|