grpc 1.24.0 → 1.25.0

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.

Files changed (505) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
  113. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  114. data/src/core/lib/iomgr/executor.cc +4 -2
  115. data/src/core/lib/iomgr/executor.h +3 -0
  116. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  117. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  118. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  119. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  120. data/src/core/lib/iomgr/resource_quota.h +13 -9
  121. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  122. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  123. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  124. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  125. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  126. data/src/core/lib/iomgr/tcp_server.h +1 -4
  127. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  128. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  129. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  130. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  131. data/src/core/lib/iomgr/udp_server.cc +3 -2
  132. data/src/core/lib/iomgr/udp_server.h +6 -12
  133. data/src/core/lib/json/json.h +1 -1
  134. data/src/core/lib/json/json_string.cc +2 -2
  135. data/src/core/lib/profiling/basic_timers.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  137. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  138. data/src/core/lib/security/credentials/credentials.h +4 -20
  139. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  141. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  142. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  143. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  144. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  145. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  146. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  147. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  148. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  149. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  150. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  152. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  153. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  154. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  155. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  156. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  157. data/src/core/lib/slice/slice.cc +2 -10
  158. data/src/core/lib/slice/slice_hash_table.h +4 -6
  159. data/src/core/lib/slice/slice_intern.cc +42 -39
  160. data/src/core/lib/slice/slice_internal.h +3 -3
  161. data/src/core/lib/slice/slice_utils.h +21 -4
  162. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  163. data/src/core/lib/surface/call.cc +3 -3
  164. data/src/core/lib/surface/channel.cc +7 -0
  165. data/src/core/lib/surface/completion_queue.cc +12 -11
  166. data/src/core/lib/surface/completion_queue.h +4 -2
  167. data/src/core/lib/surface/init.cc +1 -0
  168. data/src/core/lib/surface/lame_client.cc +33 -18
  169. data/src/core/lib/surface/server.cc +77 -76
  170. data/src/core/lib/surface/version.cc +1 -1
  171. data/src/core/lib/transport/byte_stream.h +3 -7
  172. data/src/core/lib/transport/connectivity_state.cc +112 -98
  173. data/src/core/lib/transport/connectivity_state.h +100 -50
  174. data/src/core/lib/transport/static_metadata.cc +276 -288
  175. data/src/core/lib/transport/static_metadata.h +73 -76
  176. data/src/core/lib/transport/status_conversion.cc +1 -1
  177. data/src/core/lib/transport/status_metadata.cc +1 -1
  178. data/src/core/lib/transport/transport.cc +2 -2
  179. data/src/core/lib/transport/transport.h +12 -4
  180. data/src/core/lib/transport/transport_op_string.cc +14 -11
  181. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  183. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  184. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  185. data/src/core/tsi/fake_transport_security.cc +7 -5
  186. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  187. data/src/core/tsi/local_transport_security.cc +8 -6
  188. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  189. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  191. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  192. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  193. data/src/core/tsi/ssl_transport_security.cc +12 -12
  194. data/src/core/tsi/ssl_transport_security.h +2 -2
  195. data/src/core/tsi/transport_security_grpc.cc +7 -0
  196. data/src/core/tsi/transport_security_grpc.h +6 -0
  197. data/src/ruby/ext/grpc/extconf.rb +1 -0
  198. data/src/ruby/ext/grpc/rb_call.c +1 -1
  199. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  200. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  201. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  202. data/src/ruby/lib/grpc/version.rb +1 -1
  203. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  204. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  205. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  206. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  207. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  208. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  209. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  210. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  211. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  212. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  213. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  214. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  215. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  216. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  217. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  218. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  219. data/third_party/boringssl/crypto/bio/file.c +5 -2
  220. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  221. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  222. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  223. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  224. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  225. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  226. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  227. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  228. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  229. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  230. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  233. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  234. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  235. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  236. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  237. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  238. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  239. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  240. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  241. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  242. data/third_party/boringssl/crypto/crypto.c +39 -22
  243. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  244. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  245. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  246. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  247. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  248. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  249. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  250. data/third_party/boringssl/crypto/err/err.c +2 -0
  251. data/third_party/boringssl/crypto/err/internal.h +2 -2
  252. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  253. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  254. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  255. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  256. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  257. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  258. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  259. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  260. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  261. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  262. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  264. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  265. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  266. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  267. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  268. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  269. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  270. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  271. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  273. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  275. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  276. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  278. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  279. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  281. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  282. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  283. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  284. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  286. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  287. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  291. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  292. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  293. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  294. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  297. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  298. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  299. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  300. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  304. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  307. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  308. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  309. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  310. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  311. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  312. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  313. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  314. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  315. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  316. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  318. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  319. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  320. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  321. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  322. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  324. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  325. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  326. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  329. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  330. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  331. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  334. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  335. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  336. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  337. data/third_party/boringssl/crypto/internal.h +95 -20
  338. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  339. data/third_party/boringssl/crypto/mem.c +39 -2
  340. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  341. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  342. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  343. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  344. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  345. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  347. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  348. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  349. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  351. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  352. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  353. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  354. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  355. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  356. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  357. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  358. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  359. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  360. data/third_party/boringssl/crypto/thread_none.c +2 -2
  361. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  362. data/third_party/boringssl/crypto/thread_win.c +38 -19
  363. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  364. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  365. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  366. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  367. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  368. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  369. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  370. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  372. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  373. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  374. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  375. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  376. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  377. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  378. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  379. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  380. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  381. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  382. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  383. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  384. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  387. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  389. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  390. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  391. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  392. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  393. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  395. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  396. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  397. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  398. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  399. data/third_party/boringssl/include/openssl/aead.h +45 -19
  400. data/third_party/boringssl/include/openssl/aes.h +32 -7
  401. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  402. data/third_party/boringssl/include/openssl/base.h +120 -6
  403. data/third_party/boringssl/include/openssl/base64.h +4 -1
  404. data/third_party/boringssl/include/openssl/bio.h +112 -81
  405. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  406. data/third_party/boringssl/include/openssl/bn.h +55 -29
  407. data/third_party/boringssl/include/openssl/buf.h +2 -2
  408. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  409. data/third_party/boringssl/include/openssl/cast.h +2 -2
  410. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  411. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  412. data/third_party/boringssl/include/openssl/conf.h +3 -6
  413. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  414. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  415. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  416. data/third_party/boringssl/include/openssl/dh.h +3 -2
  417. data/third_party/boringssl/include/openssl/digest.h +21 -7
  418. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  419. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  420. data/third_party/boringssl/include/openssl/ec.h +25 -21
  421. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  422. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  423. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  424. data/third_party/boringssl/include/openssl/engine.h +4 -4
  425. data/third_party/boringssl/include/openssl/err.h +3 -0
  426. data/third_party/boringssl/include/openssl/evp.h +199 -42
  427. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  428. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  429. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  430. data/third_party/boringssl/include/openssl/md4.h +6 -4
  431. data/third_party/boringssl/include/openssl/md5.h +6 -4
  432. data/third_party/boringssl/include/openssl/mem.h +6 -2
  433. data/third_party/boringssl/include/openssl/nid.h +3 -0
  434. data/third_party/boringssl/include/openssl/obj.h +3 -0
  435. data/third_party/boringssl/include/openssl/pem.h +102 -64
  436. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  437. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  438. data/third_party/boringssl/include/openssl/pool.h +13 -2
  439. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  440. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  441. data/third_party/boringssl/include/openssl/sha.h +40 -28
  442. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  443. data/third_party/boringssl/include/openssl/span.h +17 -9
  444. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  445. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  446. data/third_party/boringssl/include/openssl/stack.h +134 -77
  447. data/third_party/boringssl/include/openssl/thread.h +1 -1
  448. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  449. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  450. data/third_party/boringssl/include/openssl/x509.h +28 -3
  451. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  452. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  453. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  454. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  455. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  456. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  457. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  458. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  459. data/third_party/boringssl/ssl/handoff.cc +295 -91
  460. data/third_party/boringssl/ssl/handshake.cc +133 -72
  461. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  462. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  463. data/third_party/boringssl/ssl/internal.h +1413 -928
  464. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  465. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  466. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  467. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  468. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  469. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  470. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  471. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  472. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  473. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  474. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  475. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  476. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  477. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  478. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  479. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  480. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  481. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  482. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  483. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  484. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  485. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  486. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  487. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  488. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  489. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  490. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  491. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  492. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  493. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  494. data/third_party/upb/upb/port_def.inc +1 -1
  495. data/third_party/upb/upb/table.c +2 -1
  496. metadata +72 -44
  497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  498. data/src/core/lib/gpr/mpscq.cc +0 -117
  499. data/src/core/lib/gpr/mpscq.h +0 -88
  500. data/src/core/lib/gprpp/abstract.h +0 -47
  501. data/src/core/lib/gprpp/pair.h +0 -38
  502. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  503. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  504. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  505. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -90,15 +90,15 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
