grpc 1.24.0 → 1.25.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 +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +71 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
data/src/core/lib/gprpp/memory.h
CHANGED
@@ -28,63 +28,52 @@
|
|
28
28
|
#include <memory>
|
29
29
|
#include <utility>
|
30
30
|
|
31
|
-
// Add this to a class that want to use Delete(), but has a private or
|
32
|
-
// protected destructor.
|
33
|
-
// Should not be used in new code.
|
34
|
-
// TODO(juanlishen): Remove this macro, and instead comment that the public dtor
|
35
|
-
// should not be used directly.
|
36
|
-
#define GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE \
|
37
|
-
template <typename _Delete_T, bool _Delete_can_be_null> \
|
38
|
-
friend void ::grpc_core::Delete(_Delete_T*); \
|
39
|
-
template <typename _Delete_T> \
|
40
|
-
friend void ::grpc_core::Delete(_Delete_T*);
|
41
|
-
|
42
|
-
// Add this to a class that want to use New(), but has a private or
|
43
|
-
// protected constructor.
|
44
|
-
// Should not be used in new code.
|
45
|
-
// TODO(juanlishen): Remove this macro, and instead comment that the public dtor
|
46
|
-
// should not be used directly.
|
47
|
-
#define GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_NEW \
|
48
|
-
template <typename _New_T, typename... _New_Args> \
|
49
|
-
friend _New_T* grpc_core::New(_New_Args&&...);
|
50
|
-
|
51
31
|
namespace grpc_core {
|
52
32
|
|
53
|
-
// Alternative to new,
|
33
|
+
// Alternative to new, to ensure memory allocation being wrapped to gpr_malloc
|
54
34
|
template <typename T, typename... Args>
|
55
35
|
inline T* New(Args&&... args) {
|
56
36
|
void* p = gpr_malloc(sizeof(T));
|
57
37
|
return new (p) T(std::forward<Args>(args)...);
|
58
38
|
}
|
59
39
|
|
60
|
-
//
|
61
|
-
//
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
p
|
70
|
-
|
71
|
-
|
40
|
+
// Gets the base pointer of any class, in case of multiple inheritance.
|
41
|
+
// Used by Delete and friends.
|
42
|
+
template <typename T, bool isPolymorphic>
|
43
|
+
struct BasePointerGetter {
|
44
|
+
static void* get(T* p) { return p; }
|
45
|
+
};
|
46
|
+
|
47
|
+
template <typename T>
|
48
|
+
struct BasePointerGetter<T, true> {
|
49
|
+
static void* get(T* p) { return dynamic_cast<void*>(p); }
|
50
|
+
};
|
51
|
+
|
52
|
+
// Alternative to delete, to ensure memory allocation being wrapped to gpr_free
|
72
53
|
template <typename T>
|
73
54
|
inline void Delete(T* p) {
|
74
|
-
|
55
|
+
if (p == nullptr) return;
|
56
|
+
void* basePtr = BasePointerGetter<T, std::is_polymorphic<T>::value>::get(p);
|
57
|
+
p->~T();
|
58
|
+
gpr_free(basePtr);
|
75
59
|
}
|
76
60
|
|
77
|
-
template <typename T>
|
78
61
|
class DefaultDelete {
|
79
62
|
public:
|
63
|
+
template <typename T>
|
80
64
|
void operator()(T* p) {
|
81
|
-
//
|
82
|
-
// if the pointer is nullptr
|
83
|
-
|
65
|
+
// Delete() checks whether the value is null, but std::unique_ptr<> is
|
66
|
+
// guaranteed not to call the deleter if the pointer is nullptr
|
67
|
+
// (i.e., it already does this check for us), and we don't want to
|
68
|
+
// do the check twice. So, instead of calling Delete() here, we
|
69
|
+
// manually call the object's dtor and free it.
|
70
|
+
void* basePtr = BasePointerGetter<T, std::is_polymorphic<T>::value>::get(p);
|
71
|
+
p->~T();
|
72
|
+
gpr_free(basePtr);
|
84
73
|
}
|
85
74
|
};
|
86
75
|
|
87
|
-
template <typename T, typename Deleter = DefaultDelete
|
76
|
+
template <typename T, typename Deleter = DefaultDelete>
|
88
77
|
using UniquePtr = std::unique_ptr<T, Deleter>;
|
89
78
|
|
90
79
|
template <typename T, typename... Args>
|
@@ -110,13 +99,18 @@ class Allocator {
|
|
110
99
|
};
|
111
100
|
typedef std::true_type is_always_equal;
|
112
101
|
|
102
|
+
Allocator() = default;
|
103
|
+
|
104
|
+
template <class U>
|
105
|
+
Allocator(const Allocator<U>&) {}
|
106
|
+
|
113
107
|
pointer address(reference x) const { return &x; }
|
114
108
|
const_pointer address(const_reference x) const { return &x; }
|
115
109
|
pointer allocate(std::size_t n,
|
116
|
-
std::allocator<void>::const_pointer hint = nullptr) {
|
110
|
+
std::allocator<void>::const_pointer /*hint*/ = nullptr) {
|
117
111
|
return static_cast<pointer>(gpr_malloc(n * sizeof(T)));
|
118
112
|
}
|
119
|
-
void deallocate(T* p, std::size_t n) { gpr_free(p); }
|
113
|
+
void deallocate(T* p, std::size_t /* n */) { gpr_free(p); }
|
120
114
|
size_t max_size() const {
|
121
115
|
return std::numeric_limits<size_type>::max() / sizeof(value_type);
|
122
116
|
}
|
@@ -132,6 +126,16 @@ class Allocator {
|
|
132
126
|
}
|
133
127
|
};
|
134
128
|
|
129
|
+
template <class T, class U>
|
130
|
+
bool operator==(Allocator<T> const&, Allocator<U> const&) noexcept {
|
131
|
+
return true;
|
132
|
+
}
|
133
|
+
|
134
|
+
template <class T, class U>
|
135
|
+
bool operator!=(Allocator<T> const& /*x*/, Allocator<U> const& /*y*/) noexcept {
|
136
|
+
return false;
|
137
|
+
}
|
138
|
+
|
135
139
|
} // namespace grpc_core
|
136
140
|
|
137
141
|
#endif /* GRPC_CORE_LIB_GPRPP_MEMORY_H */
|
@@ -0,0 +1,108 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/gprpp/mpscq.h"
|
22
|
+
|
23
|
+
namespace grpc_core {
|
24
|
+
|
25
|
+
//
|
26
|
+
// MultiProducerSingleConsumerQueue
|
27
|
+
//
|
28
|
+
|
29
|
+
bool MultiProducerSingleConsumerQueue::Push(Node* node) {
|
30
|
+
node->next.Store(nullptr, MemoryOrder::RELAXED);
|
31
|
+
Node* prev = head_.Exchange(node, MemoryOrder::ACQ_REL);
|
32
|
+
prev->next.Store(node, MemoryOrder::RELEASE);
|
33
|
+
return prev == &stub_;
|
34
|
+
}
|
35
|
+
|
36
|
+
MultiProducerSingleConsumerQueue::Node*
|
37
|
+
MultiProducerSingleConsumerQueue::Pop() {
|
38
|
+
bool empty;
|
39
|
+
return PopAndCheckEnd(&empty);
|
40
|
+
}
|
41
|
+
|
42
|
+
MultiProducerSingleConsumerQueue::Node*
|
43
|
+
MultiProducerSingleConsumerQueue::PopAndCheckEnd(bool* empty) {
|
44
|
+
Node* tail = tail_;
|
45
|
+
Node* next = tail_->next.Load(MemoryOrder::ACQUIRE);
|
46
|
+
if (tail == &stub_) {
|
47
|
+
// indicates the list is actually (ephemerally) empty
|
48
|
+
if (next == nullptr) {
|
49
|
+
*empty = true;
|
50
|
+
return nullptr;
|
51
|
+
}
|
52
|
+
tail_ = next;
|
53
|
+
tail = next;
|
54
|
+
next = tail->next.Load(MemoryOrder::ACQUIRE);
|
55
|
+
}
|
56
|
+
if (next != nullptr) {
|
57
|
+
*empty = false;
|
58
|
+
tail_ = next;
|
59
|
+
return tail;
|
60
|
+
}
|
61
|
+
Node* head = head_.Load(MemoryOrder::ACQUIRE);
|
62
|
+
if (tail != head) {
|
63
|
+
*empty = false;
|
64
|
+
// indicates a retry is in order: we're still adding
|
65
|
+
return nullptr;
|
66
|
+
}
|
67
|
+
Push(&stub_);
|
68
|
+
next = tail->next.Load(MemoryOrder::ACQUIRE);
|
69
|
+
if (next != nullptr) {
|
70
|
+
*empty = false;
|
71
|
+
tail_ = next;
|
72
|
+
return tail;
|
73
|
+
}
|
74
|
+
// indicates a retry is in order: we're still adding
|
75
|
+
*empty = false;
|
76
|
+
return nullptr;
|
77
|
+
}
|
78
|
+
|
79
|
+
//
|
80
|
+
// LockedMultiProducerSingleConsumerQueue
|
81
|
+
//
|
82
|
+
|
83
|
+
bool LockedMultiProducerSingleConsumerQueue::Push(Node* node) {
|
84
|
+
return queue_.Push(node);
|
85
|
+
}
|
86
|
+
|
87
|
+
LockedMultiProducerSingleConsumerQueue::Node*
|
88
|
+
LockedMultiProducerSingleConsumerQueue::TryPop() {
|
89
|
+
if (gpr_mu_trylock(mu_.get())) {
|
90
|
+
Node* node = queue_.Pop();
|
91
|
+
gpr_mu_unlock(mu_.get());
|
92
|
+
return node;
|
93
|
+
}
|
94
|
+
return nullptr;
|
95
|
+
}
|
96
|
+
|
97
|
+
LockedMultiProducerSingleConsumerQueue::Node*
|
98
|
+
LockedMultiProducerSingleConsumerQueue::Pop() {
|
99
|
+
MutexLock lock(&mu_);
|
100
|
+
bool empty = false;
|
101
|
+
Node* node;
|
102
|
+
do {
|
103
|
+
node = queue_.PopAndCheckEnd(&empty);
|
104
|
+
} while (node == nullptr && !empty);
|
105
|
+
return node;
|
106
|
+
}
|
107
|
+
|
108
|
+
} // namespace grpc_core
|
@@ -0,0 +1,98 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2016 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#ifndef GRPC_CORE_LIB_GPRPP_MPSCQ_H
|
20
|
+
#define GRPC_CORE_LIB_GPRPP_MPSCQ_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/gprpp/atomic.h"
|
25
|
+
#include "src/core/lib/gprpp/sync.h"
|
26
|
+
|
27
|
+
#include <grpc/support/log.h>
|
28
|
+
|
29
|
+
namespace grpc_core {
|
30
|
+
|
31
|
+
// Multiple-producer single-consumer lock free queue, based upon the
|
32
|
+
// implementation from Dmitry Vyukov here:
|
33
|
+
// http://www.1024cores.net/home/lock-free-algorithms/queues/intrusive-mpsc-node-based-queue
|
34
|
+
class MultiProducerSingleConsumerQueue {
|
35
|
+
public:
|
36
|
+
// List node. Application node types can inherit from this.
|
37
|
+
struct Node {
|
38
|
+
Atomic<Node*> next;
|
39
|
+
};
|
40
|
+
|
41
|
+
MultiProducerSingleConsumerQueue() : head_{&stub_}, tail_(&stub_) {}
|
42
|
+
~MultiProducerSingleConsumerQueue() {
|
43
|
+
GPR_ASSERT(head_.Load(MemoryOrder::RELAXED) == &stub_);
|
44
|
+
GPR_ASSERT(tail_ == &stub_);
|
45
|
+
}
|
46
|
+
|
47
|
+
// Push a node
|
48
|
+
// Thread safe - can be called from multiple threads concurrently
|
49
|
+
// Returns true if this was possibly the first node (may return true
|
50
|
+
// sporadically, will not return false sporadically)
|
51
|
+
bool Push(Node* node);
|
52
|
+
// Pop a node (returns NULL if no node is ready - which doesn't indicate that
|
53
|
+
// the queue is empty!!)
|
54
|
+
// Thread compatible - can only be called from one thread at a time
|
55
|
+
Node* Pop();
|
56
|
+
// Pop a node; sets *empty to true if the queue is empty, or false if it is
|
57
|
+
// not.
|
58
|
+
Node* PopAndCheckEnd(bool* empty);
|
59
|
+
|
60
|
+
private:
|
61
|
+
// make sure head & tail don't share a cacheline
|
62
|
+
union {
|
63
|
+
char padding_[GPR_CACHELINE_SIZE];
|
64
|
+
Atomic<Node*> head_;
|
65
|
+
};
|
66
|
+
Node* tail_;
|
67
|
+
Node stub_;
|
68
|
+
};
|
69
|
+
|
70
|
+
// An mpscq with a lock: it's safe to pop from multiple threads, but doing
|
71
|
+
// only one thread will succeed concurrently.
|
72
|
+
class LockedMultiProducerSingleConsumerQueue {
|
73
|
+
public:
|
74
|
+
typedef MultiProducerSingleConsumerQueue::Node Node;
|
75
|
+
|
76
|
+
// Push a node
|
77
|
+
// Thread safe - can be called from multiple threads concurrently
|
78
|
+
// Returns true if this was possibly the first node (may return true
|
79
|
+
// sporadically, will not return false sporadically)
|
80
|
+
bool Push(Node* node);
|
81
|
+
|
82
|
+
// Pop a node (returns NULL if no node is ready - which doesn't indicate that
|
83
|
+
// the queue is empty!!)
|
84
|
+
// Thread safe - can be called from multiple threads concurrently
|
85
|
+
Node* TryPop();
|
86
|
+
|
87
|
+
// Pop a node. Returns NULL only if the queue was empty at some point after
|
88
|
+
// calling this function
|
89
|
+
Node* Pop();
|
90
|
+
|
91
|
+
private:
|
92
|
+
MultiProducerSingleConsumerQueue queue_;
|
93
|
+
Mutex mu_;
|
94
|
+
};
|
95
|
+
|
96
|
+
} // namespace grpc_core
|
97
|
+
|
98
|
+
#endif /* GRPC_CORE_LIB_GPRPP_MPSCQ_H */
|
@@ -28,7 +28,6 @@
|
|
28
28
|
#include <memory>
|
29
29
|
|
30
30
|
#include "src/core/lib/debug/trace.h"
|
31
|
-
#include "src/core/lib/gprpp/abstract.h"
|
32
31
|
#include "src/core/lib/gprpp/debug_location.h"
|
33
32
|
#include "src/core/lib/gprpp/memory.h"
|
34
33
|
#include "src/core/lib/gprpp/ref_counted.h"
|
@@ -46,26 +45,26 @@ class Orphanable {
|
|
46
45
|
// Gives up ownership of the object. The implementation must arrange
|
47
46
|
// to eventually destroy the object without further interaction from the
|
48
47
|
// caller.
|
49
|
-
virtual void Orphan()
|
48
|
+
virtual void Orphan() = 0;
|
50
49
|
|
51
50
|
// Not copyable or movable.
|
52
51
|
Orphanable(const Orphanable&) = delete;
|
53
52
|
Orphanable& operator=(const Orphanable&) = delete;
|
54
53
|
|
55
|
-
GRPC_ABSTRACT_BASE_CLASS
|
56
|
-
|
57
54
|
protected:
|
58
55
|
Orphanable() {}
|
59
56
|
virtual ~Orphanable() {}
|
60
57
|
};
|
61
58
|
|
62
|
-
template <typename T>
|
63
59
|
class OrphanableDelete {
|
64
60
|
public:
|
65
|
-
|
61
|
+
template <typename T>
|
62
|
+
void operator()(T* p) {
|
63
|
+
p->Orphan();
|
64
|
+
}
|
66
65
|
};
|
67
66
|
|
68
|
-
template <typename T, typename Deleter = OrphanableDelete
|
67
|
+
template <typename T, typename Deleter = OrphanableDelete>
|
69
68
|
using OrphanablePtr = std::unique_ptr<T, Deleter>;
|
70
69
|
|
71
70
|
template <typename T, typename... Args>
|
@@ -81,11 +80,7 @@ class InternallyRefCounted : public Orphanable {
|
|
81
80
|
InternallyRefCounted(const InternallyRefCounted&) = delete;
|
82
81
|
InternallyRefCounted& operator=(const InternallyRefCounted&) = delete;
|
83
82
|
|
84
|
-
GRPC_ABSTRACT_BASE_CLASS
|
85
|
-
|
86
83
|
protected:
|
87
|
-
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
88
|
-
|
89
84
|
// Allow RefCountedPtr<> to access Unref() and IncrementRefCount().
|
90
85
|
template <typename T>
|
91
86
|
friend class RefCountedPtr;
|
@@ -30,7 +30,6 @@
|
|
30
30
|
#include <cinttypes>
|
31
31
|
|
32
32
|
#include "src/core/lib/debug/trace.h"
|
33
|
-
#include "src/core/lib/gprpp/abstract.h"
|
34
33
|
#include "src/core/lib/gprpp/atomic.h"
|
35
34
|
#include "src/core/lib/gprpp/debug_location.h"
|
36
35
|
#include "src/core/lib/gprpp/memory.h"
|
@@ -41,11 +40,6 @@ namespace grpc_core {
|
|
41
40
|
// PolymorphicRefCount enforces polymorphic destruction of RefCounted.
|
42
41
|
class PolymorphicRefCount {
|
43
42
|
public:
|
44
|
-
GRPC_ABSTRACT_BASE_CLASS
|
45
|
-
|
46
|
-
protected:
|
47
|
-
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
48
|
-
|
49
43
|
virtual ~PolymorphicRefCount() = default;
|
50
44
|
};
|
51
45
|
|
@@ -54,11 +48,6 @@ class PolymorphicRefCount {
|
|
54
48
|
// when in doubt use PolymorphicRefCount.
|
55
49
|
class NonPolymorphicRefCount {
|
56
50
|
public:
|
57
|
-
GRPC_ABSTRACT_BASE_CLASS
|
58
|
-
|
59
|
-
protected:
|
60
|
-
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
61
|
-
|
62
51
|
~NonPolymorphicRefCount() = default;
|
63
52
|
};
|
64
53
|
|
@@ -80,7 +69,14 @@ class RefCount {
|
|
80
69
|
// Note: RefCount tracing is only enabled on debug builds, even when a
|
81
70
|
// TraceFlag is used.
|
82
71
|
template <typename TraceFlagT = TraceFlag>
|
83
|
-
constexpr explicit RefCount(
|
72
|
+
constexpr explicit RefCount(
|
73
|
+
Value init = 1,
|
74
|
+
TraceFlagT*
|
75
|
+
#ifndef NDEBUG
|
76
|
+
// Leave unnamed if NDEBUG to avoid unused parameter warning
|
77
|
+
trace_flag
|
78
|
+
#endif
|
79
|
+
= nullptr)
|
84
80
|
:
|
85
81
|
#ifndef NDEBUG
|
86
82
|
trace_flag_(trace_flag),
|
@@ -109,6 +105,10 @@ class RefCount {
|
|
109
105
|
prior, prior + n, reason);
|
110
106
|
}
|
111
107
|
#else
|
108
|
+
// Use conditionally-important parameters
|
109
|
+
(void)location;
|
110
|
+
(void)reason;
|
111
|
+
|
112
112
|
value_.FetchAdd(n, MemoryOrder::RELAXED);
|
113
113
|
#endif
|
114
114
|
}
|
@@ -136,6 +136,9 @@ class RefCount {
|
|
136
136
|
}
|
137
137
|
assert(prior > 0);
|
138
138
|
#else
|
139
|
+
// Avoid unused-parameter warnings for debug-only parameters
|
140
|
+
(void)location;
|
141
|
+
(void)reason;
|
139
142
|
RefNonZero();
|
140
143
|
#endif
|
141
144
|
}
|
@@ -161,6 +164,9 @@ class RefCount {
|
|
161
164
|
prior, prior + 1, reason);
|
162
165
|
}
|
163
166
|
#endif
|
167
|
+
// Avoid unused-parameter warnings for debug-only parameters
|
168
|
+
(void)location;
|
169
|
+
(void)reason;
|
164
170
|
return value_.IncrementIfNonzero();
|
165
171
|
}
|
166
172
|
|
@@ -195,6 +201,10 @@ class RefCount {
|
|
195
201
|
prior - 1, reason);
|
196
202
|
}
|
197
203
|
GPR_DEBUG_ASSERT(prior > 0);
|
204
|
+
#else
|
205
|
+
// Avoid unused-parameter warnings for debug-only parameters
|
206
|
+
(void)location;
|
207
|
+
(void)reason;
|
198
208
|
#endif
|
199
209
|
return prior == 1;
|
200
210
|
}
|
@@ -237,6 +247,9 @@ class RefCount {
|
|
237
247
|
template <typename Child, typename Impl = PolymorphicRefCount>
|
238
248
|
class RefCounted : public Impl {
|
239
249
|
public:
|
250
|
+
// Note: Depending on the Impl used, this dtor can be implicitly virtual.
|
251
|
+
~RefCounted() = default;
|
252
|
+
|
240
253
|
RefCountedPtr<Child> Ref() GRPC_MUST_USE_RESULT {
|
241
254
|
IncrementRefCount();
|
242
255
|
return RefCountedPtr<Child>(static_cast<Child*>(this));
|
@@ -272,11 +285,7 @@ class RefCounted : public Impl {
|
|
272
285
|
RefCounted(const RefCounted&) = delete;
|
273
286
|
RefCounted& operator=(const RefCounted&) = delete;
|
274
287
|
|
275
|
-
GRPC_ABSTRACT_BASE_CLASS
|
276
|
-
|
277
288
|
protected:
|
278
|
-
GRPC_ALLOW_CLASS_TO_USE_NON_PUBLIC_DELETE
|
279
|
-
|
280
289
|
// TraceFlagT is defined to accept both DebugOnlyTraceFlag and TraceFlag.
|
281
290
|
// Note: RefCount tracing is only enabled on debug builds, even when a
|
282
291
|
// TraceFlag is used.
|
@@ -285,9 +294,6 @@ class RefCounted : public Impl {
|
|
285
294
|
intptr_t initial_refcount = 1)
|
286
295
|
: refs_(initial_refcount, trace_flag) {}
|
287
296
|
|
288
|
-
// Note: Depending on the Impl used, this dtor can be implicitly virtual.
|
289
|
-
~RefCounted() = default;
|
290
|
-
|
291
297
|
private:
|
292
298
|
// Allow RefCountedPtr<> to access IncrementRefCount().
|
293
299
|
template <typename T>
|