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
@@ -25,9 +25,36 @@
25
25
 
26
26
  #include <grpc/support/atm.h>
27
27
  #include "src/core/lib/debug/trace.h"
28
- #include "src/core/lib/gpr/mpscq.h"
29
28
  #include "src/core/lib/iomgr/exec_ctx.h"
30
29
 
30
+ namespace grpc_core {
31
+ // TODO(yashkt) : Remove this class and replace it with a class that does not
32
+ // use ExecCtx
33
+ class Combiner {
34
+ public:
35
+ void Run(grpc_closure* closure, grpc_error* error);
36
+ // TODO(yashkt) : Remove this method
37
+ void FinallyRun(grpc_closure* closure, grpc_error* error);
38
+ Combiner* next_combiner_on_this_exec_ctx = nullptr;
39
+ grpc_closure_scheduler scheduler;
40
+ grpc_closure_scheduler finally_scheduler;
41
+ MultiProducerSingleConsumerQueue queue;
42
+ // either:
43
+ // a pointer to the initiating exec ctx if that is the only exec_ctx that has
44
+ // ever queued to this combiner, or NULL. If this is non-null, it's not
45
+ // dereferencable (since the initiating exec_ctx may have gone out of scope)
46
+ gpr_atm initiating_exec_ctx_or_null;
47
+ // state is:
48
+ // lower bit - zero if orphaned (STATE_UNORPHANED)
49
+ // other bits - number of items queued on the lock (STATE_ELEM_COUNT_LOW_BIT)
50
+ gpr_atm state;
51
+ bool time_to_execute_final_list = false;
52
+ grpc_closure_list final_list;
53
+ grpc_closure offload;
54
+ gpr_refcount refs;
55
+ };
56
+ } // namespace grpc_core
57
+
31
58
  // Provides serialized access to some resource.
32
59
  // Each action queued on a combiner is executed serially in a borrowed thread.
33
60
  // The actual thread executing actions may change over time (but there will only
@@ -35,7 +62,7 @@
35
62
 
36
63
  // Initialize the lock, with an optional workqueue to shift load to when
37
64
  // necessary
38
- grpc_combiner* grpc_combiner_create(void);
65
+ grpc_core::Combiner* grpc_combiner_create(void);
39
66
 
40
67
  #ifndef NDEBUG
41
68
  #define GRPC_COMBINER_DEBUG_ARGS \
@@ -52,12 +79,9 @@ grpc_combiner* grpc_combiner_create(void);
52
79
 
53
80
  // Ref/unref the lock, for when we're sharing the lock ownership
54
81
  // Prefer to use the macros above
55
- grpc_combiner* grpc_combiner_ref(grpc_combiner* lock GRPC_COMBINER_DEBUG_ARGS);
56
- void grpc_combiner_unref(grpc_combiner* lock GRPC_COMBINER_DEBUG_ARGS);
57
- // Fetch a scheduler to schedule closures against
58
- grpc_closure_scheduler* grpc_combiner_scheduler(grpc_combiner* lock);
59
- // Scheduler to execute \a action within the lock just prior to unlocking.
60
- grpc_closure_scheduler* grpc_combiner_finally_scheduler(grpc_combiner* lock);
82
+ grpc_core::Combiner* grpc_combiner_ref(
83
+ grpc_core::Combiner* lock GRPC_COMBINER_DEBUG_ARGS);
84
+ void grpc_combiner_unref(grpc_core::Combiner* lock GRPC_COMBINER_DEBUG_ARGS);
61
85
 
62
86
  bool grpc_combiner_continue_exec_ctx();
63
87
 
