grpc 1.37.1 → 1.39.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 (636) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +96 -59
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/endpoint_config.h +48 -0
  5. data/include/grpc/event_engine/event_engine.h +334 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +91 -0
  8. data/include/grpc/grpc.h +11 -4
  9. data/include/grpc/grpc_security.h +32 -0
  10. data/include/grpc/grpc_security_constants.h +15 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +28 -13
  12. data/include/grpc/impl/codegen/port_platform.h +22 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +630 -3103
  17. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +755 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +46 -54
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +146 -155
  43. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  44. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  46. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -32
  65. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  68. data/src/core/ext/filters/client_channel/retry_filter.cc +2449 -0
  69. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  70. data/src/core/ext/filters/client_channel/retry_service_config.cc +306 -0
  71. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  72. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  73. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  74. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  75. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  76. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  77. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  78. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  79. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  80. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  81. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  82. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +25 -18
  83. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  84. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  85. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  86. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  87. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  88. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  89. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  90. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  91. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  92. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  93. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  96. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  98. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  99. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  101. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  103. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  104. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -120
  105. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  106. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  107. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  108. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  109. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  110. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  111. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  112. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  114. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  115. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  116. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  118. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  120. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  121. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  122. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  123. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  124. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  125. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  126. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  127. data/src/core/ext/transport/chttp2/transport/internal.h +32 -27
  128. data/src/core/ext/transport/chttp2/transport/parsing.cc +65 -58
  129. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  130. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  131. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  132. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  133. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  134. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  135. data/src/core/ext/xds/xds_api.cc +348 -199
  136. data/src/core/ext/xds/xds_api.h +21 -12
  137. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  138. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  139. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  140. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  141. data/src/core/ext/xds/xds_channel_args.h +5 -2
  142. data/src/core/ext/xds/xds_client.cc +310 -178
  143. data/src/core/ext/xds/xds_client.h +41 -27
  144. data/src/core/ext/xds/xds_client_stats.h +3 -2
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  146. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  147. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  148. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  149. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  150. data/src/core/lib/channel/channel_stack.cc +10 -9
  151. data/src/core/lib/channel/channel_stack.h +10 -9
  152. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  153. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  154. data/src/core/lib/channel/channelz.cc +21 -13
  155. data/src/core/lib/channel/channelz.h +3 -0
  156. data/src/core/lib/channel/connected_channel.cc +4 -4
  157. data/src/core/lib/channel/handshaker.cc +7 -6
  158. data/src/core/lib/channel/handshaker.h +5 -5
  159. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  160. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  161. data/src/core/lib/event_engine/event_engine.cc +50 -0
  162. data/src/core/lib/event_engine/slice_allocator.cc +89 -0
  163. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  164. data/src/core/lib/event_engine/sockaddr.h +44 -0
  165. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  166. data/src/core/lib/gprpp/ref_counted.h +28 -14
  167. data/src/core/lib/gprpp/status_helper.cc +407 -0
  168. data/src/core/lib/gprpp/status_helper.h +183 -0
  169. data/src/core/lib/http/httpcli.cc +11 -11
  170. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  171. data/src/core/lib/http/parser.cc +16 -16
  172. data/src/core/lib/http/parser.h +4 -4
  173. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  174. data/src/core/lib/iomgr/buffer_list.h +4 -5
  175. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  176. data/src/core/lib/iomgr/call_combiner.h +12 -14
  177. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  178. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  179. data/src/core/lib/iomgr/closure.h +7 -6
  180. data/src/core/lib/iomgr/combiner.cc +14 -12
  181. data/src/core/lib/iomgr/combiner.h +2 -2
  182. data/src/core/lib/iomgr/endpoint.cc +1 -1
  183. data/src/core/lib/iomgr/endpoint.h +2 -2
  184. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  185. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  186. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  187. data/src/core/lib/iomgr/error.cc +168 -61
  188. data/src/core/lib/iomgr/error.h +217 -106
  189. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  190. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  191. data/src/core/lib/iomgr/error_internal.h +5 -1
  192. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  193. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  194. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  195. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  196. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  197. data/src/core/lib/iomgr/ev_posix.h +9 -9
  198. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  199. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  200. data/src/core/lib/iomgr/event_engine/endpoint.cc +194 -0
  201. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  202. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  203. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  204. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  205. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  206. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  207. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  208. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  209. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  210. data/src/core/lib/iomgr/event_engine/tcp.cc +243 -0
  211. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  212. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  213. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  214. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  215. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  216. data/src/core/lib/iomgr/executor.cc +8 -8
  217. data/src/core/lib/iomgr/executor.h +2 -2
  218. data/src/core/lib/iomgr/iomgr.cc +2 -2
  219. data/src/core/lib/iomgr/iomgr.h +1 -1
  220. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  221. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  222. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  223. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  224. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  225. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  226. data/src/core/lib/iomgr/load_file.cc +4 -4
  227. data/src/core/lib/iomgr/load_file.h +2 -2
  228. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  229. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  230. data/src/core/lib/iomgr/pollset.cc +5 -5
  231. data/src/core/lib/iomgr/pollset.h +9 -9
  232. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  233. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  234. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  235. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  236. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  237. data/src/core/lib/iomgr/port.h +7 -5
  238. data/src/core/lib/iomgr/python_util.h +1 -1
  239. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  240. data/src/core/lib/iomgr/resolve_address.h +12 -6
  241. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  242. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  243. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  244. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  245. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  246. data/src/core/lib/iomgr/sockaddr.h +1 -0
  247. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  248. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  249. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  250. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  251. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  252. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  253. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  254. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  255. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  256. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  257. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  258. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  259. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  260. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  261. data/src/core/lib/iomgr/tcp_server.h +12 -11
  262. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  263. data/src/core/lib/iomgr/tcp_server_posix.cc +28 -21
  264. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  265. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  266. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  267. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  268. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  269. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  270. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  271. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  272. data/src/core/lib/iomgr/timer.h +6 -1
  273. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  274. data/src/core/lib/iomgr/timer_custom.h +1 -1
  275. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  276. data/src/core/lib/iomgr/udp_server.cc +21 -20
  277. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  278. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  279. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  280. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  281. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  282. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  283. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  284. data/src/core/lib/iomgr/work_serializer.h +17 -1
  285. data/src/core/lib/json/json.h +1 -1
  286. data/src/core/lib/json/json_reader.cc +4 -4
  287. data/src/core/lib/matchers/matchers.cc +39 -39
  288. data/src/core/lib/matchers/matchers.h +28 -28
  289. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  290. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  291. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  292. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  293. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  294. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  295. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  296. data/src/core/lib/security/credentials/credentials.h +2 -2
  297. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  298. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  299. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  300. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  301. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  302. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  303. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  304. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  305. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  306. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  307. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  308. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  309. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  310. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  311. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  312. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  313. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  314. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  315. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  316. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  317. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  318. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  319. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  320. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  321. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  322. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  323. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  324. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  325. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  326. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  327. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  328. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  329. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  330. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  331. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  332. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  333. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  334. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  335. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  336. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  337. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  338. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  339. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  340. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  341. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  342. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  343. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  344. data/src/core/lib/security/transport/tsi_error.h +2 -1
  345. data/src/core/lib/security/util/json_util.cc +2 -2
  346. data/src/core/lib/security/util/json_util.h +1 -1
  347. data/src/core/lib/surface/call.cc +67 -46
  348. data/src/core/lib/surface/call.h +13 -2
  349. data/src/core/lib/surface/channel.cc +6 -6
  350. data/src/core/lib/surface/channel.h +3 -2
  351. data/src/core/lib/surface/channel_ping.cc +1 -1
  352. data/src/core/lib/surface/completion_queue.cc +68 -69
  353. data/src/core/lib/surface/completion_queue.h +3 -2
  354. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  355. data/src/core/lib/surface/init.cc +1 -3
  356. data/src/core/lib/surface/init.h +10 -1
  357. data/src/core/lib/surface/lame_client.cc +11 -11
  358. data/src/core/lib/surface/lame_client.h +1 -1
  359. data/src/core/lib/surface/server.cc +28 -22
  360. data/src/core/lib/surface/server.h +16 -15
  361. data/src/core/lib/surface/validate_metadata.cc +7 -7
  362. data/src/core/lib/surface/validate_metadata.h +3 -2
  363. data/src/core/lib/surface/version.cc +4 -2
  364. data/src/core/lib/transport/byte_stream.cc +5 -5
  365. data/src/core/lib/transport/byte_stream.h +8 -8
  366. data/src/core/lib/transport/connectivity_state.cc +1 -1
  367. data/src/core/lib/transport/error_utils.cc +21 -10
  368. data/src/core/lib/transport/error_utils.h +11 -5
  369. data/src/core/lib/transport/metadata_batch.cc +37 -37
  370. data/src/core/lib/transport/metadata_batch.h +19 -18
  371. data/src/core/lib/transport/transport.cc +4 -3
  372. data/src/core/lib/transport/transport.h +6 -4
  373. data/src/core/lib/transport/transport_op_string.cc +6 -6
  374. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  375. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  376. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  377. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  378. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  379. data/src/core/tsi/ssl_transport_security.cc +32 -14
  380. data/src/core/tsi/ssl_transport_security.h +3 -4
  381. data/src/ruby/bin/math_services_pb.rb +1 -1
  382. data/src/ruby/ext/grpc/extconf.rb +2 -0
  383. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  384. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  385. data/src/ruby/lib/grpc/version.rb +1 -1
  386. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  387. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  388. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  389. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  390. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  391. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  392. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  393. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  394. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  395. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  396. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  397. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  398. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  399. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  400. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  401. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  402. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  403. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  404. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  405. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  406. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  407. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  408. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  409. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  410. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  411. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  412. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  413. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  414. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  415. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  416. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  417. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  418. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  419. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  420. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  421. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  422. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  423. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  424. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  425. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  426. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  427. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  428. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  429. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  430. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  431. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  432. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  433. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  434. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  435. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  436. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  437. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  438. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  439. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  440. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  441. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  442. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  443. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  444. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  445. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  446. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  447. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  448. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  449. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  450. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  451. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  452. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  453. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  454. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  455. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  456. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  457. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  458. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  459. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  460. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  461. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  462. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  463. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  464. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  465. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  466. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  467. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  468. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  469. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  470. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  471. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  472. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  473. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  474. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  475. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  476. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  477. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  478. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  479. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  480. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  481. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  482. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  483. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  484. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  485. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  486. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  487. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  488. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  489. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  490. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  491. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  492. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  493. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  494. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  495. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  496. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  497. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  498. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  499. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  500. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  501. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  503. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  504. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  505. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  506. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  507. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  508. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  509. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  510. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  511. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  512. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  513. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  514. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  515. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  516. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  517. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  518. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  519. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  520. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  521. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  522. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  523. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  524. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  525. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  526. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  527. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  528. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  529. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  530. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  531. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  532. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  533. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  534. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  535. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  536. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  537. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  538. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  539. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  540. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  541. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  542. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  543. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  544. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  545. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  546. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  547. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  548. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  549. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  550. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  551. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  552. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  553. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  554. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  555. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  556. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  557. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  558. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  559. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  560. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  561. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  562. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  563. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  564. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  565. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  566. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  567. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  568. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  569. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  570. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  571. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  572. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  573. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  574. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  575. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  576. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  577. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  578. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  579. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  580. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  581. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  582. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  583. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  584. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  585. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  586. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  587. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  588. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  589. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  591. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  592. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  593. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  594. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  595. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  596. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  597. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  598. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  599. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  600. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  601. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  602. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  603. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  604. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  605. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  606. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  607. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  608. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  609. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  610. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  611. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  612. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  613. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  614. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  615. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  616. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  617. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  618. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  619. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  620. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  621. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  622. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  623. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  624. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  625. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  626. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  627. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  628. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  629. metadata +94 -46
  630. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  631. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  632. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  633. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  635. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  636. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -51,7 +51,7 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
