grpc 1.28.0 → 1.30.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 (497) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +7694 -11190
  3. data/include/grpc/grpc.h +2 -2
  4. data/include/grpc/grpc_security.h +22 -9
  5. data/include/grpc/grpc_security_constants.h +1 -0
  6. data/include/grpc/impl/codegen/grpc_types.h +19 -21
  7. data/include/grpc/impl/codegen/port_platform.h +6 -2
  8. data/include/grpc/module.modulemap +24 -39
  9. data/src/core/ext/filters/client_channel/backend_metric.cc +7 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +203 -236
  11. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +3 -2
  12. data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -22
  13. data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
  14. data/src/core/ext/filters/client_channel/http_proxy.cc +17 -10
  15. data/src/core/ext/filters/client_channel/lb_policy.cc +19 -18
  16. data/src/core/ext/filters/client_channel/lb_policy.h +42 -33
  17. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +83 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +99 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +10 -4
  20. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +240 -301
  21. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +89 -0
  22. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +40 -0
  23. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +11 -9
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +3 -2
  25. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +871 -0
  26. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +5 -11
  28. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +734 -0
  29. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +84 -37
  30. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +938 -0
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +528 -0
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +834 -0
  34. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +6 -2
  35. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +2 -1
  36. data/src/core/ext/filters/client_channel/parse_address.cc +22 -21
  37. data/src/core/ext/filters/client_channel/resolver.cc +5 -8
  38. data/src/core/ext/filters/client_channel/resolver.h +12 -14
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +73 -59
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +35 -35
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -7
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +16 -20
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +72 -117
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +184 -133
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -3
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +7 -4
  48. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +40 -43
  49. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +93 -102
  50. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +0 -4
  51. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -2
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +32 -5
  53. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -2
  54. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -3
  55. data/src/core/ext/filters/client_channel/resolver_registry.h +8 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +16 -16
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +19 -16
  58. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +20 -31
  59. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +4 -3
  60. data/src/core/ext/filters/client_channel/server_address.cc +6 -9
  61. data/src/core/ext/filters/client_channel/server_address.h +6 -12
  62. data/src/core/ext/filters/client_channel/service_config.cc +104 -144
  63. data/src/core/ext/filters/client_channel/service_config.h +28 -98
  64. data/src/core/ext/filters/client_channel/service_config_call_data.h +68 -0
  65. data/src/core/ext/filters/client_channel/service_config_parser.cc +87 -0
  66. data/src/core/ext/filters/client_channel/service_config_parser.h +89 -0
  67. data/src/core/ext/filters/client_channel/subchannel.cc +54 -24
  68. data/src/core/ext/filters/client_channel/subchannel.h +35 -11
  69. data/src/core/ext/filters/client_channel/xds/xds_api.cc +348 -221
  70. data/src/core/ext/filters/client_channel/xds/xds_api.h +37 -37
  71. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +44 -49
  72. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +4 -3
  73. data/src/core/ext/filters/client_channel/xds/xds_channel_secure.cc +4 -2
  74. data/src/core/ext/filters/client_channel/xds/xds_client.cc +532 -339
  75. data/src/core/ext/filters/client_channel/xds/xds_client.h +57 -22
  76. data/src/core/ext/filters/client_channel/xds/xds_client_stats.cc +11 -12
  77. data/src/core/ext/filters/client_channel/xds/xds_client_stats.h +31 -19
  78. data/src/core/ext/filters/http/client/http_client_filter.cc +23 -28
  79. data/src/core/ext/filters/http/client_authority_filter.cc +4 -4
  80. data/src/core/ext/filters/http/http_filters_plugin.cc +27 -12
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +258 -221
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +358 -0
  83. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +29 -0
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +7 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.h +4 -4
  86. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +4 -4
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +4 -6
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +23 -22
  89. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  90. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -3
  92. data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -3
  93. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -3
  94. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -3
  96. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +29 -16
  97. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -3
  98. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -3
  99. data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -2
  100. data/src/core/ext/transport/chttp2/transport/http2_settings.h +4 -5
  101. data/src/core/ext/transport/chttp2/transport/huffsyms.h +2 -3
  102. data/src/core/ext/transport/chttp2/transport/internal.h +14 -21
  103. data/src/core/ext/transport/chttp2/transport/stream_map.h +2 -3
  104. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -8
  105. data/src/core/ext/transport/inproc/inproc_transport.cc +19 -0
  106. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.c +4 -229
  107. data/src/core/ext/upb-generated/envoy/api/v2/auth/cert.upb.h +5 -875
  108. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.c +114 -0
  109. data/src/core/ext/upb-generated/envoy/api/v2/auth/common.upb.h +418 -0
  110. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.c +72 -0
  111. data/src/core/ext/upb-generated/envoy/api/v2/auth/secret.upb.h +197 -0
  112. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.c +105 -0
  113. data/src/core/ext/upb-generated/envoy/api/v2/auth/tls.upb.h +378 -0
  114. data/src/core/ext/upb-generated/envoy/api/v2/cds.upb.c +1 -0
  115. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.c +21 -8
  116. data/src/core/ext/upb-generated/envoy/api/v2/cluster.upb.h +43 -7
  117. data/src/core/ext/upb-generated/envoy/api/v2/cluster/circuit_breaker.upb.c +1 -0
  118. data/src/core/ext/upb-generated/envoy/api/v2/cluster/filter.upb.c +1 -0
  119. data/src/core/ext/upb-generated/envoy/api/v2/cluster/outlier_detection.upb.c +1 -0
  120. data/src/core/ext/upb-generated/envoy/api/v2/core/address.upb.c +2 -1
  121. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.c +35 -0
  122. data/src/core/ext/upb-generated/envoy/api/v2/core/backoff.upb.h +78 -0
  123. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.c +47 -26
  124. data/src/core/ext/upb-generated/envoy/api/v2/core/base.upb.h +115 -65
  125. data/src/core/ext/upb-generated/envoy/api/v2/core/config_source.upb.c +1 -0
  126. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.c +34 -0
  127. data/src/core/ext/upb-generated/envoy/api/v2/core/event_service_config.upb.h +72 -0
  128. data/src/core/ext/upb-generated/envoy/api/v2/core/grpc_service.upb.c +2 -1
  129. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.c +24 -20
  130. data/src/core/ext/upb-generated/envoy/api/v2/core/health_check.upb.h +28 -13
  131. data/src/core/ext/upb-generated/envoy/api/v2/core/http_uri.upb.c +1 -0
  132. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.c +38 -18
  133. data/src/core/ext/upb-generated/envoy/api/v2/core/protocol.upb.h +88 -6
  134. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.c +34 -0
  135. data/src/core/ext/upb-generated/envoy/api/v2/core/socket_option.upb.h +89 -0
  136. data/src/core/ext/upb-generated/envoy/api/v2/discovery.upb.c +1 -0
  137. data/src/core/ext/upb-generated/envoy/api/v2/eds.upb.c +1 -0
  138. data/src/core/ext/upb-generated/envoy/api/v2/endpoint.upb.c +1 -0
  139. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint.upb.c +1 -0
  140. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.c +9 -6
  141. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/endpoint_components.upb.h +12 -4
  142. data/src/core/ext/upb-generated/envoy/api/v2/endpoint/load_report.upb.c +1 -0
  143. data/src/core/ext/upb-generated/envoy/api/v2/lds.upb.c +1 -0
  144. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.c +15 -10
  145. data/src/core/ext/upb-generated/envoy/api/v2/listener.upb.h +16 -0
  146. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/api/v2/listener/listener_components.upb.c +2 -1
  148. data/src/core/ext/upb-generated/envoy/api/v2/listener/udp_listener_config.upb.c +1 -0
  149. data/src/core/ext/upb-generated/envoy/api/v2/rds.upb.c +1 -0
  150. data/src/core/ext/upb-generated/envoy/api/v2/route.upb.c +1 -0
  151. data/src/core/ext/upb-generated/envoy/api/v2/route/route.upb.c +1 -0
  152. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.c +63 -41
  153. data/src/core/ext/upb-generated/envoy/api/v2/route/route_components.upb.h +173 -77
  154. data/src/core/ext/upb-generated/envoy/api/v2/scoped_route.upb.c +1 -0
  155. data/src/core/ext/upb-generated/envoy/api/v2/srds.upb.c +1 -0
  156. data/src/core/ext/upb-generated/envoy/config/filter/accesslog/v2/accesslog.upb.c +1 -0
  157. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.c +48 -28
  158. data/src/core/ext/upb-generated/envoy/config/filter/network/http_connection_manager/v2/http_connection_manager.upb.h +90 -30
  159. data/src/core/ext/upb-generated/envoy/config/listener/v2/api_listener.upb.c +1 -0
  160. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.c +51 -0
  161. data/src/core/ext/upb-generated/envoy/config/trace/v2/http_tracer.upb.h +125 -0
  162. data/src/core/ext/upb-generated/envoy/service/discovery/v2/ads.upb.c +1 -0
  163. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.c +4 -2
  164. data/src/core/ext/upb-generated/envoy/service/load_stats/v2/lrs.upb.h +4 -0
  165. data/src/core/ext/upb-generated/envoy/type/http.upb.c +1 -0
  166. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.c +16 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/regex.upb.h +36 -0
  168. data/src/core/ext/upb-generated/envoy/type/matcher/string.upb.c +1 -0
  169. data/src/core/ext/upb-generated/envoy/type/metadata/v2/metadata.upb.c +1 -0
  170. data/src/core/ext/upb-generated/envoy/type/percent.upb.c +1 -0
  171. data/src/core/ext/upb-generated/envoy/type/range.upb.c +1 -0
  172. data/src/core/ext/upb-generated/envoy/type/semantic_version.upb.c +1 -0
  173. data/src/core/ext/upb-generated/envoy/type/tracing/v2/custom_tag.upb.c +1 -0
  174. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +9 -8
  175. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +30 -24
  176. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +28 -0
  177. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +65 -0
  178. data/src/core/ext/upb-generated/validate/validate.upb.c +21 -20
  179. data/src/core/ext/upb-generated/validate/validate.upb.h +69 -63
  180. data/src/core/lib/channel/channel_args.cc +15 -14
  181. data/src/core/lib/channel/channel_args.h +3 -1
  182. data/src/core/lib/channel/channel_stack.h +20 -13
  183. data/src/core/lib/channel/channelz.cc +5 -6
  184. data/src/core/lib/channel/channelz.h +3 -2
  185. data/src/core/lib/channel/channelz_registry.cc +5 -3
  186. data/src/core/lib/channel/connected_channel.cc +7 -5
  187. data/src/core/lib/channel/context.h +1 -1
  188. data/src/core/lib/channel/handshaker.cc +11 -13
  189. data/src/core/lib/channel/handshaker.h +4 -2
  190. data/src/core/lib/channel/handshaker_registry.cc +5 -17
  191. data/src/core/lib/channel/status_util.cc +2 -3
  192. data/src/core/lib/compression/message_compress.cc +5 -1
  193. data/src/core/lib/debug/stats.cc +21 -27
  194. data/src/core/lib/debug/stats.h +3 -1
  195. data/src/core/lib/gpr/spinlock.h +2 -3
  196. data/src/core/lib/gpr/string.cc +2 -26
  197. data/src/core/lib/gpr/string.h +0 -16
  198. data/src/core/lib/gpr/sync_abseil.cc +2 -0
  199. data/src/core/lib/gpr/time.cc +4 -0
  200. data/src/core/lib/gpr/time_posix.cc +1 -1
  201. data/src/core/lib/gprpp/atomic.h +6 -6
  202. data/src/core/lib/gprpp/fork.cc +1 -1
  203. data/src/core/lib/gprpp/host_port.cc +29 -35
  204. data/src/core/lib/gprpp/host_port.h +14 -17
  205. data/src/core/lib/gprpp/map.h +5 -11
  206. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -0
  207. data/src/core/lib/http/format_request.cc +46 -65
  208. data/src/core/lib/http/httpcli.cc +2 -3
  209. data/src/core/lib/http/httpcli.h +2 -3
  210. data/src/core/lib/http/httpcli_security_connector.cc +5 -5
  211. data/src/core/lib/http/parser.h +2 -3
  212. data/src/core/lib/iomgr/buffer_list.h +22 -21
  213. data/src/core/lib/iomgr/call_combiner.h +3 -2
  214. data/src/core/lib/iomgr/cfstream_handle.cc +3 -2
  215. data/src/core/lib/iomgr/closure.h +2 -3
  216. data/src/core/lib/iomgr/dualstack_socket_posix.cc +47 -0
  217. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -3
  218. data/src/core/lib/iomgr/endpoint_pair.h +2 -3
  219. data/src/core/lib/iomgr/error.cc +6 -9
  220. data/src/core/lib/iomgr/error.h +0 -1
  221. data/src/core/lib/iomgr/ev_apple.cc +356 -0
  222. data/src/core/lib/iomgr/ev_apple.h +43 -0
  223. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -23
  224. data/src/core/lib/iomgr/ev_epollex_linux.cc +2 -3
  225. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -3
  226. data/src/core/lib/iomgr/ev_posix.cc +2 -3
  227. data/src/core/lib/iomgr/exec_ctx.h +14 -2
  228. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +84 -20
  229. data/src/core/lib/iomgr/pollset_set_custom.cc +10 -10
  230. data/src/core/lib/{gprpp/optional.h → iomgr/pollset_uv.h} +11 -12
  231. data/src/core/lib/iomgr/port.h +1 -0
  232. data/src/core/lib/iomgr/python_util.h +46 -0
  233. data/src/core/lib/iomgr/resolve_address.h +4 -6
  234. data/src/core/lib/iomgr/resolve_address_custom.cc +29 -39
  235. data/src/core/lib/iomgr/resolve_address_custom.h +4 -2
  236. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -11
  237. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -17
  238. data/src/core/lib/iomgr/resource_quota.cc +4 -6
  239. data/src/core/lib/iomgr/sockaddr_utils.cc +23 -29
  240. data/src/core/lib/iomgr/sockaddr_utils.h +9 -14
  241. data/src/core/lib/iomgr/socket_factory_posix.h +2 -3
  242. data/src/core/lib/iomgr/socket_mutator.h +2 -3
  243. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -26
  244. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -7
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +8 -5
  247. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  248. data/src/core/lib/iomgr/tcp_custom.cc +2 -3
  249. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -9
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -4
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +5 -4
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -11
  253. data/src/core/lib/iomgr/tcp_uv.cc +3 -2
  254. data/src/core/lib/iomgr/time_averaged_stats.h +2 -3
  255. data/src/core/lib/iomgr/timer_generic.cc +2 -3
  256. data/src/core/lib/{gprpp/inlined_vector.h → iomgr/timer_generic.h} +19 -17
  257. data/src/core/lib/iomgr/timer_heap.h +2 -3
  258. data/src/core/lib/iomgr/udp_server.cc +9 -14
  259. data/src/core/lib/json/json.h +3 -2
  260. data/src/core/lib/json/json_reader.cc +5 -5
  261. data/src/core/lib/json/json_writer.cc +13 -12
  262. data/src/core/lib/security/credentials/composite/composite_credentials.cc +12 -0
  263. data/src/core/lib/security/credentials/composite/composite_credentials.h +6 -3
  264. data/src/core/lib/security/credentials/credentials.cc +0 -84
  265. data/src/core/lib/security/credentials/credentials.h +8 -59
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +4 -0
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +3 -8
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -6
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +4 -0
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/json_token.h +2 -5
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +12 -0
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +8 -15
  274. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -3
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +55 -27
  276. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +9 -3
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +13 -0
  278. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
  279. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +23 -13
  280. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -11
  281. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +21 -6
  282. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +7 -7
  283. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +3 -2
  284. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  285. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  286. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +20 -25
  287. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -6
  288. data/src/core/lib/security/security_connector/ssl_utils.cc +59 -12
  289. data/src/core/lib/security/security_connector/ssl_utils.h +12 -10
  290. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +77 -51
  291. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -5
  292. data/src/core/lib/security/transport/client_auth_filter.cc +1 -2
  293. data/src/core/lib/slice/slice_intern.cc +2 -3
  294. data/src/core/lib/slice/slice_internal.h +14 -0
  295. data/src/core/lib/slice/slice_utils.h +9 -0
  296. data/src/core/lib/surface/byte_buffer_reader.cc +2 -47
  297. data/src/core/lib/surface/call.cc +2 -3
  298. data/src/core/lib/surface/call_log_batch.cc +50 -58
  299. data/src/core/lib/surface/channel.cc +53 -31
  300. data/src/core/lib/surface/channel.h +35 -4
  301. data/src/core/lib/surface/channel_ping.cc +2 -3
  302. data/src/core/lib/surface/completion_queue.cc +33 -33
  303. data/src/core/lib/surface/event_string.cc +18 -25
  304. data/src/core/lib/surface/event_string.h +3 -1
  305. data/src/core/lib/surface/init_secure.cc +1 -4
  306. data/src/core/lib/surface/server.cc +570 -369
  307. data/src/core/lib/surface/server.h +32 -0
  308. data/src/core/lib/surface/version.cc +2 -2
  309. data/src/core/lib/transport/byte_stream.h +7 -2
  310. data/src/core/lib/transport/connectivity_state.cc +7 -6
  311. data/src/core/lib/transport/connectivity_state.h +5 -3
  312. data/src/core/lib/transport/metadata.cc +3 -3
  313. data/src/core/lib/transport/metadata_batch.h +2 -3
  314. data/src/core/lib/transport/static_metadata.h +1 -1
  315. data/src/core/lib/transport/status_conversion.cc +6 -14
  316. data/src/core/lib/transport/transport.cc +2 -3
  317. data/src/core/lib/transport/transport.h +3 -2
  318. data/src/core/lib/transport/transport_op_string.cc +61 -102
  319. data/src/core/lib/uri/uri_parser.h +2 -3
  320. data/src/core/plugin_registry/grpc_plugin_registry.cc +20 -4
  321. data/src/core/tsi/alts/crypt/aes_gcm.cc +0 -2
  322. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +8 -1
  323. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +8 -4
  324. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +32 -2
  325. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +9 -1
  326. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +2 -3
  327. data/src/core/tsi/fake_transport_security.cc +10 -15
  328. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -2
  329. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +0 -2
  330. data/src/core/tsi/ssl_transport_security.cc +52 -39
  331. data/src/core/tsi/ssl_transport_security.h +8 -8
  332. data/src/core/tsi/ssl_types.h +0 -2
  333. data/src/core/tsi/transport_security.h +6 -9
  334. data/src/core/tsi/transport_security_grpc.h +2 -3
  335. data/src/core/tsi/transport_security_interface.h +3 -3
  336. data/src/ruby/ext/grpc/rb_call.c +9 -1
  337. data/src/ruby/lib/grpc/errors.rb +103 -42
  338. data/src/ruby/lib/grpc/generic/active_call.rb +2 -3
  339. data/src/ruby/lib/grpc/generic/interceptors.rb +4 -4
  340. data/src/ruby/lib/grpc/generic/rpc_server.rb +9 -10
  341. data/src/ruby/lib/grpc/generic/service.rb +5 -4
  342. data/src/ruby/lib/grpc/structs.rb +1 -1
  343. data/src/ruby/lib/grpc/version.rb +1 -1
  344. data/src/ruby/pb/generate_proto_ruby.sh +5 -3
  345. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +11 -0
  346. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +16 -0
  347. data/src/ruby/spec/debug_message_spec.rb +134 -0
  348. data/src/ruby/spec/generic/service_spec.rb +2 -0
  349. data/src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto +5 -0
  350. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -0
  351. data/src/ruby/spec/testdata/ca.pem +18 -13
  352. data/src/ruby/spec/testdata/client.key +26 -14
  353. data/src/ruby/spec/testdata/client.pem +18 -12
  354. data/src/ruby/spec/testdata/server1.key +26 -14
  355. data/src/ruby/spec/testdata/server1.pem +20 -14
  356. data/third_party/abseil-cpp/absl/time/civil_time.cc +175 -0
  357. data/third_party/abseil-cpp/absl/time/civil_time.h +538 -0
  358. data/third_party/abseil-cpp/absl/time/clock.cc +569 -0
  359. data/third_party/abseil-cpp/absl/time/clock.h +74 -0
  360. data/third_party/abseil-cpp/absl/time/duration.cc +922 -0
  361. data/third_party/abseil-cpp/absl/time/format.cc +153 -0
  362. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time.h +332 -0
  363. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +622 -0
  364. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +384 -0
  365. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +102 -0
  366. data/third_party/abseil-cpp/absl/time/internal/cctz/src/civil_time_detail.cc +94 -0
  367. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +140 -0
  368. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.h +52 -0
  369. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +922 -0
  370. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +45 -0
  371. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +76 -0
  372. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +121 -0
  373. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +93 -0
  374. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +958 -0
  375. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +138 -0
  376. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +308 -0
  377. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +55 -0
  378. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +187 -0
  379. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +159 -0
  380. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.h +132 -0
  381. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +122 -0
  382. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +115 -0
  383. data/third_party/abseil-cpp/absl/time/internal/get_current_time_chrono.inc +31 -0
  384. data/third_party/abseil-cpp/absl/time/internal/get_current_time_posix.inc +24 -0
  385. data/third_party/abseil-cpp/absl/time/time.cc +499 -0
  386. data/third_party/abseil-cpp/absl/time/time.h +1584 -0
  387. data/third_party/boringssl-with-bazel/err_data.c +329 -297
  388. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +7 -5
  390. data/third_party/boringssl-with-bazel/src/crypto/cpu-intel.c +13 -4
  391. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +11 -0
  392. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519.c +18 -26
  393. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/curve25519_tables.h +13 -21
  394. data/third_party/boringssl-with-bazel/src/{third_party/fiat → crypto/curve25519}/internal.h +14 -22
  395. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +15 -0
  397. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +10 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +425 -0
  399. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +78 -0
  400. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +2 -2
  401. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +33 -32
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +1 -1
  403. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +2 -1
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +3 -3
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +14 -11
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +8 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +30 -154
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +16 -0
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +289 -117
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +13 -27
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +96 -55
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/felem.c +25 -7
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +432 -160
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +63 -71
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +5 -14
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64-table.h +9481 -9485
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-x86_64.c +80 -99
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +736 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +297 -0
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +90 -11
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +125 -148
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +189 -3
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +61 -18
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +2 -2
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +20 -5
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +137 -0
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +49 -0
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +64 -0
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +41 -5
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +32 -17
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +24 -114
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +4 -0
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +51 -38
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +15 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +44 -35
  437. data/third_party/boringssl-with-bazel/src/crypto/mem.c +29 -12
  438. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +15 -1
  439. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +6 -10
  440. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +16 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +4 -0
  442. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +4 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +278 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +1474 -0
  445. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +720 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +16 -0
  447. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +5 -0
  448. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +4 -3
  449. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +9 -4
  451. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +20 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  453. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +16 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +6 -0
  455. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -0
  456. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +5 -0
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -17
  458. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +31 -0
  459. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +26 -0
  460. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +172 -77
  461. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  462. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +291 -0
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +5 -3
  464. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -0
  465. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +0 -4
  466. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +3 -3
  467. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +13 -4
  468. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +146 -57
  469. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +14 -3
  470. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +28 -20
  471. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +12 -4
  472. data/third_party/boringssl-with-bazel/src/ssl/internal.h +64 -47
  473. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +10 -10
  474. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  475. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +21 -21
  476. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +29 -0
  477. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -0
  478. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +6 -1
  479. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +13 -2
  480. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +64 -5
  481. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +6 -0
  482. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +6 -2
  483. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +47 -53
  484. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +1 -1
  485. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -27
  486. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +23 -75
  487. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +50 -20
  488. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +63 -25
  489. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +245 -175
  490. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +135 -75
  491. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1593 -1672
  492. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +512 -503
  493. metadata +111 -37
  494. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +0 -1754
  495. data/src/core/lib/gprpp/string_view.h +0 -60
  496. data/src/core/tsi/grpc_shadow_boringssl.h +0 -3311
  497. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256.c +0 -1063