90
90
  public:
91
91
  GrpcPolledFd* NewGrpcPolledFdLocked(ares_socket_t as,
92
92
  grpc_pollset_set* driver_pollset_set,
93
- grpc_combiner* combiner) override {
93
+ Combiner* /*combiner*/) override {
94
94
  return New<GrpcPolledFdPosix>(as, driver_pollset_set);
95
95
  }
96
96
 
97
- void ConfigureAresChannelLocked(ares_channel channel) override {}
97
+ void ConfigureAresChannelLocked(ares_channel /*channel*/) override {}
98
98
  };
99
99
 
100
- UniquePtr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(grpc_combiner* combiner) {
101
- return UniquePtr<GrpcPolledFdFactory>(New<GrpcPolledFdFactoryPosix>());
100
+ UniquePtr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(Combiner* /*combiner*/) {
101
+ return MakeUnique<GrpcPolledFdFactoryPosix>();
102
102
  }
103
103
 
104
104
  } // namespace grpc_core
@@ -88,7 +88,7 @@ class WSAErrorContext {
88
88
  * from c-ares and are used with the grpc windows poller, and it, e.g.,
89
89
  * manufactures virtual socket error codes when it e.g. needs to tell the c-ares
90
90
  * library to wait for an async read. */
91
- class GrpcPolledFdWindows : public GrpcPolledFd {
91
+ class GrpcPolledFdWindows {
92
92
  public:
93
93
  enum WriteState {
94
94
  WRITE_IDLE,
@@ -97,8 +97,8 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
97
97
  WRITE_WAITING_FOR_VERIFICATION_UPON_RETRY,
98
98
  };
99
99
 
100
- GrpcPolledFdWindows(ares_socket_t as, grpc_combiner* combiner,
101
- int address_family, int socket_type)
100
+ GrpcPolledFdWindows(ares_socket_t as, Combiner* combiner, int address_family,
101
+ int socket_type)
102
102
  : read_buf_(grpc_empty_slice()),
103
103
  write_buf_(grpc_empty_slice()),
104
104
  tcp_write_state_(WRITE_IDLE),
@@ -108,22 +108,13 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
108
108
  gpr_asprintf(&name_, "c-ares socket: %" PRIdPTR, as);
109
109
  winsocket_ = grpc_winsocket_create(as, name_);
110
110
  combiner_ = GRPC_COMBINER_REF(combiner, name_);
111
- GRPC_CLOSURE_INIT(&outer_read_closure_,
112
- &GrpcPolledFdWindows::OnIocpReadable, this,
113
- grpc_combiner_scheduler(combiner_));
114
- GRPC_CLOSURE_INIT(&outer_write_closure_,
115
- &GrpcPolledFdWindows::OnIocpWriteable, this,
116
- grpc_combiner_scheduler(combiner_));
117
- GRPC_CLOSURE_INIT(&on_tcp_connect_locked_,
118
- &GrpcPolledFdWindows::OnTcpConnectLocked, this,
119
- grpc_combiner_scheduler(combiner_));
120
111
  GRPC_CLOSURE_INIT(&continue_register_for_on_readable_locked_,
121
112
  &GrpcPolledFdWindows::ContinueRegisterForOnReadableLocked,
122
- this, grpc_combiner_scheduler(combiner_));
113
+ this, nullptr);
123
114
  GRPC_CLOSURE_INIT(
124
115
  &continue_register_for_on_writeable_locked_,
125
116
  &GrpcPolledFdWindows::ContinueRegisterForOnWriteableLocked, this,
126
- grpc_combiner_scheduler(combiner_));
117
+ nullptr);
127
118
  }
