grpc 1.37.1 → 1.38.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  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/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -39,7 +39,7 @@ class LoadBalancingPolicyFactory {
39
39
  virtual const char* name() const = 0;
40
40
 
41
41
  virtual RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
42
- const Json& json, grpc_error** error) const = 0;
42
+ const Json& json, grpc_error_handle* error) const = 0;
43
43
  };
44
44
 
45
45
  } // namespace grpc_core
@@ -109,7 +109,7 @@ bool LoadBalancingPolicyRegistry::LoadBalancingPolicyExists(
109
109
  return false;
110
110
  }
111
111
  if (requires_config != nullptr) {
112
- grpc_error* error = GRPC_ERROR_NONE;
112
+ grpc_error_handle error = GRPC_ERROR_NONE;
113
113
  // Check if the load balancing policy allows an empty config
114
114
  *requires_config =
115
115
  factory->ParseLoadBalancingConfig(Json(), &error) == nullptr;
@@ -122,7 +122,7 @@ namespace {
122
122
 
123
123
  // Returns the JSON node of policy (with both policy name and config content)
124
124
  // given the JSON node of a LoadBalancingConfig array.
125
- grpc_error* ParseLoadBalancingConfigHelper(
125
+ grpc_error_handle ParseLoadBalancingConfigHelper(
126
126
  const Json& lb_config_array, Json::Object::const_iterator* result) {
127
127
  if (lb_config_array.type() != Json::Type::ARRAY) {
128
128
  return GRPC_ERROR_CREATE_FROM_STATIC_STRING("type should be array");
@@ -163,8 +163,8 @@ grpc_error* ParseLoadBalancingConfigHelper(
163
163
  } // namespace
164
164
 
165
165
  RefCountedPtr<LoadBalancingPolicy::Config>
166
- LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(const Json& json,
167
- grpc_error** error) {
166
+ LoadBalancingPolicyRegistry::ParseLoadBalancingConfig(
167
+ const Json& json, grpc_error_handle* error) {
168
168
  GPR_DEBUG_ASSERT(error != nullptr && *error == GRPC_ERROR_NONE);
169
169
  GPR_ASSERT(g_state != nullptr);
170
170
  Json::Object::const_iterator policy;
@@ -57,7 +57,7 @@ class LoadBalancingPolicyRegistry {
57
57
  /// Returns a parsed object of the load balancing policy to be used from a
58
58
  /// LoadBalancingConfig array \a json.
59
59
  static RefCountedPtr<LoadBalancingPolicy::Config> ParseLoadBalancingConfig(
60
- const Json& json, grpc_error** error);
60
+ const Json& json, grpc_error_handle* error);
61
61
  };
62
62
 
63
63
  } // namespace grpc_core
@@ -55,7 +55,7 @@ class Resolver : public InternallyRefCounted<Resolver> {
55
55
  struct Result {
56
56
  ServerAddressList addresses;
57
57
  RefCountedPtr<ServiceConfig> service_config;
58
- grpc_error* service_config_error = GRPC_ERROR_NONE;
58
+ grpc_error_handle service_config_error = GRPC_ERROR_NONE;
59
59
  const grpc_channel_args* args = nullptr;
60
60
 
61
61
  // TODO(roth): Remove everything below once grpc_error and
@@ -81,7 +81,7 @@ class Resolver : public InternallyRefCounted<Resolver> {
81
81
  /// Returns a transient error to the channel.
82
82
  /// If the resolver does not set the GRPC_ERROR_INT_GRPC_STATUS
83
83
  /// attribute on the error, calls will be failed with status UNKNOWN.
84
- virtual void ReturnError(grpc_error* error) = 0;
84
+ virtual void ReturnError(grpc_error_handle error) = 0;
85
85
 
86
86
  // TODO(yashkt): As part of the service config error handling
87
87
  // changes, add a method to parse the service config JSON string.
@@ -80,10 +80,10 @@ class AresDnsResolver : public Resolver {
80
80
  void MaybeStartResolvingLocked();
81
81
  void StartResolvingLocked();
82
82
 
83
- static void OnNextResolution(void* arg, grpc_error* error);
84
- static void OnResolved(void* arg, grpc_error* error);
85
- void OnNextResolutionLocked(grpc_error* error);
86
- void OnResolvedLocked(grpc_error* error);
83
+ static void OnNextResolution(void* arg, grpc_error_handle error);
84
+ static void OnResolved(void* arg, grpc_error_handle error);
85
+ void OnNextResolutionLocked(grpc_error_handle error);
86
+ void OnResolvedLocked(grpc_error_handle error);
87
87
 
88
88
  /// DNS server to use (if not system default)
89
89
  std::string dns_server_;
@@ -193,18 +193,18 @@ void AresDnsResolver::ShutdownLocked() {
193
193
  }
194
194
  }
195
195
 
196
- void AresDnsResolver::OnNextResolution(void* arg, grpc_error* error) {
196
+ void AresDnsResolver::OnNextResolution(void* arg, grpc_error_handle error) {
197
197
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
198
198
  GRPC_ERROR_REF(error); // ref owned by lambda
199
199
  r->work_serializer_->Run([r, error]() { r->OnNextResolutionLocked(error); },
200
200
  DEBUG_LOCATION);
201
201
  }
202
202
 
203
- void AresDnsResolver::OnNextResolutionLocked(grpc_error* error) {
203
+ void AresDnsResolver::OnNextResolutionLocked(grpc_error_handle error) {
204
204
  GRPC_CARES_TRACE_LOG(
205
205
  "resolver:%p re-resolution timer fired. error: %s. shutdown_initiated_: "
206
206
  "%d",
207
- this, grpc_error_string(error), shutdown_initiated_);
207
+ this, grpc_error_std_string(error).c_str(), shutdown_initiated_);
208
208
  have_next_resolution_timer_ = false;
209
209
  if (error == GRPC_ERROR_NONE && !shutdown_initiated_) {
210
210
  if (!resolving_) {
@@ -227,7 +227,7 @@ bool ValueInJsonArray(const Json::Array& array, const char* value) {
227
227
  }
228
228
 
229
229
  std::string ChooseServiceConfig(char* service_config_choice_json,
230
- grpc_error** error) {
230
+ grpc_error_handle* error) {
231
231
  Json json = Json::Parse(service_config_choice_json, error);
232
232
  if (*error != GRPC_ERROR_NONE) return "";
233
233
  if (json.type() != Json::Type::ARRAY) {
@@ -236,7 +236,7 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
236
236
  return "";
237
237
  }
238
238
  const Json* service_config = nullptr;
239
- absl::InlinedVector<grpc_error*, 4> error_list;
239
+ absl::InlinedVector<grpc_error_handle, 4> error_list;
240
240
  for (const Json& choice : json.array_value()) {
241
241
  if (choice.type() != Json::Type::OBJECT) {
242
242
  error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
@@ -305,14 +305,14 @@ std::string ChooseServiceConfig(char* service_config_choice_json,
305
305
  return service_config->Dump();
306
306
  }
307
307
 
308
- void AresDnsResolver::OnResolved(void* arg, grpc_error* error) {
308
+ void AresDnsResolver::OnResolved(void* arg, grpc_error_handle error) {
309
309
  AresDnsResolver* r = static_cast<AresDnsResolver*>(arg);
310
310
  GRPC_ERROR_REF(error); // ref owned by lambda
311
311
  r->work_serializer_->Run([r, error]() { r->OnResolvedLocked(error); },
312
312
  DEBUG_LOCATION);
313
313
  }
314
314
 
315
- void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
315
+ void AresDnsResolver::OnResolvedLocked(grpc_error_handle error) {
316
316
  GPR_ASSERT(resolving_);
317
317
  resolving_ = false;
318
318
  gpr_free(pending_request_);
@@ -354,7 +354,7 @@ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
354
354
  backoff_.Reset();
355
355
  } else {
356
356
  GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed: %s", this,
357
- grpc_error_string(error));
357
+ grpc_error_std_string(error).c_str());
358
358
  std::string error_message =
359
359
  absl::StrCat("DNS resolution failed for service: ", name_to_resolve_);
360
360
  result_handler_->ReturnError(grpc_error_set_int(
@@ -362,10 +362,14 @@ void AresDnsResolver::OnResolvedLocked(grpc_error* error) {
362
362
  &error, 1),
363
363
  GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE));
364
364
  // Set retry timer.
365
+ // InvalidateNow to avoid getting stuck re-initializing this timer
366
+ // in a loop while draining the currently-held WorkSerializer.
367
+ // Also see https://github.com/grpc/grpc/issues/26079.
368
+ ExecCtx::Get()->InvalidateNow();
365
369
  grpc_millis next_try = backoff_.NextAttemptTime();
366
370
  grpc_millis timeout = next_try - ExecCtx::Get()->Now();
367
371
  GRPC_CARES_TRACE_LOG("resolver:%p dns resolution failed (will retry): %s",
368
- this, grpc_error_string(error));
372
+ this, grpc_error_std_string(error).c_str());
369
373
  GPR_ASSERT(!have_next_resolution_timer_);
370
374
  have_next_resolution_timer_ = true;
371
375
  // TODO(roth): We currently deal with this ref manually. Once the
@@ -389,6 +393,10 @@ void AresDnsResolver::MaybeStartResolvingLocked() {
389
393
  // can start the next resolution.
390
394
  if (have_next_resolution_timer_) return;
391
395
  if (last_resolution_timestamp_ >= 0) {
396
+ // InvalidateNow to avoid getting stuck re-initializing this timer
397
+ // in a loop while draining the currently-held WorkSerializer.
398
+ // Also see https://github.com/grpc/grpc/issues/26079.
399
+ ExecCtx::Get()->InvalidateNow();
392
400
  const grpc_millis earliest_next_resolution =
393
401
  last_resolution_timestamp_ + min_time_between_resolutions_;
394
402
  const grpc_millis ms_until_next_resolution =
@@ -455,7 +463,7 @@ class AresDnsResolverFactory : public ResolverFactory {
455
463
  extern grpc_address_resolver_vtable* grpc_resolve_address_impl;
456
464
  static grpc_address_resolver_vtable* default_resolver;
457
465
 
458
- static grpc_error* blocking_resolve_address_ares(
466
+ static grpc_error_handle blocking_resolve_address_ares(
459
467
  const char* name, const char* default_port,
460
468
  grpc_resolved_addresses** addresses) {
461
469
  return default_resolver->blocking_resolve_address(name, default_port,
@@ -490,7 +498,7 @@ void grpc_resolver_dns_ares_init() {
490
498
  g_use_ares_dns_resolver = true;
491
499
  gpr_log(GPR_DEBUG, "Using ares dns resolver");
492
500
  address_sorting_init();
493
- grpc_error* error = grpc_ares_init();
501
+ grpc_error_handle error = grpc_ares_init();
494
502
  if (error != GRPC_ERROR_NONE) {
495
503
  GRPC_LOG_IF_ERROR("grpc_ares_init() failed", error);
496
504
  return;
@@ -42,7 +42,7 @@ class GrpcPolledFd {
42
42
  virtual bool IsFdStillReadableLocked() = 0;
43
43
  /* Called once and only once. Must cause cancellation of any pending
44
44
  * read/write callbacks. */
45
- virtual void ShutdownLocked(grpc_error* error) = 0;
45
+ virtual void ShutdownLocked(grpc_error_handle error) = 0;
46
46
  /* Get the underlying ares_socket_t that this was created from */
47
47
  virtual ares_socket_t GetWrappedAresSocketLocked() = 0;
48
48
  /* A unique name, for logging */
@@ -75,7 +75,7 @@ class GrpcPolledFdLibuv : public GrpcPolledFd {
75
75
  return false;
76
76
  }
77
77
 
78
- void ShutdownInternalLocked(grpc_error* error) {
78
+ void ShutdownInternalLocked(grpc_error_handle error) {
79
79
  uv_poll_stop(handle_);
80
80
  uv_close(reinterpret_cast<uv_handle_t*>(handle_), ares_uv_poll_close_cb);
81
81
  if (read_closure_ != nullptr) {
@@ -88,7 +88,7 @@ class GrpcPolledFdLibuv : public GrpcPolledFd {
88
88
  }
89
89
  }
90
90
 
91
- void ShutdownLocked(grpc_error* error) override {
91
+ void ShutdownLocked(grpc_error_handle error) override {
92
92
  if (grpc_core::ExecCtx::Get() == nullptr) {
93
93
  grpc_core::ExecCtx exec_ctx;
94
94
  ShutdownInternalLocked(error);
@@ -127,7 +127,7 @@ static void ares_uv_poll_cb_locked(AresUvPollCbArg* arg) {
127
127
  int events = arg_struct->events;
128
128
  GrpcPolledFdLibuv* polled_fd =
129
129
  reinterpret_cast<GrpcPolledFdLibuv*>(handle->data);
130
- grpc_error* error = GRPC_ERROR_NONE;
130
+ grpc_error_handle error = GRPC_ERROR_NONE;
131
131
  if (status < 0) {
132
132
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("cares polling error");
133
133
  error =
@@ -33,10 +33,10 @@
33
33
  #include <grpc/support/string_util.h>
34
34
  #include <grpc/support/time.h>
35
35
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
36
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
36
37
  #include "src/core/lib/gpr/string.h"
37
38
  #include "src/core/lib/iomgr/ev_posix.h"
38
39
  #include "src/core/lib/iomgr/iomgr_internal.h"
39
- #include "src/core/lib/iomgr/sockaddr_utils.h"
40
40
 
41
41
  namespace grpc_core {
42
42
 
@@ -72,7 +72,7 @@ class GrpcPolledFdPosix : public GrpcPolledFd {
72
72
  bytes_available > 0;
73
73
  }
74
74
 
75
- void ShutdownLocked(grpc_error* error) override {
75
+ void ShutdownLocked(grpc_error_handle error) override {
76
76
  grpc_fd_shutdown(fd_, error);
77
77
  }
78
78
 
@@ -30,10 +30,10 @@
30
30
  #include <grpc/support/string_util.h>
31
31
  #include <grpc/support/time.h>
32
32
  #include <string.h>
33
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
33
34
  #include "src/core/lib/gpr/string.h"
34
35
  #include "src/core/lib/gprpp/memory.h"
35
36
  #include "src/core/lib/iomgr/iocp_windows.h"
36
- #include "src/core/lib/iomgr/sockaddr_utils.h"
37
37
  #include "src/core/lib/iomgr/sockaddr_windows.h"
38
38
  #include "src/core/lib/iomgr/socket_windows.h"
39
39
  #include "src/core/lib/iomgr/tcp_windows.h"
@@ -131,12 +131,12 @@ class GrpcPolledFdWindows {
131
131
  grpc_winsocket_destroy(winsocket_);
132
132
  }
133
133
 
134
- void ScheduleAndNullReadClosure(grpc_error* error) {
134
+ void ScheduleAndNullReadClosure(grpc_error_handle error) {
135
135
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, read_closure_, error);
136
136
  read_closure_ = nullptr;
137
137
  }
138
138
 
139
- void ScheduleAndNullWriteClosure(grpc_error* error) {
139
+ void ScheduleAndNullWriteClosure(grpc_error_handle error) {
140
140
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, write_closure_, error);
141
141
  write_closure_ = nullptr;
142
142
  }
@@ -253,7 +253,7 @@ class GrpcPolledFdWindows {
253
253
 
254
254
  bool IsFdStillReadableLocked() { return read_buf_has_data_; }
255
255
 
256
- void ShutdownLocked(grpc_error* error) {
256
+ void ShutdownLocked(grpc_error_handle error) {
257
257
  grpc_winsocket_shutdown(winsocket_);
258
258
  }
259
259
 
@@ -420,7 +420,7 @@ class GrpcPolledFdWindows {
420
420
  abort();
421
421
  }
422
422
 
423
- static void OnTcpConnect(void* arg, grpc_error* error) {
423
+ static void OnTcpConnect(void* arg, grpc_error_handle error) {
424
424
  GrpcPolledFdWindows* grpc_polled_fd =
425
425
  static_cast<GrpcPolledFdWindows*>(arg);
426
426
  GRPC_ERROR_REF(error); // ref owned by lambda
@@ -431,12 +431,12 @@ class GrpcPolledFdWindows {
431
431
  DEBUG_LOCATION);
432
432
  }
433
433
 
434
- void OnTcpConnectLocked(grpc_error* error) {
434
+ void OnTcpConnectLocked(grpc_error_handle error) {
435
435
  GRPC_CARES_TRACE_LOG(
436
436
  "fd:%s InnerOnTcpConnectLocked error:|%s| "
437
437
  "pending_register_for_readable:%d"
438
438
  " pending_register_for_writeable:%d",
439
- GetName(), grpc_error_string(error),
439
+ GetName(), grpc_error_std_string(error).c_str(),
440
440
  pending_continue_register_for_on_readable_locked_,
441
441
  pending_continue_register_for_on_writeable_locked_);
442
442
  GPR_ASSERT(!connect_done_);
@@ -576,7 +576,7 @@ class GrpcPolledFdWindows {
576
576
  return out;
577
577
  }
578
578
 
579
- static void OnIocpReadable(void* arg, grpc_error* error) {
579
+ static void OnIocpReadable(void* arg, grpc_error_handle error) {
580
580
  GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
581
581
  GRPC_ERROR_REF(error); // ref owned by lambda
582
582
  polled_fd->work_serializer_->Run(
@@ -589,7 +589,7 @@ class GrpcPolledFdWindows {
589
589
  // c-ares reads from this socket later, but it shouldn't necessarily cancel
590
590
  // the entire resolution attempt. Doing so will allow the "inject broken
591
591
  // nameserver list" test to pass on Windows.
592
- void OnIocpReadableLocked(grpc_error* error) {
592
+ void OnIocpReadableLocked(grpc_error_handle error) {
593
593
  if (error == GRPC_ERROR_NONE) {
594
594
  if (winsocket_->read_info.wsa_error != 0) {
595
595
  /* WSAEMSGSIZE would be due to receiving more data
@@ -603,7 +603,7 @@ class GrpcPolledFdWindows {
603
603
  "fd:|%s| OnIocpReadableInner winsocket_->read_info.wsa_error "
604
604
  "code:|%d| msg:|%s|",
605
605
  GetName(), winsocket_->read_info.wsa_error,
606
- grpc_error_string(error));
606
+ grpc_error_std_string(error).c_str());
607
607
  }
608
608
  }
609
609
  }
@@ -621,7 +621,7 @@ class GrpcPolledFdWindows {
621
621
  ScheduleAndNullReadClosure(error);
622
622
  }
623
623
 
624
- static void OnIocpWriteable(void* arg, grpc_error* error) {
624
+ static void OnIocpWriteable(void* arg, grpc_error_handle error) {
625
625
  GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
626
626
  GRPC_ERROR_REF(error); // error owned by lambda
627
627
  polled_fd->work_serializer_->Run(
@@ -629,7 +629,7 @@ class GrpcPolledFdWindows {
629
629
  DEBUG_LOCATION);
630
630
  }
631
631
 
632
- void OnIocpWriteableLocked(grpc_error* error) {
632
+ void OnIocpWriteableLocked(grpc_error_handle error) {
633
633
  GRPC_CARES_TRACE_LOG("OnIocpWriteableInner. fd:|%s|", GetName());
634
634
  GPR_ASSERT(socket_type_ == SOCK_STREAM);
635
635
  if (error == GRPC_ERROR_NONE) {
@@ -640,7 +640,7 @@ class GrpcPolledFdWindows {
640
640
  "fd:|%s| OnIocpWriteableInner. winsocket_->write_info.wsa_error "
641
641
  "code:|%d| msg:|%s|",
642
642
  GetName(), winsocket_->write_info.wsa_error,
643
- grpc_error_string(error));
643
+ grpc_error_std_string(error).c_str());
644
644
  }
645
645
  }
646
646
  GPR_ASSERT(tcp_write_state_ == WRITE_PENDING);
@@ -851,7 +851,7 @@ class GrpcPolledFdWindowsWrapper : public GrpcPolledFd {
851
851
  return wrapped_->IsFdStillReadableLocked();
852
852
  }
853
853
 
854
- void ShutdownLocked(grpc_error* error) override {
854
+ void ShutdownLocked(grpc_error_handle error) override {
855
855
  wrapped_->ShutdownLocked(error);
856
856
  }
857
857
 
@@ -38,14 +38,14 @@
38
38
 
39
39
  #include <address_sorting/address_sorting.h>
40
40
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
41
+ #include "src/core/lib/address_utils/parse_address.h"
42
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
41
43
  #include "src/core/lib/gpr/string.h"
42
44
  #include "src/core/lib/gprpp/host_port.h"
43
45
  #include "src/core/lib/iomgr/error.h"
44
46
  #include "src/core/lib/iomgr/executor.h"
45
47
  #include "src/core/lib/iomgr/iomgr_internal.h"
46
48
  #include "src/core/lib/iomgr/nameser.h"
47
- #include "src/core/lib/iomgr/parse_address.h"
48
- #include "src/core/lib/iomgr/sockaddr_utils.h"
49
49
  #include "src/core/lib/iomgr/timer.h"
50
50
  #include "src/core/lib/transport/authority_override.h"
51
51
 
@@ -77,7 +77,7 @@ struct grpc_ares_request {
77
77
  size_t pending_queries;
78
78
 
79
79
  /** the errors explaining query failures, appended to in query callbacks */
80
- grpc_error* error;
80
+ grpc_error_handle error;
81
81
  };
82
82
 
83
83
  typedef struct fd_node {
@@ -268,11 +268,13 @@ static grpc_millis calculate_next_ares_backup_poll_alarm_ms(
268
268
  grpc_core::ExecCtx::Get()->Now();
269
269
  }
270
270
 
271
- static void on_timeout_locked(grpc_ares_ev_driver* driver, grpc_error* error) {
271
+ static void on_timeout_locked(grpc_ares_ev_driver* driver,
272
+ grpc_error_handle error) {
272
273
  GRPC_CARES_TRACE_LOG(
273
274
  "request:%p ev_driver=%p on_timeout_locked. driver->shutting_down=%d. "
274
275
  "err=%s",
275
- driver->request, driver, driver->shutting_down, grpc_error_string(error));
276
+ driver->request, driver, driver->shutting_down,
277
+ grpc_error_std_string(error).c_str());
276
278
  if (!driver->shutting_down && error == GRPC_ERROR_NONE) {
277
279
  grpc_ares_ev_driver_shutdown_locked(driver);
278
280
  }
@@ -280,7 +282,7 @@ static void on_timeout_locked(grpc_ares_ev_driver* driver, grpc_error* error) {
280
282
  GRPC_ERROR_UNREF(error);
281
283
  }
282
284
 
283
- static void on_timeout(void* arg, grpc_error* error) {
285
+ static void on_timeout(void* arg, grpc_error_handle error) {
284
286
  grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
285
287
  GRPC_ERROR_REF(error); // ref owned by lambda
286
288
  driver->work_serializer->Run(
@@ -290,9 +292,9 @@ static void on_timeout(void* arg, grpc_error* error) {
290
292
  static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver);
291
293
 
292
294
  static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
293
- grpc_error* error);
295
+ grpc_error_handle error);
294
296
 
295
- static void on_ares_backup_poll_alarm(void* arg, grpc_error* error) {
297
+ static void on_ares_backup_poll_alarm(void* arg, grpc_error_handle error) {
296
298
  grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
297
299
  GRPC_ERROR_REF(error);
298
300
  driver->work_serializer->Run(
@@ -309,12 +311,13 @@ static void on_ares_backup_poll_alarm(void* arg, grpc_error* error) {
309
311
  * For the latter, we use this backup poller. Also see
310
312
  * https://github.com/grpc/grpc/pull/17688 description for more details. */
311
313
  static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
312
- grpc_error* error) {
314
+ grpc_error_handle error) {
313
315
  GRPC_CARES_TRACE_LOG(
314
316
  "request:%p ev_driver=%p on_ares_backup_poll_alarm_locked. "
315
317
  "driver->shutting_down=%d. "
316
318
  "err=%s",
317
- driver->request, driver, driver->shutting_down, grpc_error_string(error));
319
+ driver->request, driver, driver->shutting_down,
320
+ grpc_error_std_string(error).c_str());
318
321
  if (!driver->shutting_down && error == GRPC_ERROR_NONE) {
319
322
  fd_node* fdn = driver->fds;
320
323
  while (fdn != nullptr) {
@@ -329,6 +332,10 @@ static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
329
332
  fdn = fdn->next;
330
333
  }
331
334
  if (!driver->shutting_down) {
335
+ // InvalidateNow to avoid getting stuck re-initializing this timer
336
+ // in a loop while draining the currently-held WorkSerializer.
337
+ // Also see https://github.com/grpc/grpc/issues/26079.
338
+ grpc_core::ExecCtx::Get()->InvalidateNow();
332
339
  grpc_millis next_ares_backup_poll_alarm =
333
340
  calculate_next_ares_backup_poll_alarm_ms(driver);
334
341
  grpc_ares_ev_driver_ref(driver);
@@ -345,7 +352,7 @@ static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
345
352
  GRPC_ERROR_UNREF(error);
346
353
  }
347
354
 
348
- static void on_readable_locked(fd_node* fdn, grpc_error* error) {
355
+ static void on_readable_locked(fd_node* fdn, grpc_error_handle error) {
349
356
  GPR_ASSERT(fdn->readable_registered);
350
357
  grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
351
358
  const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
@@ -370,14 +377,14 @@ static void on_readable_locked(fd_node* fdn, grpc_error* error) {
370
377
  GRPC_ERROR_UNREF(error);
371
378
  }
372
379
 
373
- static void on_readable(void* arg, grpc_error* error) {
380
+ static void on_readable(void* arg, grpc_error_handle error) {
374
381
  fd_node* fdn = static_cast<fd_node*>(arg);
375
382
  GRPC_ERROR_REF(error); /* ref owned by lambda */
376
383
  fdn->ev_driver->work_serializer->Run(
377
384
  [fdn, error]() { on_readable_locked(fdn, error); }, DEBUG_LOCATION);
378
385
  }
379
386
 
380
- static void on_writable_locked(fd_node* fdn, grpc_error* error) {
387
+ static void on_writable_locked(fd_node* fdn, grpc_error_handle error) {
381
388
  GPR_ASSERT(fdn->writable_registered);
382
389
  grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
383
390
  const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
@@ -400,7 +407,7 @@ static void on_writable_locked(fd_node* fdn, grpc_error* error) {
400
407
  GRPC_ERROR_UNREF(error);
401
408
  }
402
409
 
403
- static void on_writable(void* arg, grpc_error* error) {
410
+ static void on_writable(void* arg, grpc_error_handle error) {
404
411
  fd_node* fdn = static_cast<fd_node*>(arg);
405
412
  GRPC_ERROR_REF(error); /* ref owned by lambda */
406
413
  fdn->ev_driver->work_serializer->Run(
@@ -516,7 +523,7 @@ static void noop_inject_channel_config(ares_channel /*channel*/) {}
516
523
  void (*grpc_ares_test_only_inject_config)(ares_channel channel) =
517
524
  noop_inject_channel_config;
518
525
 
519
- grpc_error* grpc_ares_ev_driver_create_locked(
526
+ grpc_error_handle grpc_ares_ev_driver_create_locked(
520
527
  grpc_ares_ev_driver** ev_driver, grpc_pollset_set* pollset_set,
521
528
  int query_timeout_ms,
522
529
  std::shared_ptr<grpc_core::WorkSerializer> work_serializer,
@@ -529,7 +536,7 @@ grpc_error* grpc_ares_ev_driver_create_locked(
529
536
  grpc_ares_test_only_inject_config((*ev_driver)->channel);
530
537
  GRPC_CARES_TRACE_LOG("request:%p grpc_ares_ev_driver_create_locked", request);
531
538
  if (status != ARES_SUCCESS) {
532
- grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
539
+ grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
533
540
  absl::StrCat("Failed to init ares channel. C-ares error: ",
534
541
  ares_strerror(status))
535
542
  .c_str());
@@ -713,7 +720,8 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
713
720
  hr->qtype, hr->host, hr->is_balancer, ares_strerror(status));
714
721
  GRPC_CARES_TRACE_LOG("request:%p on_hostbyname_done_locked: %s", r,
715
722
  error_msg.c_str());
716
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg.c_str());
723
+ grpc_error_handle error =
724
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg.c_str());
717
725
  r->error = grpc_error_add_child(error, r->error);
718
726
  }
719
727
  destroy_hostbyname_request_locked(hr);
@@ -757,7 +765,8 @@ static void on_srv_query_done_locked(void* arg, int status, int /*timeouts*/,
757
765
  ares_strerror(status));
758
766
  GRPC_CARES_TRACE_LOG("request:%p on_srv_query_done_locked: %s", r,
759
767
  error_msg.c_str());
760
- grpc_error* error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg.c_str());
768
+ grpc_error_handle error =
769
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg.c_str());
761
770
  r->error = grpc_error_add_child(error, r->error);
762
771
  }
763
772
  delete q;
@@ -773,7 +782,7 @@ static void on_txt_done_locked(void* arg, int status, int /*timeouts*/,
773
782
  const size_t prefix_len = sizeof(g_service_config_attribute_prefix) - 1;
774
783
  struct ares_txt_ext* result = nullptr;
775
784
  struct ares_txt_ext* reply = nullptr;
776
- grpc_error* error = GRPC_ERROR_NONE;
785
+ grpc_error_handle error = GRPC_ERROR_NONE;
777
786
  if (status != ARES_SUCCESS) goto fail;
778
787
  GRPC_CARES_TRACE_LOG("request:%p on_txt_done_locked name=%s ARES_SUCCESS", r,
779
788
  q->name().c_str());
@@ -825,7 +834,7 @@ void grpc_dns_lookup_ares_continue_after_check_localhost_and_ip_literals_locked(
825
834
  const char* default_port, grpc_pollset_set* interested_parties,
826
835
  int query_timeout_ms,
827
836
  std::shared_ptr<grpc_core::WorkSerializer> work_serializer) {
828
- grpc_error* error = GRPC_ERROR_NONE;
837
+ grpc_error_handle error = GRPC_ERROR_NONE;
829
838
  grpc_ares_hostbyname_request* hr = nullptr;
830
839
  /* parse name, splitting it into host and port parts */
831
840
  std::string host;
@@ -1116,7 +1125,7 @@ void (*grpc_cancel_ares_request_locked)(grpc_ares_request* r) =
1116
1125
  // Windows. Calling them may cause race conditions when other parts of the
1117
1126
  // binary calls these functions concurrently.
1118
1127
  #ifdef GPR_WINDOWS
1119
- grpc_error* grpc_ares_init(void) {
1128
+ grpc_error_handle grpc_ares_init(void) {
1120
1129
  int status = ares_library_init(ARES_LIB_INIT_ALL);
1121
1130
  if (status != ARES_SUCCESS) {
1122
1131
  return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
@@ -1128,7 +1137,7 @@ grpc_error* grpc_ares_init(void) {
1128
1137
 
1129
1138
  void grpc_ares_cleanup(void) { ares_library_cleanup(); }
1130
1139
  #else
1131
- grpc_error* grpc_ares_init(void) { return GRPC_ERROR_NONE; }
1140
+ grpc_error_handle grpc_ares_init(void) { return GRPC_ERROR_NONE; }
1132
1141
  void grpc_ares_cleanup(void) {}
1133
1142
  #endif // GPR_WINDOWS
1134
1143
 
@@ -1159,7 +1168,7 @@ typedef struct grpc_resolve_address_ares_request {
1159
1168
  } grpc_resolve_address_ares_request;
1160
1169
 
1161
1170
  static void on_dns_lookup_done_locked(grpc_resolve_address_ares_request* r,
1162
- grpc_error* error) {
1171
+ grpc_error_handle error) {
1163
1172
  gpr_free(r->ares_request);
1164
1173
  grpc_resolved_addresses** resolved_addresses = r->addrs_out;
1165
1174
  if (r->addresses == nullptr || r->addresses->empty()) {
@@ -1180,7 +1189,7 @@ static void on_dns_lookup_done_locked(grpc_resolve_address_ares_request* r,
1180
1189
  delete r;
1181
1190
  }
1182
1191
 
1183
- static void on_dns_lookup_done(void* arg, grpc_error* error) {
1192
+ static void on_dns_lookup_done(void* arg, grpc_error_handle error) {
1184
1193
  grpc_resolve_address_ares_request* r =
1185
1194
  static_cast<grpc_resolve_address_ares_request*>(arg);
1186
1195
  GRPC_ERROR_REF(error); // ref owned by lambda