@@ -31,7 +31,6 @@
31
31
  #include <grpc/support/time.h>
32
32
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
33
33
  #include "src/core/lib/gpr/string.h"
34
- #include "src/core/lib/iomgr/combiner.h"
35
34
  #include "src/core/lib/iomgr/iomgr_internal.h"
36
35
  #include "src/core/lib/iomgr/sockaddr_utils.h"
37
36
  #include "src/core/lib/iomgr/timer.h"
@@ -66,8 +65,8 @@ struct grpc_ares_ev_driver {
66
65
  /** refcount of the event driver */
67
66
  gpr_refcount refs;
68
67
 
69
- /** combiner to synchronize c-ares and I/O callbacks on */
70
- grpc_core::Combiner* combiner;
68
+ /** work_serializer to synchronize c-ares and I/O callbacks on */
69
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer;
71
70
  /** a list of grpc_fd that this event driver is currently using. */
72
71
  fd_node* fds;
73
72
  /** is this event driver currently working? */
@@ -107,7 +106,6 @@ static void grpc_ares_ev_driver_unref(grpc_ares_ev_driver* ev_driver) {
107
106
  GRPC_CARES_TRACE_LOG("request:%p destroy ev_driver %p", ev_driver->request,
108
107
  ev_driver);
109
108
  GPR_ASSERT(ev_driver->fds == nullptr);
110
- GRPC_COMBINER_UNREF(ev_driver->combiner, "free ares event driver");
111
109
  ares_destroy(ev_driver->channel);
112
110
  grpc_ares_complete_request_locked(ev_driver->request);
113
111
  delete ev_driver;
@@ -133,21 +131,22 @@ static void fd_node_shutdown_locked(fd_node* fdn, const char* reason) {
133
131
  }
134
132
 
135
133
  static void on_timeout(void* arg, grpc_error* error);
136
- static void on_timeout_locked(void* arg, grpc_error* error);
134
+ static void on_timeout_locked(grpc_ares_ev_driver* arg, grpc_error* error);
137
135
 
138
136
  static void on_ares_backup_poll_alarm(void* arg, grpc_error* error);
139
- static void on_ares_backup_poll_alarm_locked(void* arg, grpc_error* error);
137
+ static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* arg,
138
+ grpc_error* error);
140
139
 
141
140
  static void noop_inject_channel_config(ares_channel /*channel*/) {}
142
141
 
143
142
  void (*grpc_ares_test_only_inject_config)(ares_channel channel) =
144
143
  noop_inject_channel_config;
145
144
 
146
- grpc_error* grpc_ares_ev_driver_create_locked(grpc_ares_ev_driver** ev_driver,
147
- grpc_pollset_set* pollset_set,
148
- int query_timeout_ms,
149
- grpc_core::Combiner* combiner,
150
- grpc_ares_request* request) {
145
+ grpc_error* grpc_ares_ev_driver_create_locked(
146
+ grpc_ares_ev_driver** ev_driver, grpc_pollset_set* pollset_set,
147
+ int query_timeout_ms,
148
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer,
149
+ grpc_ares_request* request) {
151
150
  *ev_driver = new grpc_ares_ev_driver();
152
151
  ares_options opts;
153
152
  memset(&opts, 0, sizeof(opts));
@@ -164,7 +163,7 @@ grpc_error* grpc_ares_ev_driver_create_locked(grpc_ares_ev_driver** ev_driver,
164
163
  gpr_free(*ev_driver);
165
164
  return err;
166
165
  }
167
- (*ev_driver)->combiner = GRPC_COMBINER_REF(combiner, "ares event driver");
166
+ (*ev_driver)->work_serializer = std::move(work_serializer);
168
167
  gpr_ref_init(&(*ev_driver)->refs, 1);
169
168
  (*ev_driver)->pollset_set = pollset_set;
170
169
  (*ev_driver)->fds = nullptr;
@@ -172,7 +171,7 @@ grpc_error* grpc_ares_ev_driver_create_locked(grpc_ares_ev_driver** ev_driver,
172
171
  (*ev_driver)->shutting_down = false;
173
172
  (*ev_driver)->request = request;
174
173
  (*ev_driver)->polled_fd_factory =
175
- grpc_core::NewGrpcPolledFdFactory((*ev_driver)->combiner);
174
+ grpc_core::NewGrpcPolledFdFactory((*ev_driver)->work_serializer);
176
175
  (*ev_driver)
177
176
  ->polled_fd_factory->ConfigureAresChannelLocked((*ev_driver)->channel);
178
177
  (*ev_driver)->query_timeout_ms = query_timeout_ms;
@@ -234,13 +233,12 @@ static grpc_millis calculate_next_ares_backup_poll_alarm_ms(
234
233
 
235
234
  static void on_timeout(void* arg, grpc_error* error) {
236
235
  grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
237
- driver->combiner->Run(GRPC_CLOSURE_INIT(&driver->on_timeout_locked,
238
- on_timeout_locked, driver, nullptr),
239
- GRPC_ERROR_REF(error));
236
+ GRPC_ERROR_REF(error); // ref owned by lambda
237
+ driver->work_serializer->Run(
238
+ [driver, error]() { on_timeout_locked(driver, error); }, DEBUG_LOCATION);
240
239
  }
241
240
 
242
- static void on_timeout_locked(void* arg, grpc_error* error) {
243
- grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
241
+ static void on_timeout_locked(grpc_ares_ev_driver* driver, grpc_error* error) {
244
242
  GRPC_CARES_TRACE_LOG(
245
243
  "request:%p ev_driver=%p on_timeout_locked. driver->shutting_down=%d. "
246
244
  "err=%s",
@@ -249,14 +247,15 @@ static void on_timeout_locked(void* arg, grpc_error* error) {
249
247
  grpc_ares_ev_driver_shutdown_locked(driver);
250
248
  }
251
249
  grpc_ares_ev_driver_unref(driver);
250
+ GRPC_ERROR_UNREF(error);
252
251
  }
253
252
 
254
253
  static void on_ares_backup_poll_alarm(void* arg, grpc_error* error) {
255
254
  grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
256
- driver->combiner->Run(
257
- GRPC_CLOSURE_INIT(&driver->on_ares_backup_poll_alarm_locked,
258
- on_ares_backup_poll_alarm_locked, driver, nullptr),
259
- GRPC_ERROR_REF(error));
255
+ GRPC_ERROR_REF(error);
256
+ driver->work_serializer->Run(
257
+ [driver, error]() { on_ares_backup_poll_alarm_locked(driver, error); },
258
+ DEBUG_LOCATION);
260
259
  }
261
260
 
262
261
  /* In case of non-responsive DNS servers, dropped packets, etc., c-ares has
@@ -267,8 +266,8 @@ static void on_ares_backup_poll_alarm(void* arg, grpc_error* error) {
267
266
  * b) when some time has passed without fd events having happened
268
267
  * For the latter, we use this backup poller. Also see
269
268
  * https://github.com/grpc/grpc/pull/17688 description for more details. */
270
- static void on_ares_backup_poll_alarm_locked(void* arg, grpc_error* error) {
271
- grpc_ares_ev_driver* driver = static_cast<grpc_ares_ev_driver*>(arg);
269
+ static void on_ares_backup_poll_alarm_locked(grpc_ares_ev_driver* driver,
270
+ grpc_error* error) {
272
271
  GRPC_CARES_TRACE_LOG(
273
272
  "request:%p ev_driver=%p on_ares_backup_poll_alarm_locked. "
274
273
  "driver->shutting_down=%d. "
@@ -301,10 +300,10 @@ static void on_ares_backup_poll_alarm_locked(void* arg, grpc_error* error) {
301
300
  grpc_ares_notify_on_event_locked(driver);
302
301
  }
303
302
  grpc_ares_ev_driver_unref(driver);
303
+ GRPC_ERROR_UNREF(error);
304
304
  }
305
305
 
306
- static void on_readable_locked(void* arg, grpc_error* error) {
307
- fd_node* fdn = static_cast<fd_node*>(arg);
306
+ static void on_readable_locked(fd_node* fdn, grpc_error* error) {
308
307
  GPR_ASSERT(fdn->readable_registered);
309
308
  grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
310
309
  const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
@@ -326,17 +325,17 @@ static void on_readable_locked(void* arg, grpc_error* error) {
326
325
  }
327
326
  grpc_ares_notify_on_event_locked(ev_driver);
328
327
  grpc_ares_ev_driver_unref(ev_driver);
328
+ GRPC_ERROR_UNREF(error);
329
329
  }
330
330
 
331
331
  static void on_readable(void* arg, grpc_error* error) {
332
332
  fd_node* fdn = static_cast<fd_node*>(arg);
333
- fdn->ev_driver->combiner->Run(
334
- GRPC_CLOSURE_INIT(&fdn->read_closure, on_readable_locked, fdn, nullptr),
335
- GRPC_ERROR_REF(error));
333
+ GRPC_ERROR_REF(error); /* ref owned by lambda */
334
+ fdn->ev_driver->work_serializer->Run(
335
+ [fdn, error]() { on_readable_locked(fdn, error); }, DEBUG_LOCATION);
336
336
  }
337
337
 
338
- static void on_writable_locked(void* arg, grpc_error* error) {
339
- fd_node* fdn = static_cast<fd_node*>(arg);
338
+ static void on_writable_locked(fd_node* fdn, grpc_error* error) {
340
339
  GPR_ASSERT(fdn->writable_registered);
341
340
  grpc_ares_ev_driver* ev_driver = fdn->ev_driver;
342
341
  const ares_socket_t as = fdn->grpc_polled_fd->GetWrappedAresSocketLocked();
@@ -356,13 +355,14 @@ static void on_writable_locked(void* arg, grpc_error* error) {
356
355
  }
357
356
  grpc_ares_notify_on_event_locked(ev_driver);
358
357
  grpc_ares_ev_driver_unref(ev_driver);
358
+ GRPC_ERROR_UNREF(error);
359
359
  }
360
360
 
361
361
  static void on_writable(void* arg, grpc_error* error) {
362
362
  fd_node* fdn = static_cast<fd_node*>(arg);
363
- fdn->ev_driver->combiner->Run(
364
- GRPC_CLOSURE_INIT(&fdn->write_closure, on_writable_locked, fdn, nullptr),
365
- GRPC_ERROR_REF(error));
363
+ GRPC_ERROR_REF(error); /* ref owned by lambda */
364
+ fdn->ev_driver->work_serializer->Run(
365
+ [fdn, error]() { on_writable_locked(fdn, error); }, DEBUG_LOCATION);
366
366
  }
367
367
 
368
368
  ares_channel* grpc_ares_ev_driver_get_channel_locked(
@@ -387,7 +387,7 @@ static void grpc_ares_notify_on_event_locked(grpc_ares_ev_driver* ev_driver) {
387
387
  fdn = static_cast<fd_node*>(gpr_malloc(sizeof(fd_node)));
388
388
  fdn->grpc_polled_fd =
389
389
  ev_driver->polled_fd_factory->NewGrpcPolledFdLocked(
390
- socks[i], ev_driver->pollset_set, ev_driver->combiner);
390
+ socks[i], ev_driver->pollset_set, ev_driver->work_serializer);
391
391
  GRPC_CARES_TRACE_LOG("request:%p new fd: %s", ev_driver->request,
392
392
  fdn->grpc_polled_fd->GetName());
393
393
  fdn->ev_driver = ev_driver;
@@ -40,11 +40,11 @@ ares_channel* grpc_ares_ev_driver_get_channel_locked(
40
40
 
41
41
  /* Creates a new grpc_ares_ev_driver. Returns GRPC_ERROR_NONE if \a ev_driver is
42
42
  created successfully. */
43
- grpc_error* grpc_ares_ev_driver_create_locked(grpc_ares_ev_driver** ev_driver,
44
- grpc_pollset_set* pollset_set,
45
- int query_timeout_ms,
46
- grpc_core::Combiner* combiner,
47
- grpc_ares_request* request);
43
+ grpc_error* grpc_ares_ev_driver_create_locked(
44
+ grpc_ares_ev_driver** ev_driver, grpc_pollset_set* pollset_set,
45
+ int query_timeout_ms,
46
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer,
47
+ grpc_ares_request* request);
48
48
 
49
49
  /* Called back when all DNS lookups have completed. */
50
50
  void grpc_ares_ev_driver_on_queries_complete_locked(
@@ -90,12 +90,13 @@ class GrpcPolledFdFactory {
90
90
  /* Creates a new wrapped fd for the current platform */
91
91
  virtual GrpcPolledFd* NewGrpcPolledFdLocked(
92
92
  ares_socket_t as, grpc_pollset_set* driver_pollset_set,
93
- Combiner* combiner) = 0;
93
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer) = 0;
94
94
  /* Optionally configures the ares channel after creation */
95
95
  virtual void ConfigureAresChannelLocked(ares_channel channel) = 0;
96
96
  };
97
97
 
98
- std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(Combiner* combiner);
98
+ std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
99
+ std::shared_ptr<grpc_core::WorkSerializer> work_serializer);
99
100
 
100
101
  } // namespace grpc_core
101
102
 
@@ -31,7 +31,7 @@
31
31
  #include <grpc/support/time.h>
32
32
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h"
33
33
  #include "src/core/lib/gpr/string.h"
34
- #include "src/core/lib/iomgr/combiner.h"
34
+ #include "src/core/lib/iomgr/work_serializer.h"
35
35
 
36
36
  namespace grpc_core {
37
37
 
@@ -41,19 +41,16 @@ void ares_uv_poll_close_cb(uv_handle_t* handle) { delete handle; }
41
41
 
42
42
  class GrpcPolledFdLibuv : public GrpcPolledFd {
43
43
  public:
44
- GrpcPolledFdLibuv(ares_socket_t as, Combiner* combiner)
45
- : as_(as), combiner_(combiner) {
44
+ GrpcPolledFdLibuv(ares_socket_t as,
45
+ std::shared_ptr<WorkSerializer> work_serializer)
46
+ : as_(as), work_serializer_(std::move(work_serializer)) {
46
47
  gpr_asprintf(&name_, "c-ares socket: %" PRIdPTR, (intptr_t)as);
47
48
  handle_ = new uv_poll_t();
48
49
  uv_poll_init_socket(uv_default_loop(), handle_, as);
49
50
  handle_->data = this;
50
- GRPC_COMBINER_REF(combiner_, "libuv ares event driver");
51
51
  }
52
52
 
53
- ~GrpcPolledFdLibuv() {
54
- gpr_free(name_);
55
- GRPC_COMBINER_UNREF(combiner_, "libuv ares event driver");
56
- }
53
+ ~GrpcPolledFdLibuv() { gpr_free(name_); }
57
54
 
58
55
  void RegisterForOnReadableLocked(grpc_closure* read_closure) override {
59
56
  GPR_ASSERT(read_closure_ == nullptr);
@@ -109,7 +106,7 @@ class GrpcPolledFdLibuv : public GrpcPolledFd {
109
106
  grpc_closure* read_closure_ = nullptr;
110
107
  grpc_closure* write_closure_ = nullptr;
111
108
  int poll_events_ = 0;
112
- Combiner* combiner_;
109
+ std::shared_ptr<WorkSerializer> work_serializer_;
113
110
  };
114
111
 
115
112
  struct AresUvPollCbArg {
@@ -121,14 +118,14 @@ struct AresUvPollCbArg {
121
118
  int events;
122
119
  };
123
120
 
124
- static void ares_uv_poll_cb_locked(void* arg, grpc_error* error) {
125
- std::unique_ptr<AresUvPollCbArg> arg_struct(
126
- reinterpret_cast<AresUvPollCbArg*>(arg));
121
+ static void ares_uv_poll_cb_locked(AresUvPollCbArg* arg) {
122
+ std::unique_ptr<AresUvPollCbArg> arg_struct(arg);
127
123
  uv_poll_t* handle = arg_struct->handle;
128
124
  int status = arg_struct->status;
129
125
  int events = arg_struct->events;
130
126
  GrpcPolledFdLibuv* polled_fd =
131
127
  reinterpret_cast<GrpcPolledFdLibuv*>(handle->data);
128
+ grpc_error* error = GRPC_ERROR_NONE;
132
129
  if (status < 0) {
133
130
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("cares polling error");
134
131
  error =
@@ -155,24 +152,23 @@ void ares_uv_poll_cb(uv_poll_t* handle, int status, int events) {
155
152
  GrpcPolledFdLibuv* polled_fd =
156
153
  reinterpret_cast<GrpcPolledFdLibuv*>(handle->data);
157
154
  AresUvPollCbArg* arg = new AresUvPollCbArg(handle, status, events);
158
- polled_fd->combiner_->Run(
159
- GRPC_CLOSURE_CREATE(ares_uv_poll_cb_locked, arg, nullptr),
160
- GRPC_ERROR_NONE);
155
+ polled_fd->work_serializer_->Run([arg]() { ares_uv_poll_cb_locked(arg); },
156
+ DEBUG_LOCATION);
161
157
  }
162
158
 
163
159
  class GrpcPolledFdFactoryLibuv : public GrpcPolledFdFactory {
164
160
  public:
165
- GrpcPolledFd* NewGrpcPolledFdLocked(ares_socket_t as,
166
- grpc_pollset_set* driver_pollset_set,
167
- Combiner* combiner) override {
168
- return new GrpcPolledFdLibuv(as, combiner);
161
+ GrpcPolledFd* NewGrpcPolledFdLocked(
162
+ ares_socket_t as, grpc_pollset_set* driver_pollset_set,
163
+ std::shared_ptr<WorkSerializer> work_serializer) override {
164
+ return new GrpcPolledFdLibuv(as, std::move(work_serializer));
169
165
  }
170
166
 
171
167
  void ConfigureAresChannelLocked(ares_channel channel) override {}
172
168
  };
173
169
 
174
170
  std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
175
- Combiner* combiner) {
171
+ std::shared_ptr<WorkSerializer> work_serializer) {
176
172
  return absl::make_unique<GrpcPolledFdFactoryLibuv>();
177
173
  }
178
174
 
@@ -88,9 +88,9 @@ class GrpcPolledFdPosix : public GrpcPolledFd {
88
88
 
89
89
  class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
90
90
  public:
91
- GrpcPolledFd* NewGrpcPolledFdLocked(ares_socket_t as,
92
- grpc_pollset_set* driver_pollset_set,
93
- Combiner* /*combiner*/) override {
91
+ GrpcPolledFd* NewGrpcPolledFdLocked(
92
+ ares_socket_t as, grpc_pollset_set* driver_pollset_set,
93
+ std::shared_ptr<WorkSerializer> /*work_serializer*/) override {
94
94
  return new GrpcPolledFdPosix(as, driver_pollset_set);
95
95
  }
96
96
 
@@ -98,7 +98,7 @@ class GrpcPolledFdFactoryPosix : public GrpcPolledFdFactory {
98
98
  };
99
99
 
100
100
  std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
101
- Combiner* /*combiner*/) {
101
+ std::shared_ptr<WorkSerializer> work_serializer) { /* NOLINT */
102
102
  return absl::make_unique<GrpcPolledFdFactoryPosix>();
103
103
  }
104
104
 
@@ -30,12 +30,12 @@
30
30
  #include <string.h>
31
31
  #include "src/core/lib/gpr/string.h"
32
32
  #include "src/core/lib/gprpp/memory.h"
33
- #include "src/core/lib/iomgr/combiner.h"
34
33
  #include "src/core/lib/iomgr/iocp_windows.h"
35
34
  #include "src/core/lib/iomgr/sockaddr_utils.h"
36
35
  #include "src/core/lib/iomgr/sockaddr_windows.h"
37
36
  #include "src/core/lib/iomgr/socket_windows.h"
38
37
  #include "src/core/lib/iomgr/tcp_windows.h"
38
+ #include "src/core/lib/iomgr/work_serializer.h"
39
39
  #include "src/core/lib/slice/slice_internal.h"
40
40
 
41
41
  #include "src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h"
@@ -97,28 +97,31 @@ class GrpcPolledFdWindows {
97
97
  WRITE_WAITING_FOR_VERIFICATION_UPON_RETRY,
98
98
  };
99
99
 
100
- GrpcPolledFdWindows(ares_socket_t as, Combiner* combiner, int address_family,
101
- int socket_type)
102
- : read_buf_(grpc_empty_slice()),
100
+ GrpcPolledFdWindows(ares_socket_t as,
101
+ std::shared_ptr<WorkSerializer> work_serializer,
102
+ int address_family, int socket_type)
103
+ : work_serializer_(std::move(work_serializer)),
104
+ read_buf_(grpc_empty_slice()),
103
105
  write_buf_(grpc_empty_slice()),
104
106
  tcp_write_state_(WRITE_IDLE),
105
107
  gotten_into_driver_list_(false),
106
108
  address_family_(address_family),
107
109
  socket_type_(socket_type) {
108
110
  gpr_asprintf(&name_, "c-ares socket: %" PRIdPTR, as);
111
+ // Closure Initialization
112
+ GRPC_CLOSURE_INIT(&outer_read_closure_,
113
+ &GrpcPolledFdWindows::OnIocpReadable, this,
114
+ grpc_schedule_on_exec_ctx);
115
+ GRPC_CLOSURE_INIT(&outer_write_closure_,
116
+ &GrpcPolledFdWindows::OnIocpWriteable, this,
117
+ grpc_schedule_on_exec_ctx);
118
+ GRPC_CLOSURE_INIT(&on_tcp_connect_locked_,
119
+ &GrpcPolledFdWindows::OnTcpConnect, this,
120
+ grpc_schedule_on_exec_ctx);
109
121
  winsocket_ = grpc_winsocket_create(as, name_);
110
- combiner_ = GRPC_COMBINER_REF(combiner, name_);
111
- GRPC_CLOSURE_INIT(&continue_register_for_on_readable_locked_,
112
- &GrpcPolledFdWindows::ContinueRegisterForOnReadableLocked,
113
- this, nullptr);
114
- GRPC_CLOSURE_INIT(
115
- &continue_register_for_on_writeable_locked_,
116
- &GrpcPolledFdWindows::ContinueRegisterForOnWriteableLocked, this,
117
- nullptr);
118
122
  }
119
123
 
120
124
  ~GrpcPolledFdWindows() {
121
- GRPC_COMBINER_UNREF(combiner_, name_);
122
125
  grpc_slice_unref_internal(read_buf_);
123
126
  grpc_slice_unref_internal(write_buf_);
124
127
  GPR_ASSERT(read_closure_ == nullptr);
@@ -145,23 +148,15 @@ class GrpcPolledFdWindows {
145
148
  GPR_ASSERT(!read_buf_has_data_);
146
149
  read_buf_ = GRPC_SLICE_MALLOC(4192);
147
150
  if (connect_done_) {
148
- combiner_->Run(&continue_register_for_on_readable_locked_,
149
- GRPC_ERROR_NONE);
151
+ work_serializer_->Run([this]() { ContinueRegisterForOnReadableLocked(); },
152
+ DEBUG_LOCATION);
150
153
  } else {
151
- GPR_ASSERT(pending_continue_register_for_on_readable_locked_ == nullptr);
152
- pending_continue_register_for_on_readable_locked_ =
153
- &continue_register_for_on_readable_locked_;
154
+ GPR_ASSERT(pending_continue_register_for_on_readable_locked_ == false);
155
+ pending_continue_register_for_on_readable_locked_ = true;
154
156
  }
155
157
  }
156
158
 
157
- static void ContinueRegisterForOnReadableLocked(void* arg,
158
- grpc_error* unused_error) {
159
- GrpcPolledFdWindows* grpc_polled_fd =
160
- static_cast<GrpcPolledFdWindows*>(arg);
161
- grpc_polled_fd->InnerContinueRegisterForOnReadableLocked(GRPC_ERROR_NONE);
162
- }
163
-
164
- void InnerContinueRegisterForOnReadableLocked(grpc_error* unused_error) {
159
+ void ContinueRegisterForOnReadableLocked() {
165
160
  GRPC_CARES_TRACE_LOG(
166
161
  "fd:|%s| InnerContinueRegisterForOnReadableLocked "
167
162
  "wsa_connect_error_:%d",
@@ -194,10 +189,7 @@ class GrpcPolledFdWindows {
194
189
  return;
195
190
  }
196
191
  }
197
- grpc_socket_notify_on_read(
198
- winsocket_, GRPC_CLOSURE_INIT(&outer_read_closure_,
199
- &GrpcPolledFdWindows::OnIocpReadable,
200
- this, grpc_schedule_on_exec_ctx));
192
+ grpc_socket_notify_on_read(winsocket_, &outer_read_closure_);
201
193
  }
202
194
 
203
195
  void RegisterForOnWriteableLocked(grpc_closure* write_closure) {
@@ -213,23 +205,15 @@ class GrpcPolledFdWindows {
213
205
  GPR_ASSERT(write_closure_ == nullptr);
214
206
  write_closure_ = write_closure;
215
207
  if (connect_done_) {
216
- combiner_->Run(&continue_register_for_on_writeable_locked_,
217
- GRPC_ERROR_NONE);
208
+ work_serializer_->Run(
209
+ [this]() { ContinueRegisterForOnWriteableLocked(); }, DEBUG_LOCATION);
218
210
  } else {
219
- GPR_ASSERT(pending_continue_register_for_on_writeable_locked_ == nullptr);
220
- pending_continue_register_for_on_writeable_locked_ =
221
- &continue_register_for_on_writeable_locked_;
211
+ GPR_ASSERT(pending_continue_register_for_on_writeable_locked_ == false);
212
+ pending_continue_register_for_on_writeable_locked_ = true;
222
213
  }
223
214
  }
224
215
 
225
- static void ContinueRegisterForOnWriteableLocked(void* arg,
226
- grpc_error* unused_error) {
227
- GrpcPolledFdWindows* grpc_polled_fd =
228
- static_cast<GrpcPolledFdWindows*>(arg);
229
- grpc_polled_fd->InnerContinueRegisterForOnWriteableLocked(GRPC_ERROR_NONE);
230
- }
231
-
232
- void InnerContinueRegisterForOnWriteableLocked(grpc_error* unused_error) {
216
+ void ContinueRegisterForOnWriteableLocked() {
233
217
  GRPC_CARES_TRACE_LOG(
234
218
  "fd:|%s| InnerContinueRegisterForOnWriteableLocked "
235
219
  "wsa_connect_error_:%d",
@@ -256,11 +240,7 @@ class GrpcPolledFdWindows {
256
240
  ScheduleAndNullWriteClosure(
257
241
  GRPC_WSA_ERROR(wsa_error_code, "WSASend (overlapped)"));
258
242
  } else {
259
- grpc_socket_notify_on_write(
260
- winsocket_,
261
- GRPC_CLOSURE_INIT(&outer_write_closure_,
262
- &GrpcPolledFdWindows::OnIocpWriteable, this,
263
- grpc_schedule_on_exec_ctx));
243
+ grpc_socket_notify_on_write(winsocket_, &outer_write_closure_);
264
244
  }
265
245
  break;
266
246
  case WRITE_PENDING:
@@ -440,24 +420,19 @@ class GrpcPolledFdWindows {
440
420
  static void OnTcpConnect(void* arg, grpc_error* error) {
441
421
  GrpcPolledFdWindows* grpc_polled_fd =
442
422
  static_cast<GrpcPolledFdWindows*>(arg);
443
- grpc_polled_fd->combiner_->Run(
444
- GRPC_CLOSURE_INIT(&grpc_polled_fd->on_tcp_connect_locked_,
445
- &GrpcPolledFdWindows::OnTcpConnectLocked,
446
- grpc_polled_fd, nullptr),
447
- GRPC_ERROR_REF(error));
448
- }
449
-
450
- static void OnTcpConnectLocked(void* arg, grpc_error* error) {
451
- GrpcPolledFdWindows* grpc_polled_fd =
452
- static_cast<GrpcPolledFdWindows*>(arg);
453
- grpc_polled_fd->InnerOnTcpConnectLocked(error);
423
+ GRPC_ERROR_REF(error); // ref owned by lambda
424
+ grpc_polled_fd->work_serializer_->Run(
425
+ [grpc_polled_fd, error]() {
426
+ grpc_polled_fd->OnTcpConnectLocked(error);
427
+ },
428
+ DEBUG_LOCATION);
454
429
  }
455
430
 
456
- void InnerOnTcpConnectLocked(grpc_error* error) {
431
+ void OnTcpConnectLocked(grpc_error* error) {
457
432
  GRPC_CARES_TRACE_LOG(
458
433
  "fd:%s InnerOnTcpConnectLocked error:|%s| "
459
- "pending_register_for_readable:%" PRIdPTR
460
- " pending_register_for_writeable:%" PRIdPTR,
434
+ "pending_register_for_readable:%d"
435
+ " pending_register_for_writeable:%d",
461
436
  GetName(), grpc_error_string(error),
462
437
  pending_continue_register_for_on_readable_locked_,
463
438
  pending_continue_register_for_on_writeable_locked_);
@@ -486,14 +461,15 @@ class GrpcPolledFdWindows {
486
461
  // this fd to abort.
487
462
  wsa_connect_error_ = WSA_OPERATION_ABORTED;
488
463
  }
489
- if (pending_continue_register_for_on_readable_locked_ != nullptr) {
490
- combiner_->Run(pending_continue_register_for_on_readable_locked_,
491
- GRPC_ERROR_NONE);
464
+ if (pending_continue_register_for_on_readable_locked_) {
465
+ work_serializer_->Run([this]() { ContinueRegisterForOnReadableLocked(); },
466
+ DEBUG_LOCATION);
492
467
  }
493
- if (pending_continue_register_for_on_writeable_locked_ != nullptr) {
494
- combiner_->Run(pending_continue_register_for_on_writeable_locked_,
495
- GRPC_ERROR_NONE);
468
+ if (pending_continue_register_for_on_writeable_locked_) {
469
+ work_serializer_->Run(
470
+ [this]() { ContinueRegisterForOnWriteableLocked(); }, DEBUG_LOCATION);
496
471
  }
472
+ GRPC_ERROR_UNREF(error);
497
473
  }
498
474
 
499
475
  int Connect(WSAErrorContext* wsa_error_ctx, const struct sockaddr* target,
@@ -593,25 +569,16 @@ class GrpcPolledFdWindows {
593
569
  return -1;
594
570
  }
595
571
  }
596
- GRPC_CLOSURE_INIT(&on_tcp_connect_locked_,
597
- &GrpcPolledFdWindows::OnTcpConnect, this,
598
- grpc_schedule_on_exec_ctx);
599
572
  grpc_socket_notify_on_write(winsocket_, &on_tcp_connect_locked_);
600
573
  return out;
601
574
  }
602
575
 
603
576
  static void OnIocpReadable(void* arg, grpc_error* error) {
604
577
  GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
605
- polled_fd->combiner_->Run(
606
- GRPC_CLOSURE_INIT(&polled_fd->outer_read_closure_,
607
- &GrpcPolledFdWindows::OnIocpReadableLocked, polled_fd,
608
- nullptr),
609
- GRPC_ERROR_REF(error));
610
- }
611
-
612
- static void OnIocpReadableLocked(void* arg, grpc_error* error) {
613
- GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
614
- polled_fd->OnIocpReadableInner(error);
578
+ GRPC_ERROR_REF(error); // ref owned by lambda
579
+ polled_fd->work_serializer_->Run(
580
+ [polled_fd, error]() { polled_fd->OnIocpReadableLocked(error); },
581
+ DEBUG_LOCATION);
615
582
  }
616
583
 
617
584
  // TODO(apolcyn): improve this error handling to be less conversative.
@@ -619,7 +586,7 @@ class GrpcPolledFdWindows {
619
586
  // c-ares reads from this socket later, but it shouldn't necessarily cancel
620
587
  // the entire resolution attempt. Doing so will allow the "inject broken
621
588
  // nameserver list" test to pass on Windows.
622
- void OnIocpReadableInner(grpc_error* error) {
589
+ void OnIocpReadableLocked(grpc_error* error) {
623
590
  if (error == GRPC_ERROR_NONE) {
624
591
  if (winsocket_->read_info.wsa_error != 0) {
625
592
  /* WSAEMSGSIZE would be due to receiving more data
@@ -627,7 +594,6 @@ class GrpcPolledFdWindows {
627
594
  * the connection is TCP and read the leftovers
628
595
  * in subsequent c-ares reads. */
629
596
  if (winsocket_->read_info.wsa_error != WSAEMSGSIZE) {
630
- GRPC_ERROR_UNREF(error);
631
597
  error = GRPC_WSA_ERROR(winsocket_->read_info.wsa_error,
632
598
  "OnIocpReadableInner");
633
599
  GRPC_CARES_TRACE_LOG(
@@ -654,24 +620,17 @@ class GrpcPolledFdWindows {
654
620
 
655
621
  static void OnIocpWriteable(void* arg, grpc_error* error) {
656
622
  GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
657
- polled_fd->combiner_->Run(
658
- GRPC_CLOSURE_INIT(&polled_fd->outer_write_closure_,
659
- &GrpcPolledFdWindows::OnIocpWriteableLocked,
660
- polled_fd, nullptr),
661
- GRPC_ERROR_REF(error));
623
+ GRPC_ERROR_REF(error); // error owned by lambda
624
+ polled_fd->work_serializer_->Run(
625
+ [polled_fd, error]() { polled_fd->OnIocpWriteableLocked(error); },
626
+ DEBUG_LOCATION);
662
627
  }
663
628
 
664
- static void OnIocpWriteableLocked(void* arg, grpc_error* error) {
665
- GrpcPolledFdWindows* polled_fd = static_cast<GrpcPolledFdWindows*>(arg);
666
- polled_fd->OnIocpWriteableInner(error);
667
- }
668
-
669
- void OnIocpWriteableInner(grpc_error* error) {
629
+ void OnIocpWriteableLocked(grpc_error* error) {
670
630
  GRPC_CARES_TRACE_LOG("OnIocpWriteableInner. fd:|%s|", GetName());
671
631
  GPR_ASSERT(socket_type_ == SOCK_STREAM);
672
632
  if (error == GRPC_ERROR_NONE) {
673
633
  if (winsocket_->write_info.wsa_error != 0) {
674
- GRPC_ERROR_UNREF(error);
675
634
  error = GRPC_WSA_ERROR(winsocket_->write_info.wsa_error,
676
635
  "OnIocpWriteableInner");
677
636
  GRPC_CARES_TRACE_LOG(
@@ -698,7 +657,7 @@ class GrpcPolledFdWindows {
698
657
  bool gotten_into_driver_list() const { return gotten_into_driver_list_; }
699
658
  void set_gotten_into_driver_list() { gotten_into_driver_list_ = true; }
700
659
 
701
- Combiner* combiner_;
660
+ std::shared_ptr<WorkSerializer> work_serializer_;
702
661
  char recv_from_source_addr_[200];
703
662
  ares_socklen_t recv_from_source_addr_len_;
704
663
  grpc_slice read_buf_;
@@ -721,10 +680,8 @@ class GrpcPolledFdWindows {
721
680
  // We don't run register_for_{readable,writeable} logic until
722
681
  // a socket is connected. In the interim, we queue readable/writeable
723
682
  // registrations with the following state.
724
- grpc_closure continue_register_for_on_readable_locked_;
725
- grpc_closure continue_register_for_on_writeable_locked_;
726
- grpc_closure* pending_continue_register_for_on_readable_locked_ = nullptr;
727
- grpc_closure* pending_continue_register_for_on_writeable_locked_ = nullptr;
683
+ bool pending_continue_register_for_on_readable_locked_ = false;
684
+ bool pending_continue_register_for_on_writeable_locked_ = false;
728
685
  };
729
686
 
730
687
  struct SockToPolledFdEntry {
@@ -742,14 +699,10 @@ struct SockToPolledFdEntry {
742
699
  * with a GrpcPolledFdWindows factory and event driver */
743
700
  class SockToPolledFdMap {
744
701
  public:
745
- SockToPolledFdMap(Combiner* combiner) {
746
- combiner_ = GRPC_COMBINER_REF(combiner, "sock to polled fd map");
747
- }
702
+ explicit SockToPolledFdMap(std::shared_ptr<WorkSerializer> work_serializer)
703
+ : work_serializer_(std::move(work_serializer)) {}
748
704
 
749
- ~SockToPolledFdMap() {
750
- GPR_ASSERT(head_ == nullptr);
751
- GRPC_COMBINER_UNREF(combiner_, "sock to polled fd map");
752
- }
705
+ ~SockToPolledFdMap() { GPR_ASSERT(head_ == nullptr); }
753
706
 
754
707
  void AddNewSocket(SOCKET s, GrpcPolledFdWindows* polled_fd) {
755
708
  SockToPolledFdEntry* new_node = new SockToPolledFdEntry(s, polled_fd);
@@ -805,7 +758,7 @@ class SockToPolledFdMap {
805
758
  }
806
759
  grpc_tcp_set_non_block(s);
807
760
  GrpcPolledFdWindows* polled_fd =
808
- new GrpcPolledFdWindows(s, map->combiner_, af, type);
761
+ new GrpcPolledFdWindows(s, map->work_serializer_, af, type);
809
762
  GRPC_CARES_TRACE_LOG(
810
763
  "fd:|%s| created with params af:%d type:%d protocol:%d",
811
764
  polled_fd->GetName(), af, type, protocol);
@@ -861,7 +814,7 @@ class SockToPolledFdMap {
861
814
 
862
815
  private:
863
816
  SockToPolledFdEntry* head_ = nullptr;
864
- Combiner* combiner_;
817
+ std::shared_ptr<WorkSerializer> work_serializer_;
865
818
  };
866
819
 
867
820
  const struct ares_socket_functions custom_ares_sock_funcs = {
@@ -877,7 +830,7 @@ const struct ares_socket_functions custom_ares_sock_funcs = {
877
830
  so that c-ares can close it via usual socket teardown. */
878
831
  class GrpcPolledFdWindowsWrapper : public GrpcPolledFd {
879
832
  public:
880
- GrpcPolledFdWindowsWrapper(GrpcPolledFdWindows* wrapped)
833
+ explicit GrpcPolledFdWindowsWrapper(GrpcPolledFdWindows* wrapped)
881
834
  : wrapped_(wrapped) {}
882
835
 
883
836
  ~GrpcPolledFdWindowsWrapper() {}
@@ -910,12 +863,13 @@ class GrpcPolledFdWindowsWrapper : public GrpcPolledFd {
910
863
 
911
864
  class GrpcPolledFdFactoryWindows : public GrpcPolledFdFactory {
912
865
  public:
913
- GrpcPolledFdFactoryWindows(Combiner* combiner)
914
- : sock_to_polled_fd_map_(combiner) {}
866
+ explicit GrpcPolledFdFactoryWindows(
867
+ std::shared_ptr<WorkSerializer> work_serializer)
868
+ : sock_to_polled_fd_map_(std::move(work_serializer)) {}
915
869
 
916
- GrpcPolledFd* NewGrpcPolledFdLocked(ares_socket_t as,
917
- grpc_pollset_set* driver_pollset_set,
918
- Combiner* combiner) override {
870
+ GrpcPolledFd* NewGrpcPolledFdLocked(
871
+ ares_socket_t as, grpc_pollset_set* driver_pollset_set,
872
+ std::shared_ptr<WorkSerializer> work_serializer) override {
919
873
  GrpcPolledFdWindows* polled_fd = sock_to_polled_fd_map_.LookupPolledFd(as);
920
874
  // Set a flag so that the virtual socket "close" method knows it
921
875
  // doesn't need to call ShutdownLocked, since now the driver will.
@@ -933,8 +887,9 @@ class GrpcPolledFdFactoryWindows : public GrpcPolledFdFactory {
933
887
  };
934
888
 
935
889
  std::unique_ptr<GrpcPolledFdFactory> NewGrpcPolledFdFactory(
936
- Combiner* combiner) {
937
- return absl::make_unique<GrpcPolledFdFactoryWindows>(combiner);
890
+ std::shared_ptr<WorkSerializer> work_serializer) {
891
+ return absl::make_unique<GrpcPolledFdFactoryWindows>(
892
+ std::move(work_serializer));
938
893
  }
939
894
 
940
895
  } // namespace grpc_core