51
51
  grpc_transport* transport = grpc_create_chttp2_transport(
52
52
  server_args, server_endpoint, false /* is_client */);
53
53
 
54
- grpc_error* error =
54
+ grpc_error_handle error =
55
55
  core_server->SetupTransport(transport, nullptr, server_args, nullptr);
56
56
  if (error == GRPC_ERROR_NONE) {
57
57
  for (grpc_pollset* pollset : core_server->pollsets()) {
@@ -60,7 +60,7 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
60
60
  grpc_chttp2_transport_start_reading(transport, nullptr, nullptr, nullptr);
61
61
  } else {
62
62
  gpr_log(GPR_ERROR, "Failed to create channel: %s",
63
- grpc_error_string(error));
63
+ grpc_error_std_string(error).c_str());
64
64
  GRPC_ERROR_UNREF(error);
65
65
  grpc_transport_destroy(transport);
66
66
  }
@@ -68,8 +68,9 @@ void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
68
68
 
69
69
  #else // !GPR_SUPPORT_CHANNELS_FROM_FD
70
70
 
71
- void grpc_server_add_insecure_channel_from_fd(grpc_server* server,
72
- void* reserved, int fd) {
71
+ void grpc_server_add_insecure_channel_from_fd(grpc_server* /* server */,
72
+ void* /* reserved */,
73
+ int /* fd */) {
73
74
  GPR_ASSERT(0);
74
75
  }
75
76
 
@@ -40,7 +40,7 @@
40
40
  namespace {
41
41
 
42
42
  grpc_channel_args* ModifyArgsForConnection(grpc_channel_args* args,
43
- grpc_error** error) {
43
+ grpc_error_handle* error) {
44
44
  grpc_server_credentials* server_credentials =
45
45
  grpc_find_server_credentials_in_args(args);
46
46
  if (server_credentials == nullptr) {
@@ -69,7 +69,7 @@ grpc_channel_args* ModifyArgsForConnection(grpc_channel_args* args,
69
69
  int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
70
70
  grpc_server_credentials* creds) {
71
71
  grpc_core::ExecCtx exec_ctx;
72
- grpc_error* err = GRPC_ERROR_NONE;
72
+ grpc_error_handle err = GRPC_ERROR_NONE;
73
73
  grpc_core::RefCountedPtr<grpc_server_security_connector> sc;
74
74
  int port_num = 0;
75
75
  grpc_channel_args* args = nullptr;
@@ -121,8 +121,7 @@ int grpc_server_add_secure_http2_port(grpc_server* server, const char* addr,
121
121
  done:
122
122
  sc.reset(DEBUG_LOCATION, "server");
123
123
  if (err != GRPC_ERROR_NONE) {
124
- const char* msg = grpc_error_string(err);
125
- gpr_log(GPR_ERROR, "%s", msg);
124
+ gpr_log(GPR_ERROR, "%s", grpc_error_std_string(err).c_str());
126
125
 
127
126
  GRPC_ERROR_UNREF(err);
128
127
  }
@@ -100,23 +100,23 @@ grpc_core::DebugOnlyTraceFlag grpc_trace_chttp2_refcount(false,
100
100
  "chttp2_refcount");
101
101
 
102
102
  // forward declarations of various callbacks that we'll build closures around
103
- static void write_action_begin_locked(void* t, grpc_error* error);
104
- static void write_action(void* t, grpc_error* error);
105
- static void write_action_end(void* t, grpc_error* error);
106
- static void write_action_end_locked(void* t, grpc_error* error);
103
+ static void write_action_begin_locked(void* t, grpc_error_handle error);
104
+ static void write_action(void* t, grpc_error_handle error);
105
+ static void write_action_end(void* t, grpc_error_handle error);
106
+ static void write_action_end_locked(void* t, grpc_error_handle error);
107
107
 
108
- static void read_action(void* t, grpc_error* error);
109
- static void read_action_locked(void* t, grpc_error* error);
108
+ static void read_action(void* t, grpc_error_handle error);
109
+ static void read_action_locked(void* t, grpc_error_handle error);
110
110
  static void continue_read_action_locked(grpc_chttp2_transport* t);
111
111
 
112
- static void complete_fetch(void* gs, grpc_error* error);
113
- static void complete_fetch_locked(void* gs, grpc_error* error);
112
+ static void complete_fetch(void* gs, grpc_error_handle error);
113
+ static void complete_fetch_locked(void* gs, grpc_error_handle error);
114
114
  // Set a transport level setting, and push it to our peer
115
115
  static void queue_setting_update(grpc_chttp2_transport* t,
116
116
  grpc_chttp2_setting_id id, uint32_t value);
117
117
 
118
118
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
119
- grpc_error* error);
119
+ grpc_error_handle error);
120
120
 
121
121
  // Start new streams that have been created if we can
122
122
  static void maybe_start_some_streams(grpc_chttp2_transport* t);
@@ -126,40 +126,43 @@ static void connectivity_state_set(grpc_chttp2_transport* t,
126
126
  const absl::Status& status,
127
127
  const char* reason);
128
128
 
129
- static void benign_reclaimer(void* arg, grpc_error* error);
130
- static void destructive_reclaimer(void* arg, grpc_error* error);
131
- static void benign_reclaimer_locked(void* arg, grpc_error* error);
132
- static void destructive_reclaimer_locked(void* arg, grpc_error* error);
129
+ static void benign_reclaimer(void* arg, grpc_error_handle error);
130
+ static void destructive_reclaimer(void* arg, grpc_error_handle error);
131
+ static void benign_reclaimer_locked(void* arg, grpc_error_handle error);
132
+ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error);
133
133
 
134
134
  static void post_benign_reclaimer(grpc_chttp2_transport* t);
135
135
  static void post_destructive_reclaimer(grpc_chttp2_transport* t);
136
136
 
137
- static void close_transport_locked(grpc_chttp2_transport* t, grpc_error* error);
138
- static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error);
139
-
140
- static void start_bdp_ping(void* tp, grpc_error* error);
141
- static void finish_bdp_ping(void* tp, grpc_error* error);
142
- static void start_bdp_ping_locked(void* tp, grpc_error* error);
143
- static void finish_bdp_ping_locked(void* tp, grpc_error* error);
144
- static void next_bdp_ping_timer_expired(void* tp, grpc_error* error);
145
- static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error);
146
-
147
- static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error);
137
+ static void close_transport_locked(grpc_chttp2_transport* t,
138
+ grpc_error_handle error);
139
+ static void end_all_the_calls(grpc_chttp2_transport* t,
140
+ grpc_error_handle error);
141
+
142
+ static void start_bdp_ping(void* tp, grpc_error_handle error);
143
+ static void finish_bdp_ping(void* tp, grpc_error_handle error);
144
+ static void start_bdp_ping_locked(void* tp, grpc_error_handle error);
145
+ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error);
146
+ static void next_bdp_ping_timer_expired(void* tp, grpc_error_handle error);
147
+ static void next_bdp_ping_timer_expired_locked(void* tp,
148
+ grpc_error_handle error);
149
+
150
+ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error);
148
151
  static void send_ping_locked(grpc_chttp2_transport* t,
149
152
  grpc_closure* on_initiate, grpc_closure* on_ack);
