grpc 1.30.2 → 1.31.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 +560 -619
- data/include/grpc/grpc_security_constants.h +3 -0
- data/include/grpc/impl/codegen/grpc_types.h +7 -5
- data/include/grpc/impl/codegen/port_platform.h +0 -32
- data/src/core/ext/filters/client_channel/backend_metric.cc +12 -9
- data/src/core/ext/filters/client_channel/client_channel.cc +406 -265
- data/src/core/ext/filters/client_channel/config_selector.cc +62 -0
- data/src/core/ext/filters/client_channel/config_selector.h +93 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -2
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +2 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +6 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +6 -4
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +39 -23
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +4 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +376 -68
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +5 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +6 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +8 -6
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +9 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +7 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -48
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +21 -18
- data/src/core/ext/filters/client_channel/resolver_registry.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +6 -7
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +33 -28
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +39 -20
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +142 -0
- data/src/core/ext/filters/client_channel/subchannel.cc +1 -1
- data/src/core/ext/filters/client_channel/xds/xds_api.cc +327 -123
- data/src/core/ext/filters/client_channel/xds/xds_api.h +72 -7
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +12 -23
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +112 -33
- data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +10 -10
- data/src/core/ext/filters/http/client/http_client_filter.cc +5 -5
- data/src/core/ext/filters/http/http_filters_plugin.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +74 -33
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +3 -1
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -80
- data/src/core/ext/filters/message_size/message_size_filter.h +6 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +383 -347
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +1 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -13
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +19 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +22 -27
- data/src/core/ext/transport/chttp2/transport/flow_control.h +14 -16
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -13
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -7
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +9 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -29
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +13 -17
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +33 -43
- data/src/core/ext/transport/chttp2/transport/writing.cc +9 -14
- data/src/core/ext/transport/inproc/inproc_transport.cc +35 -15
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +3 -4
- data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +80 -69
- data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +24 -23
- data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +66 -56
- data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +317 -311
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.h +42 -34
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.h +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.h +79 -61
- data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.h +55 -49
- data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +9 -8
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +163 -169
- data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.h +51 -45
- data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +4 -5
- data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.h +107 -100
- data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +137 -117
- data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.h +9 -9
- data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +105 -87
- data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +12 -13
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.h +95 -101
- data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.h +49 -65
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +49 -42
- data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.h +70 -62
- data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +81 -65
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.h +91 -80
- data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.h +9 -10
- data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/api/v2/route.upb.h +36 -31
- data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +648 -696
- data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.h +16 -15
- data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.h +95 -88
- data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +234 -199
- data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.h +5 -5
- data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +13 -13
- data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.h +1 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +20 -18
- data/src/core/ext/upb-generated/envoy/type/http.upb.h +0 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +18 -17
- data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.h +14 -14
- data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.h +23 -23
- data/src/core/ext/upb-generated/envoy/type/percent.upb.h +8 -9
- data/src/core/ext/upb-generated/envoy/type/range.upb.h +15 -16
- data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.h +7 -8
- data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.h +36 -35
- data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +0 -1
- data/src/core/ext/upb-generated/google/api/http.upb.h +29 -28
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +3 -3
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +412 -386
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +1 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +33 -54
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +5 -6
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +27 -28
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +1 -1
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +32 -45
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +157 -178
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +14 -13
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +6 -7
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +59 -56
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +11 -12
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +0 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +5 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +6 -6
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +41 -68
- data/src/core/ext/upb-generated/validate/validate.upb.h +536 -535
- data/src/core/lib/channel/channel_trace.cc +2 -6
- data/src/core/lib/channel/channelz.cc +5 -15
- data/src/core/lib/gpr/log_linux.cc +6 -8
- data/src/core/lib/gpr/log_posix.cc +6 -8
- data/src/core/lib/gpr/string.cc +10 -9
- data/src/core/lib/gpr/string.h +4 -2
- data/src/core/lib/gprpp/global_config_env.cc +8 -6
- data/src/core/lib/http/httpcli.cc +13 -10
- data/src/core/lib/http/httpcli_security_connector.cc +5 -5
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +10 -10
- data/src/core/lib/iomgr/error_cfstream.cc +9 -8
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +5 -6
- data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -21
- data/src/core/lib/iomgr/ev_poll_posix.cc +6 -5
- data/src/core/lib/iomgr/ev_posix.cc +2 -0
- data/src/core/lib/iomgr/iomgr.cc +10 -0
- data/src/core/lib/iomgr/iomgr.h +10 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +14 -0
- data/src/core/lib/iomgr/port.h +1 -21
- data/src/core/lib/iomgr/resolve_address_custom.cc +13 -18
- data/src/core/lib/iomgr/resolve_address_windows.cc +8 -8
- data/src/core/lib/iomgr/resource_quota.cc +34 -31
- data/src/core/lib/iomgr/sockaddr_utils.cc +7 -5
- data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +95 -55
- data/src/core/lib/iomgr/socket_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -11
- data/src/core/lib/iomgr/tcp_client_custom.cc +6 -9
- data/src/core/lib/iomgr/tcp_client_posix.cc +27 -36
- data/src/core/lib/iomgr/tcp_client_windows.cc +9 -9
- data/src/core/lib/iomgr/tcp_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_custom.h +1 -1
- data/src/core/lib/iomgr/tcp_server.cc +3 -4
- data/src/core/lib/iomgr/tcp_server.h +7 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +6 -14
- data/src/core/lib/iomgr/tcp_server_posix.cc +34 -41
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -9
- data/src/core/lib/iomgr/tcp_server_windows.cc +16 -16
- data/src/core/lib/iomgr/timer_generic.cc +13 -12
- data/src/core/lib/iomgr/udp_server.cc +24 -23
- data/src/core/lib/iomgr/udp_server.h +5 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +9 -14
- data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +5 -2
- data/src/core/lib/json/json_reader.cc +20 -21
- data/src/core/lib/security/credentials/credentials.h +5 -3
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +8 -6
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -9
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +19 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -6
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +20 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +10 -0
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +10 -10
- data/src/core/lib/security/security_connector/security_connector.cc +2 -0
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -11
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +5 -0
- data/src/core/lib/security/security_connector/ssl_utils.cc +44 -23
- data/src/core/lib/security/security_connector/ssl_utils.h +6 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +27 -24
- data/src/core/lib/security/transport/client_auth_filter.cc +10 -9
- data/src/core/lib/security/util/json_util.cc +12 -13
- data/src/core/lib/slice/slice.cc +38 -1
- data/src/core/lib/slice/slice_internal.h +1 -0
- data/src/core/lib/surface/call.cc +40 -41
- data/src/core/lib/surface/completion_queue.cc +271 -14
- data/src/core/lib/surface/completion_queue.h +8 -0
- data/src/core/lib/surface/init.cc +2 -0
- data/src/core/lib/surface/server.cc +565 -632
- data/src/core/lib/surface/server.h +34 -12
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/transport.h +6 -0
- data/src/core/lib/uri/uri_parser.cc +8 -15
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +23 -13
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +2 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -0
- data/src/core/tsi/ssl_transport_security.cc +102 -11
- data/src/core/tsi/ssl_transport_security.h +14 -2
- data/src/core/tsi/transport_security_interface.h +5 -0
- data/src/ruby/ext/grpc/extconf.rb +5 -2
- data/src/ruby/ext/grpc/rb_call.c +3 -2
- data/src/ruby/ext/grpc/rb_call.h +4 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +54 -10
- data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/err_data.c +89 -83
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +12 -52
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +0 -22
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +143 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +17 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +11 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +24 -23
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +20 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/util.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +62 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +7 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -5
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +0 -29
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +116 -363
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +7 -45
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +4 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +0 -67
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +13 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +28 -9
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +25 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +35 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +0 -154
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +28 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +74 -35
- data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +16 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +22 -22
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +69 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +33 -16
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -10
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +789 -715
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +3 -3
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +9 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +17 -14
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -7
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +28 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +4 -24
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +5 -5
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +45 -24
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +31 -21
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +12 -9
- data/third_party/upb/upb/decode.c +467 -504
- data/third_party/upb/upb/encode.c +163 -121
- data/third_party/upb/upb/msg.c +130 -64
- data/third_party/upb/upb/msg.h +418 -14
- data/third_party/upb/upb/port_def.inc +35 -6
- data/third_party/upb/upb/port_undef.inc +8 -1
- data/third_party/upb/upb/table.c +53 -75
- data/third_party/upb/upb/table.int.h +11 -43
- data/third_party/upb/upb/upb.c +148 -124
- data/third_party/upb/upb/upb.h +65 -147
- data/third_party/upb/upb/upb.hpp +86 -0
- metadata +40 -37
- data/third_party/upb/upb/generated_util.h +0 -105
@@ -52,19 +52,8 @@ typedef enum {
|
|
52
52
|
|
53
53
|
typedef struct {
|
54
54
|
uint64_t val;
|
55
|
-
#ifndef NDEBUG
|
56
|
-
/* In debug mode we carry the value type around also so we can check accesses
|
57
|
-
* to be sure the right member is being read. */
|
58
|
-
upb_ctype_t ctype;
|
59
|
-
#endif
|
60
55
|
} upb_value;
|
61
56
|
|
62
|
-
#ifdef NDEBUG
|
63
|
-
#define SET_TYPE(dest, val) UPB_UNUSED(val)
|
64
|
-
#else
|
65
|
-
#define SET_TYPE(dest, val) dest = val
|
66
|
-
#endif
|
67
|
-
|
68
57
|
/* Like strdup(), which isn't always available since it's not ANSI C. */
|
69
58
|
char *upb_strdup(const char *s, upb_alloc *a);
|
70
59
|
/* Variant that works with a length-delimited rather than NULL-delimited string,
|
@@ -75,15 +64,13 @@ UPB_INLINE char *upb_gstrdup(const char *s) {
|
|
75
64
|
return upb_strdup(s, &upb_alloc_global);
|
76
65
|
}
|
77
66
|
|
78
|
-
UPB_INLINE void _upb_value_setval(upb_value *v, uint64_t val
|
79
|
-
upb_ctype_t ctype) {
|
67
|
+
UPB_INLINE void _upb_value_setval(upb_value *v, uint64_t val) {
|
80
68
|
v->val = val;
|
81
|
-
SET_TYPE(v->ctype, ctype);
|
82
69
|
}
|
83
70
|
|
84
|
-
UPB_INLINE upb_value _upb_value_val(uint64_t val
|
71
|
+
UPB_INLINE upb_value _upb_value_val(uint64_t val) {
|
85
72
|
upb_value ret;
|
86
|
-
_upb_value_setval(&ret, val
|
73
|
+
_upb_value_setval(&ret, val);
|
87
74
|
return ret;
|
88
75
|
}
|
89
76
|
|
@@ -98,7 +85,6 @@ UPB_INLINE upb_value _upb_value_val(uint64_t val, upb_ctype_t ctype) {
|
|
98
85
|
#define FUNCS(name, membername, type_t, converter, proto_type) \
|
99
86
|
UPB_INLINE void upb_value_set ## name(upb_value *val, type_t cval) { \
|
100
87
|
val->val = (converter)cval; \
|
101
|
-
SET_TYPE(val->ctype, proto_type); \
|
102
88
|
} \
|
103
89
|
UPB_INLINE upb_value upb_value_ ## name(type_t val) { \
|
104
90
|
upb_value ret; \
|
@@ -106,7 +92,6 @@ UPB_INLINE upb_value _upb_value_val(uint64_t val, upb_ctype_t ctype) {
|
|
106
92
|
return ret; \
|
107
93
|
} \
|
108
94
|
UPB_INLINE type_t upb_value_get ## name(upb_value val) { \
|
109
|
-
UPB_ASSERT_DEBUGVAR(val.ctype == proto_type); \
|
110
95
|
return (type_t)(converter)val.val; \
|
111
96
|
}
|
112
97
|
|
@@ -124,12 +109,10 @@ FUNCS(fptr, fptr, upb_func*, uintptr_t, UPB_CTYPE_FPTR)
|
|
124
109
|
|
125
110
|
UPB_INLINE void upb_value_setfloat(upb_value *val, float cval) {
|
126
111
|
memcpy(&val->val, &cval, sizeof(cval));
|
127
|
-
SET_TYPE(val->ctype, UPB_CTYPE_FLOAT);
|
128
112
|
}
|
129
113
|
|
130
114
|
UPB_INLINE void upb_value_setdouble(upb_value *val, double cval) {
|
131
115
|
memcpy(&val->val, &cval, sizeof(cval));
|
132
|
-
SET_TYPE(val->ctype, UPB_CTYPE_DOUBLE);
|
133
116
|
}
|
134
117
|
|
135
118
|
UPB_INLINE upb_value upb_value_float(float cval) {
|
@@ -173,7 +156,6 @@ typedef struct {
|
|
173
156
|
|
174
157
|
#define UPB_TABVALUE_EMPTY_INIT {-1}
|
175
158
|
|
176
|
-
|
177
159
|
/* upb_table ******************************************************************/
|
178
160
|
|
179
161
|
typedef struct _upb_tabent {
|
@@ -190,7 +172,6 @@ typedef struct _upb_tabent {
|
|
190
172
|
typedef struct {
|
191
173
|
size_t count; /* Number of entries in the hash part. */
|
192
174
|
size_t mask; /* Mask to turn hash value -> bucket. */
|
193
|
-
upb_ctype_t ctype; /* Type of all values. */
|
194
175
|
uint8_t size_lg2; /* Size of the hashtable part is 2^size_lg2 entries. */
|
195
176
|
|
196
177
|
/* Hash table entries.
|
@@ -200,17 +181,6 @@ typedef struct {
|
|
200
181
|
* initialize const hash tables. Then we cast away const when we have to.
|
201
182
|
*/
|
202
183
|
const upb_tabent *entries;
|
203
|
-
|
204
|
-
#ifndef NDEBUG
|
205
|
-
/* This table's allocator. We make the user pass it in to every relevant
|
206
|
-
* function and only use this to check it in debug mode. We do this solely
|
207
|
-
* to keep upb_table as small as possible. This might seem slightly paranoid
|
208
|
-
* but the plan is to use upb_table for all map fields and extension sets in
|
209
|
-
* a forthcoming message representation, so there could be a lot of these.
|
210
|
-
* If this turns out to be too annoying later, we can change it (since this
|
211
|
-
* is an internal-only header file). */
|
212
|
-
upb_alloc *alloc;
|
213
|
-
#endif
|
214
184
|
} upb_table;
|
215
185
|
|
216
186
|
typedef struct {
|
@@ -224,12 +194,6 @@ typedef struct {
|
|
224
194
|
size_t array_count; /* Array part number of elements. */
|
225
195
|
} upb_inttable;
|
226
196
|
|
227
|
-
#define UPB_INTTABLE_INIT(count, mask, ctype, size_lg2, ent, a, asize, acount) \
|
228
|
-
{UPB_TABLE_INIT(count, mask, ctype, size_lg2, ent), a, asize, acount}
|
229
|
-
|
230
|
-
#define UPB_EMPTY_INTTABLE_INIT(ctype) \
|
231
|
-
UPB_INTTABLE_INIT(0, 0, ctype, 0, NULL, NULL, 0, 0)
|
232
|
-
|
233
197
|
#define UPB_ARRAY_EMPTYENT -1
|
234
198
|
|
235
199
|
UPB_INLINE size_t upb_table_size(const upb_table *t) {
|
@@ -298,6 +262,7 @@ upb_inttable *upb_inttable_pack(const upb_inttable *t, void *p, size_t *ofs,
|
|
298
262
|
size_t size);
|
299
263
|
upb_strtable *upb_strtable_pack(const upb_strtable *t, void *p, size_t *ofs,
|
300
264
|
size_t size);
|
265
|
+
void upb_strtable_clear(upb_strtable *t);
|
301
266
|
|
302
267
|
/* Inserts the given key into the hashtable with the given value. The key must
|
303
268
|
* not already exist in the hash table. For string tables, the key must be
|
@@ -399,7 +364,7 @@ UPB_INLINE bool upb_inttable_lookup32(const upb_inttable *t, uint32_t key,
|
|
399
364
|
if (key < t->array_size) {
|
400
365
|
upb_tabval arrval = t->array[key];
|
401
366
|
if (upb_arrhas(arrval)) {
|
402
|
-
_upb_value_setval(v, arrval.val
|
367
|
+
_upb_value_setval(v, arrval.val);
|
403
368
|
return true;
|
404
369
|
} else {
|
405
370
|
return false;
|
@@ -409,7 +374,7 @@ UPB_INLINE bool upb_inttable_lookup32(const upb_inttable *t, uint32_t key,
|
|
409
374
|
if (t->t.entries == NULL) return false;
|
410
375
|
for (e = upb_getentry(&t->t, upb_inthash(key)); true; e = e->next) {
|
411
376
|
if ((uint32_t)e->key == key) {
|
412
|
-
_upb_value_setval(v, e->val.val
|
377
|
+
_upb_value_setval(v, e->val.val);
|
413
378
|
return true;
|
414
379
|
}
|
415
380
|
if (e->next == NULL) return false;
|
@@ -463,8 +428,7 @@ typedef struct {
|
|
463
428
|
void upb_strtable_begin(upb_strtable_iter *i, const upb_strtable *t);
|
464
429
|
void upb_strtable_next(upb_strtable_iter *i);
|
465
430
|
bool upb_strtable_done(const upb_strtable_iter *i);
|
466
|
-
|
467
|
-
size_t upb_strtable_iter_keylength(const upb_strtable_iter *i);
|
431
|
+
upb_strview upb_strtable_iter_key(const upb_strtable_iter *i);
|
468
432
|
upb_value upb_strtable_iter_value(const upb_strtable_iter *i);
|
469
433
|
void upb_strtable_iter_setdone(upb_strtable_iter *i);
|
470
434
|
bool upb_strtable_iter_isequal(const upb_strtable_iter *i1,
|
@@ -488,6 +452,10 @@ typedef struct {
|
|
488
452
|
bool array_part;
|
489
453
|
} upb_inttable_iter;
|
490
454
|
|
455
|
+
UPB_INLINE const upb_tabent *str_tabent(const upb_strtable_iter *i) {
|
456
|
+
return &i->t->t.entries[i->index];
|
457
|
+
}
|
458
|
+
|
491
459
|
void upb_inttable_begin(upb_inttable_iter *i, const upb_inttable *t);
|
492
460
|
void upb_inttable_next(upb_inttable_iter *i);
|
493
461
|
bool upb_inttable_done(const upb_inttable_iter *i);
|
data/third_party/upb/upb/upb.c
CHANGED
@@ -11,17 +11,6 @@
|
|
11
11
|
|
12
12
|
#include "upb/port_def.inc"
|
13
13
|
|
14
|
-
/* Guarantee null-termination and provide ellipsis truncation.
|
15
|
-
* It may be tempting to "optimize" this by initializing these final
|
16
|
-
* four bytes up-front and then being careful never to overwrite them,
|
17
|
-
* this is safer and simpler. */
|
18
|
-
static void nullz(upb_status *status) {
|
19
|
-
const char *ellipsis = "...";
|
20
|
-
size_t len = strlen(ellipsis);
|
21
|
-
UPB_ASSERT(sizeof(status->msg) > len);
|
22
|
-
memcpy(status->msg + sizeof(status->msg) - len, ellipsis, len);
|
23
|
-
}
|
24
|
-
|
25
14
|
/* upb_status *****************************************************************/
|
26
15
|
|
27
16
|
void upb_status_clear(upb_status *status) {
|
@@ -37,8 +26,8 @@ const char *upb_status_errmsg(const upb_status *status) { return status->msg; }
|
|
37
26
|
void upb_status_seterrmsg(upb_status *status, const char *msg) {
|
38
27
|
if (!status) return;
|
39
28
|
status->ok = false;
|
40
|
-
strncpy(status->msg, msg,
|
41
|
-
|
29
|
+
strncpy(status->msg, msg, UPB_STATUS_MAX_MESSAGE - 1);
|
30
|
+
status->msg[UPB_STATUS_MAX_MESSAGE - 1] = '\0';
|
42
31
|
}
|
43
32
|
|
44
33
|
void upb_status_seterrf(upb_status *status, const char *fmt, ...) {
|
@@ -52,7 +41,16 @@ void upb_status_vseterrf(upb_status *status, const char *fmt, va_list args) {
|
|
52
41
|
if (!status) return;
|
53
42
|
status->ok = false;
|
54
43
|
_upb_vsnprintf(status->msg, sizeof(status->msg), fmt, args);
|
55
|
-
|
44
|
+
status->msg[UPB_STATUS_MAX_MESSAGE - 1] = '\0';
|
45
|
+
}
|
46
|
+
|
47
|
+
void upb_status_vappenderrf(upb_status *status, const char *fmt, va_list args) {
|
48
|
+
size_t len;
|
49
|
+
if (!status) return;
|
50
|
+
status->ok = false;
|
51
|
+
len = strlen(status->msg);
|
52
|
+
_upb_vsnprintf(status->msg + len, sizeof(status->msg) - len, fmt, args);
|
53
|
+
status->msg[UPB_STATUS_MAX_MESSAGE - 1] = '\0';
|
56
54
|
}
|
57
55
|
|
58
56
|
/* upb_alloc ******************************************************************/
|
@@ -74,188 +72,214 @@ upb_alloc upb_alloc_global = {&upb_global_allocfunc};
|
|
74
72
|
/* upb_arena ******************************************************************/
|
75
73
|
|
76
74
|
/* Be conservative and choose 16 in case anyone is using SSE. */
|
77
|
-
static const size_t maxalign = 16;
|
78
75
|
|
79
|
-
|
80
|
-
|
81
|
-
|
76
|
+
typedef struct mem_block {
|
77
|
+
struct mem_block *next;
|
78
|
+
uint32_t size;
|
79
|
+
uint32_t cleanups;
|
80
|
+
/* Data follows. */
|
81
|
+
} mem_block;
|
82
|
+
|
83
|
+
typedef struct cleanup_ent {
|
84
|
+
upb_cleanup_func *cleanup;
|
85
|
+
void *ud;
|
86
|
+
} cleanup_ent;
|
82
87
|
|
83
88
|
struct upb_arena {
|
84
|
-
|
85
|
-
|
86
|
-
upb_alloc alloc;
|
89
|
+
_upb_arena_head head;
|
90
|
+
uint32_t *cleanups;
|
87
91
|
|
88
92
|
/* Allocator to allocate arena blocks. We are responsible for freeing these
|
89
93
|
* when we are destroyed. */
|
90
94
|
upb_alloc *block_alloc;
|
95
|
+
uint32_t last_size;
|
91
96
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
void *block_head;
|
97
|
+
/* When multiple arenas are fused together, each arena points to a parent
|
98
|
+
* arena (root points to itself). The root tracks how many live arenas
|
99
|
+
* reference it. */
|
100
|
+
uint32_t refcount; /* Only used when a->parent == a */
|
101
|
+
struct upb_arena *parent;
|
98
102
|
|
99
|
-
/*
|
100
|
-
|
103
|
+
/* Linked list of blocks to free/cleanup. */
|
104
|
+
mem_block *freelist, *freelist_tail;
|
101
105
|
};
|
102
106
|
|
103
|
-
|
104
|
-
struct mem_block *next;
|
105
|
-
size_t size;
|
106
|
-
size_t used;
|
107
|
-
bool owned;
|
108
|
-
/* Data follows. */
|
109
|
-
} mem_block;
|
110
|
-
|
111
|
-
typedef struct cleanup_ent {
|
112
|
-
struct cleanup_ent *next;
|
113
|
-
upb_cleanup_func *cleanup;
|
114
|
-
void *ud;
|
115
|
-
} cleanup_ent;
|
107
|
+
static const size_t memblock_reserve = UPB_ALIGN_UP(sizeof(mem_block), 16);
|
116
108
|
|
117
|
-
static void upb_arena_addblock(upb_arena *a, void *ptr, size_t size
|
118
|
-
bool owned) {
|
109
|
+
static void upb_arena_addblock(upb_arena *a, void *ptr, size_t size) {
|
119
110
|
mem_block *block = ptr;
|
120
111
|
|
121
|
-
block->next = a->
|
122
|
-
block->size = size;
|
123
|
-
block->
|
124
|
-
|
112
|
+
block->next = a->freelist;
|
113
|
+
block->size = (uint32_t)size;
|
114
|
+
block->cleanups = 0;
|
115
|
+
a->freelist = block;
|
116
|
+
a->last_size = block->size;
|
117
|
+
if (!a->freelist_tail) a->freelist_tail = block;
|
125
118
|
|
126
|
-
a->
|
119
|
+
a->head.ptr = UPB_PTR_AT(block, memblock_reserve, char);
|
120
|
+
a->head.end = UPB_PTR_AT(block, size, char);
|
121
|
+
a->cleanups = &block->cleanups;
|
127
122
|
|
128
123
|
/* TODO(haberman): ASAN poison. */
|
129
124
|
}
|
130
125
|
|
131
|
-
static
|
132
|
-
size_t block_size = UPB_MAX(size, a->
|
126
|
+
static bool upb_arena_allocblock(upb_arena *a, size_t size) {
|
127
|
+
size_t block_size = UPB_MAX(size, a->last_size * 2) + memblock_reserve;
|
133
128
|
mem_block *block = upb_malloc(a->block_alloc, block_size);
|
134
129
|
|
135
|
-
if (!block)
|
136
|
-
|
137
|
-
|
130
|
+
if (!block) return false;
|
131
|
+
upb_arena_addblock(a, block, block_size);
|
132
|
+
return true;
|
133
|
+
}
|
138
134
|
|
139
|
-
|
140
|
-
|
135
|
+
static bool arena_has(upb_arena *a, size_t size) {
|
136
|
+
_upb_arena_head *h = (_upb_arena_head*)a;
|
137
|
+
return (size_t)(h->end - h->ptr) >= size;
|
138
|
+
}
|
141
139
|
|
142
|
-
|
140
|
+
void *_upb_arena_slowmalloc(upb_arena *a, size_t size) {
|
141
|
+
if (!upb_arena_allocblock(a, size)) return NULL; /* Out of memory. */
|
142
|
+
UPB_ASSERT(arena_has(a, size));
|
143
|
+
return upb_arena_malloc(a, size);
|
143
144
|
}
|
144
145
|
|
145
146
|
static void *upb_arena_doalloc(upb_alloc *alloc, void *ptr, size_t oldsize,
|
146
147
|
size_t size) {
|
147
148
|
upb_arena *a = (upb_arena*)alloc; /* upb_alloc is initial member. */
|
148
|
-
|
149
|
-
|
149
|
+
return upb_arena_realloc(a, ptr, oldsize, size);
|
150
|
+
}
|
150
151
|
|
151
|
-
|
152
|
-
|
152
|
+
static upb_arena *arena_findroot(upb_arena *a) {
|
153
|
+
/* Path splitting keeps time complexity down, see:
|
154
|
+
* https://en.wikipedia.org/wiki/Disjoint-set_data_structure */
|
155
|
+
while (a->parent != a) {
|
156
|
+
upb_arena *next = a->parent;
|
157
|
+
a->parent = next->parent;
|
158
|
+
a = next;
|
153
159
|
}
|
160
|
+
return a;
|
161
|
+
}
|
154
162
|
|
155
|
-
|
156
|
-
|
157
|
-
/* TODO(haberman): special-case if this is a realloc of the last alloc? */
|
163
|
+
/* Public Arena API ***********************************************************/
|
158
164
|
|
159
|
-
|
160
|
-
|
161
|
-
|
165
|
+
upb_arena *arena_initslow(void *mem, size_t n, upb_alloc *alloc) {
|
166
|
+
const size_t first_block_overhead = sizeof(upb_arena) + memblock_reserve;
|
167
|
+
upb_arena *a;
|
162
168
|
|
163
|
-
|
164
|
-
|
165
|
-
|
169
|
+
/* We need to malloc the initial block. */
|
170
|
+
n = first_block_overhead + 256;
|
171
|
+
if (!alloc || !(mem = upb_malloc(alloc, n))) {
|
172
|
+
return NULL;
|
166
173
|
}
|
167
174
|
|
168
|
-
|
169
|
-
|
175
|
+
a = UPB_PTR_AT(mem, n - sizeof(*a), upb_arena);
|
176
|
+
n -= sizeof(*a);
|
170
177
|
|
171
|
-
|
172
|
-
|
173
|
-
|
178
|
+
a->head.alloc.func = &upb_arena_doalloc;
|
179
|
+
a->block_alloc = alloc;
|
180
|
+
a->parent = a;
|
181
|
+
a->refcount = 1;
|
182
|
+
a->freelist = NULL;
|
183
|
+
a->freelist_tail = NULL;
|
174
184
|
|
175
|
-
|
185
|
+
upb_arena_addblock(a, mem, n);
|
176
186
|
|
177
|
-
a
|
178
|
-
return ret;
|
187
|
+
return a;
|
179
188
|
}
|
180
189
|
|
181
|
-
/* Public Arena API ***********************************************************/
|
182
|
-
|
183
|
-
#define upb_alignof(type) offsetof (struct { char c; type member; }, member)
|
184
|
-
|
185
190
|
upb_arena *upb_arena_init(void *mem, size_t n, upb_alloc *alloc) {
|
186
|
-
const size_t first_block_overhead = sizeof(upb_arena) + sizeof(mem_block);
|
187
191
|
upb_arena *a;
|
188
|
-
bool owned = false;
|
189
192
|
|
190
193
|
/* Round block size down to alignof(*a) since we will allocate the arena
|
191
194
|
* itself at the end. */
|
192
|
-
n
|
193
|
-
|
194
|
-
if (n <
|
195
|
-
|
196
|
-
n = first_block_overhead + 256;
|
197
|
-
owned = true;
|
198
|
-
if (!alloc || !(mem = upb_malloc(alloc, n))) {
|
199
|
-
return NULL;
|
200
|
-
}
|
195
|
+
n = UPB_ALIGN_DOWN(n, UPB_ALIGN_OF(upb_arena));
|
196
|
+
|
197
|
+
if (UPB_UNLIKELY(n < sizeof(upb_arena))) {
|
198
|
+
return arena_initslow(mem, n, alloc);
|
201
199
|
}
|
202
200
|
|
203
|
-
a = (
|
201
|
+
a = UPB_PTR_AT(mem, n - sizeof(*a), upb_arena);
|
204
202
|
n -= sizeof(*a);
|
205
203
|
|
206
|
-
a->alloc.func = &upb_arena_doalloc;
|
207
|
-
a->block_alloc = &upb_alloc_global;
|
208
|
-
a->bytes_allocated = 0;
|
209
|
-
a->next_block_size = 256;
|
210
|
-
a->max_block_size = 16384;
|
211
|
-
a->cleanup_head = NULL;
|
212
|
-
a->block_head = NULL;
|
204
|
+
a->head.alloc.func = &upb_arena_doalloc;
|
213
205
|
a->block_alloc = alloc;
|
214
|
-
|
215
|
-
|
206
|
+
a->parent = a;
|
207
|
+
a->refcount = 1;
|
208
|
+
a->last_size = 128;
|
209
|
+
a->head.ptr = mem;
|
210
|
+
a->head.end = UPB_PTR_AT(mem, n, char);
|
211
|
+
a->freelist = NULL;
|
212
|
+
a->cleanups = NULL;
|
216
213
|
|
217
214
|
return a;
|
218
215
|
}
|
219
216
|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
mem_block *block = a->block_head;
|
225
|
-
|
226
|
-
while (ent) {
|
227
|
-
ent->cleanup(ent->ud);
|
228
|
-
ent = ent->next;
|
229
|
-
}
|
217
|
+
static void arena_dofree(upb_arena *a) {
|
218
|
+
mem_block *block = a->freelist;
|
219
|
+
UPB_ASSERT(a->parent == a);
|
220
|
+
UPB_ASSERT(a->refcount == 0);
|
230
221
|
|
231
|
-
/* Must do this after running cleanup functions, because this will delete
|
232
|
-
* the memory we store our cleanup entries in! */
|
233
222
|
while (block) {
|
234
223
|
/* Load first since we are deleting block. */
|
235
224
|
mem_block *next = block->next;
|
236
225
|
|
237
|
-
if (block->
|
238
|
-
|
226
|
+
if (block->cleanups > 0) {
|
227
|
+
cleanup_ent *end = UPB_PTR_AT(block, block->size, void);
|
228
|
+
cleanup_ent *ptr = end - block->cleanups;
|
229
|
+
|
230
|
+
for (; ptr < end; ptr++) {
|
231
|
+
ptr->cleanup(ptr->ud);
|
232
|
+
}
|
239
233
|
}
|
240
234
|
|
235
|
+
upb_free(a->block_alloc, block);
|
241
236
|
block = next;
|
242
237
|
}
|
243
238
|
}
|
244
239
|
|
240
|
+
void upb_arena_free(upb_arena *a) {
|
241
|
+
a = arena_findroot(a);
|
242
|
+
if (--a->refcount == 0) arena_dofree(a);
|
243
|
+
}
|
244
|
+
|
245
245
|
bool upb_arena_addcleanup(upb_arena *a, void *ud, upb_cleanup_func *func) {
|
246
|
-
cleanup_ent *ent
|
247
|
-
|
248
|
-
|
246
|
+
cleanup_ent *ent;
|
247
|
+
|
248
|
+
if (!a->cleanups || !arena_has(a, sizeof(cleanup_ent))) {
|
249
|
+
if (!upb_arena_allocblock(a, 128)) return false; /* Out of memory. */
|
250
|
+
UPB_ASSERT(arena_has(a, sizeof(cleanup_ent)));
|
249
251
|
}
|
250
252
|
|
253
|
+
a->head.end -= sizeof(cleanup_ent);
|
254
|
+
ent = (cleanup_ent*)a->head.end;
|
255
|
+
(*a->cleanups)++;
|
256
|
+
|
251
257
|
ent->cleanup = func;
|
252
258
|
ent->ud = ud;
|
253
|
-
ent->next = a->cleanup_head;
|
254
|
-
a->cleanup_head = ent;
|
255
259
|
|
256
260
|
return true;
|
257
261
|
}
|
258
262
|
|
259
|
-
|
260
|
-
|
263
|
+
void upb_arena_fuse(upb_arena *a1, upb_arena *a2) {
|
264
|
+
upb_arena *r1 = arena_findroot(a1);
|
265
|
+
upb_arena *r2 = arena_findroot(a2);
|
266
|
+
|
267
|
+
if (r1 == r2) return; /* Already fused. */
|
268
|
+
|
269
|
+
/* We want to join the smaller tree to the larger tree.
|
270
|
+
* So swap first if they are backwards. */
|
271
|
+
if (r1->refcount < r2->refcount) {
|
272
|
+
upb_arena *tmp = r1;
|
273
|
+
r1 = r2;
|
274
|
+
r2 = tmp;
|
275
|
+
}
|
276
|
+
|
277
|
+
/* r1 takes over r2's freelist and refcount. */
|
278
|
+
r1->refcount += r2->refcount;
|
279
|
+
if (r2->freelist_tail) {
|
280
|
+
UPB_ASSERT(r2->freelist_tail->next == NULL);
|
281
|
+
r2->freelist_tail->next = r1->freelist;
|
282
|
+
r1->freelist = r2->freelist;
|
283
|
+
}
|
284
|
+
r2->parent = r1;
|
261
285
|
}
|