grpc 1.37.1 → 1.40.0.pre1

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

Potentially problematic release.


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

Files changed (738) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +112 -59
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/endpoint_config.h +48 -0
  5. data/include/grpc/event_engine/event_engine.h +330 -0
  6. data/include/grpc/event_engine/port.h +41 -0
  7. data/include/grpc/event_engine/slice_allocator.h +66 -0
  8. data/include/grpc/grpc.h +11 -4
  9. data/include/grpc/grpc_security.h +32 -0
  10. data/include/grpc/grpc_security_constants.h +15 -0
  11. data/include/grpc/impl/codegen/grpc_types.h +44 -19
  12. data/include/grpc/impl/codegen/port_platform.h +46 -0
  13. data/include/grpc/module.modulemap +14 -14
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  15. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  16. data/src/core/ext/filters/client_channel/client_channel.cc +975 -3282
  17. data/src/core/ext/filters/client_channel/client_channel.h +513 -55
  18. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +20 -7
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +28 -27
  25. data/src/core/ext/filters/client_channel/health/health_check_client.h +30 -29
  26. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +53 -51
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -23
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +16 -16
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +734 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +10 -17
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +17 -20
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +53 -65
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +36 -44
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +33 -55
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +151 -163
  43. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -16
  44. data/src/core/ext/filters/client_channel/lb_policy.h +70 -46
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  46. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -18
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  55. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +18 -12
  60. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  61. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  62. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +20 -13
  63. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  64. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +158 -102
  65. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  66. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  67. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  68. data/src/core/ext/filters/client_channel/retry_filter.cc +2598 -0
  69. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  70. data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
  71. data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
  72. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  73. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  74. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  75. data/src/core/ext/filters/client_channel/service_config_call_data.h +45 -5
  76. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  77. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  78. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  79. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  80. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  81. data/src/core/ext/filters/client_idle/client_idle_filter.cc +17 -16
  82. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  83. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  84. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  85. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  86. data/src/core/ext/filters/http/client/http_client_filter.cc +33 -23
  87. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  88. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  89. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  90. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  91. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  92. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  93. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  94. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  95. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  96. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  97. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  98. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +3 -2
  99. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  100. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +49 -46
  101. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  102. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  103. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +5 -4
  104. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  105. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +1 -1
  106. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +66 -0
  107. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +74 -0
  108. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +141 -126
  109. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  110. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  111. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  112. data/src/core/ext/transport/chttp2/transport/flow_control.h +9 -9
  113. data/src/core/ext/transport/chttp2/transport/frame_data.cc +12 -12
  114. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  115. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +15 -16
  116. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  117. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  118. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  119. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  120. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +11 -10
  122. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  124. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  125. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +652 -736
  126. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +195 -74
  127. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  128. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  129. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  130. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  131. data/src/core/ext/transport/chttp2/transport/internal.h +33 -28
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +129 -106
  133. data/src/core/ext/transport/chttp2/transport/varint.cc +6 -4
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  135. data/src/core/ext/transport/inproc/inproc_transport.cc +72 -60
  136. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +56 -35
  137. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +180 -76
  138. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +35 -27
  139. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +97 -48
  140. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +45 -9
  141. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +67 -7
  142. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +66 -9
  143. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +227 -0
  144. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
  145. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +121 -0
  146. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -0
  147. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
  148. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +90 -0
  149. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +32 -24
  150. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -73
  151. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +4 -2
  152. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +15 -0
  153. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
  154. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +171 -0
  155. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +8 -6
  156. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +27 -19
  157. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +1 -0
  158. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +24 -7
  159. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +57 -0
  160. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +29 -17
  161. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +72 -0
  162. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +3 -2
  163. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
  164. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +6 -5
  165. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +15 -11
  166. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +85 -43
  167. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +274 -91
  168. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +11 -8
  169. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +30 -13
  170. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +33 -5
  171. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +115 -0
  172. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
  173. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +181 -0
  174. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +1 -0
  175. data/src/core/ext/upb-generated/validate/validate.upb.c +82 -66
  176. data/src/core/ext/upb-generated/validate/validate.upb.h +220 -124
  177. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
  178. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +53 -52
  179. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +318 -277
  180. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -0
  181. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +437 -410
  182. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +198 -170
  183. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  184. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +9 -8
  185. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +219 -163
  186. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +15 -0
  187. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
  188. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  189. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +29 -25
  190. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
  191. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  192. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +135 -125
  193. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  194. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +131 -123
  195. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
  196. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  197. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +32 -24
  198. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -55
  199. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
  200. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +684 -664
  201. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  202. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +13 -10
  203. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +13 -10
  204. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +441 -375
  205. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
  206. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +122 -114
  207. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +1 -1
  208. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +112 -79
  209. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +5 -0
  210. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
  211. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  212. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
  213. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
  214. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -160
  215. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  216. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  217. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  218. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  219. data/src/core/ext/xds/xds_api.cc +665 -317
  220. data/src/core/ext/xds/xds_api.h +52 -14
  221. data/src/core/ext/xds/xds_bootstrap.cc +101 -160
  222. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  223. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  224. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  225. data/src/core/ext/xds/xds_channel_args.h +5 -2
  226. data/src/core/ext/xds/xds_client.cc +370 -215
  227. data/src/core/ext/xds/xds_client.h +38 -28
  228. data/src/core/ext/xds/xds_client_stats.h +3 -2
  229. data/src/core/ext/xds/xds_http_filters.cc +3 -2
  230. data/src/core/ext/xds/xds_http_filters.h +3 -0
  231. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  232. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  233. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  234. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +16 -20
  235. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +16 -11
  236. data/src/core/lib/channel/call_tracer.h +85 -0
  237. data/src/core/lib/channel/channel_stack.cc +10 -9
  238. data/src/core/lib/channel/channel_stack.h +11 -10
  239. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  240. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  241. data/src/core/lib/channel/channelz.cc +21 -13
  242. data/src/core/lib/channel/channelz.h +3 -0
  243. data/src/core/lib/channel/connected_channel.cc +4 -4
  244. data/src/core/lib/channel/context.h +3 -0
  245. data/src/core/lib/channel/handshaker.cc +7 -6
  246. data/src/core/lib/channel/handshaker.h +5 -5
  247. data/src/core/lib/channel/status_util.h +4 -0
  248. data/src/core/lib/compression/stream_compression.h +1 -1
  249. data/src/core/lib/compression/stream_compression_gzip.h +1 -1
  250. data/src/core/lib/compression/stream_compression_identity.h +1 -1
  251. data/src/core/lib/debug/stats.h +1 -1
  252. data/src/core/lib/event_engine/endpoint_config.cc +46 -0
  253. data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
  254. data/src/core/lib/event_engine/event_engine.cc +50 -0
  255. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  256. data/src/core/lib/event_engine/sockaddr.h +44 -0
  257. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  258. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  259. data/src/core/lib/gprpp/manual_constructor.h +1 -1
  260. data/src/core/lib/gprpp/orphanable.h +3 -3
  261. data/src/core/lib/gprpp/ref_counted.h +28 -14
  262. data/src/core/lib/gprpp/status_helper.cc +407 -0
  263. data/src/core/lib/gprpp/status_helper.h +183 -0
  264. data/src/core/lib/gprpp/sync.h +2 -30
  265. data/src/core/lib/http/httpcli.cc +11 -11
  266. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  267. data/src/core/lib/http/parser.cc +16 -16
  268. data/src/core/lib/http/parser.h +4 -4
  269. data/src/core/lib/iomgr/buffer_list.cc +8 -10
  270. data/src/core/lib/iomgr/buffer_list.h +4 -5
  271. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  272. data/src/core/lib/iomgr/call_combiner.h +12 -14
  273. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  274. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  275. data/src/core/lib/iomgr/closure.h +7 -6
  276. data/src/core/lib/iomgr/combiner.cc +14 -12
  277. data/src/core/lib/iomgr/combiner.h +2 -2
  278. data/src/core/lib/iomgr/endpoint.cc +1 -1
  279. data/src/core/lib/iomgr/endpoint.h +2 -2
  280. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  281. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +33 -0
  282. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  283. data/src/core/lib/iomgr/error.cc +168 -61
  284. data/src/core/lib/iomgr/error.h +217 -106
  285. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  286. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  287. data/src/core/lib/iomgr/error_internal.h +5 -1
  288. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  289. data/src/core/lib/iomgr/ev_apple.h +1 -1
  290. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  291. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  292. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  293. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  294. data/src/core/lib/iomgr/ev_posix.h +9 -9
  295. data/src/core/lib/iomgr/event_engine/closure.cc +54 -0
  296. data/src/core/lib/iomgr/event_engine/closure.h +33 -0
  297. data/src/core/lib/iomgr/event_engine/endpoint.cc +192 -0
  298. data/src/core/lib/iomgr/event_engine/endpoint.h +53 -0
  299. data/src/core/lib/iomgr/event_engine/iomgr.cc +105 -0
  300. data/src/core/lib/iomgr/event_engine/iomgr.h +24 -0
  301. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  302. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  303. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  304. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
  305. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
  306. data/src/core/lib/iomgr/event_engine/resolver.cc +110 -0
  307. data/src/core/lib/iomgr/event_engine/tcp.cc +263 -0
  308. data/src/core/lib/iomgr/event_engine/timer.cc +57 -0
  309. data/src/core/lib/iomgr/exec_ctx.cc +12 -4
  310. data/src/core/lib/iomgr/exec_ctx.h +4 -5
  311. data/src/core/lib/iomgr/executor/threadpool.cc +2 -3
  312. data/src/core/lib/iomgr/executor/threadpool.h +2 -2
  313. data/src/core/lib/iomgr/executor.cc +8 -8
  314. data/src/core/lib/iomgr/executor.h +2 -2
  315. data/src/core/lib/iomgr/iomgr.cc +2 -2
  316. data/src/core/lib/iomgr/iomgr.h +1 -1
  317. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  318. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  319. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  320. data/src/core/lib/iomgr/iomgr_posix.cc +3 -1
  321. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -12
  322. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  323. data/src/core/lib/iomgr/load_file.cc +4 -4
  324. data/src/core/lib/iomgr/load_file.h +2 -2
  325. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  326. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  327. data/src/core/lib/iomgr/pollset.cc +5 -5
  328. data/src/core/lib/iomgr/pollset.h +9 -9
  329. data/src/core/lib/iomgr/pollset_custom.cc +7 -7
  330. data/src/core/lib/iomgr/pollset_custom.h +3 -1
  331. data/src/core/lib/iomgr/pollset_uv.cc +3 -1
  332. data/src/core/lib/iomgr/pollset_uv.h +5 -1
  333. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  334. data/src/core/lib/iomgr/port.h +7 -5
  335. data/src/core/lib/iomgr/python_util.h +2 -2
  336. data/src/core/lib/iomgr/resolve_address.cc +8 -4
  337. data/src/core/lib/iomgr/resolve_address.h +12 -6
  338. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  339. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  340. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  341. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  342. data/src/core/lib/iomgr/resource_quota.cc +13 -10
  343. data/src/core/lib/iomgr/sockaddr.h +1 -0
  344. data/src/core/lib/iomgr/socket_mutator.cc +15 -2
  345. data/src/core/lib/iomgr/socket_mutator.h +26 -2
  346. data/src/core/lib/iomgr/socket_utils_common_posix.cc +24 -22
  347. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  348. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  349. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  350. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -19
  351. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  352. data/src/core/lib/iomgr/tcp_client_windows.cc +7 -5
  353. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  354. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  355. data/src/core/lib/iomgr/tcp_posix.cc +78 -73
  356. data/src/core/lib/iomgr/tcp_posix.h +8 -0
  357. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  358. data/src/core/lib/iomgr/tcp_server.h +12 -11
  359. data/src/core/lib/iomgr/tcp_server_custom.cc +26 -25
  360. data/src/core/lib/iomgr/tcp_server_posix.cc +29 -21
  361. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  362. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +21 -18
  363. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  364. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  365. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  366. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  367. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  368. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  369. data/src/core/lib/iomgr/timer.h +6 -1
  370. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  371. data/src/core/lib/iomgr/timer_custom.h +1 -1
  372. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  373. data/src/core/lib/iomgr/timer_manager.cc +1 -1
  374. data/src/core/lib/iomgr/udp_server.cc +21 -20
  375. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  376. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  377. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  378. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  379. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  380. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  381. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  382. data/src/core/lib/iomgr/work_serializer.h +17 -1
  383. data/src/core/lib/json/json.h +1 -1
  384. data/src/core/lib/json/json_reader.cc +5 -6
  385. data/src/core/lib/matchers/matchers.cc +46 -58
  386. data/src/core/lib/matchers/matchers.h +30 -29
  387. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  388. data/src/core/lib/security/authorization/authorization_policy_provider.h +32 -0
  389. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  390. data/src/core/lib/security/authorization/evaluate_args.cc +209 -0
  391. data/src/core/lib/security/authorization/evaluate_args.h +91 -0
  392. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  393. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  394. data/src/core/lib/security/credentials/credentials.h +2 -2
  395. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  396. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  397. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  398. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  399. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  400. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  401. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  402. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  403. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  404. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  405. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  406. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  407. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +12 -10
  408. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  409. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  410. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  411. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  412. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  413. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  414. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  415. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  416. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  417. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  418. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  419. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  420. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +68 -13
  421. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -0
  422. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  423. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  424. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  425. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  426. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  427. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  428. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  429. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  430. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  431. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -9
  432. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  433. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  434. data/src/core/lib/security/security_connector/ssl_utils.cc +27 -4
  435. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  436. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +60 -76
  437. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  438. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  439. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  440. data/src/core/lib/security/transport/security_handshaker.cc +45 -36
  441. data/src/core/lib/security/transport/server_auth_filter.cc +17 -18
  442. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  443. data/src/core/lib/security/transport/tsi_error.h +2 -1
  444. data/src/core/lib/security/util/json_util.cc +2 -2
  445. data/src/core/lib/security/util/json_util.h +1 -1
  446. data/src/core/lib/slice/slice_internal.h +1 -0
  447. data/src/core/lib/surface/call.cc +72 -52
  448. data/src/core/lib/surface/call.h +13 -2
  449. data/src/core/lib/surface/channel.cc +6 -6
  450. data/src/core/lib/surface/channel.h +3 -2
  451. data/src/core/lib/surface/channel_ping.cc +1 -1
  452. data/src/core/lib/surface/completion_queue.cc +68 -69
  453. data/src/core/lib/surface/completion_queue.h +3 -2
  454. data/src/core/lib/surface/completion_queue_factory.cc +1 -2
  455. data/src/core/lib/surface/init.cc +1 -3
  456. data/src/core/lib/surface/init.h +10 -1
  457. data/src/core/lib/surface/lame_client.cc +11 -11
  458. data/src/core/lib/surface/lame_client.h +1 -1
  459. data/src/core/lib/surface/server.cc +31 -23
  460. data/src/core/lib/surface/server.h +19 -18
  461. data/src/core/lib/surface/validate_metadata.cc +7 -7
  462. data/src/core/lib/surface/validate_metadata.h +3 -2
  463. data/src/core/lib/surface/version.cc +2 -2
  464. data/src/core/lib/transport/byte_stream.cc +5 -5
  465. data/src/core/lib/transport/byte_stream.h +8 -8
  466. data/src/core/lib/transport/connectivity_state.cc +1 -1
  467. data/src/core/lib/transport/error_utils.cc +21 -10
  468. data/src/core/lib/transport/error_utils.h +11 -5
  469. data/src/core/lib/transport/metadata_batch.cc +37 -37
  470. data/src/core/lib/transport/metadata_batch.h +19 -18
  471. data/src/core/lib/transport/transport.cc +4 -3
  472. data/src/core/lib/transport/transport.h +6 -4
  473. data/src/core/lib/transport/transport_op_string.cc +6 -6
  474. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -0
  475. data/src/core/tsi/alts/crypt/gsec.h +6 -0
  476. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  477. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  478. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  479. data/src/core/tsi/ssl_transport_security.cc +32 -14
  480. data/src/core/tsi/ssl_transport_security.h +3 -4
  481. data/src/ruby/bin/math_services_pb.rb +1 -1
  482. data/src/ruby/ext/grpc/extconf.rb +2 -0
  483. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +6 -0
  484. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +11 -2
  485. data/src/ruby/lib/grpc/version.rb +1 -1
  486. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  487. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  488. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  489. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  490. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  491. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  492. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  493. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  494. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  495. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  496. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  497. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  498. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  499. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  500. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  501. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  502. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  503. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  504. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  505. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  506. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  507. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  508. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  509. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  510. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  511. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  512. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  513. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  514. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  515. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  516. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  517. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  518. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  519. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  520. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  521. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  522. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  523. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  524. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  525. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  526. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  527. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  528. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  529. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  530. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  531. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  532. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  533. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  534. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  535. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  536. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  537. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  538. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  539. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  540. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  541. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  542. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  543. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  544. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  545. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  546. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  547. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  548. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  549. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  550. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  551. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  552. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  553. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  554. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  555. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  556. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  557. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  558. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  559. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  560. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  561. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  562. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  563. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  564. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  565. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  566. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  567. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  568. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  569. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  570. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  571. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  572. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  573. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  574. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  575. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  576. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  577. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  578. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  579. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  580. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  581. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  582. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  583. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  584. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  585. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  586. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  587. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  588. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  589. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  590. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  591. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  592. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  593. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  594. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  595. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  596. data/third_party/boringssl-with-bazel/err_data.c +483 -461
  597. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  598. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +9 -7
  599. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  600. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  601. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  602. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  603. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  604. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +4 -0
  605. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  606. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  607. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  608. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  609. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  610. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  611. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  612. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  613. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  614. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  615. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  616. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  617. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +7 -0
  618. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  619. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  620. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  621. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  622. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  623. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  624. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  625. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +52 -65
  626. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +52 -66
  627. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  628. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  629. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  630. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  631. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  632. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  633. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -4
  634. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +0 -13
  635. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  636. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +26 -24
  637. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +10 -7
  638. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  639. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  640. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +61 -75
  641. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +80 -103
  642. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +40 -49
  643. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +367 -315
  644. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  645. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  646. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  647. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +5 -3
  648. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  649. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  650. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  651. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  652. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  653. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +120 -11
  654. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  655. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +3 -0
  656. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  657. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  658. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  659. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  660. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  661. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +14 -15
  662. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +53 -73
  663. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +31 -0
  664. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  665. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  666. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -0
  667. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  668. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  669. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  670. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  671. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  672. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  673. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  674. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +7 -0
  675. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  676. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  677. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  678. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -8
  679. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  680. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  681. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  682. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +47 -7
  683. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -0
  684. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  685. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  686. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  687. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -2
  688. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  689. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -0
  690. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  691. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +20 -49
  692. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  693. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +325 -0
  694. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  695. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +25 -7
  696. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  697. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  698. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +99 -63
  699. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +283 -85
  700. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +13 -19
  701. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +445 -152
  702. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +451 -435
  703. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -1
  704. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +7 -2
  705. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  706. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1133 -0
  707. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  708. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +66 -30
  709. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +189 -86
  710. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +154 -24
  711. data/third_party/boringssl-with-bazel/src/ssl/internal.h +414 -135
  712. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  713. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  714. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  715. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  716. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  717. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +51 -60
  718. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  719. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +8 -31
  720. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  721. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +4 -3
  722. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
  723. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +664 -702
  724. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +65 -7
  725. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +98 -39
  726. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +141 -94
  727. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +213 -118
  728. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  729. data/third_party/xxhash/xxhash.h +77 -195
  730. metadata +116 -51
  731. data/src/core/lib/gpr/arena.h +0 -47
  732. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  733. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  734. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  735. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  736. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  737. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  738. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
