grpc 1.28.0 → 1.31.0.pre2

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