@@ -261,10 +261,12 @@ static void CFStreamRead(grpc_endpoint* ep, grpc_slice_buffer* slices,
261
261
  ep_impl->read_cb = cb;
262
262
  ep_impl->read_slices = slices;
263
263
  grpc_slice_buffer_reset_and_unref_internal(slices);
264
- grpc_resource_user_alloc_slices(&ep_impl->slice_allocator,
265
- GRPC_TCP_DEFAULT_READ_SLICE_SIZE, 1,
266
- ep_impl->read_slices);
267
264
  EP_REF(ep_impl, "read");
265
+ if (grpc_resource_user_alloc_slices(&ep_impl->slice_allocator,
266
+ GRPC_TCP_DEFAULT_READ_SLICE_SIZE, 1,
267
+ ep_impl->read_slices)) {
268
+ ep_impl->stream_sync->NotifyOnRead(&ep_impl->read_action);
269
+ }
268
270
  }
269
271
 
270
272
  static void CFStreamWrite(grpc_endpoint* ep, grpc_slice_buffer* slices,
@@ -658,7 +658,7 @@ static int poll_deadline_to_millis_timeout(grpc_millis millis) {
658
658
  NOTE ON SYNCRHONIZATION: Similar to do_epoll_wait(), this function is only
659
659
  called by g_active_poller thread. So there is no need for synchronization
660
660
  when accessing fields in g_epoll_set */
661
- static grpc_error* process_epoll_events(grpc_pollset* pollset) {
661
+ static grpc_error* process_epoll_events(grpc_pollset* /*pollset*/) {
662
662
  GPR_TIMER_SCOPE("process_epoll_events", 0);
663
663
 
664
664
  static const char* err_desc = "process_events";
@@ -1219,7 +1219,7 @@ done:
1219
1219
  return ret_err;
1220
1220
  }
1221
1221
 
1222
- static void pollset_add_fd(grpc_pollset* pollset, grpc_fd* fd) {}
1222
+ static void pollset_add_fd(grpc_pollset* /*pollset*/, grpc_fd* /*fd*/) {}
1223
1223
 
1224
1224
  /*******************************************************************************
1225
1225
  * Pollset-set Definitions
@@ -1229,21 +1229,23 @@ static grpc_pollset_set* pollset_set_create(void) {
1229
1229
  return (grpc_pollset_set*)(static_cast<intptr_t>(0xdeafbeef));
1230
1230
  }
1231
1231
 
1232
- static void pollset_set_destroy(grpc_pollset_set* pss) {}
1232
+ static void pollset_set_destroy(grpc_pollset_set* /*pss*/) {}
1233
1233
 
1234
- static void pollset_set_add_fd(grpc_pollset_set* pss, grpc_fd* fd) {}
1234
+ static void pollset_set_add_fd(grpc_pollset_set* /*pss*/, grpc_fd* /*fd*/) {}
1235
1235
 
1236
- static void pollset_set_del_fd(grpc_pollset_set* pss, grpc_fd* fd) {}
1236
+ static void pollset_set_del_fd(grpc_pollset_set* /*pss*/, grpc_fd* /*fd*/) {}
1237
1237
 
1238
- static void pollset_set_add_pollset(grpc_pollset_set* pss, grpc_pollset* ps) {}
1238
+ static void pollset_set_add_pollset(grpc_pollset_set* /*pss*/,
1239
+ grpc_pollset* /*ps*/) {}
1239
1240
 
1240
- static void pollset_set_del_pollset(grpc_pollset_set* pss, grpc_pollset* ps) {}
1241
+ static void pollset_set_del_pollset(grpc_pollset_set* /*pss*/,
1242
+ grpc_pollset* /*ps*/) {}
1241
1243
 
1242
- static void pollset_set_add_pollset_set(grpc_pollset_set* bag,
1243
- grpc_pollset_set* item) {}
1244
+ static void pollset_set_add_pollset_set(grpc_pollset_set* /*bag*/,
1245
+ grpc_pollset_set* /*item*/) {}
1244
1246
 
1245
- static void pollset_set_del_pollset_set(grpc_pollset_set* bag,
1246
- grpc_pollset_set* item) {}
1247
+ static void pollset_set_del_pollset_set(grpc_pollset_set* /*bag*/,
1248
+ grpc_pollset_set* /*item*/) {}
1247
1249
 
1248
1250
  /*******************************************************************************
1249
1251
  * Event engine binding
@@ -1253,8 +1255,8 @@ static bool is_any_background_poller_thread(void) { return false; }
1253
1255
 
1254
1256
  static void shutdown_background_closure(void) {}
1255
1257
 
1256
- static bool add_closure_to_background_poller(grpc_closure* closure,
1257
- grpc_error* error) {
1258
+ static bool add_closure_to_background_poller(grpc_closure* /*closure*/,
1259
+ grpc_error* /*error*/) {
1258
1260
  return false;
1259
1261
  }
1260
1262
 
@@ -1325,7 +1327,8 @@ static void reset_event_manager_on_fork() {
1325
1327
  /* It is possible that GLIBC has epoll but the underlying kernel doesn't.
1326
1328
  * Create epoll_fd (epoll_set_init() takes care of that) to make sure epoll
1327
1329
  * support is available */
1328
- const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
1330
+ const grpc_event_engine_vtable* grpc_init_epoll1_linux(
1331
+ bool /*explicit_request*/) {
1329
1332
  if (!grpc_has_wakeup_fd()) {
1330
1333
  gpr_log(GPR_ERROR, "Skipping epoll1 because of no wakeup fd.");
1331
1334
  return nullptr;
@@ -1356,7 +1359,8 @@ const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
1356
1359
  #include "src/core/lib/iomgr/ev_epoll1_linux.h"
1357
1360
  /* If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return
1358
1361
  * NULL */
1359
- const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
1362
+ const grpc_event_engine_vtable* grpc_init_epoll1_linux(
1363
+ bool /*explicit_request*/) {
1360
1364
  return nullptr;
1361
1365
  }
1362
1366
  #endif /* defined(GRPC_POSIX_SOCKET_EV_EPOLL1) */
@@ -1379,7 +1379,9 @@ static void reset_event_manager_on_fork() {
1379
1379
  gpr_mu_lock(&fork_fd_list_mu);
1380
1380
  while (fork_fd_list_head != nullptr) {
1381
1381
  if (fork_fd_list_head->fd != nullptr) {
1382
- close(fork_fd_list_head->fd->fd);
1382
+ if (!fork_fd_list_head->fd->closed) {
1383
+ close(fork_fd_list_head->fd->fd);
1384
+ }
1383
1385
  fork_fd_list_head->fd->fd = -1;
1384
1386
  } else {
1385
1387
  close(fork_fd_list_head->cached_wakeup_fd->fd.read_fd);
@@ -63,6 +63,7 @@ grpc_millis grpc_cycle_counter_to_millis_round_down(gpr_cycle_counter cycles);
63
63
  grpc_millis grpc_cycle_counter_to_millis_round_up(gpr_cycle_counter cycles);
64
64
 
65
65
  namespace grpc_core {
66
+ class Combiner;
66
67
  /** Execution context.
67
68
  * A bag of data that collects information along a callstack.
68
69
  * It is created on the stack at core entry points (public API or iomgr), and
@@ -136,9 +137,9 @@ class ExecCtx {
136
137
 
137
138
  struct CombinerData {
138
139
  /* currently active combiner: updated only via combiner.c */
139
- grpc_combiner* active_combiner;
140
+ Combiner* active_combiner;
140
141
  /* last active combiner in the active combiner list */
141
- grpc_combiner* last_combiner;
142
+ Combiner* last_combiner;
142
143
  };
143
144
 
144
145
  /** Only to be used by grpc-combiner code */
@@ -225,7 +226,7 @@ class ExecCtx {
225
226
  virtual bool CheckReadyToFinish() { return false; }
226
227
 
227
228
  /** Disallow delete on ExecCtx. */
228
- static void operator delete(void* p) { abort(); }
229
+ static void operator delete(void* /* p */) { abort(); }
229
230
 
230
231
  private:
231
232
  /** Set exec_ctx_ to exec_ctx. */
@@ -164,7 +164,6 @@ void Executor::SetThreading(bool threading) {
164
164
 
165
165
  GPR_ASSERT(num_threads_ == 0);
166
166
  gpr_atm_rel_store(&num_threads_, 1);
167
- gpr_tls_init(&g_this_thread_state);
168
167
  thd_state_ = static_cast<ThreadState*>(
169
168
  gpr_zalloc(sizeof(ThreadState) * max_threads_));
170
169
 
@@ -213,7 +212,6 @@ void Executor::SetThreading(bool threading) {
213
212
  }
214
213
 
215
214
  gpr_free(thd_state_);
216
- gpr_tls_destroy(&g_this_thread_state);
217
215
 
218
216
  // grpc_iomgr_shutdown_background_closure() will close all the registered
219
217
  // fds in the background poller, and wait for all pending closures to
@@ -264,6 +262,8 @@ void Executor::ThreadMain(void* arg) {
264
262
  grpc_core::ExecCtx::Get()->InvalidateNow();
265
263
  subtract_depth = RunClosures(ts->name, closures);
266
264
  }
265
+
266
+ gpr_tls_set(&g_this_thread_state, reinterpret_cast<intptr_t>(nullptr));
267
267
  }
268
268
 
269
269
  void Executor::Enqueue(grpc_closure* closure, grpc_error* error,
@@ -485,4 +485,6 @@ void Executor::SetThreadingDefault(bool enable) {
485
485
  executors[static_cast<size_t>(ExecutorType::DEFAULT)]->SetThreading(enable);
486
486
  }
487
487
 
488
+ void grpc_executor_global_init() { gpr_tls_init(&g_this_thread_state); }
489
+
488
490
  } // namespace grpc_core
@@ -117,6 +117,9 @@ class Executor {
117
117
  gpr_spinlock adding_thread_lock_;
118
118
  };
119
119
 
120
+ // Global initializer for executor
121
+ void grpc_executor_global_init();
122
+
120
123
  } // namespace grpc_core
121
124
 
122
125
  #endif /* GRPC_CORE_LIB_IOMGR_EXECUTOR_H */
@@ -22,7 +22,6 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include "src/core/lib/debug/stats.h"
25
- #include "src/core/lib/gprpp/abstract.h"
26
25
  #include "src/core/lib/gprpp/atomic.h"
27
26
  #include "src/core/lib/gprpp/sync.h"
28
27
 
@@ -38,17 +37,15 @@ class MPMCQueueInterface {
38
37
 
39
38
  // Puts elem into queue immediately at the end of queue.
40
39
  // This might cause to block on full queue depending on implementation.
41
- virtual void Put(void* elem) GRPC_ABSTRACT;
40
+ virtual void Put(void* elem) = 0;
42
41
 
43
42
  // Removes the oldest element from the queue and return it.
44
43
  // This might cause to block on empty queue depending on implementation.
45
44
  // Optional argument for collecting stats purpose.
46
- virtual void* Get(gpr_timespec* wait_time = nullptr) GRPC_ABSTRACT;
45
+ virtual void* Get(gpr_timespec* wait_time = nullptr) = 0;
47
46
 
48
47
  // Returns number of elements in the queue currently
49
- virtual int count() const GRPC_ABSTRACT;
50
-
51
- GRPC_ABSTRACT_BASE_CLASS
48
+ virtual int count() const = 0;
52
49
  };
53
50
 
54
51
  class InfLenFIFOQueue : public MPMCQueueInterface {
@@ -58,8 +58,7 @@ void ThreadPool::SharedThreadPoolConstructor() {
58
58
  threads_ = static_cast<ThreadPoolWorker**>(
59
59
  gpr_zalloc(num_threads_ * sizeof(ThreadPoolWorker*)));
60
60
  for (int i = 0; i < num_threads_; ++i) {
61
- threads_[i] =
62
- New<ThreadPoolWorker>(thd_name_, this, queue_, thread_options_, i);
61
+ threads_[i] = New<ThreadPoolWorker>(thd_name_, queue_, thread_options_, i);
63
62
  threads_[i]->Start();
64
63
  }
65
64
  }
@@ -43,31 +43,27 @@ class ThreadPoolInterface {
43
43
  // current thread to be blocked (in case of unable to schedule).
44
44
  // Closure should contain a function pointer and arguments it will take, more
45
45
  // details for closure struct at /grpc/include/grpc/impl/codegen/grpc_types.h
46
- virtual void Add(grpc_experimental_completion_queue_functor* closure)
47
- GRPC_ABSTRACT;
46
+ virtual void Add(grpc_experimental_completion_queue_functor* closure) = 0;
48
47
 
49
48
  // Returns the current number of pending closures
50
- virtual int num_pending_closures() const GRPC_ABSTRACT;
49
+ virtual int num_pending_closures() const = 0;
51
50
 
52
51
  // Returns the capacity of pool (number of worker threads in pool)
53
- virtual int pool_capacity() const GRPC_ABSTRACT;
52
+ virtual int pool_capacity() const = 0;
54
53
 
55
54
  // Thread option accessor
56
- virtual const Thread::Options& thread_options() const GRPC_ABSTRACT;
55
+ virtual const Thread::Options& thread_options() const = 0;
57
56
 
58
57
  // Returns the thread name for threads in this ThreadPool.
59
- virtual const char* thread_name() const GRPC_ABSTRACT;
60
-
61
- GRPC_ABSTRACT_BASE_CLASS
58
+ virtual const char* thread_name() const = 0;
62
59
  };
63
60
 
64
61
  // Worker thread for threadpool. Executes closures in the queue, until getting a
65
62
  // NULL closure.
66
63
  class ThreadPoolWorker {
67
64
  public:
68
- ThreadPoolWorker(const char* thd_name, ThreadPoolInterface* pool,
69
- MPMCQueueInterface* queue, Thread::Options& options,
70
- int index)
65
+ ThreadPoolWorker(const char* thd_name, MPMCQueueInterface* queue,
66
+ Thread::Options& options, int index)
71
67
  : queue_(queue), thd_name_(thd_name), index_(index) {
72
68
  thd_ = Thread(thd_name,
73
69
  [](void* th) { static_cast<ThreadPoolWorker*>(th)->Run(); },
@@ -132,7 +132,7 @@ struct grpc_resource_quota {
132
132
 
133
133
  /* Master combiner lock: all activity on a quota executes under this combiner
134
134
  * (so no mutex is needed for this data structure) */
135
- grpc_combiner* combiner;
135
+ grpc_core::Combiner* combiner;
136
136
  /* Size of the resource quota */
137
137
  int64_t size;
138
138
  /* Amount of free memory in the resource quota */
@@ -293,7 +293,8 @@ static void rq_step_sched(grpc_resource_quota* resource_quota) {
293
293
  if (resource_quota->step_scheduled) return;
294
294
  resource_quota->step_scheduled = true;
295
295
  grpc_resource_quota_ref_internal(resource_quota);
296
- GRPC_CLOSURE_SCHED(&resource_quota->rq_step_closure, GRPC_ERROR_NONE);
296
+ resource_quota->combiner->FinallyRun(&resource_quota->rq_step_closure,
297
+ GRPC_ERROR_NONE);
297
298
  }
298
299
 
299
300
  /* update the atomically available resource estimate - use no barriers since
@@ -583,16 +584,19 @@ static void ru_destroy(void* ru, grpc_error* error) {
583
584
  gpr_free(resource_user);
584
585
  }
585
586
 
587
+ static void ru_alloc_slices(
588
+ grpc_resource_user_slice_allocator* slice_allocator) {
589
+ for (size_t i = 0; i < slice_allocator->count; i++) {
590
+ grpc_slice_buffer_add_indexed(
591
+ slice_allocator->dest, ru_slice_create(slice_allocator->resource_user,
592
+ slice_allocator->length));
593
+ }
594
+ }
595
+
586
596
  static void ru_allocated_slices(void* arg, grpc_error* error) {
587
597
  grpc_resource_user_slice_allocator* slice_allocator =
588
598
  static_cast<grpc_resource_user_slice_allocator*>(arg);
589
- if (error == GRPC_ERROR_NONE) {
590
- for (size_t i = 0; i < slice_allocator->count; i++) {
591
- grpc_slice_buffer_add_indexed(
592
- slice_allocator->dest, ru_slice_create(slice_allocator->resource_user,
593
- slice_allocator->length));
594
- }
595
- }
599
+ if (error == GRPC_ERROR_NONE) ru_alloc_slices(slice_allocator);
596
600
  GRPC_CLOSURE_RUN(&slice_allocator->on_done, GRPC_ERROR_REF(error));
597
601
  }
598
602
 
@@ -652,10 +656,9 @@ grpc_resource_quota* grpc_resource_quota_create(const char* name) {
652
656
  (intptr_t)resource_quota);
653
657
  }
654
658
  GRPC_CLOSURE_INIT(&resource_quota->rq_step_closure, rq_step, resource_quota,
655
- grpc_combiner_finally_scheduler(resource_quota->combiner));
659
+ nullptr);
656
660
  GRPC_CLOSURE_INIT(&resource_quota->rq_reclamation_done_closure,
657
- rq_reclamation_done, resource_quota,
658
- grpc_combiner_scheduler(resource_quota->combiner));
661
+ rq_reclamation_done, resource_quota, nullptr);
659
662
  for (int i = 0; i < GRPC_RULIST_COUNT; i++) {
660
663
  resource_quota->roots[i] = nullptr;
661
664
  }
@@ -771,19 +774,15 @@ grpc_resource_user* grpc_resource_user_create(
771
774
  resource_user->resource_quota =
772
775
  grpc_resource_quota_ref_internal(resource_quota);
773
776
  GRPC_CLOSURE_INIT(&resource_user->allocate_closure, &ru_allocate,
774
- resource_user,
775
- grpc_combiner_scheduler(resource_quota->combiner));
777
+ resource_user, nullptr);
776
778
  GRPC_CLOSURE_INIT(&resource_user->add_to_free_pool_closure,
777
- &ru_add_to_free_pool, resource_user,
778
- grpc_combiner_scheduler(resource_quota->combiner));
779
+ &ru_add_to_free_pool, resource_user, nullptr);
779
780
  GRPC_CLOSURE_INIT(&resource_user->post_reclaimer_closure[0],
780
- &ru_post_benign_reclaimer, resource_user,
781
- grpc_combiner_scheduler(resource_quota->combiner));
781
+ &ru_post_benign_reclaimer, resource_user, nullptr);
782
782
  GRPC_CLOSURE_INIT(&resource_user->post_reclaimer_closure[1],
783
- &ru_post_destructive_reclaimer, resource_user,
784
- grpc_combiner_scheduler(resource_quota->combiner));
783
+ &ru_post_destructive_reclaimer, resource_user, nullptr);
785
784
  GRPC_CLOSURE_INIT(&resource_user->destroy_closure, &ru_destroy, resource_user,
786
- grpc_combiner_scheduler(resource_quota->combiner));
785
+ nullptr);
787
786
  gpr_mu_init(&resource_user->mu);
788
787
  gpr_atm_rel_store(&resource_user->refs, 1);
789
788
  gpr_atm_rel_store(&resource_user->shutdown, 0);
@@ -824,7 +823,8 @@ static void ru_unref_by(grpc_resource_user* resource_user, gpr_atm amount) {
824
823
  gpr_atm old = gpr_atm_full_fetch_add(&resource_user->refs, -amount);
825
824
  GPR_ASSERT(old >= amount);
826
825
  if (old == amount) {
827
- GRPC_CLOSURE_SCHED(&resource_user->destroy_closure, GRPC_ERROR_NONE);
826
+ resource_user->resource_quota->combiner->Run(
827
+ &resource_user->destroy_closure, GRPC_ERROR_NONE);
828
828
  }
829
829
  }
830
830
 
@@ -838,10 +838,8 @@ void grpc_resource_user_unref(grpc_resource_user* resource_user) {
838
838
 
839
839
  void grpc_resource_user_shutdown(grpc_resource_user* resource_user) {
840
840
  if (gpr_atm_full_fetch_add(&resource_user->shutdown, 1) == 0) {
841
- GRPC_CLOSURE_SCHED(
842
- GRPC_CLOSURE_CREATE(
843
- ru_shutdown, resource_user,
844
- grpc_combiner_scheduler(resource_user->resource_quota->combiner)),
841
+ resource_user->resource_quota->combiner->Run(
842
+ GRPC_CLOSURE_CREATE(ru_shutdown, resource_user, nullptr),
845
843
  GRPC_ERROR_NONE);
846
844
  }
847
845
  }
@@ -880,7 +878,7 @@ void grpc_resource_user_free_threads(grpc_resource_user* resource_user,
880
878
  gpr_mu_unlock(&resource_user->resource_quota->thread_count_mu);
881
879
  }
882
880
 
883
- static void resource_user_alloc_locked(grpc_resource_user* resource_user,
881
+ static bool resource_user_alloc_locked(grpc_resource_user* resource_user,
884
882
  size_t size,
885
883
  grpc_closure* optional_on_done) {
886
884
  ru_ref_by(resource_user, static_cast<gpr_atm>(size));
@@ -890,19 +888,19 @@ static void resource_user_alloc_locked(grpc_resource_user* resource_user,
890
888
  resource_user->resource_quota->name, resource_user->name, size,
891
889
  resource_user->free_pool);
892
890
  }
893
- if (resource_user->free_pool < 0) {
894
- if (optional_on_done != nullptr) {
895
- resource_user->outstanding_allocations += static_cast<int64_t>(size);
896
- grpc_closure_list_append(&resource_user->on_allocated, optional_on_done,
897
- GRPC_ERROR_NONE);
898
- }
899
- if (!resource_user->allocating) {
900
- resource_user->allocating = true;
901
- GRPC_CLOSURE_SCHED(&resource_user->allocate_closure, GRPC_ERROR_NONE);
902
- }
903
- } else {
904
- GRPC_CLOSURE_SCHED(optional_on_done, GRPC_ERROR_NONE);
891
+ if (GPR_LIKELY(resource_user->free_pool >= 0)) return true;
892
+ // Slow path: We need to wait for the free pool to refill.
893
+ if (optional_on_done != nullptr) {
894
+ resource_user->outstanding_allocations += static_cast<int64_t>(size);
895
+ grpc_closure_list_append(&resource_user->on_allocated, optional_on_done,
896
+ GRPC_ERROR_NONE);
905
897
  }
898
+ if (!resource_user->allocating) {
899
+ resource_user->allocating = true;
900
+ resource_user->resource_quota->combiner->Run(
901
+ &resource_user->allocate_closure, GRPC_ERROR_NONE);
902
+ }
903
+ return false;
906
904
  }
907
905
 
908
906
  bool grpc_resource_user_safe_alloc(grpc_resource_user* resource_user,
@@ -926,15 +924,17 @@ bool grpc_resource_user_safe_alloc(grpc_resource_user* resource_user,
926
924
  return true;
927
925
  }
928
926
 
929
- void grpc_resource_user_alloc(grpc_resource_user* resource_user, size_t size,
927
+ bool grpc_resource_user_alloc(grpc_resource_user* resource_user, size_t size,
930
928
  grpc_closure* optional_on_done) {
931
929
  // TODO(juanlishen): Maybe return immediately if shutting down. Deferring this
932
930
  // because some tests become flaky after the change.
933
931
  gpr_mu_lock(&resource_user->mu);
934
932
  grpc_resource_quota* resource_quota = resource_user->resource_quota;
935
933
  gpr_atm_no_barrier_fetch_add(&resource_quota->used, size);
936
- resource_user_alloc_locked(resource_user, size, optional_on_done);
934
+ const bool ret =
935
+ resource_user_alloc_locked(resource_user, size, optional_on_done);
937
936
  gpr_mu_unlock(&resource_user->mu);
937
+ return ret;
938
938
  }
939
939
 
940
940
  void grpc_resource_user_free(grpc_resource_user* resource_user, size_t size) {
@@ -953,8 +953,8 @@ void grpc_resource_user_free(grpc_resource_user* resource_user, size_t size) {
953
953
  if (is_bigger_than_zero && was_zero_or_negative &&
954
954
  !resource_user->added_to_free_pool) {
955
955
  resource_user->added_to_free_pool = true;
956
- GRPC_CLOSURE_SCHED(&resource_user->add_to_free_pool_closure,
957
- GRPC_ERROR_NONE);
956
+ resource_quota->combiner->Run(&resource_user->add_to_free_pool_closure,
957
+ GRPC_ERROR_NONE);
958
958
  }
959
959
  gpr_mu_unlock(&resource_user->mu);
960
960
  ru_unref_by(resource_user, static_cast<gpr_atm>(size));
@@ -965,8 +965,8 @@ void grpc_resource_user_post_reclaimer(grpc_resource_user* resource_user,
965
965
  grpc_closure* closure) {
966
966
  GPR_ASSERT(resource_user->new_reclaimers[destructive] == nullptr);
967
967
  resource_user->new_reclaimers[destructive] = closure;
968
- GRPC_CLOSURE_SCHED(&resource_user->post_reclaimer_closure[destructive],
969
- GRPC_ERROR_NONE);
968
+ resource_user->resource_quota->combiner->Run(
969
+ &resource_user->post_reclaimer_closure[destructive], GRPC_ERROR_NONE);
970
970
  }
971
971
 
972
972
  void grpc_resource_user_finish_reclamation(grpc_resource_user* resource_user) {
@@ -974,7 +974,7 @@ void grpc_resource_user_finish_reclamation(grpc_resource_user* resource_user) {
974
974
  gpr_log(GPR_INFO, "RQ %s %s: reclamation complete",
975
975
  resource_user->resource_quota->name, resource_user->name);
976
976
  }
977
- GRPC_CLOSURE_SCHED(
977
+ resource_user->resource_quota->combiner->Run(
978
978
  &resource_user->resource_quota->rq_reclamation_done_closure,
979
979
  GRPC_ERROR_NONE);
980
980
  }
@@ -989,18 +989,22 @@ void grpc_resource_user_slice_allocator_init(
989
989
  slice_allocator->resource_user = resource_user;
990
990
  }
991
991
 
992
- void grpc_resource_user_alloc_slices(
992
+ bool grpc_resource_user_alloc_slices(
993
993
  grpc_resource_user_slice_allocator* slice_allocator, size_t length,
994
994
  size_t count, grpc_slice_buffer* dest) {
995
- if (gpr_atm_no_barrier_load(&slice_allocator->resource_user->shutdown)) {
995
+ if (GPR_UNLIKELY(
996
+ gpr_atm_no_barrier_load(&slice_allocator->resource_user->shutdown))) {
996
997
  GRPC_CLOSURE_SCHED(
997
998
  &slice_allocator->on_allocated,
998
999
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resource user shutdown"));
999
- return;
1000
+ return false;
1000
1001
  }
1001
1002
  slice_allocator->length = length;
1002
1003
  slice_allocator->count = count;
1003
1004
  slice_allocator->dest = dest;
1004
- grpc_resource_user_alloc(slice_allocator->resource_user, count * length,
1005
- &slice_allocator->on_allocated);
1005
+ const bool ret =
1006
+ grpc_resource_user_alloc(slice_allocator->resource_user, count * length,
1007
+ &slice_allocator->on_allocated);
1008
+ if (ret) ru_alloc_slices(slice_allocator);
1009
+ return ret;
1006
1010
  }