@@ -33,6 +33,7 @@
33
33
 
34
34
  #include <netinet/in.h>
35
35
 
36
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
36
37
  #include "src/core/lib/channel/channel_args.h"
37
38
  #include "src/core/lib/gprpp/host_port.h"
38
39
  #include "src/core/lib/iomgr/cfstream_handle.h"
@@ -40,7 +41,6 @@
40
41
  #include "src/core/lib/iomgr/endpoint_cfstream.h"
41
42
  #include "src/core/lib/iomgr/error.h"
42
43
  #include "src/core/lib/iomgr/error_cfstream.h"
43
- #include "src/core/lib/iomgr/sockaddr_utils.h"
44
44
  #include "src/core/lib/iomgr/tcp_client.h"
45
45
  #include "src/core/lib/iomgr/timer.h"
46
46
 
@@ -78,7 +78,7 @@ static void CFStreamConnectCleanup(CFStreamConnect* connect) {
78
78
  delete connect;
79
79
  }
80
80
 
81
- static void OnAlarm(void* arg, grpc_error* error) {
81
+ static void OnAlarm(void* arg, grpc_error_handle error) {
82
82
  CFStreamConnect* connect = static_cast<CFStreamConnect*>(arg);
83
83
  if (grpc_tcp_trace.enabled()) {
84
84
  gpr_log(GPR_DEBUG, "CLIENT_CONNECT :%p OnAlarm, error:%p", connect, error);
@@ -93,13 +93,13 @@ static void OnAlarm(void* arg, grpc_error* error) {
93
93
  if (done) {
94
94
  CFStreamConnectCleanup(connect);
95
95
  } else {
96
- grpc_error* error =
96
+ grpc_error_handle error =
97
97
  GRPC_ERROR_CREATE_FROM_STATIC_STRING("connect() timed out");
98
98
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
99
99
  }
100
100
  }
101
101
 
102
- static void OnOpen(void* arg, grpc_error* error) {
102
+ static void OnOpen(void* arg, grpc_error_handle error) {
103
103
  CFStreamConnect* connect = static_cast<CFStreamConnect*>(arg);
104
104
  if (grpc_tcp_trace.enabled()) {
105
105
  gpr_log(GPR_DEBUG, "CLIENT_CONNECT :%p OnOpen, error:%p", connect, error);
@@ -25,9 +25,9 @@
25
25
  #include <grpc/support/alloc.h>
26
26
  #include <grpc/support/log.h>
27
27
 
28
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
28
29
  #include "src/core/lib/iomgr/error.h"
29
30
  #include "src/core/lib/iomgr/iomgr_custom.h"
30
- #include "src/core/lib/iomgr/sockaddr_utils.h"
31
31
  #include "src/core/lib/iomgr/tcp_client.h"
32
32
  #include "src/core/lib/iomgr/tcp_custom.h"
33
33
  #include "src/core/lib/iomgr/timer.h"
@@ -59,14 +59,13 @@ static void custom_tcp_connect_cleanup(grpc_custom_tcp_connect* connect) {
59
59
 
60
60
  static void custom_close_callback(grpc_custom_socket* /*socket*/) {}
61
61
 
62
- static void on_alarm(void* acp, grpc_error* error) {
62
+ static void on_alarm(void* acp, grpc_error_handle error) {
63
63
  int done;
64
64
  grpc_custom_socket* socket = static_cast<grpc_custom_socket*>(acp);
65
65
  grpc_custom_tcp_connect* connect = socket->connector;
66
66
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
67
- const char* str = grpc_error_string(error);
68
67
  gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_alarm: error=%s",
69
- connect->addr_name.c_str(), str);
68
+ connect->addr_name.c_str(), grpc_error_std_string(error).c_str());
70
69
  }
71
70
  if (error == GRPC_ERROR_NONE) {
72
71
  /* error == NONE implies that the timer ran out, and wasn't cancelled. If
@@ -81,7 +80,7 @@ static void on_alarm(void* acp, grpc_error* error) {
81
80
  }
82
81
 
83
82
  static void custom_connect_callback_internal(grpc_custom_socket* socket,
84
- grpc_error* error) {
83
+ grpc_error_handle error) {
85
84
  grpc_custom_tcp_connect* connect = socket->connector;
86
85
  int done;
87
86
  grpc_closure* closure = connect->closure;
@@ -99,7 +98,7 @@ static void custom_connect_callback_internal(grpc_custom_socket* socket,
99
98
  }
100
99
 
101
100
  static void custom_connect_callback(grpc_custom_socket* socket,
102
- grpc_error* error) {
101
+ grpc_error_handle error) {
103
102
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
104
103
  if (grpc_core::ExecCtx::Get() == nullptr) {
105
104
  /* If we are being run on a thread which does not have an exec_ctx created
@@ -35,12 +35,13 @@
35
35
  #include <grpc/support/log.h>
36
36
  #include <grpc/support/time.h>
37
37
 
38
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
38
39
  #include "src/core/lib/channel/channel_args.h"
39
40
  #include "src/core/lib/gpr/string.h"
40
41
  #include "src/core/lib/iomgr/ev_posix.h"
42
+ #include "src/core/lib/iomgr/executor.h"
41
43
  #include "src/core/lib/iomgr/iomgr_internal.h"
42
44
  #include "src/core/lib/iomgr/sockaddr.h"
43
- #include "src/core/lib/iomgr/sockaddr_utils.h"
44
45
  #include "src/core/lib/iomgr/socket_mutator.h"
45
46
  #include "src/core/lib/iomgr/socket_utils_posix.h"
46
47
  #include "src/core/lib/iomgr/tcp_posix.h"
@@ -64,9 +65,10 @@ struct async_connect {
64
65
  grpc_channel_args* channel_args;
65
66
  };
66
67
 
67
- static grpc_error* prepare_socket(const grpc_resolved_address* addr, int fd,
68
- const grpc_channel_args* channel_args) {
69
- grpc_error* err = GRPC_ERROR_NONE;
68
+ static grpc_error_handle prepare_socket(const grpc_resolved_address* addr,
69
+ int fd,
70
+ const grpc_channel_args* channel_args) {
71
+ grpc_error_handle err = GRPC_ERROR_NONE;
70
72
 
71
73
  GPR_ASSERT(fd >= 0);
72
74
 
@@ -86,7 +88,8 @@ static grpc_error* prepare_socket(const grpc_resolved_address* addr, int fd,
86
88
  err = grpc_set_socket_no_sigpipe_if_possible(fd);
87
89
  if (err != GRPC_ERROR_NONE) goto error;
88
90
 
89
- err = grpc_apply_socket_mutator_in_args(fd, channel_args);
91
+ err = grpc_apply_socket_mutator_in_args(fd, GRPC_FD_CLIENT_CONNECTION_USAGE,
92
+ channel_args);
90
93
  if (err != GRPC_ERROR_NONE) goto error;
91
94
 
92
95
  goto done;
@@ -99,13 +102,12 @@ done:
99
102
  return err;
100
103
  }
101
104
 
102
- static void tc_on_alarm(void* acp, grpc_error* error) {
105
+ static void tc_on_alarm(void* acp, grpc_error_handle error) {
103
106
  int done;
104
107
  async_connect* ac = static_cast<async_connect*>(acp);
105
108
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
106
- const char* str = grpc_error_string(error);
107
109
  gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_alarm: error=%s",
108
- ac->addr_str.c_str(), str);
110
+ ac->addr_str.c_str(), grpc_error_std_string(error).c_str());
109
111
  }
110
112
  gpr_mu_lock(&ac->mu);
111
113
  if (ac->fd != nullptr) {
@@ -126,7 +128,7 @@ grpc_endpoint* grpc_tcp_client_create_from_fd(
126
128
  return grpc_tcp_create(fd, channel_args, addr_str);
127
129
  }
128
130
 
129
- static void on_writable(void* acp, grpc_error* error) {
131
+ static void on_writable(void* acp, grpc_error_handle error) {
130
132
  async_connect* ac = static_cast<async_connect*>(acp);
131
133
  int so_error = 0;
132
134
  socklen_t so_error_size;
@@ -139,9 +141,8 @@ static void on_writable(void* acp, grpc_error* error) {
139
141
  GRPC_ERROR_REF(error);
140
142
 
141
143
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
142
- const char* str = grpc_error_string(error);
143
144
  gpr_log(GPR_INFO, "CLIENT_CONNECT: %s: on_writable: error=%s",
144
- ac->addr_str.c_str(), str);
145
+ ac->addr_str.c_str(), grpc_error_std_string(error).c_str());
145
146
  }
146
147
 
147
148
  gpr_mu_lock(&ac->mu);
@@ -239,15 +240,17 @@ finish:
239
240
  grpc_channel_args_destroy(ac->channel_args);
240
241
  delete ac;
241
242
  }
242
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, error);
243
+ // Push async connect closure to the executor since this may actually be
244
+ // called during the shutdown process, in which case a deadlock could form
245
+ // between the core shutdown mu and the connector mu (b/188239051)
246
+ grpc_core::Executor::Run(closure, error);
243
247
  }
244
248
 
245
- grpc_error* grpc_tcp_client_prepare_fd(const grpc_channel_args* channel_args,
246
- const grpc_resolved_address* addr,
247
- grpc_resolved_address* mapped_addr,
248
- int* fd) {
249
+ grpc_error_handle grpc_tcp_client_prepare_fd(
250
+ const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
251
+ grpc_resolved_address* mapped_addr, int* fd) {
249
252
  grpc_dualstack_mode dsmode;
250
- grpc_error* error;
253
+ grpc_error_handle error;
251
254
  *fd = -1;
252
255
  /* Use dualstack sockets where available. Set mapped to v6 or v4 mapped to
253
256
  v6. */
@@ -293,7 +296,7 @@ void grpc_tcp_client_create_from_prepared_fd(
293
296
  return;
294
297
  }
295
298
  if (errno != EWOULDBLOCK && errno != EINPROGRESS) {
296
- grpc_error* error = GRPC_OS_ERROR(errno, "connect");
299
+ grpc_error_handle error = GRPC_OS_ERROR(errno, "connect");
297
300
  error = grpc_error_set_str(
298
301
  error, GRPC_ERROR_STR_TARGET_ADDRESS,
299
302
  grpc_slice_from_cpp_string(grpc_sockaddr_to_uri(addr)));
@@ -335,7 +338,7 @@ static void tcp_connect(grpc_closure* closure, grpc_endpoint** ep,
335
338
  grpc_millis deadline) {
336
339
  grpc_resolved_address mapped_addr;
337
340
  int fd = -1;
338
- grpc_error* error;
341
+ grpc_error_handle error;
339
342
  *ep = nullptr;
340
343
  if ((error = grpc_tcp_client_prepare_fd(channel_args, addr, &mapped_addr,
341
344
  &fd)) != GRPC_ERROR_NONE) {
@@ -45,10 +45,9 @@ grpc_endpoint* grpc_tcp_client_create_from_fd(
45
45
  fd: out parameter. The new FD
46
46
  Returns: error, if any. Out parameters are not set on error
47
47
  */
48
- grpc_error* grpc_tcp_client_prepare_fd(const grpc_channel_args* channel_args,
49
- const grpc_resolved_address* addr,
50
- grpc_resolved_address* mapped_addr,
51
- int* fd);
48
+ grpc_error_handle grpc_tcp_client_prepare_fd(
49
+ const grpc_channel_args* channel_args, const grpc_resolved_address* addr,
50
+ grpc_resolved_address* mapped_addr, int* fd);
52
51
 
53
52
  /* Connect a configured TCP client fd.
54
53
 
@@ -31,10 +31,10 @@
31
31
  #include <grpc/support/log.h>
32
32
  #include <grpc/support/log_windows.h>
33
33
 
34
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
34
35
  #include "src/core/lib/channel/channel_args.h"
35
36
  #include "src/core/lib/iomgr/iocp_windows.h"
36
37
  #include "src/core/lib/iomgr/sockaddr.h"
37
- #include "src/core/lib/iomgr/sockaddr_utils.h"
38
38
  #include "src/core/lib/iomgr/socket_windows.h"
39
39
  #include "src/core/lib/iomgr/tcp_client.h"
40
40
  #include "src/core/lib/iomgr/tcp_windows.h"
@@ -66,7 +66,7 @@ static void async_connect_unlock_and_cleanup(async_connect* ac,
66
66
  if (socket != NULL) grpc_winsocket_destroy(socket);
67
67
  }
68
68
 
69
- static void on_alarm(void* acp, grpc_error* error) {
69
+ static void on_alarm(void* acp, grpc_error_handle error) {
70
70
  async_connect* ac = (async_connect*)acp;
71
71
  gpr_mu_lock(&ac->mu);
72
72
  grpc_winsocket* socket = ac->socket;
@@ -77,7 +77,7 @@ static void on_alarm(void* acp, grpc_error* error) {
77
77
  async_connect_unlock_and_cleanup(ac, socket);
78
78
  }
79
79
 
80
- static void on_connect(void* acp, grpc_error* error) {
80
+ static void on_connect(void* acp, grpc_error_handle error) {
81
81
  async_connect* ac = (async_connect*)acp;
82
82
  grpc_endpoint** ep = ac->endpoint;
83
83
  GPR_ASSERT(*ep == NULL);
@@ -137,7 +137,7 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
137
137
  GUID guid = WSAID_CONNECTEX;
138
138
  DWORD ioctl_num_bytes;
139
139
  grpc_winsocket_callback_info* info;
140
- grpc_error* error = GRPC_ERROR_NONE;
140
+ grpc_error_handle error = GRPC_ERROR_NONE;
141
141
  async_connect* ac = NULL;
142
142
 
143
143
  *endpoint = NULL;
@@ -206,14 +206,16 @@ static void tcp_connect(grpc_closure* on_done, grpc_endpoint** endpoint,
206
206
  GRPC_CLOSURE_INIT(&ac->on_connect, on_connect, ac, grpc_schedule_on_exec_ctx);
207
207
 
208
208
  GRPC_CLOSURE_INIT(&ac->on_alarm, on_alarm, ac, grpc_schedule_on_exec_ctx);
209
+ gpr_mu_lock(&ac->mu);
209
210
  grpc_timer_init(&ac->alarm, deadline, &ac->on_alarm);
210
211
  grpc_socket_notify_on_write(socket, &ac->on_connect);
212
+ gpr_mu_unlock(&ac->mu);
211
213
  return;
212
214
 
213
215
  failure:
214
216
  GPR_ASSERT(error != GRPC_ERROR_NONE);
215
217
  std::string target_uri = grpc_sockaddr_to_uri(addr);
216
- grpc_error* final_error =
218
+ grpc_error_handle final_error =
217
219
  grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
218
220
  "Failed to connect", &error, 1),
219
221
  GRPC_ERROR_STR_TARGET_ADDRESS,
@@ -29,10 +29,10 @@
29
29
  #include <grpc/support/log.h>
30
30
  #include <grpc/support/string_util.h>
31
31
 
32
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
32
33
  #include "src/core/lib/iomgr/error.h"
33
34
  #include "src/core/lib/iomgr/iomgr_custom.h"
34
35
  #include "src/core/lib/iomgr/resource_quota.h"
35
- #include "src/core/lib/iomgr/sockaddr_utils.h"
36
36
  #include "src/core/lib/iomgr/tcp_client.h"
37
37
  #include "src/core/lib/iomgr/tcp_custom.h"
38
38
  #include "src/core/lib/iomgr/tcp_server.h"
@@ -122,15 +122,13 @@ static void tcp_unref(custom_tcp_endpoint* tcp) {
122
122
  static void tcp_ref(custom_tcp_endpoint* tcp) { gpr_ref(&tcp->refcount); }
123
123
  #endif
124
124
 
125
- static void call_read_cb(custom_tcp_endpoint* tcp, grpc_error* error) {
125
+ static void call_read_cb(custom_tcp_endpoint* tcp, grpc_error_handle error) {
126
126
  grpc_closure* cb = tcp->read_cb;
127
127
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
128
128
  gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp->socket, cb, cb->cb,
129
129
  cb->cb_arg);
130
130
  size_t i;
131
- const char* str = grpc_error_string(error);
132
- gpr_log(GPR_INFO, "read: error=%s", str);
133
-
131
+ gpr_log(GPR_INFO, "read: error=%s", grpc_error_std_string(error).c_str());
134
132
  for (i = 0; i < tcp->read_slices->count; i++) {
135
133
  char* dump = grpc_dump_slice(tcp->read_slices->slices[i],
136
134
  GPR_DUMP_HEX | GPR_DUMP_ASCII);
@@ -146,7 +144,7 @@ static void call_read_cb(custom_tcp_endpoint* tcp, grpc_error* error) {
146
144
  }
147
145
 
148
146
  static void custom_read_callback(grpc_custom_socket* socket, size_t nread,
149
- grpc_error* error) {
147
+ grpc_error_handle error) {
150
148
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
151
149
  grpc_core::ExecCtx exec_ctx;
152
150
  grpc_slice_buffer garbage;
@@ -171,11 +169,11 @@ static void custom_read_callback(grpc_custom_socket* socket, size_t nread,
171
169
  call_read_cb(tcp, error);
172
170
  }
173
171
 
174
- static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
172
+ static void tcp_read_allocation_done(void* tcpp, grpc_error_handle error) {
175
173
  custom_tcp_endpoint* tcp = static_cast<custom_tcp_endpoint*>(tcpp);
176
174
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
177
175
  gpr_log(GPR_INFO, "TCP:%p read_allocation_done: %s", tcp->socket,
178
- grpc_error_string(error));
176
+ grpc_error_std_string(error).c_str());
179
177
  }
180
178
  if (error == GRPC_ERROR_NONE) {
181
179
  /* Before calling read, we allocate a buffer with exactly one slice
@@ -191,8 +189,8 @@ static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
191
189
  call_read_cb(tcp, GRPC_ERROR_REF(error));
192
190
  }
193
191
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
194
- const char* str = grpc_error_string(error);
195
- gpr_log(GPR_INFO, "Initiating read on %p: error=%s", tcp->socket, str);
192
+ gpr_log(GPR_INFO, "Initiating read on %p: error=%s", tcp->socket,
193
+ grpc_error_std_string(error).c_str());
196
194
  }
197
195
  }
198
196
 
@@ -213,7 +211,7 @@ static void endpoint_read(grpc_endpoint* ep, grpc_slice_buffer* read_slices,
213
211
  }
214
212
 
215
213
  static void custom_write_callback(grpc_custom_socket* socket,
216
- grpc_error* error) {
214
+ grpc_error_handle error) {
217
215
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
218
216
  grpc_core::ExecCtx exec_ctx;
219
217
  custom_tcp_endpoint* tcp =
@@ -221,8 +219,8 @@ static void custom_write_callback(grpc_custom_socket* socket,
221
219
  grpc_closure* cb = tcp->write_cb;
222
220
  tcp->write_cb = nullptr;
223
221
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
224
- const char* str = grpc_error_string(error);
225
- gpr_log(GPR_INFO, "write complete on %p: error=%s", tcp->socket, str);
222
+ gpr_log(GPR_INFO, "write complete on %p: error=%s", tcp->socket,
223
+ grpc_error_std_string(error).c_str());
226
224
  }
227
225
  TCP_UNREF(tcp, "write");
228
226
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, cb, error);
@@ -287,12 +285,12 @@ static void endpoint_delete_from_pollset_set(grpc_endpoint* ep,
287
285
  (void)pollset;
288
286
  }
289
287
 
290
- static void endpoint_shutdown(grpc_endpoint* ep, grpc_error* why) {
288
+ static void endpoint_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
291
289
  custom_tcp_endpoint* tcp = reinterpret_cast<custom_tcp_endpoint*>(ep);
292
290
  if (!tcp->shutting_down) {
293
291
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
294
- const char* str = grpc_error_string(why);
295
- gpr_log(GPR_INFO, "TCP %p shutdown why=%s", tcp->socket, str);
292
+ gpr_log(GPR_INFO, "TCP %p shutdown why=%s", tcp->socket,
293
+ grpc_error_std_string(why).c_str());
296
294
  }
297
295
  tcp->shutting_down = true;
298
296
  // grpc_core::ExecCtx::Run(DEBUG_LOCATION,tcp->read_cb,
@@ -40,18 +40,19 @@ typedef struct grpc_custom_socket {
40
40
  } grpc_custom_socket;
41
41
 
42
42
  typedef void (*grpc_custom_connect_callback)(grpc_custom_socket* socket,
43
- grpc_error* error);
43
+ grpc_error_handle error);
44
44
  typedef void (*grpc_custom_write_callback)(grpc_custom_socket* socket,
45
- grpc_error* error);
45
+ grpc_error_handle error);
46
46
  typedef void (*grpc_custom_read_callback)(grpc_custom_socket* socket,
47
- size_t nread, grpc_error* error);
47
+ size_t nread,
48
+ grpc_error_handle error);
48
49
  typedef void (*grpc_custom_accept_callback)(grpc_custom_socket* socket,
49
50
  grpc_custom_socket* client,
50
- grpc_error* error);
51
+ grpc_error_handle error);
51
52
  typedef void (*grpc_custom_close_callback)(grpc_custom_socket* socket);
52
53
 
53
54
  typedef struct grpc_socket_vtable {
54
- grpc_error* (*init)(grpc_custom_socket* socket, int domain);
55
+ grpc_error_handle (*init)(grpc_custom_socket* socket, int domain);
55
56
  void (*connect)(grpc_custom_socket* socket, const grpc_sockaddr* addr,
56
57
  size_t len, grpc_custom_connect_callback cb);
57
58
  void (*destroy)(grpc_custom_socket* socket);
@@ -61,13 +62,13 @@ typedef struct grpc_socket_vtable {
61
62
  grpc_custom_write_callback cb);
62
63
  void (*read)(grpc_custom_socket* socket, char* buffer, size_t length,
63
64
  grpc_custom_read_callback cb);
64
- grpc_error* (*getpeername)(grpc_custom_socket* socket,
65
- const grpc_sockaddr* addr, int* len);
66
- grpc_error* (*getsockname)(grpc_custom_socket* socket,
67
- const grpc_sockaddr* addr, int* len);
68
- grpc_error* (*bind)(grpc_custom_socket* socket, const grpc_sockaddr* addr,
69
- size_t len, int flags);
70
- grpc_error* (*listen)(grpc_custom_socket* socket);
65
+ grpc_error_handle (*getpeername)(grpc_custom_socket* socket,
66
+ const grpc_sockaddr* addr, int* len);
67
+ grpc_error_handle (*getsockname)(grpc_custom_socket* socket,
68
+ const grpc_sockaddr* addr, int* len);
69
+ grpc_error_handle (*bind)(grpc_custom_socket* socket,
70
+ const grpc_sockaddr* addr, size_t len, int flags);
71
+ grpc_error_handle (*listen)(grpc_custom_socket* socket);
71
72
  void (*accept)(grpc_custom_socket* socket, grpc_custom_socket* client,
72
73
  grpc_custom_accept_callback cb);
73
74
  } grpc_socket_vtable;
@@ -45,6 +45,7 @@
45
45
  #include <grpc/support/sync.h>
46
46
  #include <grpc/support/time.h>
47
47
 
48
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
48
49
  #include "src/core/lib/channel/channel_args.h"
49
50
  #include "src/core/lib/debug/stats.h"
50
51
  #include "src/core/lib/debug/trace.h"
@@ -54,7 +55,6 @@
54
55
  #include "src/core/lib/iomgr/buffer_list.h"
55
56
  #include "src/core/lib/iomgr/ev_posix.h"
56
57
  #include "src/core/lib/iomgr/executor.h"
57
- #include "src/core/lib/iomgr/sockaddr_utils.h"
58
58
  #include "src/core/lib/iomgr/socket_utils_posix.h"
59
59
  #include "src/core/lib/profiling/timers.h"
60
60
  #include "src/core/lib/slice/slice_internal.h"
@@ -432,15 +432,17 @@ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp);
432
432
 
433
433
  #define BACKUP_POLLER_POLLSET(b) ((grpc_pollset*)((b) + 1))
434
434
 
435
- static gpr_atm g_uncovered_notifications_pending;
436
- static gpr_atm g_backup_poller; /* backup_poller* */
435
+ static grpc_core::Mutex* g_backup_poller_mu = nullptr;
436
+ static int g_uncovered_notifications_pending
437
+ ABSL_GUARDED_BY(g_backup_poller_mu);
438
+ static backup_poller* g_backup_poller ABSL_GUARDED_BY(g_backup_poller_mu);
437
439
 
438
- static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error);
439
- static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
440
+ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error);
441
+ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error_handle error);
440
442
  static void tcp_drop_uncovered_then_handle_write(void* arg /* grpc_tcp */,
441
- grpc_error* error);
443
+ grpc_error_handle error);
442
444
 
443
- static void done_poller(void* bp, grpc_error* /*error_ignored*/) {
445
+ static void done_poller(void* bp, grpc_error_handle /*error_ignored*/) {
444
446
  backup_poller* p = static_cast<backup_poller*>(bp);
445
447
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
446
448
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p destroy", p);
@@ -449,7 +451,7 @@ static void done_poller(void* bp, grpc_error* /*error_ignored*/) {
449
451
  gpr_free(p);
450
452
  }
451
453
 
452
- static void run_poller(void* bp, grpc_error* /*error_ignored*/) {
454
+ static void run_poller(void* bp, grpc_error_handle /*error_ignored*/) {
453
455
  backup_poller* p = static_cast<backup_poller*>(bp);
454
456
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
455
457
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p run", p);
@@ -461,17 +463,13 @@ static void run_poller(void* bp, grpc_error* /*error_ignored*/) {
461
463
  "backup_poller:pollset_work",
462
464
  grpc_pollset_work(BACKUP_POLLER_POLLSET(p), nullptr, deadline));
463
465
  gpr_mu_unlock(p->pollset_mu);
464
- /* last "uncovered" notification is the ref that keeps us polling, if we get
465
- * there try a cas to release it */
466
- if (gpr_atm_no_barrier_load(&g_uncovered_notifications_pending) == 1 &&
467
- gpr_atm_full_cas(&g_uncovered_notifications_pending, 1, 0)) {
468
- gpr_mu_lock(p->pollset_mu);
469
- bool cas_ok =
470
- gpr_atm_full_cas(&g_backup_poller, reinterpret_cast<gpr_atm>(p), 0);
471
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
472
- gpr_log(GPR_INFO, "BACKUP_POLLER:%p done cas_ok=%d", p, cas_ok);
473
- }
474
- gpr_mu_unlock(p->pollset_mu);
466
+ g_backup_poller_mu->Lock();
467
+ /* last "uncovered" notification is the ref that keeps us polling */
468
+ if (g_uncovered_notifications_pending == 1) {
469
+ GPR_ASSERT(g_backup_poller == p);
470
+ g_backup_poller = nullptr;
471
+ g_uncovered_notifications_pending = 0;
472
+ g_backup_poller_mu->Unlock();
475
473
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
476
474
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p shutdown", p);
477
475
  }
@@ -479,6 +477,7 @@ static void run_poller(void* bp, grpc_error* /*error_ignored*/) {
479
477
  GRPC_CLOSURE_INIT(&p->run_poller, done_poller, p,
480
478
  grpc_schedule_on_exec_ctx));
481
479
  } else {
480
+ g_backup_poller_mu->Unlock();
482
481
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
483
482
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p reschedule", p);
484
483
  }
@@ -489,15 +488,17 @@ static void run_poller(void* bp, grpc_error* /*error_ignored*/) {
489
488
  }
490
489
 
491
490
  static void drop_uncovered(grpc_tcp* /*tcp*/) {
492
- backup_poller* p =
493
- reinterpret_cast<backup_poller*>(gpr_atm_acq_load(&g_backup_poller));
494
- gpr_atm old_count =
495
- gpr_atm_full_fetch_add(&g_uncovered_notifications_pending, -1);
491
+ int old_count;
492
+ backup_poller* p;
493
+ g_backup_poller_mu->Lock();
494
+ p = g_backup_poller;
495
+ old_count = g_uncovered_notifications_pending--;
496
+ g_backup_poller_mu->Unlock();
497
+ GPR_ASSERT(old_count > 1);
496
498
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
497
- gpr_log(GPR_INFO, "BACKUP_POLLER:%p uncover cnt %d->%d", p,
498
- static_cast<int>(old_count), static_cast<int>(old_count) - 1);
499
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p uncover cnt %d->%d", p, old_count,
500
+ old_count - 1);
499
501
  }
500
- GPR_ASSERT(old_count != 1);
501
502
  }
502
503
 
503
504
  // gRPC API considers a Write operation to be done the moment it clears ‘flow
@@ -509,38 +510,33 @@ static void drop_uncovered(grpc_tcp* /*tcp*/) {
509
510
  // polling thread and progress is made) and hence add it to a backup poller here
510
511
  static void cover_self(grpc_tcp* tcp) {
511
512
  backup_poller* p;
512
- gpr_atm old_count =
513
- gpr_atm_no_barrier_fetch_add(&g_uncovered_notifications_pending, 2);
514
- if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
515
- gpr_log(GPR_INFO, "BACKUP_POLLER: cover cnt %d->%d",
516
- static_cast<int>(old_count), 2 + static_cast<int>(old_count));
517
- }
518
- if (old_count == 0) {
519
- GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED();
513
+ g_backup_poller_mu->Lock();
514
+ int old_count = 0;
515
+ if (g_uncovered_notifications_pending == 0) {
516
+ g_uncovered_notifications_pending = 2;
520
517
  p = static_cast<backup_poller*>(
521
518
  gpr_zalloc(sizeof(*p) + grpc_pollset_size()));
519
+ g_backup_poller = p;
520
+ grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
521
+ g_backup_poller_mu->Unlock();
522
+ GRPC_STATS_INC_TCP_BACKUP_POLLERS_CREATED();
522
523
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
523
524
  gpr_log(GPR_INFO, "BACKUP_POLLER:%p create", p);
524
525
  }
525
- grpc_pollset_init(BACKUP_POLLER_POLLSET(p), &p->pollset_mu);
526
- gpr_atm_rel_store(&g_backup_poller, (gpr_atm)p);
527
526
  grpc_core::Executor::Run(
528
527
  GRPC_CLOSURE_INIT(&p->run_poller, run_poller, p, nullptr),
529
528
  GRPC_ERROR_NONE, grpc_core::ExecutorType::DEFAULT,
530
529
  grpc_core::ExecutorJobType::LONG);
531
530
  } else {
532
- while ((p = reinterpret_cast<backup_poller*>(
533
- gpr_atm_acq_load(&g_backup_poller))) == nullptr) {
534
- // spin waiting for backup poller
535
- }
531
+ old_count = g_uncovered_notifications_pending++;
532
+ p = g_backup_poller;
533
+ g_backup_poller_mu->Unlock();
536
534
  }
537
535
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
538
- gpr_log(GPR_INFO, "BACKUP_POLLER:%p add %p", p, tcp);
536
+ gpr_log(GPR_INFO, "BACKUP_POLLER:%p add %p cnt %d->%d", p, tcp,
537
+ old_count - 1, old_count);
539
538
  }
540
539
  grpc_pollset_add_fd(BACKUP_POLLER_POLLSET(p), tcp->em_fd);
541
- if (old_count != 0) {
542
- drop_uncovered(tcp);
543
- }
544
540
  }
545
541
 
546
542
  static void notify_on_read(grpc_tcp* tcp) {
@@ -560,9 +556,11 @@ static void notify_on_write(grpc_tcp* tcp) {
560
556
  grpc_fd_notify_on_write(tcp->em_fd, &tcp->write_done_closure);
561
557
  }
562
558
 
563
- static void tcp_drop_uncovered_then_handle_write(void* arg, grpc_error* error) {
559
+ static void tcp_drop_uncovered_then_handle_write(void* arg,
560
+ grpc_error_handle error) {
564
561
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
565
- gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg, grpc_error_string(error));
562
+ gpr_log(GPR_INFO, "TCP:%p got_write: %s", arg,
563
+ grpc_error_std_string(error).c_str());
566
564
  }
567
565
  drop_uncovered(static_cast<grpc_tcp*>(arg));
568
566
  tcp_handle_write(arg, error);
@@ -604,7 +602,8 @@ static size_t get_target_read_size(grpc_tcp* tcp) {
604
602
  return sz;
605
603
  }
606
604
 
607
- static grpc_error* tcp_annotate_error(grpc_error* src_error, grpc_tcp* tcp) {
605
+ static grpc_error_handle tcp_annotate_error(grpc_error_handle src_error,
606
+ grpc_tcp* tcp) {
608
607
  return grpc_error_set_str(
609
608
  grpc_error_set_int(
610
609
  grpc_error_set_int(src_error, GRPC_ERROR_INT_FD, tcp->fd),
@@ -615,10 +614,10 @@ static grpc_error* tcp_annotate_error(grpc_error* src_error, grpc_tcp* tcp) {
615
614
  grpc_slice_from_copied_string(tcp->peer_string.c_str()));
616
615
  }
617
616
 
618
- static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error);
619
- static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error);
617
+ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error);
618
+ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error_handle error);
620
619
 
621
- static void tcp_shutdown(grpc_endpoint* ep, grpc_error* why) {
620
+ static void tcp_shutdown(grpc_endpoint* ep, grpc_error_handle why) {
622
621
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
623
622
  ZerocopyDisableAndWaitForRemaining(tcp);
624
623
  grpc_fd_shutdown(tcp->em_fd, why);
@@ -678,16 +677,14 @@ static void tcp_destroy(grpc_endpoint* ep) {
678
677
  TCP_UNREF(tcp, "destroy");
679
678
  }
680
679
 
681
- static void call_read_cb(grpc_tcp* tcp, grpc_error* error) {
680
+ static void call_read_cb(grpc_tcp* tcp, grpc_error_handle error) {
682
681
  grpc_closure* cb = tcp->read_cb;
683
682
 
684
683
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
685
684
  gpr_log(GPR_INFO, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
686
685
  size_t i;
687
- const char* str = grpc_error_string(error);
688
686
  gpr_log(GPR_INFO, "READ %p (peer=%s) error=%s", tcp,
689
- tcp->peer_string.c_str(), str);
690
-
687
+ tcp->peer_string.c_str(), grpc_error_std_string(error).c_str());
691
688
  if (gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
692
689
  for (i = 0; i < tcp->incoming_buffer->count; i++) {
693
690
  char* dump = grpc_dump_slice(tcp->incoming_buffer->slices[i],
@@ -850,11 +847,11 @@ static void tcp_do_read(grpc_tcp* tcp) {
850
847
  TCP_UNREF(tcp, "read");
851
848
  }
852
849
 
853
- static void tcp_read_allocation_done(void* tcpp, grpc_error* error) {
850
+ static void tcp_read_allocation_done(void* tcpp, grpc_error_handle error) {
854
851
  grpc_tcp* tcp = static_cast<grpc_tcp*>(tcpp);
855
852
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
856
853
  gpr_log(GPR_INFO, "TCP:%p read_allocation_done: %s", tcp,
857
- grpc_error_string(error));
854
+ grpc_error_std_string(error).c_str());
858
855
  }
859
856
  if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
860
857
  grpc_slice_buffer_reset_and_unref_internal(tcp->incoming_buffer);
@@ -887,10 +884,11 @@ static void tcp_continue_read(grpc_tcp* tcp) {
887
884
  tcp_do_read(tcp);
888
885
  }
889
886
 
890
- static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error* error) {
887
+ static void tcp_handle_read(void* arg /* grpc_tcp */, grpc_error_handle error) {
891
888
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
892
889
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
893
- gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp, grpc_error_string(error));
890
+ gpr_log(GPR_INFO, "TCP:%p got_read: %s", tcp,
891
+ grpc_error_std_string(error).c_str());
894
892
  }
895
893
 
896
894
  if (GPR_UNLIKELY(error != GRPC_ERROR_NONE)) {
@@ -958,7 +956,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* tcp, struct msghdr* msg,
958
956
  int additional_flags = 0);
959
957
 
960
958
  /** The callback function to be invoked when we get an error on the socket. */
961
- static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error);
959
+ static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error_handle error);
962
960
 
963
961
  static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
964
962
  grpc_tcp* tcp, grpc_slice_buffer* buf);
@@ -1162,9 +1160,9 @@ static bool process_errors(grpc_tcp* tcp) {
1162
1160
  struct cmsghdr align;
1163
1161
  } aligned_buf;
1164
1162
  msg.msg_control = aligned_buf.rbuf;
1165
- msg.msg_controllen = sizeof(aligned_buf.rbuf);
1166
1163
  int r, saved_errno;
1167
1164
  while (true) {
1165
+ msg.msg_controllen = sizeof(aligned_buf.rbuf);
1168
1166
  do {
1169
1167
  r = recvmsg(tcp->fd, &msg, MSG_ERRQUEUE);
1170
1168
  saved_errno = errno;
@@ -1213,10 +1211,12 @@ static bool process_errors(grpc_tcp* tcp) {
1213
1211
  }
1214
1212
  }
1215
1213
 
1216
- static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
1214
+ static void tcp_handle_error(void* arg /* grpc_tcp */,
1215
+ grpc_error_handle error) {
1217
1216
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1218
1217
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1219
- gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp, grpc_error_string(error));
1218
+ gpr_log(GPR_INFO, "TCP:%p got_error: %s", tcp,
1219
+ grpc_error_std_string(error).c_str());
1220
1220
  }
1221
1221
 
1222
1222
  if (error != GRPC_ERROR_NONE ||
@@ -1257,7 +1257,7 @@ static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
1257
1257
  }
1258
1258
 
1259
1259
  static void tcp_handle_error(void* /*arg*/ /* grpc_tcp */,
1260
- grpc_error* /*error*/) {
1260
+ grpc_error_handle /*error*/) {
1261
1261
  gpr_log(GPR_ERROR, "Error handling is not supported for this platform");
1262
1262
  GPR_ASSERT(0);
1263
1263
  }
@@ -1323,7 +1323,7 @@ void TcpZerocopySendRecord::UpdateOffsetForBytesSent(size_t sending_length,
1323
1323
 
1324
1324
  // returns true if done, false if pending; if returning true, *error is set
1325
1325
  static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1326
- grpc_error** error) {
1326
+ grpc_error_handle* error) {
1327
1327
  struct msghdr msg;
1328
1328
  struct iovec iov[MAX_WRITE_IOVEC];
1329
1329
  msg_iovlen_type iov_size;
@@ -1399,7 +1399,7 @@ static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
1399
1399
  }
1400
1400
 
1401
1401
  static bool tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1402
- grpc_error** error) {
1402
+ grpc_error_handle* error) {
1403
1403
  bool done = do_tcp_flush_zerocopy(tcp, record, error);
1404
1404
  if (done) {
1405
1405
  // Either we encountered an error, or we successfully sent all the bytes.
@@ -1409,7 +1409,7 @@ static bool tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1409
1409
  return done;
1410
1410
  }
1411
1411
 
1412
- static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
1412
+ static bool tcp_flush(grpc_tcp* tcp, grpc_error_handle* error) {
1413
1413
  struct msghdr msg;
1414
1414
  struct iovec iov[MAX_WRITE_IOVEC];
1415
1415
  msg_iovlen_type iov_size;
@@ -1516,7 +1516,8 @@ static bool tcp_flush(grpc_tcp* tcp, grpc_error** error) {
1516
1516
  }
1517
1517
  }
1518
1518
 
1519
- static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error) {
1519
+ static void tcp_handle_write(void* arg /* grpc_tcp */,
1520
+ grpc_error_handle error) {
1520
1521
  grpc_tcp* tcp = static_cast<grpc_tcp*>(arg);
1521
1522
  grpc_closure* cb;
1522
1523
 
@@ -1549,8 +1550,7 @@ static void tcp_handle_write(void* arg /* grpc_tcp */, grpc_error* error) {
1549
1550
  tcp->write_cb = nullptr;
1550
1551
  tcp->current_zerocopy_send = nullptr;
1551
1552
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1552
- const char* str = grpc_error_string(error);
1553
- gpr_log(GPR_INFO, "write: %s", str);
1553
+ gpr_log(GPR_INFO, "write: %s", grpc_error_std_string(error).c_str());
1554
1554
  }
1555
1555
  // No need to take a ref on error since tcp_flush provides a ref.
1556
1556
  grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
@@ -1562,7 +1562,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1562
1562
  grpc_closure* cb, void* arg) {
1563
1563
  GPR_TIMER_SCOPE("tcp_write", 0);
1564
1564
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1565
- grpc_error* error = GRPC_ERROR_NONE;
1565
+ grpc_error_handle error = GRPC_ERROR_NONE;
1566
1566
  TcpZerocopySendRecord* zerocopy_send_record = nullptr;
1567
1567
 
1568
1568
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
@@ -1618,8 +1618,7 @@ static void tcp_write(grpc_endpoint* ep, grpc_slice_buffer* buf,
1618
1618
  notify_on_write(tcp);
1619
1619
  } else {
1620
1620
  if (GRPC_TRACE_FLAG_ENABLED(grpc_tcp_trace)) {
1621
- const char* str = grpc_error_string(error);
1622
- gpr_log(GPR_INFO, "write: %s", str);
1621
+ gpr_log(GPR_INFO, "write: %s", grpc_error_std_string(error).c_str());
1623
1622
  }
1624
1623
  grpc_core::Closure::Run(DEBUG_LOCATION, cb, error);
1625
1624
  }
@@ -1639,7 +1638,6 @@ static void tcp_add_to_pollset_set(grpc_endpoint* ep,
1639
1638
  static void tcp_delete_from_pollset_set(grpc_endpoint* ep,
1640
1639
  grpc_pollset_set* pollset_set) {
1641
1640
  grpc_tcp* tcp = reinterpret_cast<grpc_tcp*>(ep);
1642
- ZerocopyDisableAndWaitForRemaining(tcp);
1643
1641
  grpc_pollset_set_del_fd(pollset_set, tcp->em_fd);
1644
1642
  }
1645
1643
 
@@ -1871,4 +1869,11 @@ void grpc_tcp_destroy_and_release_fd(grpc_endpoint* ep, int* fd,
1871
1869
  TCP_UNREF(tcp, "destroy");
1872
1870
  }
1873
1871
 
1872
+ void grpc_tcp_posix_init() { g_backup_poller_mu = new grpc_core::Mutex; }
1873
+
1874
+ void grpc_tcp_posix_shutdown() {
1875
+ delete g_backup_poller_mu;
1876
+ g_backup_poller_mu = nullptr;
1877
+ }
1878
+
1874
1879
  #endif /* GRPC_POSIX_SOCKET_TCP */