128
119
 
129
120
  ~GrpcPolledFdWindows() {
@@ -146,7 +137,7 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
146
137
  write_closure_ = nullptr;
147
138
  }
148
139
 
149
- void RegisterForOnReadableLocked(grpc_closure* read_closure) override {
140
+ void RegisterForOnReadableLocked(grpc_closure* read_closure) {
150
141
  GPR_ASSERT(read_closure_ == nullptr);
151
142
  read_closure_ = read_closure;
152
143
  GPR_ASSERT(GRPC_SLICE_LENGTH(read_buf_) == 0);
@@ -154,8 +145,8 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
154
145
  GPR_ASSERT(!read_buf_has_data_);
155
146
  read_buf_ = GRPC_SLICE_MALLOC(4192);
156
147
  if (connect_done_) {
157
- GRPC_CLOSURE_SCHED(&continue_register_for_on_readable_locked_,
158
- GRPC_ERROR_NONE);
148
+ combiner_->Run(&continue_register_for_on_readable_locked_,
149
+ GRPC_ERROR_NONE);
159
150
  } else {
160
151
  GPR_ASSERT(pending_continue_register_for_on_readable_locked_ == nullptr);
161
152
  pending_continue_register_for_on_readable_locked_ =
@@ -203,10 +194,13 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
203
194
  return;
204
195
  }
205
196
  }
206
- grpc_socket_notify_on_read(winsocket_, &outer_read_closure_);
197
+ grpc_socket_notify_on_read(
198
+ winsocket_, GRPC_CLOSURE_INIT(&outer_read_closure_,
199
+ &GrpcPolledFdWindows::OnIocpReadable,
200
+ this, grpc_schedule_on_exec_ctx));
207
201
  }
