grpc 1.41.0 → 1.42.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 (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +83 -70
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -25,6 +25,7 @@
25
25
  #include <string>
26
26
 
27
27
  #include "absl/strings/str_format.h"
28
+ #include "absl/strings/string_view.h"
28
29
 
29
30
  #include <grpc/support/alloc.h>
30
31
  #include <grpc/support/log.h>
@@ -41,187 +42,228 @@
41
42
  #include "src/core/lib/iomgr/tcp_client.h"
42
43
  #include "src/core/lib/slice/slice_internal.h"
43
44
 
44
- struct internal_request {
45
- grpc_slice request_text;
46
- grpc_http_parser parser;
47
- grpc_resolved_addresses* addresses;
48
- size_t next_address;
49
- grpc_endpoint* ep;
50
- grpc_resource_quota* resource_quota;
51
- char* host;
52
- char* ssl_host_override;
53
- grpc_millis deadline;
54
- int have_read_byte;
55
- const grpc_httpcli_handshaker* handshaker;
56
- grpc_closure* on_done;
57
- grpc_httpcli_context* context;
58
- grpc_polling_entity* pollent;
59
- grpc_iomgr_object iomgr_obj;
60
- grpc_slice_buffer incoming;
61
- grpc_slice_buffer outgoing;
62
- grpc_closure on_read;
63
- grpc_closure done_write;
64
- grpc_closure connected;
65
- grpc_error_handle overall_error;
66
- };
67
- static grpc_httpcli_get_override g_get_override = nullptr;
68
- static grpc_httpcli_post_override g_post_override = nullptr;
69
-
70
- static void plaintext_handshake(void* arg, grpc_endpoint* endpoint,
71
- const char* /*host*/, grpc_millis /*deadline*/,
72
- void (*on_done)(void* arg,
73
- grpc_endpoint* endpoint)) {
74
- on_done(arg, endpoint);
75
- }
76
-
77
- const grpc_httpcli_handshaker grpc_httpcli_plaintext = {"http",
78
- plaintext_handshake};
45
+ namespace grpc_core {
46
+ namespace {
47
+
48
+ class InternalRequest {
49
+ public:
50
+ InternalRequest(const grpc_slice& request_text,
51
+ grpc_httpcli_response* response,
52
+ grpc_resource_quota* resource_quota, absl::string_view host,
53
+ absl::string_view ssl_host_override, grpc_millis deadline,
54
+ const grpc_httpcli_handshaker* handshaker,
55
+ grpc_closure* on_done, grpc_httpcli_context* context,
56
+ grpc_polling_entity* pollent, const char* name)
57
+ : request_text_(request_text),
58
+ resource_quota_(resource_quota),
59
+ host_(host),
60
+ ssl_host_override_(ssl_host_override),
61
+ deadline_(deadline),
62
+ handshaker_(handshaker),
63
+ on_done_(on_done),
64
+ context_(context),
65
+ pollent_(pollent) {
66
+ grpc_http_parser_init(&parser_, GRPC_HTTP_RESPONSE, response);
67
+ grpc_slice_buffer_init(&incoming_);
68
+ grpc_slice_buffer_init(&outgoing_);
69
+ grpc_iomgr_register_object(&iomgr_obj_, name);
70
+
71
+ GRPC_CLOSURE_INIT(&on_read_, OnRead, this, grpc_schedule_on_exec_ctx);
72
+ GRPC_CLOSURE_INIT(&done_write_, DoneWrite, this, grpc_schedule_on_exec_ctx);
73
+ GPR_ASSERT(pollent);
74
+ grpc_polling_entity_add_to_pollset_set(pollent_, context->pollset_set);
75
+ grpc_resolve_address(
76
+ host_.c_str(), handshaker_->default_port, context_->pollset_set,
77
+ GRPC_CLOSURE_CREATE(OnResolved, this, grpc_schedule_on_exec_ctx),
78
+ &addresses_);
79
+ }
79
80
 
80
- void grpc_httpcli_context_init(grpc_httpcli_context* context) {
81
- context->pollset_set = grpc_pollset_set_create();
82
- }
81
+ ~InternalRequest() {
82
+ grpc_http_parser_destroy(&parser_);
83
+ if (addresses_ != nullptr) {
84
+ grpc_resolved_addresses_destroy(addresses_);
85
+ }
86
+ if (ep_ != nullptr) {
87
+ grpc_endpoint_destroy(ep_);
88
+ }
89
+ grpc_slice_unref_internal(request_text_);
90
+ grpc_iomgr_unregister_object(&iomgr_obj_);
91
+ grpc_slice_buffer_destroy_internal(&incoming_);
92
+ grpc_slice_buffer_destroy_internal(&outgoing_);
93
+ GRPC_ERROR_UNREF(overall_error_);
94
+ grpc_resource_quota_unref_internal(resource_quota_);
95
+ }
83
96
 
84
- void grpc_httpcli_context_destroy(grpc_httpcli_context* context) {
85
- grpc_pollset_set_destroy(context->pollset_set);
86
- }
97
+ private:
98
+ void Finish(grpc_error_handle error) {
99
+ grpc_polling_entity_del_from_pollset_set(pollent_, context_->pollset_set);
100
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done_, error);
101
+ delete this;
102
+ }
87
103
 
88
- static void next_address(internal_request* req, grpc_error_handle due_to_error);
104
+ void AppendError(grpc_error_handle error) {
105
+ if (overall_error_ == GRPC_ERROR_NONE) {
106
+ overall_error_ =
107
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed HTTP/1 client request");
108
+ }
109
+ grpc_resolved_address* addr = &addresses_->addrs[next_address_ - 1];
110
+ std::string addr_text = grpc_sockaddr_to_uri(addr);
111
+ overall_error_ = grpc_error_add_child(
112
+ overall_error_,
113
+ grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, addr_text));
114
+ }
89
115
 
90
- static void finish(internal_request* req, grpc_error_handle error) {
91
- grpc_polling_entity_del_from_pollset_set(req->pollent,
92
- req->context->pollset_set);
93
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, req->on_done, error);
94
- grpc_http_parser_destroy(&req->parser);
95
- if (req->addresses != nullptr) {
96
- grpc_resolved_addresses_destroy(req->addresses);
116
+ void DoRead() {
117
+ grpc_endpoint_read(ep_, &incoming_, &on_read_, /*urgent=*/true);
97
118
  }
98
- if (req->ep != nullptr) {
99
- grpc_endpoint_destroy(req->ep);
119
+
120
+ static void OnRead(void* user_data, grpc_error_handle error) {
121
+ InternalRequest* req = static_cast<InternalRequest*>(user_data);
122
+ req->OnReadInternal(error);
100
123
  }
101
- grpc_slice_unref_internal(req->request_text);
102
- gpr_free(req->host);
103
- gpr_free(req->ssl_host_override);
104
- grpc_iomgr_unregister_object(&req->iomgr_obj);
105
- grpc_slice_buffer_destroy_internal(&req->incoming);
106
- grpc_slice_buffer_destroy_internal(&req->outgoing);
107
- GRPC_ERROR_UNREF(req->overall_error);
108
- grpc_resource_quota_unref_internal(req->resource_quota);
109
- gpr_free(req);
110
- }
111
124
 
112
- static void append_error(internal_request* req, grpc_error_handle error) {
113
- if (req->overall_error == GRPC_ERROR_NONE) {
114
- req->overall_error =
115
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed HTTP/1 client request");
125
+ void OnReadInternal(grpc_error_handle error) {
126
+ size_t i;
127
+
128
+ for (i = 0; i < incoming_.count; i++) {
129
+ if (GRPC_SLICE_LENGTH(incoming_.slices[i])) {
130
+ have_read_byte_ = 1;
131
+ grpc_error_handle err =
132
+ grpc_http_parser_parse(&parser_, incoming_.slices[i], nullptr);
133
+ if (err != GRPC_ERROR_NONE) {
134
+ Finish(err);
135
+ return;
136
+ }
137
+ }
138
+ }
139
+
140
+ if (error == GRPC_ERROR_NONE) {
141
+ DoRead();
142
+ } else if (!have_read_byte_) {
143
+ NextAddress(GRPC_ERROR_REF(error));
144
+ } else {
145
+ Finish(grpc_http_parser_eof(&parser_));
146
+ }
116
147
  }
117
- grpc_resolved_address* addr = &req->addresses->addrs[req->next_address - 1];
118
- std::string addr_text = grpc_sockaddr_to_uri(addr);
119
- req->overall_error = grpc_error_add_child(
120
- req->overall_error,
121
- grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS,
122
- grpc_slice_from_cpp_string(std::move(addr_text))));
123
- }
124
148
 
125
- static void do_read(internal_request* req) {
126
- grpc_endpoint_read(req->ep, &req->incoming, &req->on_read, /*urgent=*/true);
127
- }
149
+ void OnWritten() { DoRead(); }
128
150
 
129
- static void on_read(void* user_data, grpc_error_handle error) {
130
- internal_request* req = static_cast<internal_request*>(user_data);
131
- size_t i;
132
-
133
- for (i = 0; i < req->incoming.count; i++) {
134
- if (GRPC_SLICE_LENGTH(req->incoming.slices[i])) {
135
- req->have_read_byte = 1;
136
- grpc_error_handle err = grpc_http_parser_parse(
137
- &req->parser, req->incoming.slices[i], nullptr);
138
- if (err != GRPC_ERROR_NONE) {
139
- finish(req, err);
140
- return;
141
- }
151
+ static void DoneWrite(void* arg, grpc_error_handle error) {
152
+ InternalRequest* req = static_cast<InternalRequest*>(arg);
153
+ if (error == GRPC_ERROR_NONE) {
154
+ req->OnWritten();
155
+ } else {
156
+ req->NextAddress(GRPC_ERROR_REF(error));
142
157
  }
143
158
  }
144
159
 
145
- if (error == GRPC_ERROR_NONE) {
146
- do_read(req);
147
- } else if (!req->have_read_byte) {
148
- next_address(req, GRPC_ERROR_REF(error));
149
- } else {
150
- finish(req, grpc_http_parser_eof(&req->parser));
160
+ void StartWrite() {
161
+ grpc_slice_ref_internal(request_text_);
162
+ grpc_slice_buffer_add(&outgoing_, request_text_);
163
+ grpc_endpoint_write(ep_, &outgoing_, &done_write_, nullptr);
151
164
  }
152
- }
153
165
 
154
- static void on_written(internal_request* req) { do_read(req); }
166
+ static void OnHandshakeDone(void* arg, grpc_endpoint* ep) {
167
+ InternalRequest* req = static_cast<InternalRequest*>(arg);
155
168
 
156
- static void done_write(void* arg, grpc_error_handle error) {
157
- internal_request* req = static_cast<internal_request*>(arg);
158
- if (error == GRPC_ERROR_NONE) {
159
- on_written(req);
160
- } else {
161
- next_address(req, GRPC_ERROR_REF(error));
169
+ if (!ep) {
170
+ req->NextAddress(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
171
+ "Unexplained handshake failure"));
172
+ return;
173
+ }
174
+
175
+ req->ep_ = ep;
176
+ req->StartWrite();
162
177
  }
163
- }
164
178
 
165
- static void start_write(internal_request* req) {
166
- grpc_slice_ref_internal(req->request_text);
167
- grpc_slice_buffer_add(&req->outgoing, req->request_text);
168
- grpc_endpoint_write(req->ep, &req->outgoing, &req->done_write, nullptr);
169
- }
179
+ static void OnConnected(void* arg, grpc_error_handle error) {
180
+ InternalRequest* req = static_cast<InternalRequest*>(arg);
170
181
 
171
- static void on_handshake_done(void* arg, grpc_endpoint* ep) {
172
- internal_request* req = static_cast<internal_request*>(arg);
182
+ if (!req->ep_) {
183
+ req->NextAddress(GRPC_ERROR_REF(error));
184
+ return;
185
+ }
186
+ req->handshaker_->handshake(req, req->ep_,
187
+ req->ssl_host_override_.empty()
188
+ ? req->host_.c_str()
189
+ : req->ssl_host_override_.c_str(),
190
+ req->deadline_, OnHandshakeDone);
191
+ }
173
192
 
174
- if (!ep) {
175
- next_address(req, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
176
- "Unexplained handshake failure"));
177
- return;
193
+ void NextAddress(grpc_error_handle error) {
194
+ grpc_resolved_address* addr;
195
+ if (error != GRPC_ERROR_NONE) {
196
+ AppendError(error);
197
+ }
198
+ if (next_address_ == addresses_->naddrs) {
199
+ Finish(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
200
+ "Failed HTTP requests to all targets", &overall_error_, 1));
201
+ return;
202
+ }
203
+ addr = &addresses_->addrs[next_address_++];
204
+ GRPC_CLOSURE_INIT(&connected_, OnConnected, this,
205
+ grpc_schedule_on_exec_ctx);
206
+ grpc_tcp_client_connect(&connected_, &ep_,
207
+ grpc_slice_allocator_create(
208
+ resource_quota_, grpc_sockaddr_to_uri(addr)),
209
+ context_->pollset_set, nullptr, addr, deadline_);
178
210
  }
179
211
 
180
- req->ep = ep;
181
- start_write(req);
182
- }
212
+ static void OnResolved(void* arg, grpc_error_handle error) {
213
+ InternalRequest* req = static_cast<InternalRequest*>(arg);
214
+ if (error != GRPC_ERROR_NONE) {
215
+ req->Finish(GRPC_ERROR_REF(error));
216
+ return;
217
+ }
218
+ req->next_address_ = 0;
219
+ req->NextAddress(GRPC_ERROR_NONE);
220
+ }
183
221
 
184
- static void on_connected(void* arg, grpc_error_handle error) {
185
- internal_request* req = static_cast<internal_request*>(arg);
222
+ grpc_slice request_text_;
223
+ grpc_http_parser parser_;
224
+ grpc_resolved_addresses* addresses_ = nullptr;
225
+ size_t next_address_ = 0;
226
+ grpc_endpoint* ep_ = nullptr;
227
+ grpc_resource_quota* resource_quota_;
228
+ std::string host_;
229
+ std::string ssl_host_override_;
230
+ grpc_millis deadline_;
231
+ int have_read_byte_ = 0;
232
+ const grpc_httpcli_handshaker* handshaker_;
233
+ grpc_closure* on_done_;
234
+ grpc_httpcli_context* context_;
235
+ grpc_polling_entity* pollent_;
236
+ grpc_iomgr_object iomgr_obj_;
237
+ grpc_slice_buffer incoming_;
238
+ grpc_slice_buffer outgoing_;
239
+ grpc_closure on_read_;
240
+ grpc_closure done_write_;
241
+ grpc_closure connected_;
242
+ grpc_error_handle overall_error_ = GRPC_ERROR_NONE;
243
+ };
186
244
 
187
- if (!req->ep) {
188
- next_address(req, GRPC_ERROR_REF(error));
189
- return;
190
- }
191
- req->handshaker->handshake(
192
- req, req->ep, req->ssl_host_override ? req->ssl_host_override : req->host,
193
- req->deadline, on_handshake_done);
245
+ } // namespace
246
+ } // namespace grpc_core
247
+
248
+ static grpc_httpcli_get_override g_get_override = nullptr;
249
+ static grpc_httpcli_post_override g_post_override = nullptr;
250
+
251
+ static void plaintext_handshake(void* arg, grpc_endpoint* endpoint,
252
+ const char* /*host*/, grpc_millis /*deadline*/,
253
+ void (*on_done)(void* arg,
254
+ grpc_endpoint* endpoint)) {
255
+ on_done(arg, endpoint);
194
256
  }
195
257
 
196
- static void next_address(internal_request* req, grpc_error_handle error) {
197
- grpc_resolved_address* addr;
198
- if (error != GRPC_ERROR_NONE) {
199
- append_error(req, error);
200
- }
201
- if (req->next_address == req->addresses->naddrs) {
202
- finish(req,
203
- GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
204
- "Failed HTTP requests to all targets", &req->overall_error, 1));
205
- return;
206
- }
207
- addr = &req->addresses->addrs[req->next_address++];
208
- GRPC_CLOSURE_INIT(&req->connected, on_connected, req,
209
- grpc_schedule_on_exec_ctx);
210
- grpc_tcp_client_connect(&req->connected, &req->ep,
211
- grpc_slice_allocator_create(
212
- req->resource_quota, grpc_sockaddr_to_uri(addr)),
213
- req->context->pollset_set, nullptr, addr,
214
- req->deadline);
258
+ const grpc_httpcli_handshaker grpc_httpcli_plaintext = {"http",
259
+ plaintext_handshake};
260
+
261
+ void grpc_httpcli_context_init(grpc_httpcli_context* context) {
262
+ context->pollset_set = grpc_pollset_set_create();
215
263
  }
216
264
 
217
- static void on_resolved(void* arg, grpc_error_handle error) {
218
- internal_request* req = static_cast<internal_request*>(arg);
219
- if (error != GRPC_ERROR_NONE) {
220
- finish(req, GRPC_ERROR_REF(error));
221
- return;
222
- }
223
- req->next_address = 0;
224
- next_address(req, GRPC_ERROR_NONE);
265
+ void grpc_httpcli_context_destroy(grpc_httpcli_context* context) {
266
+ grpc_pollset_set_destroy(context->pollset_set);
225
267
  }
226
268
 
227
269
  static void internal_request_begin(grpc_httpcli_context* context,
@@ -232,35 +274,11 @@ static void internal_request_begin(grpc_httpcli_context* context,
232
274
  grpc_httpcli_response* response,
233
275
  const char* name,
234
276
  const grpc_slice& request_text) {
235
- internal_request* req =
236
- static_cast<internal_request*>(gpr_malloc(sizeof(internal_request)));
237
- memset(req, 0, sizeof(*req));
238
- req->request_text = request_text;
239
- grpc_http_parser_init(&req->parser, GRPC_HTTP_RESPONSE, response);
240
- req->on_done = on_done;
241
- req->deadline = deadline;
242
- req->handshaker =
243
- request->handshaker ? request->handshaker : &grpc_httpcli_plaintext;
244
- req->context = context;
245
- req->pollent = pollent;
246
- req->overall_error = GRPC_ERROR_NONE;
247
- req->resource_quota = resource_quota;
248
- GRPC_CLOSURE_INIT(&req->on_read, on_read, req, grpc_schedule_on_exec_ctx);
249
- GRPC_CLOSURE_INIT(&req->done_write, done_write, req,
250
- grpc_schedule_on_exec_ctx);
251
- grpc_slice_buffer_init(&req->incoming);
252
- grpc_slice_buffer_init(&req->outgoing);
253
- grpc_iomgr_register_object(&req->iomgr_obj, name);
254
- req->host = gpr_strdup(request->host);
255
- req->ssl_host_override = gpr_strdup(request->ssl_host_override);
256
-
257
- GPR_ASSERT(pollent);
258
- grpc_polling_entity_add_to_pollset_set(req->pollent,
259
- req->context->pollset_set);
260
- grpc_resolve_address(
261
- request->host, req->handshaker->default_port, req->context->pollset_set,
262
- GRPC_CLOSURE_CREATE(on_resolved, req, grpc_schedule_on_exec_ctx),
263
- &req->addresses);
277
+ new grpc_core::InternalRequest(
278
+ request_text, response, resource_quota, request->host,
279
+ request->ssl_host_override, deadline,
280
+ request->handshaker ? request->handshaker : &grpc_httpcli_plaintext,
281
+ on_done, context, pollent, name);
264
282
  }
265
283
 
266
284
  void grpc_httpcli_get(grpc_httpcli_context* context,
@@ -221,7 +221,7 @@ static grpc_error_handle add_header(grpc_http_parser* parser) {
221
221
 
222
222
  if (*hdr_count == parser->hdr_capacity) {
223
223
  parser->hdr_capacity =
224
- GPR_MAX(parser->hdr_capacity + 1, parser->hdr_capacity * 3 / 2);
224
+ std::max(parser->hdr_capacity + 1, parser->hdr_capacity * 3 / 2);
225
225
  *hdrs = static_cast<grpc_http_header*>(
226
226
  gpr_realloc(*hdrs, parser->hdr_capacity * sizeof(**hdrs)));
227
227
  }
@@ -280,7 +280,7 @@ static grpc_error_handle addbyte_body(grpc_http_parser* parser, uint8_t byte) {
280
280
  }
281
281
 
282
282
  if (*body_length == parser->body_capacity) {
283
- parser->body_capacity = GPR_MAX(8, parser->body_capacity * 3 / 2);
283
+ parser->body_capacity = std::max(size_t(8), parser->body_capacity * 3 / 2);
284
284
  *body = static_cast<char*>(gpr_realloc(*body, parser->body_capacity));
285
285
  }
286
286
  (*body)[*body_length] = static_cast<char>(byte);
@@ -33,18 +33,20 @@ DebugOnlyTraceFlag grpc_call_combiner_trace(false, "call_combiner");
33
33
 
34
34
  namespace {
35
35
 
36
+ // grpc_error LSB can be used
37
+ constexpr static intptr_t kErrorBit = 1;
38
+
36
39
  grpc_error_handle DecodeCancelStateError(gpr_atm cancel_state) {
37
- if (cancel_state & 1) {
38
- return reinterpret_cast<grpc_error_handle>(cancel_state &
39
- ~static_cast<gpr_atm>(1));
40
+ if (cancel_state & kErrorBit) {
41
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
42
+ return internal::StatusGetFromHeapPtr(cancel_state & ~kErrorBit);
43
+ #else
44
+ return reinterpret_cast<grpc_error_handle>(cancel_state & ~kErrorBit);
45
+ #endif
40
46
  }
41
47
  return GRPC_ERROR_NONE;
42
48
  }
43
49
 
44
- gpr_atm EncodeCancelStateError(grpc_error_handle error) {
45
- return static_cast<gpr_atm>(1) | reinterpret_cast<gpr_atm>(error);
46
- }
47
-
48
50
  } // namespace
49
51
 
50
52
  CallCombiner::CallCombiner() {
@@ -57,7 +59,14 @@ CallCombiner::CallCombiner() {
57
59
  }
58
60
 
59
61
  CallCombiner::~CallCombiner() {
60
- GRPC_ERROR_UNREF(DecodeCancelStateError(cancel_state_));
62
+ if (cancel_state_ & kErrorBit) {
63
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
64
+ internal::StatusFreeHeapPtr(cancel_state_ & ~kErrorBit);
65
+ #else
66
+ GRPC_ERROR_UNREF(reinterpret_cast<grpc_error_handle>(
67
+ cancel_state_ & ~static_cast<gpr_atm>(kErrorBit)));
68
+ #endif
69
+ }
61
70
  }
62
71
 
63
72
  #ifdef GRPC_TSAN_ENABLED
@@ -235,15 +244,24 @@ void CallCombiner::SetNotifyOnCancel(grpc_closure* closure) {
235
244
 
236
245
  void CallCombiner::Cancel(grpc_error_handle error) {
237
246
  GRPC_STATS_INC_CALL_COMBINER_CANCELLED();
247
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
248
+ intptr_t status_ptr = internal::StatusAllocHeapPtr(error);
249
+ gpr_atm new_state = kErrorBit | status_ptr;
250
+ #else
251
+ gpr_atm new_state = kErrorBit | reinterpret_cast<gpr_atm>(error);
252
+ #endif
238
253
  while (true) {
239
254
  gpr_atm original_state = gpr_atm_acq_load(&cancel_state_);
240
255
  grpc_error_handle original_error = DecodeCancelStateError(original_state);
241
256
  if (original_error != GRPC_ERROR_NONE) {
257
+ #ifdef GRPC_ERROR_IS_ABSEIL_STATUS
258
+ internal::StatusFreeHeapPtr(status_ptr);
259
+ #else
242
260
  GRPC_ERROR_UNREF(error);
261
+ #endif
243
262
  break;
244
263
  }
245
- if (gpr_atm_full_cas(&cancel_state_, original_state,
246
- EncodeCancelStateError(error))) {
264
+ if (gpr_atm_full_cas(&cancel_state_, original_state, new_state)) {
247
265
  if (original_state != 0) {
248
266
  grpc_closure* notify_on_cancel =
249
267
  reinterpret_cast<grpc_closure*>(original_state);
@@ -27,11 +27,9 @@
27
27
  #include <grpc/support/alloc.h>
28
28
  #include <grpc/support/log.h>
29
29
 
30
- #include "src/core/lib/debug/stats.h"
31
30
  #include "src/core/lib/gprpp/mpscq.h"
32
31
  #include "src/core/lib/iomgr/executor.h"
33
- #include "src/core/lib/iomgr/iomgr.h"
34
- #include "src/core/lib/profiling/timers.h"
32
+ #include "src/core/lib/iomgr/iomgr_internal.h"
35
33
 
36
34
  grpc_core::DebugOnlyTraceFlag grpc_combiner_trace(false, "combiner");
37
35
 
@@ -128,15 +126,11 @@ static void push_first_on_exec_ctx(grpc_core::Combiner* lock) {
128
126
 
129
127
  static void combiner_exec(grpc_core::Combiner* lock, grpc_closure* cl,
130
128
  grpc_error_handle error) {
131
- GPR_TIMER_SCOPE("combiner.execute", 0);
132
- GRPC_STATS_INC_COMBINER_LOCKS_SCHEDULED_ITEMS();
133
129
  gpr_atm last = gpr_atm_full_fetch_add(&lock->state, STATE_ELEM_COUNT_LOW_BIT);
134
130
  GRPC_COMBINER_TRACE(gpr_log(GPR_INFO,
135
131
  "C:%p grpc_combiner_execute c=%p last=%" PRIdPTR,
136
132
  lock, cl, last));
137
133
  if (last == 1) {
138
- GRPC_STATS_INC_COMBINER_LOCKS_INITIATED();
139
- GPR_TIMER_MARK("combiner.initiated", 0);
140
134
  gpr_atm_no_barrier_store(
141
135
  &lock->initiating_exec_ctx_or_null,
142
136
  reinterpret_cast<gpr_atm>(grpc_core::ExecCtx::Get()));
@@ -175,14 +169,12 @@ static void offload(void* arg, grpc_error_handle /*error*/) {
175
169
  }
176
170
 
177
171
  static void queue_offload(grpc_core::Combiner* lock) {
178
- GRPC_STATS_INC_COMBINER_LOCKS_OFFLOADED();
179
172
  move_next();
180
173
  GRPC_COMBINER_TRACE(gpr_log(GPR_INFO, "C:%p queue_offload", lock));
181
174
  grpc_core::Executor::Run(&lock->offload, GRPC_ERROR_NONE);
182
175
  }
183
176
 
184
177
  bool grpc_combiner_continue_exec_ctx() {
185
- GPR_TIMER_SCOPE("combiner.continue_exec_ctx", 0);
186
178
  grpc_core::Combiner* lock =
187
179
  grpc_core::ExecCtx::Get()->combiner_data()->active_combiner;
188
180
  if (lock == nullptr) {
@@ -207,9 +199,8 @@ bool grpc_combiner_continue_exec_ctx() {
207
199
  // 3. the current thread is not a worker for any background poller
208
200
  // 4. the DEFAULT executor is threaded
209
201
  if (contended && grpc_core::ExecCtx::Get()->IsReadyToFinish() &&
210
- !grpc_iomgr_is_any_background_poller_thread() &&
202
+ !grpc_iomgr_platform_is_any_background_poller_thread() &&
211
203
  grpc_core::Executor::IsThreadedDefault()) {
212
- GPR_TIMER_MARK("offload_from_finished_exec_ctx", 0);
213
204
  // this execution context wants to move on: schedule remaining work to be
214
205
  // picked up on the executor
215
206
  queue_offload(lock);
@@ -226,11 +217,9 @@ bool grpc_combiner_continue_exec_ctx() {
226
217
  if (n == nullptr) {
227
218
  // queue is in an inconsistent state: use this as a cue that we should
228
219
  // go off and do something else for a while (and come back later)
229
- GPR_TIMER_MARK("delay_busy", 0);
230
220
  queue_offload(lock);
231
221
  return true;
232
222
  }
233
- GPR_TIMER_SCOPE("combiner.exec1", 0);
234
223
  grpc_closure* cl = reinterpret_cast<grpc_closure*>(n);
235
224
  grpc_error_handle cl_err = cl->error_data.error;
236
225
  #ifndef NDEBUG
@@ -244,7 +233,6 @@ bool grpc_combiner_continue_exec_ctx() {
244
233
  grpc_closure_list_init(&lock->final_list);
245
234
  int loops = 0;
246
235
  while (c != nullptr) {
247
- GPR_TIMER_SCOPE("combiner.exec_1final", 0);
248
236
  GRPC_COMBINER_TRACE(
249
237
  gpr_log(GPR_INFO, "C:%p execute_final[%d] c=%p", lock, loops, c));
250
238
  grpc_closure* next = c->next_data.next;
@@ -258,7 +246,6 @@ bool grpc_combiner_continue_exec_ctx() {
258
246
  }
259
247
  }
260
248
 
261
- GPR_TIMER_MARK("unref", 0);
262
249
  move_next();
263
250
  lock->time_to_execute_final_list = false;
264
251
  gpr_atm old_state =
@@ -305,13 +292,10 @@ static void combiner_finally_exec(grpc_core::Combiner* lock,
305
292
  grpc_closure* closure,
306
293
  grpc_error_handle error) {
307
294
  GPR_ASSERT(lock != nullptr);
308
- GPR_TIMER_SCOPE("combiner.execute_finally", 0);
309
- GRPC_STATS_INC_COMBINER_LOCKS_SCHEDULED_FINAL_ITEMS();
310
295
  GRPC_COMBINER_TRACE(gpr_log(
311
296
  GPR_INFO, "C:%p grpc_combiner_execute_finally c=%p; ac=%p", lock, closure,
312
297
  grpc_core::ExecCtx::Get()->combiner_data()->active_combiner));
313
298
  if (grpc_core::ExecCtx::Get()->combiner_data()->active_combiner != lock) {
314
- GPR_TIMER_MARK("slowpath", 0);
315
299
  // Using error_data.scratch to store the combiner so that it can be accessed
316
300
  // in enqueue_finally.
317
301
  closure->error_data.scratch = reinterpret_cast<uintptr_t>(lock);
@@ -327,9 +311,10 @@ static void combiner_finally_exec(grpc_core::Combiner* lock,
327
311
 
328
312
  static void enqueue_finally(void* closure, grpc_error_handle error) {
329
313
  grpc_closure* cl = static_cast<grpc_closure*>(closure);
330
- combiner_finally_exec(
331
- reinterpret_cast<grpc_core::Combiner*>(cl->error_data.scratch), cl,
332
- GRPC_ERROR_REF(error));
314
+ grpc_core::Combiner* lock =
315
+ reinterpret_cast<grpc_core::Combiner*>(cl->error_data.scratch);
316
+ cl->error_data.scratch = 0;
317
+ combiner_finally_exec(lock, cl, GRPC_ERROR_REF(error));
333
318
  }
334
319
 
335
320
  namespace grpc_core {