150
- static void retry_initiate_ping_locked(void* tp, grpc_error* error);
153
+ static void retry_initiate_ping_locked(void* tp, grpc_error_handle error);
151
154
 
152
155
  // keepalive-relevant functions
153
- static void init_keepalive_ping(void* arg, grpc_error* error);
154
- static void init_keepalive_ping_locked(void* arg, grpc_error* error);
155
- static void start_keepalive_ping(void* arg, grpc_error* error);
156
- static void finish_keepalive_ping(void* arg, grpc_error* error);
157
- static void start_keepalive_ping_locked(void* arg, grpc_error* error);
158
- static void finish_keepalive_ping_locked(void* arg, grpc_error* error);
159
- static void keepalive_watchdog_fired(void* arg, grpc_error* error);
160
- static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error);
156
+ static void init_keepalive_ping(void* arg, grpc_error_handle error);
157
+ static void init_keepalive_ping_locked(void* arg, grpc_error_handle error);
158
+ static void start_keepalive_ping(void* arg, grpc_error_handle error);
159
+ static void finish_keepalive_ping(void* arg, grpc_error_handle error);
160
+ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error);
161
+ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error);
162
+ static void keepalive_watchdog_fired(void* arg, grpc_error_handle error);
163
+ static void keepalive_watchdog_fired_locked(void* arg, grpc_error_handle error);
161
164
 
162
- static void reset_byte_stream(void* arg, grpc_error* error);
165
+ static void reset_byte_stream(void* arg, grpc_error_handle error);
163
166
 
164
167
  // Flow control default enabled. Can be disabled by setting
165
168
  // GRPC_EXPERIMENTAL_DISABLE_FLOW_CONTROL
@@ -203,7 +206,7 @@ grpc_chttp2_transport::~grpc_chttp2_transport() {
203
206
  grpc_slice_buffer_destroy_internal(&outbuf);
204
207
  grpc_chttp2_hpack_compressor_destroy(&hpack_compressor);
205
208
 
206
- grpc_error* error =
209
+ grpc_error_handle error =
207
210
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed");
208
211
  // ContextList::Execute follows semantics of a callback function and does not
209
212
  // take a ref on error
@@ -534,7 +537,7 @@ grpc_chttp2_transport::grpc_chttp2_transport(
534
537
  }
535
538
  }
536
539
 