208
202
 
209
- void RegisterForOnWriteableLocked(grpc_closure* write_closure) override {
203
+ void RegisterForOnWriteableLocked(grpc_closure* write_closure) {
210
204
  if (socket_type_ == SOCK_DGRAM) {
211
205
  GRPC_CARES_TRACE_LOG("fd:|%s| RegisterForOnWriteableLocked called",
212
206
  GetName());
@@ -219,8 +213,8 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
219
213
  GPR_ASSERT(write_closure_ == nullptr);
220
214
  write_closure_ = write_closure;
221
215
  if (connect_done_) {
222
- GRPC_CLOSURE_SCHED(&continue_register_for_on_writeable_locked_,
223
- GRPC_ERROR_NONE);
216
+ combiner_->Run(&continue_register_for_on_writeable_locked_,
217
+ GRPC_ERROR_NONE);
224
218
  } else {
225
219
  GPR_ASSERT(pending_continue_register_for_on_writeable_locked_ == nullptr);
226
220
  pending_continue_register_for_on_writeable_locked_ =
@@ -262,7 +256,11 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
262
256
  ScheduleAndNullWriteClosure(
263
257
  GRPC_WSA_ERROR(wsa_error_code, "WSASend (overlapped)"));
264
258
  } else {
265
- grpc_socket_notify_on_write(winsocket_, &outer_write_closure_);
259
+ grpc_socket_notify_on_write(
260
+ winsocket_,
261
+ GRPC_CLOSURE_INIT(&outer_write_closure_,
262
+ &GrpcPolledFdWindows::OnIocpWriteable, this,
263
+ grpc_schedule_on_exec_ctx));
266
264
  }
267
265
  break;
268
266
  case WRITE_PENDING:
@@ -272,19 +270,17 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
272
270
  }
273
271
  }
274
272
 
275
- bool IsFdStillReadableLocked() override {
276
- return GRPC_SLICE_LENGTH(read_buf_) > 0;
277
- }
273
+ bool IsFdStillReadableLocked() { return GRPC_SLICE_LENGTH(read_buf_) > 0; }
278
274
 
279
- void ShutdownLocked(grpc_error* error) override {
275
+ void ShutdownLocked(grpc_error* error) {
280
276
  grpc_winsocket_shutdown(winsocket_);
281
277
  }
282
278
 
283
- ares_socket_t GetWrappedAresSocketLocked() override {
279
+ ares_socket_t GetWrappedAresSocketLocked() {
284
280
  return grpc_winsocket_wrapped_socket(winsocket_);
285
281
  }
286
282
 
287
- const char* GetName() override { return name_; }
283
+ const char* GetName() { return name_; }
288
284
 
289
285
  ares_ssize_t RecvFrom(WSAErrorContext* wsa_error_ctx, void* data,
290
286
  ares_socket_t data_len, int flags,
@@ -401,8 +397,8 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
401
397
  ares_ssize_t SendVTCP(WSAErrorContext* wsa_error_ctx, const struct iovec* iov,
402
398
  int iov_count) {
403
399
  // The "sendv" handler on TCP sockets buffers up write
404
- // requests and returns an artifical WSAEWOULDBLOCK. Writing that buffer out
405
- // in the background, and making further send progress in general, will
400
+ // requests and returns an artificial WSAEWOULDBLOCK. Writing that buffer
401
+ // out in the background, and making further send progress in general, will
406
402
  // happen as long as c-ares continues to show interest in writeability on
407
403
  // this fd.
408
404
  GRPC_CARES_TRACE_LOG("fd:|%s| SendVTCP called tcp_write_state_:%d",
@@ -441,6 +437,16 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
441
437
  abort();
442
438
  }
443
439
 
440
+ static void OnTcpConnect(void* arg, grpc_error* error) {
441
+ GrpcPolledFdWindows* grpc_polled_fd =
442
+ static_cast<GrpcPolledFdWindows*>(arg);
443
+ grpc_polled_fd->combiner_->Run(
444
+ GRPC_CLOSURE_INIT(&grpc_polled_fd->on_tcp_connect_locked_,
445
+ &GrpcPolledFdWindows::OnTcpConnectLocked,
446
+ grpc_polled_fd, nullptr),
447
+ GRPC_ERROR_REF(error));
448
+ }
449
+
444
450
  static void OnTcpConnectLocked(void* arg, grpc_error* error) {
445
451
  GrpcPolledFdWindows* grpc_polled_fd =
446
452
  static_cast<GrpcPolledFdWindows*>(arg);
@@ -481,12 +487,12 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
481
487
  wsa_connect_error_ = WSA_OPERATION_ABORTED;
482
488
  }
483
489
  if (pending_continue_register_for_on_readable_locked_ != nullptr) {
484
- GRPC_CLOSURE_SCHED(pending_continue_register_for_on_readable_locked_,
485
- GRPC_ERROR_NONE);
490
+ combiner_->Run(pending_continue_register_for_on_readable_locked_,
491
+ GRPC_ERROR_NONE);
486
492
  }
487
493
  if (pending_continue_register_for_on_writeable_locked_ != nullptr) {
488
- GRPC_CLOSURE_SCHED(pending_continue_register_for_on_writeable_locked_,
489
- GRPC_ERROR_NONE);
494
+ combiner_->Run(pending_continue_register_for_on_writeable_locked_,
495
+ GRPC_ERROR_NONE);
490
496
  }
491
497
  }
492
498
 
@@ -587,11 +593,23 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
587
593
  return -1;
588
594
  }
589
595
  }
596
+ GRPC_CLOSURE_INIT(&on_tcp_connect_locked_,
597
+ &GrpcPolledFdWindows::OnTcpConnect, this,
598
+ grpc_schedule_on_exec_ctx);
590
599
  grpc_socket_notify_on_write(winsocket_, &on_tcp_connect_locked_);
591
600
  return out;
592
601
  }
593
602
 
594
603
  static void OnIocpReadable(void* arg, grpc_error* error) {
604
+ GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
605
+ polled_fd->combiner_->Run(
606
+ GRPC_CLOSURE_INIT(&polled_fd->outer_read_closure_,
607
+ &GrpcPolledFdWindows::OnIocpReadableLocked, polled_fd,
608
+ nullptr),
609
+ GRPC_ERROR_REF(error));
610
+ }
611
+
612
+ static void OnIocpReadableLocked(void* arg, grpc_error* error) {
595
613
  GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
596
614
  polled_fd->OnIocpReadableInner(error);
597
615
  }
@@ -635,6 +653,15 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
635
653
  }
