grpc 1.52.0 → 1.53.0.pre2
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 +50 -5
- data/include/grpc/event_engine/event_engine.h +24 -2
- data/include/grpc/event_engine/slice_buffer.h +13 -1
- data/include/grpc/impl/grpc_types.h +3 -0
- data/include/grpc/support/time.h +6 -4
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +148 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +52 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_provider.h +29 -0
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +3 -3
- data/src/core/ext/filters/channel_idle/idle_filter_state.h +3 -3
- data/src/core/ext/filters/client_channel/backend_metric.h +3 -3
- data/src/core/ext/filters/client_channel/backup_poller.h +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +29 -33
- data/src/core/ext/filters/client_channel/client_channel.h +3 -3
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +3 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +3 -3
- data/src/core/ext/filters/client_channel/client_channel_service_config.h +3 -3
- data/src/core/ext/filters/client_channel/config_selector.h +3 -3
- data/src/core/ext/filters/client_channel/connector.h +8 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -3
- data/src/core/ext/filters/client_channel/lb_call_state_internal.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +1 -78
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric_internal.h +117 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +128 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.h +71 -0
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +972 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +3 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +12 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +275 -107
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +10 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +5 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +3 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +3 -3
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +3 -3
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -7
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -3
- data/src/core/ext/filters/client_channel/retry_filter.cc +10 -13
- data/src/core/ext/filters/client_channel/retry_filter.h +3 -3
- data/src/core/ext/filters/client_channel/retry_service_config.h +3 -3
- data/src/core/ext/filters/client_channel/retry_throttle.h +3 -3
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +4 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +5 -1
- data/src/core/ext/filters/client_channel/subchannel.h +3 -3
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +3 -3
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +3 -3
- data/src/core/ext/filters/deadline/deadline_filter.cc +40 -48
- data/src/core/ext/filters/deadline/deadline_filter.h +6 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +3 -3
- data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +3 -3
- data/src/core/ext/filters/http/client/http_client_filter.cc +26 -21
- data/src/core/ext/filters/http/client/http_client_filter.h +3 -3
- data/src/core/ext/filters/http/client_authority_filter.h +3 -3
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +109 -117
- data/src/core/ext/filters/http/message_compress/compression_filter.h +17 -10
- data/src/core/ext/filters/http/server/http_server_filter.cc +25 -24
- data/src/core/ext/filters/http/server/http_server_filter.h +3 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +2 -1
- data/src/core/ext/filters/message_size/message_size_filter.h +3 -3
- data/src/core/ext/filters/rbac/rbac_filter.cc +4 -3
- data/src/core/ext/filters/rbac/rbac_filter.h +3 -3
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +3 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -3
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +3 -3
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +27 -37
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +5 -5
- data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.h +3 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +3 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +195 -111
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/context_list.h +3 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +3 -3
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +18 -407
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +3 -3
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +3 -3
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +3 -3
- data/src/core/ext/transport/chttp2/transport/http_trace.h +3 -3
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +3 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +28 -23
- data/src/core/ext/transport/chttp2/transport/parsing.cc +111 -31
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +3 -3
- data/src/core/ext/transport/chttp2/transport/writing.cc +9 -8
- data/src/core/ext/transport/inproc/inproc_transport.h +3 -3
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +9 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +38 -2
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +185 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +7 -3
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +44 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +16 -25
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +48 -74
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +30 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +137 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +15 -12
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +83 -51
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +17 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +61 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +11 -5
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +37 -6
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +5 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +24 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +5 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +6 -3
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +24 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -5
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +50 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +57 -16
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +254 -17
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +9 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +9 -0
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +7 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +21 -12
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +23 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +10 -7
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +42 -12
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +54 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +188 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.c +111 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +444 -0
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +7 -3
- data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +8 -6
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +31 -9
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +5 -3
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +24 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.c +47 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/filter_state.upb.h +113 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.c +43 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/status_code_input.upb.h +114 -0
- data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +3 -1
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +54 -53
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +34 -13
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +195 -187
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +232 -224
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +0 -5
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +95 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +94 -93
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +81 -75
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +189 -187
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +7 -3
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +71 -66
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +137 -133
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +16 -12
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +140 -133
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +81 -70
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +771 -741
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +16 -14
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +14 -13
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +20 -18
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +53 -42
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +363 -356
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +149 -145
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +16 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/filter_state.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +14 -14
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/status_code_input.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +10 -9
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +1 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +3 -3
- data/src/core/ext/xds/upb_utils.h +3 -3
- data/src/core/ext/xds/xds_api.h +3 -3
- data/src/core/ext/xds/xds_bootstrap.h +3 -3
- data/src/core/ext/xds/xds_bootstrap_grpc.cc +1 -0
- data/src/core/ext/xds/xds_bootstrap_grpc.h +3 -3
- data/src/core/ext/xds/xds_certificate_provider.h +3 -3
- data/src/core/ext/xds/xds_channel_args.h +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.h +3 -3
- data/src/core/ext/xds/xds_client.cc +8 -3
- data/src/core/ext/xds/xds_client.h +3 -3
- data/src/core/ext/xds/xds_client_grpc.cc +0 -1
- data/src/core/ext/xds/xds_client_grpc.h +3 -3
- data/src/core/ext/xds/xds_client_stats.h +4 -3
- data/src/core/ext/xds/xds_cluster.cc +11 -7
- data/src/core/ext/xds/xds_cluster.h +6 -6
- data/src/core/ext/xds/xds_cluster_specifier_plugin.h +3 -3
- data/src/core/ext/xds/xds_common_types.cc +1 -0
- data/src/core/ext/xds/xds_common_types.h +3 -3
- data/src/core/ext/xds/xds_endpoint.cc +1 -1
- data/src/core/ext/xds/xds_endpoint.h +3 -3
- data/src/core/ext/xds/xds_health_status.h +30 -3
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -3
- data/src/core/ext/xds/xds_http_filters.cc +1 -1
- data/src/core/ext/xds/xds_http_filters.h +3 -3
- data/src/core/ext/xds/xds_http_rbac_filter.h +3 -3
- data/src/core/ext/xds/xds_http_stateful_session_filter.h +3 -3
- data/src/core/ext/xds/xds_lb_policy_registry.cc +95 -0
- data/src/core/ext/xds/xds_lb_policy_registry.h +3 -3
- data/src/core/ext/xds/xds_listener.cc +1 -0
- data/src/core/ext/xds/xds_listener.h +3 -3
- data/src/core/ext/xds/xds_resource_type.h +3 -3
- data/src/core/ext/xds/xds_resource_type_impl.h +3 -3
- data/src/core/ext/xds/xds_route_config.cc +6 -0
- data/src/core/ext/xds/xds_route_config.h +3 -3
- data/src/core/ext/xds/xds_routing.h +3 -3
- data/src/core/ext/xds/xds_transport.h +3 -3
- data/src/core/ext/xds/xds_transport_grpc.h +3 -3
- data/src/core/lib/address_utils/parse_address.h +3 -3
- data/src/core/lib/address_utils/sockaddr_utils.cc +1 -0
- data/src/core/lib/address_utils/sockaddr_utils.h +3 -3
- data/src/core/lib/avl/avl.h +3 -3
- data/src/core/lib/backoff/backoff.h +3 -3
- data/src/core/lib/channel/call_finalization.h +3 -3
- data/src/core/lib/channel/call_tracer.h +3 -3
- data/src/core/lib/channel/channel_args.cc +1 -0
- data/src/core/lib/channel/channel_args.h +11 -5
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -3
- data/src/core/lib/channel/channel_fwd.h +3 -3
- data/src/core/lib/channel/channel_stack.cc +1 -2
- data/src/core/lib/channel/channel_stack.h +4 -4
- data/src/core/lib/channel/channel_stack_builder.h +3 -3
- data/src/core/lib/channel/channel_stack_builder_impl.cc +14 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -3
- data/src/core/lib/channel/channel_trace.h +3 -3
- data/src/core/lib/channel/channelz.h +3 -3
- data/src/core/lib/channel/channelz_registry.h +3 -3
- data/src/core/lib/channel/connected_channel.cc +883 -354
- data/src/core/lib/channel/connected_channel.h +3 -3
- data/src/core/lib/channel/context.h +7 -3
- data/src/core/lib/channel/promise_based_filter.cc +532 -260
- data/src/core/lib/channel/promise_based_filter.h +124 -44
- data/src/core/lib/channel/status_util.h +3 -3
- data/src/core/lib/compression/compression_internal.h +3 -3
- data/src/core/lib/compression/message_compress.h +3 -3
- data/src/core/lib/config/core_configuration.h +3 -3
- data/src/core/lib/debug/event_log.h +3 -3
- data/src/core/lib/debug/histogram_view.h +3 -3
- data/src/core/lib/debug/stats.h +3 -3
- data/src/core/lib/debug/stats_data.cc +66 -65
- data/src/core/lib/debug/stats_data.h +42 -33
- data/src/core/lib/debug/trace.h +4 -26
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +5 -0
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -3
- data/src/core/lib/event_engine/common_closures.h +3 -3
- data/src/core/lib/event_engine/default_event_engine.cc +9 -4
- data/src/core/lib/event_engine/default_event_engine.h +30 -6
- data/src/core/lib/event_engine/default_event_engine_factory.h +3 -3
- data/src/core/lib/event_engine/event_engine.cc +25 -0
- data/src/core/lib/event_engine/executor/executor.h +3 -3
- data/src/core/lib/event_engine/forkable.cc +11 -6
- data/src/core/lib/event_engine/forkable.h +3 -3
- data/src/core/lib/event_engine/handle_containers.h +10 -3
- data/src/core/lib/event_engine/poller.h +3 -3
- data/src/core/lib/event_engine/posix.h +158 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +44 -16
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +14 -4
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +6 -7
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller.h +3 -3
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -3
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +3 -3
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -3
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +52 -55
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +46 -13
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +82 -12
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +23 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +3 -3
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +60 -7
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +65 -14
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +0 -1
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -6
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -3
- data/src/core/lib/event_engine/posix_engine/timer.h +3 -3
- data/src/core/lib/event_engine/posix_engine/timer_heap.h +3 -3
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +3 -3
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +3 -3
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +3 -3
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +3 -3
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +3 -3
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -3
- data/src/core/lib/event_engine/resolved_address.cc +19 -0
- data/src/core/lib/event_engine/resolved_address_internal.h +34 -0
- data/src/core/lib/event_engine/shim.cc +56 -0
- data/src/core/lib/event_engine/shim.h +33 -0
- data/src/core/lib/event_engine/slice.cc +1 -1
- data/src/core/lib/event_engine/tcp_socket_utils.cc +18 -2
- data/src/core/lib/event_engine/tcp_socket_utils.h +8 -3
- data/src/core/lib/event_engine/thread_local.cc +29 -0
- data/src/core/lib/event_engine/thread_local.h +32 -0
- data/src/core/lib/event_engine/thread_pool.cc +41 -65
- data/src/core/lib/event_engine/thread_pool.h +21 -17
- data/src/core/lib/event_engine/time_util.h +3 -3
- data/src/core/lib/event_engine/trace.cc +6 -0
- data/src/core/lib/event_engine/trace.h +16 -3
- data/src/core/lib/event_engine/utils.cc +2 -2
- data/src/core/lib/event_engine/utils.h +12 -4
- data/src/core/lib/event_engine/windows/iocp.cc +24 -40
- data/src/core/lib/event_engine/windows/iocp.h +3 -3
- data/src/core/lib/event_engine/windows/win_socket.cc +56 -33
- data/src/core/lib/event_engine/windows/win_socket.h +34 -25
- data/src/core/lib/event_engine/windows/windows_endpoint.cc +331 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +103 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +243 -20
- data/src/core/lib/event_engine/windows/windows_engine.h +62 -23
- data/src/core/lib/experiments/config.cc +16 -1
- data/src/core/lib/experiments/config.h +13 -3
- data/src/core/lib/experiments/experiments.cc +14 -8
- data/src/core/lib/experiments/experiments.h +80 -21
- data/src/core/lib/gpr/alloc.h +3 -3
- data/src/core/lib/gpr/spinlock.h +3 -3
- data/src/core/lib/gpr/string.h +3 -3
- data/src/core/lib/gpr/sync_abseil.cc +15 -7
- data/src/core/lib/gpr/time_precise.h +3 -3
- data/src/core/lib/gpr/tmpfile.h +3 -3
- data/src/core/lib/gpr/useful.h +3 -3
- data/src/core/lib/gprpp/atomic_utils.h +3 -3
- data/src/core/lib/gprpp/bitset.h +3 -3
- data/src/core/lib/gprpp/chunked_vector.h +3 -3
- data/src/core/lib/gprpp/construct_destruct.h +3 -3
- data/src/core/lib/gprpp/cpp_impl_of.h +3 -3
- data/src/core/lib/gprpp/crash.h +3 -3
- data/src/core/lib/gprpp/debug_location.h +3 -6
- data/src/core/lib/gprpp/dual_ref_counted.h +3 -3
- data/src/core/lib/gprpp/env.h +3 -3
- data/src/core/lib/gprpp/examine_stack.h +3 -3
- data/src/core/lib/gprpp/fork.cc +21 -4
- data/src/core/lib/gprpp/fork.h +7 -5
- data/src/core/lib/gprpp/global_config.h +3 -3
- data/src/core/lib/gprpp/global_config_custom.h +3 -3
- data/src/core/lib/gprpp/global_config_env.cc +1 -0
- data/src/core/lib/gprpp/global_config_env.h +3 -3
- data/src/core/lib/gprpp/global_config_generic.h +3 -3
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/host_port.h +3 -3
- data/src/core/lib/gprpp/load_file.h +3 -3
- data/src/core/lib/gprpp/manual_constructor.h +3 -3
- data/src/core/lib/gprpp/match.h +3 -3
- data/src/core/lib/gprpp/memory.h +3 -3
- data/src/core/lib/gprpp/mpscq.h +3 -3
- data/src/core/lib/gprpp/no_destruct.h +3 -3
- data/src/core/lib/gprpp/notification.h +3 -3
- data/src/core/lib/gprpp/orphanable.h +3 -3
- data/src/core/lib/gprpp/overload.h +3 -3
- data/src/core/lib/gprpp/packed_table.h +3 -3
- data/src/core/lib/gprpp/per_cpu.h +3 -3
- data/src/core/lib/gprpp/ref_counted.h +3 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +3 -3
- data/src/core/lib/gprpp/single_set_ptr.h +3 -3
- data/src/core/lib/gprpp/sorted_pack.h +3 -3
- data/src/core/lib/gprpp/stat.h +3 -3
- data/src/core/lib/gprpp/status_helper.h +3 -3
- data/src/core/lib/gprpp/strerror.cc +2 -0
- data/src/core/lib/gprpp/strerror.h +3 -3
- data/src/core/lib/gprpp/sync.h +3 -3
- data/src/core/lib/gprpp/table.h +3 -3
- data/src/core/lib/gprpp/tchar.h +3 -3
- data/src/core/lib/gprpp/thd.h +3 -3
- data/src/core/lib/gprpp/time.cc +1 -0
- data/src/core/lib/gprpp/time.h +3 -3
- data/src/core/lib/gprpp/time_averaged_stats.h +3 -3
- data/src/core/lib/gprpp/time_util.h +3 -3
- data/src/core/lib/gprpp/unique_type_name.h +3 -3
- data/src/core/lib/gprpp/validation_errors.h +3 -3
- data/src/core/lib/gprpp/work_serializer.h +3 -3
- data/src/core/lib/handshaker/proxy_mapper.h +3 -3
- data/src/core/lib/handshaker/proxy_mapper_registry.h +3 -3
- data/src/core/lib/http/format_request.cc +1 -0
- data/src/core/lib/http/format_request.h +3 -3
- data/src/core/lib/http/httpcli.cc +1 -0
- data/src/core/lib/http/httpcli.h +3 -3
- data/src/core/lib/http/httpcli_ssl_credentials.h +3 -3
- data/src/core/lib/http/parser.h +3 -3
- data/src/core/lib/iomgr/block_annotate.h +3 -3
- data/src/core/lib/iomgr/buffer_list.h +3 -3
- data/src/core/lib/iomgr/call_combiner.cc +4 -4
- data/src/core/lib/iomgr/call_combiner.h +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +3 -3
- data/src/core/lib/iomgr/closure.cc +27 -0
- data/src/core/lib/iomgr/closure.h +5 -3
- data/src/core/lib/iomgr/combiner.h +3 -3
- data/src/core/lib/iomgr/dynamic_annotations.h +3 -3
- data/src/core/lib/iomgr/endpoint.h +3 -3
- data/src/core/lib/iomgr/endpoint_cfstream.h +3 -3
- data/src/core/lib/iomgr/endpoint_pair.h +3 -3
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +10 -2
- data/src/core/lib/iomgr/error.h +3 -3
- data/src/core/lib/iomgr/error_cfstream.h +3 -3
- data/src/core/lib/iomgr/ev_apple.h +3 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.h +3 -3
- data/src/core/lib/iomgr/ev_poll_posix.h +3 -3
- data/src/core/lib/iomgr/ev_posix.h +3 -3
- data/src/core/lib/iomgr/event_engine_shims/closure.cc +62 -0
- data/src/core/lib/iomgr/event_engine_shims/closure.h +39 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +430 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +43 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +91 -0
- data/src/core/lib/iomgr/event_engine_shims/tcp_client.h +44 -0
- data/src/core/lib/iomgr/exec_ctx.h +3 -3
- data/src/core/lib/iomgr/executor.h +3 -3
- data/src/core/lib/iomgr/fork_posix.cc +5 -4
- data/src/core/lib/iomgr/gethostname.h +3 -3
- data/src/core/lib/iomgr/grpc_if_nametoindex.h +3 -3
- data/src/core/lib/iomgr/internal_errqueue.h +3 -3
- data/src/core/lib/iomgr/iocp_windows.h +3 -3
- data/src/core/lib/iomgr/iomgr.h +3 -3
- data/src/core/lib/iomgr/iomgr_fwd.h +3 -3
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/load_file.h +3 -3
- data/src/core/lib/iomgr/lockfree_event.h +3 -3
- data/src/core/lib/iomgr/nameser.h +3 -3
- data/src/core/lib/iomgr/polling_entity.h +3 -3
- data/src/core/lib/iomgr/pollset.h +3 -3
- data/src/core/lib/iomgr/pollset_set.h +3 -3
- data/src/core/lib/iomgr/pollset_set_windows.h +3 -3
- data/src/core/lib/iomgr/pollset_windows.cc +2 -2
- data/src/core/lib/iomgr/pollset_windows.h +3 -3
- data/src/core/lib/iomgr/port.h +3 -3
- data/src/core/lib/iomgr/python_util.h +3 -3
- data/src/core/lib/iomgr/resolve_address.h +3 -3
- data/src/core/lib/iomgr/resolve_address_impl.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.h +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.h +3 -3
- data/src/core/lib/iomgr/resolved_address.h +3 -3
- data/src/core/lib/iomgr/sockaddr.h +3 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +3 -3
- data/src/core/lib/iomgr/sockaddr_windows.h +3 -3
- data/src/core/lib/iomgr/socket_factory_posix.h +3 -3
- data/src/core/lib/iomgr/socket_mutator.h +3 -3
- data/src/core/lib/iomgr/socket_utils.h +3 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +3 -3
- data/src/core/lib/iomgr/socket_windows.h +3 -3
- data/src/core/lib/iomgr/systemd_utils.cc +19 -19
- data/src/core/lib/iomgr/systemd_utils.h +24 -24
- data/src/core/lib/iomgr/tcp_client.h +3 -3
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -0
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -3
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -1
- data/src/core/lib/iomgr/tcp_posix.cc +49 -65
- data/src/core/lib/iomgr/tcp_posix.h +3 -3
- data/src/core/lib/iomgr/tcp_server.h +3 -3
- data/src/core/lib/iomgr/tcp_server_posix.cc +219 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -3
- data/src/core/lib/iomgr/tcp_server_windows.cc +4 -6
- data/src/core/lib/iomgr/tcp_windows.h +3 -3
- data/src/core/lib/iomgr/timer.h +3 -3
- data/src/core/lib/iomgr/timer_generic.h +3 -3
- data/src/core/lib/iomgr/timer_heap.h +3 -3
- data/src/core/lib/iomgr/timer_manager.h +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +3 -3
- data/src/core/lib/json/json.h +3 -3
- data/src/core/lib/json/json_args.h +3 -3
- data/src/core/lib/json/json_channel_args.h +3 -3
- data/src/core/lib/json/json_object_loader.h +3 -3
- data/src/core/lib/json/json_reader.cc +1 -0
- data/src/core/lib/json/json_util.h +3 -3
- data/src/core/lib/load_balancing/lb_policy.cc +9 -0
- data/src/core/lib/load_balancing/lb_policy.h +9 -5
- data/src/core/lib/load_balancing/lb_policy_factory.h +3 -3
- data/src/core/lib/load_balancing/lb_policy_registry.cc +1 -0
- data/src/core/lib/load_balancing/lb_policy_registry.h +3 -3
- data/src/core/lib/load_balancing/subchannel_interface.h +8 -6
- data/src/core/lib/matchers/matchers.cc +1 -0
- data/src/core/lib/matchers/matchers.h +3 -3
- data/src/core/lib/promise/activity.cc +8 -6
- data/src/core/lib/promise/activity.h +52 -66
- data/src/core/lib/promise/arena_promise.h +3 -3
- data/src/core/lib/promise/context.h +3 -3
- data/src/core/lib/promise/detail/basic_join.h +197 -0
- data/src/core/lib/promise/detail/basic_seq.h +10 -16
- data/src/core/lib/promise/detail/promise_factory.h +3 -3
- data/src/core/lib/promise/detail/promise_like.h +3 -3
- data/src/core/lib/promise/detail/status.h +3 -3
- data/src/core/lib/promise/detail/switch.h +3 -3
- data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -3
- data/src/core/lib/promise/if.h +195 -0
- data/src/core/lib/promise/interceptor_list.h +308 -0
- data/src/core/lib/promise/intra_activity_waiter.h +9 -3
- data/src/core/lib/promise/latch.h +99 -5
- data/src/core/lib/promise/loop.h +4 -4
- data/src/core/lib/promise/map.h +4 -6
- data/src/core/lib/promise/pipe.h +296 -193
- data/src/core/lib/promise/poll.h +113 -14
- data/src/core/lib/promise/promise.h +4 -5
- data/src/core/lib/promise/race.h +6 -9
- data/src/core/lib/promise/seq.h +3 -3
- data/src/core/lib/promise/sleep.h +3 -3
- data/src/core/lib/promise/{pipe.cc → trace.cc} +3 -2
- data/src/core/lib/promise/trace.h +24 -0
- data/src/core/lib/promise/try_join.h +82 -0
- data/src/core/lib/promise/try_seq.h +3 -3
- data/src/core/lib/resolver/resolver.h +3 -3
- data/src/core/lib/resolver/resolver_factory.h +4 -4
- data/src/core/lib/resolver/resolver_registry.cc +15 -0
- data/src/core/lib/resolver/resolver_registry.h +3 -3
- data/src/core/lib/resolver/server_address.cc +1 -0
- data/src/core/lib/resolver/server_address.h +3 -3
- data/src/core/lib/resource_quota/api.h +3 -3
- data/src/core/lib/resource_quota/arena.cc +36 -9
- data/src/core/lib/resource_quota/arena.h +84 -22
- data/src/core/lib/resource_quota/memory_quota.h +3 -3
- data/src/core/lib/resource_quota/periodic_update.h +3 -3
- data/src/core/lib/resource_quota/resource_quota.h +3 -3
- data/src/core/lib/resource_quota/thread_quota.h +3 -3
- data/src/core/lib/resource_quota/trace.h +3 -3
- data/src/core/lib/security/authorization/authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +3 -3
- data/src/core/lib/security/authorization/evaluate_args.h +3 -3
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +3 -3
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +3 -3
- data/src/core/lib/security/authorization/matchers.h +3 -3
- data/src/core/lib/security/authorization/rbac_policy.cc +1 -0
- data/src/core/lib/security/authorization/rbac_policy.h +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +3 -3
- data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +3 -3
- data/src/core/lib/security/context/security_context.h +3 -3
- data/src/core/lib/security/credentials/alts/alts_credentials.h +3 -3
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +3 -3
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +3 -3
- data/src/core/lib/security/credentials/call_creds_util.h +3 -3
- data/src/core/lib/security/credentials/channel_creds_registry.h +3 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +3 -3
- data/src/core/lib/security/credentials/credentials.h +3 -3
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +1 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.h +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +3 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +3 -3
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +3 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.h +3 -3
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +3 -3
- data/src/core/lib/security/credentials/jwt/json_token.h +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -3
- data/src/core/lib/security/credentials/local/local_credentials.h +3 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -3
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +3 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +3 -3
- data/src/core/lib/security/credentials/tls/tls_credentials.h +3 -3
- data/src/core/lib/security/credentials/tls/tls_utils.h +3 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/load_system_roots.h +3 -3
- data/src/core/lib/security/security_connector/load_system_roots_supported.h +3 -3
- data/src/core/lib/security/security_connector/local/local_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +3 -3
- data/src/core/lib/security/security_connector/ssl_utils.h +3 -3
- data/src/core/lib/security/security_connector/ssl_utils_config.h +3 -3
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +3 -3
- data/src/core/lib/security/transport/auth_filters.h +27 -5
- data/src/core/lib/security/transport/secure_endpoint.h +3 -3
- data/src/core/lib/security/transport/security_handshaker.cc +9 -0
- data/src/core/lib/security/transport/security_handshaker.h +3 -3
- data/src/core/lib/security/transport/server_auth_filter.cc +120 -251
- data/src/core/lib/security/transport/tsi_error.h +3 -3
- data/src/core/lib/security/util/json_util.h +3 -3
- data/src/core/lib/service_config/service_config.h +3 -3
- data/src/core/lib/service_config/service_config_call_data.h +3 -3
- data/src/core/lib/service_config/service_config_impl.h +3 -3
- data/src/core/lib/service_config/service_config_parser.h +3 -3
- data/src/core/lib/slice/b64.h +3 -3
- data/src/core/lib/slice/percent_encoding.h +3 -3
- data/src/core/lib/slice/slice.cc +3 -3
- data/src/core/lib/slice/slice.h +14 -21
- data/src/core/lib/slice/slice_buffer.h +10 -4
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_refcount.cc +20 -0
- data/src/core/lib/slice/slice_refcount.h +26 -6
- data/src/core/lib/slice/slice_string_helpers.h +3 -3
- data/src/core/lib/surface/api_trace.h +3 -3
- data/src/core/lib/surface/builtins.h +3 -3
- data/src/core/lib/surface/call.cc +866 -252
- data/src/core/lib/surface/call.h +31 -3
- data/src/core/lib/surface/call_log_batch.cc +1 -0
- data/src/core/lib/surface/call_test_only.h +3 -3
- data/src/core/lib/surface/call_trace.cc +21 -11
- data/src/core/lib/surface/call_trace.h +3 -3
- data/src/core/lib/surface/channel.h +3 -3
- data/src/core/lib/surface/channel_init.h +3 -3
- data/src/core/lib/surface/channel_stack_type.h +3 -3
- data/src/core/lib/surface/completion_queue.cc +1 -0
- data/src/core/lib/surface/completion_queue.h +3 -3
- data/src/core/lib/surface/completion_queue_factory.h +3 -3
- data/src/core/lib/surface/event_string.cc +1 -0
- data/src/core/lib/surface/event_string.h +3 -3
- data/src/core/lib/surface/init.cc +1 -1
- data/src/core/lib/surface/init.h +3 -3
- data/src/core/lib/surface/init_internally.h +3 -3
- data/src/core/lib/surface/lame_client.cc +3 -1
- data/src/core/lib/surface/lame_client.h +3 -3
- data/src/core/lib/surface/server.cc +273 -27
- data/src/core/lib/surface/server.h +6 -3
- data/src/core/lib/surface/validate_metadata.h +3 -3
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.h +3 -3
- data/src/core/lib/transport/connectivity_state.h +3 -3
- data/src/core/lib/transport/error_utils.h +3 -3
- data/src/core/lib/transport/handshaker.cc +11 -0
- data/src/core/lib/transport/handshaker.h +4 -4
- data/src/core/lib/transport/handshaker_factory.h +3 -3
- data/src/core/lib/transport/handshaker_registry.h +3 -3
- data/src/core/lib/transport/http2_errors.h +3 -3
- data/src/core/lib/transport/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +11 -0
- data/src/core/lib/transport/metadata_batch.h +24 -3
- data/src/core/lib/transport/parsed_metadata.h +3 -3
- data/src/core/lib/transport/pid_controller.h +3 -3
- data/src/core/lib/transport/status_conversion.h +3 -3
- data/src/core/lib/transport/tcp_connect_handshaker.cc +0 -1
- data/src/core/lib/transport/tcp_connect_handshaker.h +3 -3
- data/src/core/lib/transport/timeout_encoding.h +3 -3
- data/src/core/lib/transport/transport.cc +3 -8
- data/src/core/lib/transport/transport.h +16 -8
- data/src/core/lib/transport/transport_fwd.h +3 -3
- data/src/core/lib/transport/transport_impl.h +3 -3
- data/src/core/lib/transport/transport_op_string.cc +1 -0
- data/src/core/lib/uri/uri_parser.cc +1 -1
- data/src/core/lib/uri/uri_parser.h +3 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +5 -0
- data/src/core/tsi/alts/crypt/gsec.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_counter.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +3 -3
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +3 -3
- data/src/core/tsi/alts/frame_protector/frame_handler.h +3 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +3 -3
- data/src/core/tsi/alts/handshaker/alts_shared_resource.h +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +3 -3
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +3 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +3 -3
- data/src/core/tsi/fake_transport_security.h +3 -3
- data/src/core/tsi/local_transport_security.h +3 -3
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +1 -1
- data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -3
- data/src/core/tsi/ssl_transport_security.cc +113 -24
- data/src/core/tsi/ssl_transport_security.h +5 -3
- data/src/core/tsi/ssl_transport_security_utils.h +3 -3
- data/src/core/tsi/ssl_types.h +3 -3
- data/src/core/tsi/transport_security.h +3 -3
- data/src/core/tsi/transport_security_grpc.h +3 -3
- data/src/core/tsi/transport_security_interface.h +3 -3
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/generate_proto_ruby.sh +0 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +56 -57
- data/third_party/abseil-cpp/absl/base/attributes.h +39 -19
- data/third_party/abseil-cpp/absl/base/config.h +44 -3
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +3 -18
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +55 -0
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +2 -1
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +3 -3
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +1 -1
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +10 -6
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +23 -24
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +2 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +4 -1
- data/third_party/abseil-cpp/absl/base/internal/strerror.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -10
- data/third_party/abseil-cpp/absl/base/internal/thread_annotations.h +9 -0
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -0
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -40
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +62 -0
- data/third_party/abseil-cpp/absl/base/macros.h +4 -21
- data/third_party/abseil-cpp/absl/base/optimization.h +58 -6
- data/third_party/abseil-cpp/absl/base/options.h +1 -7
- data/third_party/abseil-cpp/absl/base/policy_checks.h +15 -13
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -5
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -7
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +66 -18
- data/third_party/abseil-cpp/absl/container/internal/common.h +3 -3
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +132 -0
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +13 -1
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +4 -55
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +50 -5
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +14 -46
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +110 -32
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +155 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +661 -341
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +99 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.h +183 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +256 -0
- data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +57 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.cc +468 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc.h +91 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +269 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c.h +39 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc32c_inline.h +72 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.cc +130 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_cord_state.h +159 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +179 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy.h +119 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_fallback.cc +75 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_64.cc +434 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_non_temporal_memcpy.cc +93 -0
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +725 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +79 -0
- data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +180 -0
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +67 -38
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.h +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -13
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -9
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +40 -85
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -8
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +118 -94
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +7 -6
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +5 -2
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +47 -26
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +10 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +18 -4
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +3 -14
- data/third_party/abseil-cpp/absl/memory/memory.h +26 -447
- data/third_party/abseil-cpp/absl/meta/type_traits.h +104 -12
- data/third_party/abseil-cpp/absl/numeric/bits.h +2 -3
- data/third_party/abseil-cpp/absl/numeric/int128.cc +10 -8
- data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +14 -6
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +2 -23
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +9 -9
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +2 -2
- data/third_party/abseil-cpp/absl/random/random.h +6 -6
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +1 -0
- data/third_party/abseil-cpp/absl/status/status.cc +19 -12
- data/third_party/abseil-cpp/absl/status/status.h +2 -2
- data/third_party/abseil-cpp/absl/strings/ascii.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/charconv.cc +534 -96
- data/third_party/abseil-cpp/absl/strings/cord.cc +92 -40
- data/third_party/abseil-cpp/absl/strings/cord.h +71 -80
- data/third_party/abseil-cpp/absl/strings/cord_buffer.h +8 -5
- data/third_party/abseil-cpp/absl/strings/escaping.cc +73 -62
- data/third_party/abseil-cpp/absl/strings/escaping.h +24 -19
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +14 -12
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +326 -70
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +8 -4
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +26 -14
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +9 -7
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +5 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +7 -15
- data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +8 -5
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +7 -7
- data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +93 -0
- data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +34 -0
- data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +12 -10
- data/third_party/abseil-cpp/absl/strings/internal/escaping.h +7 -9
- data/third_party/abseil-cpp/absl/strings/internal/has_absl_stringify.h +55 -0
- data/third_party/abseil-cpp/absl/strings/internal/memutil.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +14 -7
- data/third_party/abseil-cpp/absl/strings/internal/ostringstream.h +35 -10
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +113 -46
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +126 -29
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +4 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +49 -287
- data/third_party/abseil-cpp/absl/strings/internal/str_format/constexpr_parser.h +351 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +215 -181
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +10 -209
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +10 -101
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -1
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.cc +28 -0
- data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +57 -0
- data/third_party/abseil-cpp/absl/strings/numbers.cc +34 -31
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +9 -6
- data/third_party/abseil-cpp/absl/strings/str_cat.h +50 -3
- data/third_party/abseil-cpp/absl/strings/str_format.h +71 -9
- data/third_party/abseil-cpp/absl/strings/string_view.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.h +3 -10
- data/third_party/abseil-cpp/absl/strings/substitute.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/substitute.h +46 -20
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +20 -17
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +37 -31
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +22 -8
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +104 -55
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +85 -46
- data/third_party/abseil-cpp/absl/synchronization/notification.cc +0 -1
- data/third_party/abseil-cpp/absl/synchronization/notification.h +0 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +26 -0
- data/third_party/abseil-cpp/absl/time/civil_time.h +25 -0
- data/third_party/abseil-cpp/absl/time/clock.cc +17 -11
- data/third_party/abseil-cpp/absl/time/duration.cc +7 -7
- data/third_party/abseil-cpp/absl/time/format.cc +2 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +26 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +7 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +36 -35
- data/third_party/abseil-cpp/absl/time/time.cc +2 -2
- data/third_party/abseil-cpp/absl/time/time.h +253 -158
- data/third_party/abseil-cpp/absl/types/internal/span.h +30 -19
- data/third_party/abseil-cpp/absl/types/internal/variant.h +28 -40
- data/third_party/abseil-cpp/absl/types/span.h +29 -7
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -2
- metadata +75 -10
- data/src/core/lib/event_engine/socket_notifier.h +0 -55
- data/src/core/lib/promise/for_each.h +0 -155
- data/src/core/lib/promise/map_pipe.h +0 -88
- data/src/core/lib/promise/try_concurrently.h +0 -342
@@ -27,9 +27,20 @@
|
|
27
27
|
#include "absl/base/internal/invoke.h"
|
28
28
|
#include "absl/base/optimization.h"
|
29
29
|
#include "absl/container/internal/compressed_tuple.h"
|
30
|
+
#include "absl/container/internal/container_memory.h"
|
30
31
|
#include "absl/meta/type_traits.h"
|
31
32
|
#include "absl/strings/string_view.h"
|
32
33
|
|
34
|
+
// We can only add poisoning if we can detect consteval executions.
|
35
|
+
#if defined(ABSL_HAVE_CONSTANT_EVALUATED) && \
|
36
|
+
(defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
|
37
|
+
defined(ABSL_HAVE_MEMORY_SANITIZER))
|
38
|
+
#define ABSL_INTERNAL_CORD_HAVE_SANITIZER 1
|
39
|
+
#endif
|
40
|
+
|
41
|
+
#define ABSL_CORD_INTERNAL_NO_SANITIZE \
|
42
|
+
ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY
|
43
|
+
|
33
44
|
namespace absl {
|
34
45
|
ABSL_NAMESPACE_BEGIN
|
35
46
|
namespace cord_internal {
|
@@ -91,6 +102,46 @@ enum Constants {
|
|
91
102
|
// Emits a fatal error "Unexpected node type: xyz" and aborts the program.
|
92
103
|
ABSL_ATTRIBUTE_NORETURN void LogFatalNodeType(CordRep* rep);
|
93
104
|
|
105
|
+
// Fast implementation of memmove for up to 15 bytes. This implementation is
|
106
|
+
// safe for overlapping regions. If nullify_tail is true, the destination is
|
107
|
+
// padded with '\0' up to 15 bytes.
|
108
|
+
template <bool nullify_tail = false>
|
109
|
+
inline void SmallMemmove(char* dst, const char* src, size_t n) {
|
110
|
+
if (n >= 8) {
|
111
|
+
assert(n <= 15);
|
112
|
+
uint64_t buf1;
|
113
|
+
uint64_t buf2;
|
114
|
+
memcpy(&buf1, src, 8);
|
115
|
+
memcpy(&buf2, src + n - 8, 8);
|
116
|
+
if (nullify_tail) {
|
117
|
+
memset(dst + 7, 0, 8);
|
118
|
+
}
|
119
|
+
memcpy(dst, &buf1, 8);
|
120
|
+
memcpy(dst + n - 8, &buf2, 8);
|
121
|
+
} else if (n >= 4) {
|
122
|
+
uint32_t buf1;
|
123
|
+
uint32_t buf2;
|
124
|
+
memcpy(&buf1, src, 4);
|
125
|
+
memcpy(&buf2, src + n - 4, 4);
|
126
|
+
if (nullify_tail) {
|
127
|
+
memset(dst + 4, 0, 4);
|
128
|
+
memset(dst + 7, 0, 8);
|
129
|
+
}
|
130
|
+
memcpy(dst, &buf1, 4);
|
131
|
+
memcpy(dst + n - 4, &buf2, 4);
|
132
|
+
} else {
|
133
|
+
if (n != 0) {
|
134
|
+
dst[0] = src[0];
|
135
|
+
dst[n / 2] = src[n / 2];
|
136
|
+
dst[n - 1] = src[n - 1];
|
137
|
+
}
|
138
|
+
if (nullify_tail) {
|
139
|
+
memset(dst + 7, 0, 8);
|
140
|
+
memset(dst + n, 0, 8);
|
141
|
+
}
|
142
|
+
}
|
143
|
+
}
|
144
|
+
|
94
145
|
// Compact class for tracking the reference count and state flags for CordRep
|
95
146
|
// instances. Data is stored in an atomic int32_t for compactness and speed.
|
96
147
|
class RefcountAndFlags {
|
@@ -129,8 +180,9 @@ class RefcountAndFlags {
|
|
129
180
|
}
|
130
181
|
|
131
182
|
// Returns the current reference count using acquire semantics.
|
132
|
-
inline
|
133
|
-
return count_.load(std::memory_order_acquire) >>
|
183
|
+
inline size_t Get() const {
|
184
|
+
return static_cast<size_t>(count_.load(std::memory_order_acquire) >>
|
185
|
+
kNumFlags);
|
134
186
|
}
|
135
187
|
|
136
188
|
// Returns whether the atomic integer is 1.
|
@@ -224,7 +276,11 @@ struct CordRep {
|
|
224
276
|
: length(l), refcount(immortal), tag(EXTERNAL), storage{} {}
|
225
277
|
|
226
278
|
// The following three fields have to be less than 32 bytes since
|
227
|
-
// that is the smallest supported flat node size.
|
279
|
+
// that is the smallest supported flat node size. Some code optimizations rely
|
280
|
+
// on the specific layout of these fields. Notably: the non-trivial field
|
281
|
+
// `refcount` being preceded by `length`, and being tailed by POD data
|
282
|
+
// members only.
|
283
|
+
// # LINT.IfChange
|
228
284
|
size_t length;
|
229
285
|
RefcountAndFlags refcount;
|
230
286
|
// If tag < FLAT, it represents CordRepKind and indicates the type of node.
|
@@ -240,6 +296,7 @@ struct CordRep {
|
|
240
296
|
// allocate room for these in the derived class, as not all compilers reuse
|
241
297
|
// padding space from the base class (clang and gcc do, MSVC does not, etc)
|
242
298
|
uint8_t storage[3];
|
299
|
+
// # LINT.ThenChange(cord_rep_btree.h:copy_raw)
|
243
300
|
|
244
301
|
// Returns true if this instance's tag matches the requested type.
|
245
302
|
constexpr bool IsRing() const { return tag == RING; }
|
@@ -422,25 +479,25 @@ constexpr char GetOrNull(absl::string_view data, size_t pos) {
|
|
422
479
|
return pos < data.size() ? data[pos] : '\0';
|
423
480
|
}
|
424
481
|
|
425
|
-
// We store cordz_info as 64 bit pointer value in
|
426
|
-
// guarantees that the least significant byte of cordz_info matches the
|
427
|
-
// byte of the inline data representation in
|
482
|
+
// We store cordz_info as 64 bit pointer value in little endian format. This
|
483
|
+
// guarantees that the least significant byte of cordz_info matches the first
|
484
|
+
// byte of the inline data representation in `data`, which holds the inlined
|
428
485
|
// size or the 'is_tree' bit.
|
429
486
|
using cordz_info_t = int64_t;
|
430
487
|
|
431
488
|
// Assert that the `cordz_info` pointer value perfectly overlaps the last half
|
432
|
-
// of `
|
489
|
+
// of `data` and can hold a pointer value.
|
433
490
|
static_assert(sizeof(cordz_info_t) * 2 == kMaxInline + 1, "");
|
434
491
|
static_assert(sizeof(cordz_info_t) >= sizeof(intptr_t), "");
|
435
492
|
|
436
|
-
//
|
437
|
-
// endian value where the
|
438
|
-
// with all other bytes being 0.
|
439
|
-
static constexpr cordz_info_t
|
493
|
+
// LittleEndianByte() creates a little endian representation of 'value', i.e.:
|
494
|
+
// a little endian value where the first byte in the host's representation
|
495
|
+
// holds 'value`, with all other bytes being 0.
|
496
|
+
static constexpr cordz_info_t LittleEndianByte(unsigned char value) {
|
440
497
|
#if defined(ABSL_IS_BIG_ENDIAN)
|
441
|
-
return value;
|
442
|
-
#else
|
443
498
|
return static_cast<cordz_info_t>(value) << ((sizeof(cordz_info_t) - 1) * 8);
|
499
|
+
#else
|
500
|
+
return value;
|
444
501
|
#endif
|
445
502
|
}
|
446
503
|
|
@@ -449,38 +506,80 @@ class InlineData {
|
|
449
506
|
// DefaultInitType forces the use of the default initialization constructor.
|
450
507
|
enum DefaultInitType { kDefaultInit };
|
451
508
|
|
452
|
-
// kNullCordzInfo holds the
|
509
|
+
// kNullCordzInfo holds the little endian representation of intptr_t(1)
|
453
510
|
// This is the 'null' / initial value of 'cordz_info'. The null value
|
454
511
|
// is specifically big endian 1 as with 64-bit pointers, the last
|
455
512
|
// byte of cordz_info overlaps with the last byte holding the tag.
|
456
|
-
static constexpr cordz_info_t kNullCordzInfo =
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
513
|
+
static constexpr cordz_info_t kNullCordzInfo = LittleEndianByte(1);
|
514
|
+
|
515
|
+
// kTagOffset contains the offset of the control byte / tag. This constant is
|
516
|
+
// intended mostly for debugging purposes: do not remove this constant as it
|
517
|
+
// is actively inspected and used by gdb pretty printing code.
|
518
|
+
static constexpr size_t kTagOffset = 0;
|
519
|
+
|
520
|
+
// Implement `~InlineData()` conditionally: we only need this destructor to
|
521
|
+
// unpoison poisoned instances under *SAN, and it will only compile correctly
|
522
|
+
// if the current compiler supports `absl::is_constant_evaluated()`.
|
523
|
+
#ifdef ABSL_INTERNAL_CORD_HAVE_SANITIZER
|
524
|
+
~InlineData() noexcept { unpoison(); }
|
525
|
+
#endif
|
526
|
+
|
527
|
+
constexpr InlineData() noexcept { poison_this(); }
|
528
|
+
|
529
|
+
explicit InlineData(DefaultInitType) noexcept : rep_(kDefaultInit) {
|
530
|
+
poison_this();
|
531
|
+
}
|
532
|
+
|
533
|
+
explicit InlineData(CordRep* rep) noexcept : rep_(rep) {
|
534
|
+
ABSL_ASSERT(rep != nullptr);
|
535
|
+
}
|
536
|
+
|
537
|
+
// Explicit constexpr constructor to create a constexpr InlineData
|
538
|
+
// value. Creates an inlined SSO value if `rep` is null, otherwise
|
539
|
+
// creates a tree instance value.
|
540
|
+
constexpr InlineData(absl::string_view sv, CordRep* rep) noexcept
|
541
|
+
: rep_(rep ? Rep(rep) : Rep(sv)) {
|
542
|
+
poison();
|
543
|
+
}
|
544
|
+
|
545
|
+
constexpr InlineData(const InlineData& rhs) noexcept;
|
546
|
+
InlineData& operator=(const InlineData& rhs) noexcept;
|
547
|
+
|
548
|
+
friend bool operator==(const InlineData& lhs, const InlineData& rhs) {
|
549
|
+
#ifdef ABSL_INTERNAL_CORD_HAVE_SANITIZER
|
550
|
+
const Rep l = lhs.rep_.SanitizerSafeCopy();
|
551
|
+
const Rep r = rhs.rep_.SanitizerSafeCopy();
|
552
|
+
return memcmp(&l, &r, sizeof(l)) == 0;
|
553
|
+
#else
|
554
|
+
return memcmp(&lhs, &rhs, sizeof(lhs)) == 0;
|
555
|
+
#endif
|
556
|
+
}
|
557
|
+
friend bool operator!=(const InlineData& lhs, const InlineData& rhs) {
|
558
|
+
return !operator==(lhs, rhs);
|
559
|
+
}
|
560
|
+
|
561
|
+
// Poisons the unused inlined SSO data if the current instance
|
562
|
+
// is inlined, else un-poisons the entire instance.
|
563
|
+
constexpr void poison();
|
564
|
+
|
565
|
+
// Un-poisons this instance.
|
566
|
+
constexpr void unpoison();
|
567
|
+
|
568
|
+
// Poisons the current instance. This is used on default initialization.
|
569
|
+
constexpr void poison_this();
|
471
570
|
|
472
571
|
// Returns true if the current instance is empty.
|
473
572
|
// The 'empty value' is an inlined data value of zero length.
|
474
|
-
bool is_empty() const { return tag() == 0; }
|
573
|
+
bool is_empty() const { return rep_.tag() == 0; }
|
475
574
|
|
476
575
|
// Returns true if the current instance holds a tree value.
|
477
|
-
bool is_tree() const { return (tag() & 1) != 0; }
|
576
|
+
bool is_tree() const { return (rep_.tag() & 1) != 0; }
|
478
577
|
|
479
578
|
// Returns true if the current instance holds a cordz_info value.
|
480
579
|
// Requires the current instance to hold a tree value.
|
481
580
|
bool is_profiled() const {
|
482
581
|
assert(is_tree());
|
483
|
-
return
|
582
|
+
return rep_.cordz_info() != kNullCordzInfo;
|
484
583
|
}
|
485
584
|
|
486
585
|
// Returns true if either of the provided instances hold a cordz_info value.
|
@@ -489,7 +588,7 @@ class InlineData {
|
|
489
588
|
static bool is_either_profiled(const InlineData& data1,
|
490
589
|
const InlineData& data2) {
|
491
590
|
assert(data1.is_tree() && data2.is_tree());
|
492
|
-
return (data1.
|
591
|
+
return (data1.rep_.cordz_info() | data2.rep_.cordz_info()) !=
|
493
592
|
kNullCordzInfo;
|
494
593
|
}
|
495
594
|
|
@@ -498,8 +597,8 @@ class InlineData {
|
|
498
597
|
// Requires the current instance to hold a tree value.
|
499
598
|
CordzInfo* cordz_info() const {
|
500
599
|
assert(is_tree());
|
501
|
-
intptr_t info = static_cast<intptr_t>(
|
502
|
-
|
600
|
+
intptr_t info = static_cast<intptr_t>(absl::little_endian::ToHost64(
|
601
|
+
static_cast<uint64_t>(rep_.cordz_info())));
|
503
602
|
assert(info & 1);
|
504
603
|
return reinterpret_cast<CordzInfo*>(info - 1);
|
505
604
|
}
|
@@ -510,21 +609,21 @@ class InlineData {
|
|
510
609
|
void set_cordz_info(CordzInfo* cordz_info) {
|
511
610
|
assert(is_tree());
|
512
611
|
uintptr_t info = reinterpret_cast<uintptr_t>(cordz_info) | 1;
|
513
|
-
|
514
|
-
static_cast<cordz_info_t>(absl::
|
612
|
+
rep_.set_cordz_info(
|
613
|
+
static_cast<cordz_info_t>(absl::little_endian::FromHost64(info)));
|
515
614
|
}
|
516
615
|
|
517
616
|
// Resets the current cordz_info to null / empty.
|
518
617
|
void clear_cordz_info() {
|
519
618
|
assert(is_tree());
|
520
|
-
|
619
|
+
rep_.set_cordz_info(kNullCordzInfo);
|
521
620
|
}
|
522
621
|
|
523
622
|
// Returns a read only pointer to the character data inside this instance.
|
524
623
|
// Requires the current instance to hold inline data.
|
525
624
|
const char* as_chars() const {
|
526
625
|
assert(!is_tree());
|
527
|
-
return
|
626
|
+
return rep_.as_chars();
|
528
627
|
}
|
529
628
|
|
530
629
|
// Returns a mutable pointer to the character data inside this instance.
|
@@ -542,20 +641,33 @@ class InlineData {
|
|
542
641
|
//
|
543
642
|
// It's an error to read from the returned pointer without a preceding write
|
544
643
|
// if the current instance does not hold inline data, i.e.: is_tree() == true.
|
545
|
-
char* as_chars() { return
|
644
|
+
char* as_chars() { return rep_.as_chars(); }
|
546
645
|
|
547
646
|
// Returns the tree value of this value.
|
548
647
|
// Requires the current instance to hold a tree value.
|
549
648
|
CordRep* as_tree() const {
|
550
649
|
assert(is_tree());
|
551
|
-
return
|
650
|
+
return rep_.tree();
|
651
|
+
}
|
652
|
+
|
653
|
+
void set_inline_data(const char* data, size_t n) {
|
654
|
+
ABSL_ASSERT(n <= kMaxInline);
|
655
|
+
unpoison();
|
656
|
+
rep_.set_tag(static_cast<int8_t>(n << 1));
|
657
|
+
SmallMemmove<true>(rep_.as_chars(), data, n);
|
658
|
+
poison();
|
659
|
+
}
|
660
|
+
|
661
|
+
void copy_max_inline_to(char* dst) const {
|
662
|
+
assert(!is_tree());
|
663
|
+
memcpy(dst, rep_.SanitizerSafeCopy().as_chars(), kMaxInline);
|
552
664
|
}
|
553
665
|
|
554
666
|
// Initialize this instance to holding the tree value `rep`,
|
555
667
|
// initializing the cordz_info to null, i.e.: 'not profiled'.
|
556
668
|
void make_tree(CordRep* rep) {
|
557
|
-
|
558
|
-
|
669
|
+
unpoison();
|
670
|
+
rep_.make_tree(rep);
|
559
671
|
}
|
560
672
|
|
561
673
|
// Set the tree value of this instance to 'rep`.
|
@@ -563,54 +675,198 @@ class InlineData {
|
|
563
675
|
// Does not affect the value of cordz_info.
|
564
676
|
void set_tree(CordRep* rep) {
|
565
677
|
assert(is_tree());
|
566
|
-
|
678
|
+
rep_.set_tree(rep);
|
567
679
|
}
|
568
680
|
|
569
681
|
// Returns the size of the inlined character data inside this instance.
|
570
682
|
// Requires the current instance to hold inline data.
|
571
|
-
size_t inline_size() const {
|
572
|
-
assert(!is_tree());
|
573
|
-
return tag() >> 1;
|
574
|
-
}
|
683
|
+
size_t inline_size() const { return rep_.inline_size(); }
|
575
684
|
|
576
685
|
// Sets the size of the inlined character data inside this instance.
|
577
686
|
// Requires `size` to be <= kMaxInline.
|
578
687
|
// See the documentation on 'as_chars()' for more information and examples.
|
579
688
|
void set_inline_size(size_t size) {
|
580
|
-
|
581
|
-
|
689
|
+
unpoison();
|
690
|
+
rep_.set_inline_size(size);
|
691
|
+
poison();
|
692
|
+
}
|
693
|
+
|
694
|
+
// Compares 'this' inlined data with rhs. The comparison is a straightforward
|
695
|
+
// lexicographic comparison. `Compare()` returns values as follows:
|
696
|
+
//
|
697
|
+
// -1 'this' InlineData instance is smaller
|
698
|
+
// 0 the InlineData instances are equal
|
699
|
+
// 1 'this' InlineData instance larger
|
700
|
+
int Compare(const InlineData& rhs) const {
|
701
|
+
return Compare(rep_.SanitizerSafeCopy(), rhs.rep_.SanitizerSafeCopy());
|
582
702
|
}
|
583
703
|
|
584
704
|
private:
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
// byte of cordz_info will still be the last byte of InlineData.
|
592
|
-
union {
|
705
|
+
struct Rep {
|
706
|
+
// See cordz_info_t for forced alignment and size of `cordz_info` details.
|
707
|
+
struct AsTree {
|
708
|
+
explicit constexpr AsTree(absl::cord_internal::CordRep* tree)
|
709
|
+
: rep(tree) {}
|
710
|
+
cordz_info_t cordz_info = kNullCordzInfo;
|
593
711
|
absl::cord_internal::CordRep* rep;
|
594
|
-
cordz_info_t unused_aligner;
|
595
712
|
};
|
596
|
-
cordz_info_t cordz_info;
|
597
|
-
};
|
598
713
|
|
599
|
-
|
600
|
-
|
714
|
+
explicit Rep(DefaultInitType) {}
|
715
|
+
constexpr Rep() : data{0} {}
|
716
|
+
constexpr Rep(const Rep&) = default;
|
717
|
+
constexpr Rep& operator=(const Rep&) = default;
|
718
|
+
|
719
|
+
explicit constexpr Rep(CordRep* rep) : as_tree(rep) {}
|
720
|
+
|
721
|
+
explicit constexpr Rep(absl::string_view chars)
|
722
|
+
: data{static_cast<char>((chars.size() << 1)),
|
723
|
+
GetOrNull(chars, 0),
|
724
|
+
GetOrNull(chars, 1),
|
725
|
+
GetOrNull(chars, 2),
|
726
|
+
GetOrNull(chars, 3),
|
727
|
+
GetOrNull(chars, 4),
|
728
|
+
GetOrNull(chars, 5),
|
729
|
+
GetOrNull(chars, 6),
|
730
|
+
GetOrNull(chars, 7),
|
731
|
+
GetOrNull(chars, 8),
|
732
|
+
GetOrNull(chars, 9),
|
733
|
+
GetOrNull(chars, 10),
|
734
|
+
GetOrNull(chars, 11),
|
735
|
+
GetOrNull(chars, 12),
|
736
|
+
GetOrNull(chars, 13),
|
737
|
+
GetOrNull(chars, 14)} {}
|
738
|
+
|
739
|
+
// Disable sanitizer as we must always be able to read `tag`.
|
740
|
+
ABSL_CORD_INTERNAL_NO_SANITIZE
|
741
|
+
int8_t tag() const { return reinterpret_cast<const int8_t*>(this)[0]; }
|
742
|
+
void set_tag(int8_t rhs) { reinterpret_cast<int8_t*>(this)[0] = rhs; }
|
743
|
+
|
744
|
+
char* as_chars() { return data + 1; }
|
745
|
+
const char* as_chars() const { return data + 1; }
|
746
|
+
|
747
|
+
bool is_tree() const { return (tag() & 1) != 0; }
|
748
|
+
|
749
|
+
size_t inline_size() const {
|
750
|
+
ABSL_ASSERT(!is_tree());
|
751
|
+
return static_cast<size_t>(tag()) >> 1;
|
752
|
+
}
|
753
|
+
|
754
|
+
void set_inline_size(size_t size) {
|
755
|
+
ABSL_ASSERT(size <= kMaxInline);
|
756
|
+
set_tag(static_cast<int8_t>(size << 1));
|
757
|
+
}
|
758
|
+
|
759
|
+
CordRep* tree() const { return as_tree.rep; }
|
760
|
+
void set_tree(CordRep* rhs) { as_tree.rep = rhs; }
|
761
|
+
|
762
|
+
cordz_info_t cordz_info() const { return as_tree.cordz_info; }
|
763
|
+
void set_cordz_info(cordz_info_t rhs) { as_tree.cordz_info = rhs; }
|
764
|
+
|
765
|
+
void make_tree(CordRep* tree) {
|
766
|
+
as_tree.rep = tree;
|
767
|
+
as_tree.cordz_info = kNullCordzInfo;
|
768
|
+
}
|
769
|
+
|
770
|
+
#ifdef ABSL_INTERNAL_CORD_HAVE_SANITIZER
|
771
|
+
Rep SanitizerSafeCopy() const {
|
772
|
+
Rep res;
|
773
|
+
if (is_tree()) {
|
774
|
+
res = *this;
|
775
|
+
} else {
|
776
|
+
res.set_tag(tag());
|
777
|
+
memcpy(res.as_chars(), as_chars(), inline_size());
|
778
|
+
}
|
779
|
+
return res;
|
780
|
+
}
|
781
|
+
#else
|
782
|
+
const Rep& SanitizerSafeCopy() const { return *this; }
|
783
|
+
#endif
|
601
784
|
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
785
|
+
// If the data has length <= kMaxInline, we store it in `data`, and
|
786
|
+
// store the size in the first char of `data` shifted left + 1.
|
787
|
+
// Else we store it in a tree and store a pointer to that tree in
|
788
|
+
// `as_tree.rep` with a tagged pointer to make `tag() & 1` non zero.
|
789
|
+
union {
|
790
|
+
char data[kMaxInline + 1];
|
791
|
+
AsTree as_tree;
|
792
|
+
};
|
609
793
|
};
|
794
|
+
|
795
|
+
// Private implementation of `Compare()`
|
796
|
+
static inline int Compare(const Rep& lhs, const Rep& rhs) {
|
797
|
+
uint64_t x, y;
|
798
|
+
memcpy(&x, lhs.as_chars(), sizeof(x));
|
799
|
+
memcpy(&y, rhs.as_chars(), sizeof(y));
|
800
|
+
if (x == y) {
|
801
|
+
memcpy(&x, lhs.as_chars() + 7, sizeof(x));
|
802
|
+
memcpy(&y, rhs.as_chars() + 7, sizeof(y));
|
803
|
+
if (x == y) {
|
804
|
+
if (lhs.inline_size() == rhs.inline_size()) return 0;
|
805
|
+
return lhs.inline_size() < rhs.inline_size() ? -1 : 1;
|
806
|
+
}
|
807
|
+
}
|
808
|
+
x = absl::big_endian::FromHost64(x);
|
809
|
+
y = absl::big_endian::FromHost64(y);
|
810
|
+
return x < y ? -1 : 1;
|
811
|
+
}
|
812
|
+
|
813
|
+
Rep rep_;
|
610
814
|
};
|
611
815
|
|
612
816
|
static_assert(sizeof(InlineData) == kMaxInline + 1, "");
|
613
817
|
|
818
|
+
#ifdef ABSL_INTERNAL_CORD_HAVE_SANITIZER
|
819
|
+
|
820
|
+
constexpr InlineData::InlineData(const InlineData& rhs) noexcept
|
821
|
+
: rep_(rhs.rep_.SanitizerSafeCopy()) {
|
822
|
+
poison();
|
823
|
+
}
|
824
|
+
|
825
|
+
inline InlineData& InlineData::operator=(const InlineData& rhs) noexcept {
|
826
|
+
unpoison();
|
827
|
+
rep_ = rhs.rep_.SanitizerSafeCopy();
|
828
|
+
poison();
|
829
|
+
return *this;
|
830
|
+
}
|
831
|
+
|
832
|
+
constexpr void InlineData::poison_this() {
|
833
|
+
if (!absl::is_constant_evaluated()) {
|
834
|
+
container_internal::SanitizerPoisonObject(this);
|
835
|
+
}
|
836
|
+
}
|
837
|
+
|
838
|
+
constexpr void InlineData::unpoison() {
|
839
|
+
if (!absl::is_constant_evaluated()) {
|
840
|
+
container_internal::SanitizerUnpoisonObject(this);
|
841
|
+
}
|
842
|
+
}
|
843
|
+
|
844
|
+
constexpr void InlineData::poison() {
|
845
|
+
if (!absl::is_constant_evaluated()) {
|
846
|
+
if (is_tree()) {
|
847
|
+
container_internal::SanitizerUnpoisonObject(this);
|
848
|
+
} else if (const size_t size = inline_size()) {
|
849
|
+
if (size < kMaxInline) {
|
850
|
+
const char* end = rep_.as_chars() + size;
|
851
|
+
container_internal::SanitizerPoisonMemoryRegion(end, kMaxInline - size);
|
852
|
+
}
|
853
|
+
} else {
|
854
|
+
container_internal::SanitizerPoisonObject(this);
|
855
|
+
}
|
856
|
+
}
|
857
|
+
}
|
858
|
+
|
859
|
+
#else // ABSL_INTERNAL_CORD_HAVE_SANITIZER
|
860
|
+
|
861
|
+
constexpr InlineData::InlineData(const InlineData&) noexcept = default;
|
862
|
+
inline InlineData& InlineData::operator=(const InlineData&) noexcept = default;
|
863
|
+
|
864
|
+
constexpr void InlineData::poison_this() {}
|
865
|
+
constexpr void InlineData::unpoison() {}
|
866
|
+
constexpr void InlineData::poison() {}
|
867
|
+
|
868
|
+
#endif // ABSL_INTERNAL_CORD_HAVE_SANITIZER
|
869
|
+
|
614
870
|
inline CordRepSubstring* CordRep::substring() {
|
615
871
|
assert(IsSubstring());
|
616
872
|
return static_cast<CordRepSubstring*>(this);
|
@@ -17,11 +17,13 @@
|
|
17
17
|
#include <cassert>
|
18
18
|
#include <cstdint>
|
19
19
|
#include <iostream>
|
20
|
+
#include <ostream>
|
20
21
|
#include <string>
|
21
22
|
|
22
23
|
#include "absl/base/attributes.h"
|
23
24
|
#include "absl/base/config.h"
|
24
25
|
#include "absl/base/internal/raw_logging.h"
|
26
|
+
#include "absl/base/optimization.h"
|
25
27
|
#include "absl/strings/internal/cord_data_edge.h"
|
26
28
|
#include "absl/strings/internal/cord_internal.h"
|
27
29
|
#include "absl/strings/internal/cord_rep_consume.h"
|
@@ -55,8 +57,10 @@ inline bool exhaustive_validation() {
|
|
55
57
|
// Prints the entire tree structure or 'rep'. External callers should
|
56
58
|
// not specify 'depth' and leave it to its default (0) value.
|
57
59
|
// Rep may be a CordRepBtree tree, or a SUBSTRING / EXTERNAL / FLAT node.
|
58
|
-
void DumpAll(const CordRep* rep,
|
59
|
-
|
60
|
+
void DumpAll(const CordRep* rep,
|
61
|
+
bool include_contents,
|
62
|
+
std::ostream& stream,
|
63
|
+
size_t depth = 0) {
|
60
64
|
// Allow for full height trees + substring -> flat / external nodes.
|
61
65
|
assert(depth <= CordRepBtree::kMaxDepth + 2);
|
62
66
|
std::string sharing = const_cast<CordRep*>(rep)->refcount.IsOne()
|
@@ -283,7 +287,7 @@ struct StackOperations {
|
|
283
287
|
case CordRepBtree::kSelf:
|
284
288
|
return result.tree;
|
285
289
|
}
|
286
|
-
|
290
|
+
ABSL_UNREACHABLE();
|
287
291
|
return result.tree;
|
288
292
|
}
|
289
293
|
|
@@ -499,7 +503,7 @@ OpResult CordRepBtree::SetEdge(bool owned, CordRep* edge, size_t delta) {
|
|
499
503
|
// open interval [begin, back) or [begin + 1, end) depending on `edge_type`.
|
500
504
|
// We conveniently cover both case using a constexpr `shift` being 0 or 1
|
501
505
|
// as `end :== back + 1`.
|
502
|
-
result = {CopyRaw(), kCopied};
|
506
|
+
result = {CopyRaw(length), kCopied};
|
503
507
|
constexpr int shift = edge_type == kFront ? 1 : 0;
|
504
508
|
for (CordRep* r : Edges(begin() + shift, back() + shift)) {
|
505
509
|
CordRep::Ref(r);
|
@@ -95,8 +95,9 @@ class CordRepBtree : public CordRep {
|
|
95
95
|
// local stack variable compared to Cord's current near 400 bytes stack use.
|
96
96
|
// The maximum `height` value of a node is then `kMaxDepth - 1` as node height
|
97
97
|
// values start with a value of 0 for leaf nodes.
|
98
|
-
static constexpr
|
99
|
-
|
98
|
+
static constexpr size_t kMaxDepth = 12;
|
99
|
+
// See comments on height() for why this is an int and not a size_t.
|
100
|
+
static constexpr int kMaxHeight = static_cast<int>(kMaxDepth - 1);
|
100
101
|
|
101
102
|
// `Action` defines the action for unwinding changes done at the btree's leaf
|
102
103
|
// level that need to be propagated up to the parent node(s). Each operation
|
@@ -445,9 +446,9 @@ class CordRepBtree : public CordRep {
|
|
445
446
|
template <EdgeType edge_type>
|
446
447
|
static CordRepBtree* NewLeaf(absl::string_view data, size_t extra);
|
447
448
|
|
448
|
-
// Creates a raw copy of this Btree node
|
449
|
-
// without adding any references to existing edges.
|
450
|
-
CordRepBtree* CopyRaw() const;
|
449
|
+
// Creates a raw copy of this Btree node with the specified length, copying
|
450
|
+
// all properties, but without adding any references to existing edges.
|
451
|
+
CordRepBtree* CopyRaw(size_t new_length) const;
|
451
452
|
|
452
453
|
// Creates a full copy of this Btree node, adding a reference on all edges.
|
453
454
|
CordRepBtree* Copy() const;
|
@@ -665,15 +666,28 @@ inline void CordRepBtree::Unref(absl::Span<CordRep* const> edges) {
|
|
665
666
|
}
|
666
667
|
}
|
667
668
|
|
668
|
-
inline CordRepBtree* CordRepBtree::CopyRaw() const {
|
669
|
-
|
670
|
-
|
671
|
-
|
669
|
+
inline CordRepBtree* CordRepBtree::CopyRaw(size_t new_length) const {
|
670
|
+
CordRepBtree* tree = new CordRepBtree;
|
671
|
+
|
672
|
+
// `length` and `refcount` are the first members of `CordRepBtree`.
|
673
|
+
// We initialize `length` using the given length, have `refcount` be set to
|
674
|
+
// ref = 1 through its default constructor, and copy all data beyond
|
675
|
+
// 'refcount' which starts with `tag` using a single memcpy: all contents
|
676
|
+
// except `refcount` is trivially copyable, and the compiler does not
|
677
|
+
// efficiently coalesce member-wise copy of these members.
|
678
|
+
// See https://gcc.godbolt.org/z/qY8zsca6z
|
679
|
+
// # LINT.IfChange(copy_raw)
|
680
|
+
tree->length = new_length;
|
681
|
+
uint8_t* dst = &tree->tag;
|
682
|
+
const uint8_t* src = &tag;
|
683
|
+
const ptrdiff_t offset = src - reinterpret_cast<const uint8_t*>(this);
|
684
|
+
memcpy(dst, src, sizeof(CordRepBtree) - static_cast<size_t>(offset));
|
672
685
|
return tree;
|
686
|
+
// # LINT.ThenChange()
|
673
687
|
}
|
674
688
|
|
675
689
|
inline CordRepBtree* CordRepBtree::Copy() const {
|
676
|
-
CordRepBtree* tree = CopyRaw();
|
690
|
+
CordRepBtree* tree = CopyRaw(length);
|
677
691
|
for (CordRep* rep : Edges()) CordRep::Ref(rep);
|
678
692
|
return tree;
|
679
693
|
}
|
@@ -682,8 +696,7 @@ inline CordRepBtree* CordRepBtree::CopyToEndFrom(size_t begin,
|
|
682
696
|
size_t new_length) const {
|
683
697
|
assert(begin >= this->begin());
|
684
698
|
assert(begin <= this->end());
|
685
|
-
CordRepBtree* tree = CopyRaw();
|
686
|
-
tree->length = new_length;
|
699
|
+
CordRepBtree* tree = CopyRaw(new_length);
|
687
700
|
tree->set_begin(begin);
|
688
701
|
for (CordRep* edge : tree->Edges()) CordRep::Ref(edge);
|
689
702
|
return tree;
|
@@ -693,8 +706,7 @@ inline CordRepBtree* CordRepBtree::CopyBeginTo(size_t end,
|
|
693
706
|
size_t new_length) const {
|
694
707
|
assert(end <= capacity());
|
695
708
|
assert(end >= this->begin());
|
696
|
-
CordRepBtree* tree = CopyRaw();
|
697
|
-
tree->length = new_length;
|
709
|
+
CordRepBtree* tree = CopyRaw(new_length);
|
698
710
|
tree->set_end(end);
|
699
711
|
for (CordRep* edge : tree->Edges()) CordRep::Ref(edge);
|
700
712
|
return tree;
|