537
- static void destroy_transport_locked(void* tp, grpc_error* /*error*/) {
540
+ static void destroy_transport_locked(void* tp, grpc_error_handle /*error*/) {
538
541
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
539
542
  t->destroying = 1;
540
543
  close_transport_locked(
@@ -552,7 +555,7 @@ static void destroy_transport(grpc_transport* gt) {
552
555
  }
553
556
 
554
557
  static void close_transport_locked(grpc_chttp2_transport* t,
555
- grpc_error* error) {
558
+ grpc_error_handle error) {
556
559
  end_all_the_calls(t, GRPC_ERROR_REF(error));
557
560
  cancel_pings(t, GRPC_ERROR_REF(error));
558
561
  if (t->closed_with_error == GRPC_ERROR_NONE) {
@@ -561,7 +564,7 @@ static void close_transport_locked(grpc_chttp2_transport* t,
561
564
  GRPC_STATUS_UNAVAILABLE);
562
565
  }
563
566
  if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
564
- if (t->close_transport_on_writes_finished == nullptr) {
567
+ if (t->close_transport_on_writes_finished == GRPC_ERROR_NONE) {
565
568
  t->close_transport_on_writes_finished =
566
569
  GRPC_ERROR_CREATE_FROM_STATIC_STRING(
567
570
  "Delayed close due to in-progress write");
@@ -731,7 +734,7 @@ static int init_stream(grpc_transport* gt, grpc_stream* gs,
731
734
  return 0;
732
735
  }
733
736
 
734
- static void destroy_stream_locked(void* sp, grpc_error* /*error*/) {
737
+ static void destroy_stream_locked(void* sp, grpc_error_handle /*error*/) {
735
738
  GPR_TIMER_SCOPE("destroy_stream", 0);
736
739
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
737
740
  s->~grpc_chttp2_stream();
@@ -818,9 +821,9 @@ static void set_write_state(grpc_chttp2_transport* t,
818
821
  // from peer while we had some pending writes)
819
822
  if (st == GRPC_CHTTP2_WRITE_STATE_IDLE) {
820
823
  grpc_core::ExecCtx::RunList(DEBUG_LOCATION, &t->run_after_write);
821
- if (t->close_transport_on_writes_finished != nullptr) {
822
- grpc_error* err = t->close_transport_on_writes_finished;
823
- t->close_transport_on_writes_finished = nullptr;
824
+ if (t->close_transport_on_writes_finished != GRPC_ERROR_NONE) {
825
+ grpc_error_handle err = t->close_transport_on_writes_finished;
826
+ t->close_transport_on_writes_finished = GRPC_ERROR_NONE;
824
827
  close_transport_locked(t, err);
825
828
  }
826
829
  }
@@ -951,7 +954,8 @@ static const char* begin_writing_desc(bool partial) {
951
954
  }
952
955
  }
953
956
 
954
- static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
957
+ static void write_action_begin_locked(void* gt,
958
+ grpc_error_handle /*error_ignored*/) {
955
959
  GPR_TIMER_SCOPE("write_action_begin_locked", 0);
956
960
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
957
961
  GPR_ASSERT(t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE);
@@ -990,7 +994,7 @@ static void write_action_begin_locked(void* gt, grpc_error* /*error_ignored*/) {
990
994
  }
991
995
  }
992
996
 
993
- static void write_action(void* gt, grpc_error* /*error*/) {
997
+ static void write_action(void* gt, grpc_error_handle /*error*/) {
994
998
  GPR_TIMER_SCOPE("write_action", 0);
995
999
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(gt);
996
1000
  void* cl = t->cl;
@@ -1002,7 +1006,7 @@ static void write_action(void* gt, grpc_error* /*error*/) {
1002
1006
  cl);
1003
1007
  }
1004
1008
 
1005
- static void write_action_end(void* tp, grpc_error* error) {
1009
+ static void write_action_end(void* tp, grpc_error_handle error) {
1006
1010
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1007
1011
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->write_action_end_locked,
1008
1012
  write_action_end_locked, t, nullptr),
@@ -1011,7 +1015,7 @@ static void write_action_end(void* tp, grpc_error* error) {
1011
1015
 
1012
1016
  // Callback from the grpc_endpoint after bytes have been written by calling
1013
1017
  // sendmsg
1014
- static void write_action_end_locked(void* tp, grpc_error* error) {
1018
+ static void write_action_end_locked(void* tp, grpc_error_handle error) {
1015
1019
  GPR_TIMER_SCOPE("terminate_writing_with_lock", 0);
1016
1020
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1017
1021
 
@@ -1100,7 +1104,7 @@ void grpc_chttp2_add_incoming_goaway(grpc_chttp2_transport* t,
1100
1104
  // received a GOAWAY with a non NO_ERROR code.
1101
1105
  if (goaway_error != GRPC_HTTP2_NO_ERROR) {
1102
1106
  gpr_log(GPR_INFO, "%s: Got goaway [%d] err=%s", t->peer_string.c_str(),
1103
- goaway_error, grpc_error_string(t->goaway_error));
1107
+ goaway_error, grpc_error_std_string(t->goaway_error).c_str());
1104
1108
  }
1105
1109
  absl::Status status = grpc_error_to_absl_status(t->goaway_error);
1106
1110
  // When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
@@ -1206,7 +1210,8 @@ static void null_then_sched_closure(grpc_closure** closure) {
1206
1210
  void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1207
1211
  grpc_chttp2_stream* /*s*/,
1208
1212
  grpc_closure** pclosure,
1209
- grpc_error* error, const char* desc) {
1213
+ grpc_error_handle error,
1214
+ const char* desc) {
1210
1215
  grpc_closure* closure = *pclosure;
1211
1216
  *pclosure = nullptr;
1212
1217
  if (closure == nullptr) {
@@ -1215,7 +1220,6 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1215
1220
  }
1216
1221
  closure->next_data.scratch -= CLOSURE_BARRIER_FIRST_REF_BIT;
1217
1222
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
1218
- const char* errstr = grpc_error_string(error);
1219
1223
  gpr_log(
1220
1224
  GPR_INFO,
1221
1225
  "complete_closure_step: t=%p %p refs=%d flags=0x%04x desc=%s err=%s "
@@ -1225,7 +1229,8 @@ void grpc_chttp2_complete_closure_step(grpc_chttp2_transport* t,
1225
1229
  CLOSURE_BARRIER_FIRST_REF_BIT),
1226
1230
  static_cast<int>(closure->next_data.scratch %
1227
1231
  CLOSURE_BARRIER_FIRST_REF_BIT),
1228
- desc, errstr, write_state_name(t->write_state));
1232
+ desc, grpc_error_std_string(error).c_str(),
1233
+ write_state_name(t->write_state));
1229
1234
  }
1230
1235
  if (error != GRPC_ERROR_NONE) {
1231
1236
  if (closure->error_data.error == GRPC_ERROR_NONE) {
@@ -1314,7 +1319,8 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1314
1319
  UINT32_MAX, GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1315
1320
  ::complete_fetch, s,
1316
1321
  grpc_schedule_on_exec_ctx))) {
1317
- grpc_error* error = s->fetching_send_message->Pull(&s->fetching_slice);
1322
+ grpc_error_handle error =
1323
+ s->fetching_send_message->Pull(&s->fetching_slice);
1318
1324
  if (error != GRPC_ERROR_NONE) {
1319
1325
  s->fetching_send_message.reset();
1320
1326
  grpc_chttp2_cancel_stream(t, s, error);
@@ -1325,14 +1331,14 @@ static void continue_fetching_send_locked(grpc_chttp2_transport* t,
1325
1331
  }
1326
1332
  }
1327
1333
 
1328
- static void complete_fetch(void* gs, grpc_error* error) {
1334
+ static void complete_fetch(void* gs, grpc_error_handle error) {
1329
1335
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1330
1336
  s->t->combiner->Run(GRPC_CLOSURE_INIT(&s->complete_fetch_locked,
1331
1337
  ::complete_fetch_locked, s, nullptr),
1332
1338
  GRPC_ERROR_REF(error));
1333
1339
  }
1334
1340
 
1335
- static void complete_fetch_locked(void* gs, grpc_error* error) {
1341
+ static void complete_fetch_locked(void* gs, grpc_error_handle error) {
1336
1342
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(gs);
1337
1343
  grpc_chttp2_transport* t = s->t;
1338
1344
  if (error == GRPC_ERROR_NONE) {
@@ -1362,7 +1368,7 @@ static void log_metadata(const grpc_metadata_batch* md_batch, uint32_t id,
1362
1368
  }
1363
1369
 
1364
1370
  static void perform_stream_op_locked(void* stream_op,
1365
- grpc_error* /*error_ignored*/) {
1371
+ grpc_error_handle /*error_ignored*/) {
1366
1372
  GPR_TIMER_SCOPE("perform_stream_op_locked", 0);
1367
1373
 
1368
1374
  grpc_transport_stream_op_batch* op =
@@ -1576,6 +1582,8 @@ static void perform_stream_op_locked(void* stream_op,
1576
1582
  GPR_ASSERT(!s->pending_byte_stream);
1577
1583
  s->recv_message_ready = op_payload->recv_message.recv_message_ready;
1578
1584
  s->recv_message = op_payload->recv_message.recv_message;
1585
+ s->call_failed_before_recv_message =
1586
+ op_payload->recv_message.call_failed_before_recv_message;
1579
1587
  if (s->id != 0) {
1580
1588
  if (!s->read_closed) {
1581
1589
  before = s->frame_storage.length +
@@ -1646,7 +1654,7 @@ static void perform_stream_op(grpc_transport* gt, grpc_stream* gs,
1646
1654
  GRPC_ERROR_NONE);
1647
1655
  }
1648
1656
 
1649
- static void cancel_pings(grpc_chttp2_transport* t, grpc_error* error) {
1657
+ static void cancel_pings(grpc_chttp2_transport* t, grpc_error_handle error) {
1650
1658
  // callback remaining pings: they're not allowed to call into the transport,
1651
1659
  // and maybe they hold resources that need to be freed
1652
1660
  grpc_chttp2_ping_queue* pq = &t->ping_queue;
@@ -1713,14 +1721,14 @@ static void send_keepalive_ping_locked(grpc_chttp2_transport* t) {
1713
1721
  GRPC_ERROR_NONE);
1714
1722
  }
1715
1723
 
1716
- void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error* error) {
1724
+ void grpc_chttp2_retry_initiate_ping(void* tp, grpc_error_handle error) {
1717
1725
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1718
1726
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->retry_initiate_ping_locked,
1719
1727
  retry_initiate_ping_locked, t, nullptr),
1720
1728
  GRPC_ERROR_REF(error));
1721
1729
  }
1722
1730
 
1723
- static void retry_initiate_ping_locked(void* tp, grpc_error* error) {
1731
+ static void retry_initiate_ping_locked(void* tp, grpc_error_handle error) {
1724
1732
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
1725
1733
  t->ping_state.is_delayed_ping_timer_set = false;
1726
1734
  if (error == GRPC_ERROR_NONE) {
@@ -1743,10 +1751,10 @@ void grpc_chttp2_ack_ping(grpc_chttp2_transport* t, uint64_t id) {
1743
1751
  }
1744
1752
  }
1745
1753
 
1746
- static void send_goaway(grpc_chttp2_transport* t, grpc_error* error) {
1754
+ static void send_goaway(grpc_chttp2_transport* t, grpc_error_handle error) {
1747
1755
  // We want to log this irrespective of whether http tracing is enabled
1748
1756
  gpr_log(GPR_INFO, "%s: Sending goaway err=%s", t->peer_string.c_str(),
1749
- grpc_error_string(error));
1757
+ grpc_error_std_string(error).c_str());
1750
1758
  t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED;
1751
1759
  grpc_http2_error_code http_error;
1752
1760
  grpc_slice slice;
@@ -1784,12 +1792,12 @@ void grpc_chttp2_reset_ping_clock(grpc_chttp2_transport* t) {
1784
1792
  }
1785
1793
 
1786
1794
  static void perform_transport_op_locked(void* stream_op,
1787
- grpc_error* /*error_ignored*/) {
1795
+ grpc_error_handle /*error_ignored*/) {
1788
1796
  grpc_transport_op* op = static_cast<grpc_transport_op*>(stream_op);
1789
1797
  grpc_chttp2_transport* t =
1790
1798
  static_cast<grpc_chttp2_transport*>(op->handler_private.extra_arg);
1791
1799
 
1792
- if (op->goaway_error) {
1800
+ if (op->goaway_error != GRPC_ERROR_NONE) {
1793
1801
  send_goaway(t, op->goaway_error);
1794
1802
  }
1795
1803
 
@@ -1864,7 +1872,7 @@ void grpc_chttp2_maybe_complete_recv_initial_metadata(
1864
1872
 
1865
1873
  void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1866
1874
  grpc_chttp2_stream* s) {
1867
- grpc_error* error = GRPC_ERROR_NONE;
1875
+ grpc_error_handle error = GRPC_ERROR_NONE;
1868
1876
  if (s->recv_message_ready != nullptr) {
1869
1877
  *s->recv_message = nullptr;
1870
1878
  if (s->final_metadata_requested && s->seen_error) {
@@ -1941,6 +1949,10 @@ void grpc_chttp2_maybe_complete_recv_message(grpc_chttp2_transport* /*t*/,
1941
1949
  null_then_sched_closure(&s->recv_message_ready);
1942
1950
  } else if (s->published_metadata[1] != GRPC_METADATA_NOT_PUBLISHED) {
1943
1951
  *s->recv_message = nullptr;
1952
+ if (s->call_failed_before_recv_message != nullptr) {
1953
+ *s->call_failed_before_recv_message =
1954
+ (s->published_metadata[1] != GRPC_METADATA_PUBLISHED_AT_CLOSE);
1955
+ }
1944
1956
  null_then_sched_closure(&s->recv_message_ready);
1945
1957
  }
1946
1958
  GRPC_ERROR_UNREF(error);
@@ -2014,7 +2026,7 @@ void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_chttp2_transport* t,
2014
2026
  }
2015
2027
 
2016
2028
  static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2017
- grpc_error* error) {
2029
+ grpc_error_handle error) {
2018
2030
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(
2019
2031
  grpc_chttp2_stream_map_delete(&t->stream_map, id));
2020
2032
  GPR_DEBUG_ASSERT(s);
@@ -2057,7 +2069,7 @@ static void remove_stream(grpc_chttp2_transport* t, uint32_t id,
2057
2069
  }
2058
2070
 
2059
2071
  void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2060
- grpc_error* due_to_error) {
2072
+ grpc_error_handle due_to_error) {
2061
2073
  if (!t->is_client && !s->sent_trailing_metadata &&
2062
2074
  grpc_error_has_clear_grpc_status(due_to_error)) {
2063
2075
  close_from_api(t, s, due_to_error);
@@ -2081,7 +2093,7 @@ void grpc_chttp2_cancel_stream(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2081
2093
  }
2082
2094
 
2083
2095
  void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2084
- grpc_error* error) {
2096
+ grpc_error_handle error) {
2085
2097
  grpc_status_code status;
2086
2098
  grpc_slice slice;
2087
2099
  grpc_error_get_status(error, s->deadline, &status, &slice, nullptr, nullptr);
@@ -2118,7 +2130,8 @@ void grpc_chttp2_fake_status(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2118
2130
  GRPC_ERROR_UNREF(error);
2119
2131
  }
2120
2132
 
2121
- static void add_error(grpc_error* error, grpc_error** refs, size_t* nrefs) {
2133
+ static void add_error(grpc_error_handle error, grpc_error_handle* refs,
2134
+ size_t* nrefs) {
2122
2135
  if (error == GRPC_ERROR_NONE) return;
2123
2136
  for (size_t i = 0; i < *nrefs; i++) {
2124
2137
  if (error == refs[i]) {
@@ -2129,14 +2142,15 @@ static void add_error(grpc_error* error, grpc_error** refs, size_t* nrefs) {
2129
2142
  ++*nrefs;
2130
2143
  }
2131
2144
 
2132
- static grpc_error* removal_error(grpc_error* extra_error, grpc_chttp2_stream* s,
2133
- const char* main_error_msg) {
2134
- grpc_error* refs[3];
2145
+ static grpc_error_handle removal_error(grpc_error_handle extra_error,
2146
+ grpc_chttp2_stream* s,
2147
+ const char* main_error_msg) {
2148
+ grpc_error_handle refs[3];
2135
2149
  size_t nrefs = 0;
2136
2150
  add_error(s->read_closed_error, refs, &nrefs);
2137
2151
  add_error(s->write_closed_error, refs, &nrefs);
2138
2152
  add_error(extra_error, refs, &nrefs);
2139
- grpc_error* error = GRPC_ERROR_NONE;
2153
+ grpc_error_handle error = GRPC_ERROR_NONE;
2140
2154
  if (nrefs > 0) {
2141
2155
  error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(main_error_msg,
2142
2156
  refs, nrefs);
@@ -2146,7 +2160,8 @@ static grpc_error* removal_error(grpc_error* extra_error, grpc_chttp2_stream* s,
2146
2160
  }
2147
2161
 
2148
2162
  static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2149
- grpc_chttp2_write_cb** list, grpc_error* error) {
2163
+ grpc_chttp2_write_cb** list,
2164
+ grpc_error_handle error) {
2150
2165
  while (*list) {
2151
2166
  grpc_chttp2_write_cb* cb = *list;
2152
2167
  *list = cb->next;
@@ -2159,7 +2174,8 @@ static void flush_write_list(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2159
2174
  }
2160
2175
 
2161
2176
  void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2162
- grpc_chttp2_stream* s, grpc_error* error) {
2177
+ grpc_chttp2_stream* s,
2178
+ grpc_error_handle error) {
2163
2179
  error =
2164
2180
  removal_error(error, s, "Pending writes failed due to stream closure");
2165
2181
  s->send_initial_metadata = nullptr;
@@ -2183,10 +2199,10 @@ void grpc_chttp2_fail_pending_writes(grpc_chttp2_transport* t,
2183
2199
 
2184
2200
  void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2185
2201
  grpc_chttp2_stream* s, int close_reads,
2186
- int close_writes, grpc_error* error) {
2202
+ int close_writes, grpc_error_handle error) {
2187
2203
  if (s->read_closed && s->write_closed) {
2188
2204
  // already closed, but we should still fake the status if needed.
2189
- grpc_error* overall_error = removal_error(error, s, "Stream removed");
2205
+ grpc_error_handle overall_error = removal_error(error, s, "Stream removed");
2190
2206
  if (overall_error != GRPC_ERROR_NONE) {
2191
2207
  grpc_chttp2_fake_status(t, s, overall_error);
2192
2208
  }
@@ -2207,7 +2223,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2207
2223
  }
2208
2224
  if (s->read_closed && s->write_closed) {
2209
2225
  became_closed = true;
2210
- grpc_error* overall_error =
2226
+ grpc_error_handle overall_error =
2211
2227
  removal_error(GRPC_ERROR_REF(error), s, "Stream removed");
2212
2228
  if (s->id != 0) {
2213
2229
  remove_stream(t, s->id, GRPC_ERROR_REF(overall_error));
@@ -2236,7 +2252,7 @@ void grpc_chttp2_mark_stream_closed(grpc_chttp2_transport* t,
2236
2252
  }
2237
2253
 
2238
2254
  static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2239
- grpc_error* error) {
2255
+ grpc_error_handle error) {
2240
2256
  grpc_slice hdr;
2241
2257
  grpc_slice status_hdr;
2242
2258
  grpc_slice http_status_hdr;
@@ -2394,7 +2410,7 @@ static void close_from_api(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
2394
2410
  }
2395
2411
 
2396
2412
  struct cancel_stream_cb_args {
2397
- grpc_error* error;
2413
+ grpc_error_handle error;
2398
2414
  grpc_chttp2_transport* t;
2399
2415
  };
2400
2416
 
@@ -2404,7 +2420,8 @@ static void cancel_stream_cb(void* user_data, uint32_t /*key*/, void* stream) {
2404
2420
  grpc_chttp2_cancel_stream(args->t, s, GRPC_ERROR_REF(args->error));
2405
2421
  }
2406
2422
 
2407
- static void end_all_the_calls(grpc_chttp2_transport* t, grpc_error* error) {
2423
+ static void end_all_the_calls(grpc_chttp2_transport* t,
2424
+ grpc_error_handle error) {
2408
2425
  intptr_t http2_error;
2409
2426
  // If there is no explicit grpc or HTTP/2 error, set to UNAVAILABLE on server.
2410
2427
  if (!t->is_client && !grpc_error_has_clear_grpc_status(error) &&
@@ -2458,15 +2475,15 @@ void grpc_chttp2_act_on_flowctl_action(
2458
2475
  });
2459
2476
  }
2460
2477
 
2461
- static grpc_error* try_http_parsing(grpc_chttp2_transport* t) {
2478
+ static grpc_error_handle try_http_parsing(grpc_chttp2_transport* t) {
2462
2479
  grpc_http_parser parser;
2463
2480
  size_t i = 0;
2464
- grpc_error* error = GRPC_ERROR_NONE;
2481
+ grpc_error_handle error = GRPC_ERROR_NONE;
2465
2482
  grpc_http_response response;
2466
2483
 
2467
2484
  grpc_http_parser_init(&parser, GRPC_HTTP_RESPONSE, &response);
2468
2485
 
2469
- grpc_error* parse_error = GRPC_ERROR_NONE;
2486
+ grpc_error_handle parse_error = GRPC_ERROR_NONE;
2470
2487
  for (; i < t->read_buffer.count && parse_error == GRPC_ERROR_NONE; i++) {
2471
2488
  parse_error =
2472
2489
  grpc_http_parser_parse(&parser, t->read_buffer.slices[i], nullptr);
@@ -2487,34 +2504,34 @@ static grpc_error* try_http_parsing(grpc_chttp2_transport* t) {
2487
2504
  return error;
2488
2505
  }
2489
2506
 
2490
- static void read_action(void* tp, grpc_error* error) {
2507
+ static void read_action(void* tp, grpc_error_handle error) {
2491
2508
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2492
2509
  t->combiner->Run(
2493
2510
  GRPC_CLOSURE_INIT(&t->read_action_locked, read_action_locked, t, nullptr),
2494
2511
  GRPC_ERROR_REF(error));
2495
2512
  }
2496
2513
 
2497
- static void read_action_locked(void* tp, grpc_error* error) {
2514
+ static void read_action_locked(void* tp, grpc_error_handle error) {
2498
2515
  GPR_TIMER_SCOPE("reading_action_locked", 0);
2499
2516
 
2500
2517
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2501
2518
 
2502
2519
  GRPC_ERROR_REF(error);
2503
2520
 
2504
- grpc_error* err = error;
2521
+ grpc_error_handle err = error;
2505
2522
  if (err != GRPC_ERROR_NONE) {
2506
2523
  err = grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
2507
2524
  "Endpoint read failed", &err, 1),
2508
2525
  GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
2509
2526
  t->write_state);
2510
2527
  }
2511
- GPR_SWAP(grpc_error*, err, error);
2528
+ GPR_SWAP(grpc_error_handle, err, error);
2512
2529
  GRPC_ERROR_UNREF(err);
2513
2530
  if (t->closed_with_error == GRPC_ERROR_NONE) {
2514
2531
  GPR_TIMER_SCOPE("reading_action.parse", 0);
2515
2532
  size_t i = 0;
2516
- grpc_error* errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2517
- GRPC_ERROR_NONE};
2533
+ grpc_error_handle errors[3] = {GRPC_ERROR_REF(error), GRPC_ERROR_NONE,
2534
+ GRPC_ERROR_NONE};
2518
2535
  for (; i < t->read_buffer.count && errors[1] == GRPC_ERROR_NONE; i++) {
2519
2536
  errors[1] = grpc_chttp2_perform_read(t, t->read_buffer.slices[i]);
2520
2537
  }
@@ -2605,18 +2622,18 @@ void schedule_bdp_ping_locked(grpc_chttp2_transport* t) {
2605
2622
  grpc_chttp2_initiate_write(t, GRPC_CHTTP2_INITIATE_WRITE_BDP_PING);
2606
2623
  }
2607
2624
 
2608
- static void start_bdp_ping(void* tp, grpc_error* error) {
2625
+ static void start_bdp_ping(void* tp, grpc_error_handle error) {
2609
2626
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2610
2627
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_bdp_ping_locked,
2611
2628
  start_bdp_ping_locked, t, nullptr),
2612
2629
  GRPC_ERROR_REF(error));
2613
2630
  }
2614
2631
 
2615
- static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2632
+ static void start_bdp_ping_locked(void* tp, grpc_error_handle error) {
2616
2633
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2617
2634
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2618
2635
  gpr_log(GPR_INFO, "%s: Start BDP ping err=%s", t->peer_string.c_str(),
2619
- grpc_error_string(error));
2636
+ grpc_error_std_string(error).c_str());
2620
2637
  }
2621
2638
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2622
2639
  return;
@@ -2629,18 +2646,18 @@ static void start_bdp_ping_locked(void* tp, grpc_error* error) {
2629
2646
  t->bdp_ping_started = true;
2630
2647
  }
2631
2648
 
2632
- static void finish_bdp_ping(void* tp, grpc_error* error) {
2649
+ static void finish_bdp_ping(void* tp, grpc_error_handle error) {
2633
2650
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2634
2651
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_bdp_ping_locked,
2635
2652
  finish_bdp_ping_locked, t, nullptr),
2636
2653
  GRPC_ERROR_REF(error));
2637
2654
  }
2638
2655
 
2639
- static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2656
+ static void finish_bdp_ping_locked(void* tp, grpc_error_handle error) {
2640
2657
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2641
2658
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
2642
2659
  gpr_log(GPR_INFO, "%s: Complete BDP ping err=%s", t->peer_string.c_str(),
2643
- grpc_error_string(error));
2660
+ grpc_error_std_string(error).c_str());
2644
2661
  }
2645
2662
  if (error != GRPC_ERROR_NONE || t->closed_with_error != GRPC_ERROR_NONE) {
2646
2663
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "bdp_ping");
@@ -2666,7 +2683,7 @@ static void finish_bdp_ping_locked(void* tp, grpc_error* error) {
2666
2683
  &t->next_bdp_ping_timer_expired_locked);
2667
2684
  }
2668
2685
 
2669
- static void next_bdp_ping_timer_expired(void* tp, grpc_error* error) {
2686
+ static void next_bdp_ping_timer_expired(void* tp, grpc_error_handle error) {
2670
2687
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2671
2688
  t->combiner->Run(
2672
2689
  GRPC_CLOSURE_INIT(&t->next_bdp_ping_timer_expired_locked,
@@ -2674,7 +2691,8 @@ static void next_bdp_ping_timer_expired(void* tp, grpc_error* error) {
2674
2691
  GRPC_ERROR_REF(error));
2675
2692
  }
2676
2693
 
2677
- static void next_bdp_ping_timer_expired_locked(void* tp, grpc_error* error) {
2694
+ static void next_bdp_ping_timer_expired_locked(void* tp,
2695
+ grpc_error_handle error) {
2678
2696
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(tp);
2679
2697
  GPR_ASSERT(t->have_next_bdp_ping_timer);
2680
2698
  t->have_next_bdp_ping_timer = false;
@@ -2750,14 +2768,14 @@ void grpc_chttp2_config_default_keepalive_args(grpc_channel_args* args,
2750
2768
  }
2751
2769
  }
2752
2770
 
2753
- static void init_keepalive_ping(void* arg, grpc_error* error) {
2771
+ static void init_keepalive_ping(void* arg, grpc_error_handle error) {
2754
2772
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2755
2773
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->init_keepalive_ping_locked,
2756
2774
  init_keepalive_ping_locked, t, nullptr),
2757
2775
  GRPC_ERROR_REF(error));
2758
2776
  }
2759
2777
 
2760
- static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2778
+ static void init_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2761
2779
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2762
2780
  GPR_ASSERT(t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_WAITING);
2763
2781
  if (t->destroying || t->closed_with_error != GRPC_ERROR_NONE) {
@@ -2790,14 +2808,14 @@ static void init_keepalive_ping_locked(void* arg, grpc_error* error) {
2790
2808
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "init keepalive ping");
2791
2809
  }
2792
2810
 
2793
- static void start_keepalive_ping(void* arg, grpc_error* error) {
2811
+ static void start_keepalive_ping(void* arg, grpc_error_handle error) {
2794
2812
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2795
2813
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->start_keepalive_ping_locked,
2796
2814
  start_keepalive_ping_locked, t, nullptr),
2797
2815
  GRPC_ERROR_REF(error));
2798
2816
  }
2799
2817
 
2800
- static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2818
+ static void start_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2801
2819
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2802
2820
  if (error != GRPC_ERROR_NONE) {
2803
2821
  return;
@@ -2818,14 +2836,14 @@ static void start_keepalive_ping_locked(void* arg, grpc_error* error) {
2818
2836
  t->keepalive_ping_started = true;
2819
2837
  }
2820
2838
 
2821
- static void finish_keepalive_ping(void* arg, grpc_error* error) {
2839
+ static void finish_keepalive_ping(void* arg, grpc_error_handle error) {
2822
2840
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2823
2841
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->finish_keepalive_ping_locked,
2824
2842
  finish_keepalive_ping_locked, t, nullptr),
2825
2843
  GRPC_ERROR_REF(error));
2826
2844
  }
2827
2845
 
2828
- static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2846
+ static void finish_keepalive_ping_locked(void* arg, grpc_error_handle error) {
2829
2847
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2830
2848
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2831
2849
  if (error == GRPC_ERROR_NONE) {
@@ -2856,7 +2874,7 @@ static void finish_keepalive_ping_locked(void* arg, grpc_error* error) {
2856
2874
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "keepalive ping end");
2857
2875
  }
2858
2876
 
2859
- static void keepalive_watchdog_fired(void* arg, grpc_error* error) {
2877
+ static void keepalive_watchdog_fired(void* arg, grpc_error_handle error) {
2860
2878
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2861
2879
  t->combiner->Run(
2862
2880
  GRPC_CLOSURE_INIT(&t->keepalive_watchdog_fired_locked,
@@ -2864,7 +2882,8 @@ static void keepalive_watchdog_fired(void* arg, grpc_error* error) {
2864
2882
  GRPC_ERROR_REF(error));
2865
2883
  }
2866
2884
 
2867
- static void keepalive_watchdog_fired_locked(void* arg, grpc_error* error) {
2885
+ static void keepalive_watchdog_fired_locked(void* arg,
2886
+ grpc_error_handle error) {
2868
2887
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
2869
2888
  if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) {
2870
2889
  if (error == GRPC_ERROR_NONE) {
@@ -2921,7 +2940,7 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* /*gs*/,
2921
2940
  // BYTE STREAM
2922
2941
  //
2923
2942
 
2924
- static void reset_byte_stream(void* arg, grpc_error* error) {
2943
+ static void reset_byte_stream(void* arg, grpc_error_handle error) {
2925
2944
  grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(arg);
2926
2945
  s->pending_byte_stream = false;
2927
2946
  if (error == GRPC_ERROR_NONE) {
@@ -2952,8 +2971,8 @@ Chttp2IncomingByteStream::Chttp2IncomingByteStream(
2952
2971
  stream->byte_stream_error = GRPC_ERROR_NONE;
2953
2972
  }
2954
2973
 
2955
- void Chttp2IncomingByteStream::OrphanLocked(void* arg,
2956
- grpc_error* /*error_ignored*/) {
2974
+ void Chttp2IncomingByteStream::OrphanLocked(
2975
+ void* arg, grpc_error_handle /*error_ignored*/) {
2957
2976
  Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
2958
2977
  grpc_chttp2_stream* s = bs->stream_;
2959
2978
  grpc_chttp2_transport* t = s->t;
@@ -2972,7 +2991,7 @@ void Chttp2IncomingByteStream::Orphan() {
2972
2991
  }
2973
2992
 
2974
2993
  void Chttp2IncomingByteStream::NextLocked(void* arg,
2975
- grpc_error* /*error_ignored*/) {
2994
+ grpc_error_handle /*error_ignored*/) {
2976
2995
  Chttp2IncomingByteStream* bs = static_cast<Chttp2IncomingByteStream*>(arg);
2977
2996
  grpc_chttp2_transport* t = bs->transport_;
2978
2997
  grpc_chttp2_stream* s = bs->stream_;
@@ -3042,9 +3061,9 @@ void Chttp2IncomingByteStream::MaybeCreateStreamDecompressionCtx() {
3042
3061
  }
3043
3062
  }
3044
3063
 
3045
- grpc_error* Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3064
+ grpc_error_handle Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3046
3065
  GPR_TIMER_SCOPE("incoming_byte_stream_pull", 0);
3047
- grpc_error* error;
3066
+ grpc_error_handle error;
3048
3067
  if (stream_->unprocessed_incoming_frames_buffer.length > 0) {
3049
3068
  if (!stream_->unprocessed_incoming_frames_decompressed &&
3050
3069
  stream_->stream_decompression_method !=
@@ -3087,7 +3106,7 @@ grpc_error* Chttp2IncomingByteStream::Pull(grpc_slice* slice) {
3087
3106
  return GRPC_ERROR_NONE;
3088
3107
  }
3089
3108
 
3090
- void Chttp2IncomingByteStream::PublishError(grpc_error* error) {
3109
+ void Chttp2IncomingByteStream::PublishError(grpc_error_handle error) {
3091
3110
  GPR_ASSERT(error != GRPC_ERROR_NONE);
3092
3111
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, stream_->on_next,
3093
3112
  GRPC_ERROR_REF(error));
@@ -3097,10 +3116,10 @@ void Chttp2IncomingByteStream::PublishError(grpc_error* error) {
3097
3116
  grpc_chttp2_cancel_stream(transport_, stream_, GRPC_ERROR_REF(error));
3098
3117
  }
3099
3118
 
3100
- grpc_error* Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3101
- grpc_slice* slice_out) {
3119
+ grpc_error_handle Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3120
+ grpc_slice* slice_out) {
3102
3121
  if (remaining_bytes_ < GRPC_SLICE_LENGTH(slice)) {
3103
- grpc_error* error =
3122
+ grpc_error_handle error =
3104
3123
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream");
3105
3124
  transport_->combiner->Run(&stream_->reset_byte_stream,
3106
3125
  GRPC_ERROR_REF(error));
@@ -3115,8 +3134,8 @@ grpc_error* Chttp2IncomingByteStream::Push(const grpc_slice& slice,
3115
3134
  }
3116
3135
  }
3117
3136
 
3118
- grpc_error* Chttp2IncomingByteStream::Finished(grpc_error* error,
3119
- bool reset_on_error) {
3137
+ grpc_error_handle Chttp2IncomingByteStream::Finished(grpc_error_handle error,
3138
+ bool reset_on_error) {
3120
3139
  if (error == GRPC_ERROR_NONE) {
3121
3140
  if (remaining_bytes_ != 0) {
3122
3141
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message");
@@ -3130,7 +3149,7 @@ grpc_error* Chttp2IncomingByteStream::Finished(grpc_error* error,
3130
3149
  return error;
3131
3150
  }
3132
3151
 
3133
- void Chttp2IncomingByteStream::Shutdown(grpc_error* error) {
3152
+ void Chttp2IncomingByteStream::Shutdown(grpc_error_handle error) {
3134
3153
  GRPC_ERROR_UNREF(Finished(error, true /* reset_on_error */));
3135
3154
  }
3136
3155
 
@@ -3162,14 +3181,14 @@ static void post_destructive_reclaimer(grpc_chttp2_transport* t) {
3162
3181
  }
3163
3182
  }
3164
3183
 
3165
- static void benign_reclaimer(void* arg, grpc_error* error) {
3184
+ static void benign_reclaimer(void* arg, grpc_error_handle error) {
3166
3185
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3167
3186
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->benign_reclaimer_locked,
3168
3187
  benign_reclaimer_locked, t, nullptr),
3169
3188
  GRPC_ERROR_REF(error));
3170
3189
  }
3171
3190
 
3172
- static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3191
+ static void benign_reclaimer_locked(void* arg, grpc_error_handle error) {
3173
3192
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3174
3193
  if (error == GRPC_ERROR_NONE &&
3175
3194
  grpc_chttp2_stream_map_size(&t->stream_map) == 0) {
@@ -3199,14 +3218,14 @@ static void benign_reclaimer_locked(void* arg, grpc_error* error) {
3199
3218
  GRPC_CHTTP2_UNREF_TRANSPORT(t, "benign_reclaimer");
3200
3219
  }
3201
3220
 
3202
- static void destructive_reclaimer(void* arg, grpc_error* error) {
3221
+ static void destructive_reclaimer(void* arg, grpc_error_handle error) {
3203
3222
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3204
3223
  t->combiner->Run(GRPC_CLOSURE_INIT(&t->destructive_reclaimer_locked,
3205
3224
  destructive_reclaimer_locked, t, nullptr),
3206
3225
  GRPC_ERROR_REF(error));
3207
3226
  }
3208
3227
 
3209
- static void destructive_reclaimer_locked(void* arg, grpc_error* error) {
3228
+ static void destructive_reclaimer_locked(void* arg, grpc_error_handle error) {
3210
3229
  grpc_chttp2_transport* t = static_cast<grpc_chttp2_transport*>(arg);
3211
3230
  size_t n = grpc_chttp2_stream_map_size(&t->stream_map);
3212
3231
  t->destructive_reclaimer_registered = false;