636
654
 
637
655
  static void OnIocpWriteable(void* arg, grpc_error* error) {
656
+ GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
657
+ polled_fd->combiner_->Run(
658
+ GRPC_CLOSURE_INIT(&polled_fd->outer_write_closure_,
659
+ &GrpcPolledFdWindows::OnIocpWriteableLocked,
660
+ polled_fd, nullptr),
661
+ GRPC_ERROR_REF(error));
662
+ }
663
+
664
+ static void OnIocpWriteableLocked(void* arg, grpc_error* error) {
638
665
  GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
639
666
  polled_fd->OnIocpWriteableInner(error);
640
667
  }
@@ -671,7 +698,7 @@ class GrpcPolledFdWindows : public GrpcPolledFd {
671
698
  bool gotten_into_driver_list() const { return gotten_into_driver_list_; }
672
699
  void set_gotten_into_driver_list() { gotten_into_driver_list_ = true; }
673
700
 
674
- grpc_combiner* combiner_;
701
+ Combiner* combiner_;
675
702
  char recv_from_source_addr_[200];
676
703
  ares_socklen_t recv_from_source_addr_len_;
677
704
  grpc_slice read_buf_;
@@ -715,7 +742,7 @@ struct SockToPolledFdEntry {
715
742
  * with a GrpcPolledFdWindows factory and event driver */
716
743
  class SockToPolledFdMap {
717
744
  public:
718
- SockToPolledFdMap(grpc_combiner* combiner) {
745
+ SockToPolledFdMap(Combiner* combiner) {
719
746
  combiner_ = GRPC_COMBINER_REF(combiner, "sock to polled fd map");
720
747
  }
721
748
 
@@ -816,20 +843,25 @@ class SockToPolledFdMap {
816
843
  SockToPolledFdMap* map = static_cast<SockToPolledFdMap*>(user_data);
817
844
  GrpcPolledFdWindows* polled_fd = map->LookupPolledFd(s);
818
845
  map->RemoveEntry(s);
846
+ // See https://github.com/grpc/grpc/pull/20284, this trace log is
847
+ // intentionally placed to attempt to trigger a crash in case of a
848
+ // use after free on polled_fd.
849
+ GRPC_CARES_TRACE_LOG("CloseSocket called for socket: %s",
850
+ polled_fd->GetName());
819
851
  // If a gRPC polled fd has not made it in to the driver's list yet, then
820
852
  // the driver has not and will never see this socket.
821
853
  if (!polled_fd->gotten_into_driver_list()) {
822
854
  polled_fd->ShutdownLocked(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
823
855
  "Shut down c-ares fd before without it ever having made it into the "
824
856
  "driver's list"));
825
- return 0;
826
857
  }
858
+ grpc_core::Delete(polled_fd);
827
859
  return 0;
828
860
  }
829
861
 
830
862
  private:
831
863
  SockToPolledFdEntry* head_ = nullptr;
832
- grpc_combiner* combiner_;
864
+ Combiner* combiner_;
833
865
  };
834
866
 
835
867
  const struct ares_socket_functions custom_ares_sock_funcs = {
@@ -840,19 +872,55 @@ const struct ares_socket_functions custom_ares_sock_funcs = {
840
872
  &SockToPolledFdMap::SendV /* sendv */,
841
873
  };
842
874
 
875
+ /* A thin wrapper over a GrpcPolledFdWindows object but with a shorter
876
+ lifetime. This object releases it's GrpcPolledFdWindows upon destruction,
877
+ so that c-ares can close it via usual socket teardown. */
878
+ class GrpcPolledFdWindowsWrapper : public GrpcPolledFd {
879
+ public:
880
+ GrpcPolledFdWindowsWrapper(GrpcPolledFdWindows* wrapped)
881
+ : wrapped_(wrapped) {}
882
+
883
+ ~GrpcPolledFdWindowsWrapper() {}
884
+
885
+ void RegisterForOnReadableLocked(grpc_closure* read_closure) override {
886
+ wrapped_->RegisterForOnReadableLocked(read_closure);
887
+ }
888
+
889
+ void RegisterForOnWriteableLocked(grpc_closure* write_closure) override {
890
+ wrapped_->RegisterForOnWriteableLocked(write_closure);
891
+ }
892
+
893
+ bool IsFdStillReadableLocked() override {
894
+ return wrapped_->IsFdStillReadableLocked();
895
+ }
896
+
897
+ void ShutdownLocked(grpc_error* error) override {
898
+ wrapped_->ShutdownLocked(error);
899
+ }
900
+
901
+ ares_socket_t GetWrappedAresSocketLocked() override {
902
+ return wrapped_->GetWrappedAresSocketLocked();
903
+ }
904
+
905
+ const char* GetName() override { return wrapped_->GetName(); }
906
+
907
+ private:
908
+ GrpcPolledFdWindows* wrapped_;
909
+ };
910
+
843
911
  class GrpcPolledFdFactoryWindows : public GrpcPolledFdFactory {
844
912
  public:
845
- GrpcPolledFdFactoryWindows(grpc_combiner* combiner)
913
+ GrpcPolledFdFactoryWindows(Combiner* combiner)
846
914
  : sock_to_polled_fd_map_(combiner) {}
847
915
 
848
916
  GrpcPolledFd* NewGrpcPolledFdLocked(ares_socket_t as,
849
917
  grpc_pollset_set* driver_pollset_set,
850
- grpc_combiner* combiner) override {
918
+ Combiner* combiner) override {
851
919
  GrpcPolledFdWindows* polled_fd = sock_to_polled_fd_map_.LookupPolledFd(as);
852
920
  // Set a flag so that the virtual socket "close" method knows it
853
921
  // doesn't need to call ShutdownLocked, since now the driver will.
854
922
  polled_fd->set_gotten_into_driver_list();
855
- return polled_fd;
923
+ return grpc_core::New<GrpcPolledFdWindowsWrapper>(polled_fd);
856
924
  }
857
925
 
858
926
  void ConfigureAresChannelLocked(ares_channel channel) override {
@@ -864,9 +932,8 @@ class GrpcPolledFdFactoryWindows : public GrpcPolledFdFactory {
864
932
  SockToPolledFdMap sock_to_polled_fd_map_;
865
933
  };
866
934
 
867
- UniquePtr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(grpc_combiner* combiner) {
868
- return UniquePtr<GrpcPolledFdFactory>(
869
- New<GrpcPolledFdFactoryWindows>(combiner));
935
+ UniquePtr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(Combiner* combiner) {
936
+ return MakeUnique<GrpcPolledFdFactoryWindows>(combiner);
870
937
  }
871
938
 
872
939
  } // namespace grpc_core
@@ -175,7 +175,7 @@ static void destroy_hostbyname_request_locked(
175
175
  gpr_free(hr);
176
176
  }
177
177
 
178
- static void on_hostbyname_done_locked(void* arg, int status, int timeouts,
178
+ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
179
179
  struct hostent* hostent) {
180
180
  grpc_ares_hostbyname_request* hr =
181
181
  static_cast<grpc_ares_hostbyname_request*>(arg);
@@ -248,7 +248,7 @@ static void on_hostbyname_done_locked(void* arg, int status, int timeouts,
248
248
  destroy_hostbyname_request_locked(hr);
249
249
  }
250
250
 
251
- static void on_srv_query_done_locked(void* arg, int status, int timeouts,
251
+ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
252
252
  unsigned char* abuf, int alen) {
253
253
  grpc_ares_request* r = static_cast<grpc_ares_request*>(arg);
254
254
  if (status == ARES_SUCCESS) {
@@ -293,7 +293,7 @@ static void on_srv_query_done_locked(void* arg, int status, int timeouts,
293
293
 
294
294
  static const char g_service_config_attribute_prefix[] = "grpc_config=";
295
295
 
296
- static void on_txt_done_locked(void* arg, int status, int timeouts,
296
+ static void on_txt_done_locked(void* arg, int status, int /*timeouts*/,
297
297
  unsigned char* buf, int len) {
298
298
  char* error_msg;
299
299
  grpc_ares_request* r = static_cast<grpc_ares_request*>(arg);
@@ -350,7 +350,7 @@ done:
350
350
  void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
351
351
  grpc_ares_request* r, const char* dns_server, const char* name,
352
352
  const char* default_port, grpc_pollset_set* interested_parties,
353
- bool check_grpclb, int query_timeout_ms, grpc_combiner* combiner) {
353
+ bool check_grpclb, int query_timeout_ms, grpc_core::Combiner* combiner) {
354
354
  grpc_error* error = GRPC_ERROR_NONE;
355
355
  grpc_ares_hostbyname_request* hr = nullptr;
356
356
  ares_channel* channel = nullptr;
@@ -579,8 +579,8 @@ static bool grpc_ares_maybe_resolve_localhost_manually_locked(
579
579
  }
580
580
  #else /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
581
581
  static bool grpc_ares_maybe_resolve_localhost_manually_locked(
582
- const char* name, const char* default_port,
583
- grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs) {
582
+ const char* /*name*/, const char* /*default_port*/,
583
+ grpc_core::UniquePtr<grpc_core::ServerAddressList>* /*addrs*/) {
584
584
  return false;
585
585
  }
586
586
  #endif /* GRPC_ARES_RESOLVE_LOCALHOST_MANUALLY */
@@ -590,7 +590,7 @@ static grpc_ares_request* grpc_dns_lookup_ares_locked_impl(
590
590
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
591
591
  grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs,
592
592
  bool check_grpclb, char** service_config_json, int query_timeout_ms,
593
- grpc_combiner* combiner) {
593
+ grpc_core::Combiner* combiner) {
594
594
  grpc_ares_request* r =
595
595
  static_cast<grpc_ares_request*>(gpr_zalloc(sizeof(grpc_ares_request)));
596
596
  r->ev_driver = nullptr;
@@ -633,7 +633,7 @@ grpc_ares_request* (*grpc_dns_lookup_ares_locked)(
633
633
  grpc_pollset_set* interested_parties, grpc_closure* on_done,
634
634
  grpc_core::UniquePtr<grpc_core::ServerAddressList>* addrs,
635
635
  bool check_grpclb, char** service_config_json, int query_timeout_ms,
636
- grpc_combiner* combiner) = grpc_dns_lookup_ares_locked_impl;
636
+ grpc_core::Combiner* combiner) = grpc_dns_lookup_ares_locked_impl;
637
637
 
638
638
  static void grpc_cancel_ares_request_locked_impl(grpc_ares_request* r) {
639
639
  GPR_ASSERT(r != nullptr);
@@ -674,7 +674,7 @@ void grpc_ares_cleanup(void) {}
674
674
 
675
675
  typedef struct grpc_resolve_address_ares_request {
676
676
  /* combiner that queries and related callbacks run under */
677
- grpc_combiner* combiner;
677
+ grpc_core::Combiner* combiner;
678
678
  /** the pointer to receive the resolved addresses */
679
679
  grpc_resolved_addresses** addrs_out;
680
680
  /** currently resolving addresses */
@@ -719,10 +719,20 @@ static void on_dns_lookup_done_locked(void* arg, grpc_error* error) {
719
719
  grpc_core::Delete(r);
720
720
  }
721
721
 
722
+ static void on_dns_lookup_done(void* arg, grpc_error* error) {
723
+ grpc_resolve_address_ares_request* r =
724
+ static_cast<grpc_resolve_address_ares_request*>(arg);
725
+ r->combiner->Run(GRPC_CLOSURE_INIT(&r->on_dns_lookup_done_locked,
726
+ on_dns_lookup_done_locked, r, nullptr),
727
+ GRPC_ERROR_REF(error));
728
+ }
729
+
722
730
  static void grpc_resolve_address_invoke_dns_lookup_ares_locked(
723
- void* arg, grpc_error* unused_error) {
731
+ void* arg, grpc_error* /*unused_error*/) {
724
732
  grpc_resolve_address_ares_request* r =
725
733
  static_cast<grpc_resolve_address_ares_request*>(arg);
734
+ GRPC_CLOSURE_INIT(&r->on_dns_lookup_done_locked, on_dns_lookup_done, r,
735
+ grpc_schedule_on_exec_ctx);
726
736
  r->ares_request = grpc_dns_lookup_ares_locked(
727
737
  nullptr /* dns_server */, r->name, r->default_port, r->interested_parties,
728
738
  &r->on_dns_lookup_done_locked, &r->addresses, false /* check_grpclb */,
@@ -740,14 +750,12 @@ static void grpc_resolve_address_ares_impl(const char* name,
740
750
  r->combiner = grpc_combiner_create();
741
751
  r->addrs_out = addrs;
742
752
  r->on_resolve_address_done = on_done;
743
- GRPC_CLOSURE_INIT(&r->on_dns_lookup_done_locked, on_dns_lookup_done_locked, r,
744
- grpc_combiner_scheduler(r->combiner));
745
753
  r->name = name;
746
754
  r->default_port = default_port;
747
755
  r->interested_parties = interested_parties;
748
- GRPC_CLOSURE_SCHED(
756
+ r->combiner->Run(
749
757
  GRPC_CLOSURE_CREATE(grpc_resolve_address_invoke_dns_lookup_ares_locked, r,
750
- grpc_combiner_scheduler(r->combiner)),
758
+ nullptr),
751
759
  GRPC_ERROR_NONE);
752
760
  }
753
761