grpc 1.8.7 → 1.9.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 (488) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +549 -325
  3. data/include/grpc/impl/codegen/grpc_types.h +1 -2
  4. data/include/grpc/impl/codegen/port_platform.h +46 -5
  5. data/include/grpc/impl/codegen/slice.h +1 -2
  6. data/include/grpc/module.modulemap +0 -2
  7. data/include/grpc/slice_buffer.h +1 -2
  8. data/include/grpc/support/log.h +4 -2
  9. data/include/grpc/support/thd.h +4 -1
  10. data/include/grpc/support/tls.h +6 -0
  11. data/include/grpc/support/tls_gcc.h +5 -40
  12. data/include/grpc/support/tls_msvc.h +9 -0
  13. data/include/grpc/support/tls_pthread.h +9 -0
  14. data/src/core/ext/filters/client_channel/backup_poller.cc +32 -29
  15. data/src/core/ext/filters/client_channel/backup_poller.h +2 -2
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +26 -32
  17. data/src/core/ext/filters/client_channel/client_channel.cc +325 -356
  18. data/src/core/ext/filters/client_channel/client_channel.h +4 -12
  19. data/src/core/ext/filters/client_channel/client_channel_factory.cc +9 -14
  20. data/src/core/ext/filters/client_channel/client_channel_factory.h +7 -20
  21. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +7 -10
  22. data/src/core/ext/filters/client_channel/connector.cc +6 -7
  23. data/src/core/ext/filters/client_channel/connector.h +6 -16
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +38 -50
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -8
  26. data/src/core/ext/filters/client_channel/http_proxy.cc +9 -13
  27. data/src/core/ext/filters/client_channel/http_proxy.h +0 -8
  28. data/src/core/ext/filters/client_channel/lb_policy.cc +72 -94
  29. data/src/core/ext/filters/client_channel/lb_policy.h +83 -92
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -19
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +0 -8
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +474 -591
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -8
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +2 -10
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +6 -6
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +0 -8
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +0 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +0 -9
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +3 -4
  40. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +9 -12
  41. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +160 -182
  42. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -221
  43. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +24 -35
  44. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +9 -20
  45. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +6 -9
  46. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -15
  47. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -3
  48. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -9
  49. data/src/core/ext/filters/client_channel/parse_address.cc +1 -1
  50. data/src/core/ext/filters/client_channel/parse_address.h +0 -8
  51. data/src/core/ext/filters/client_channel/proxy_mapper.cc +6 -8
  52. data/src/core/ext/filters/client_channel/proxy_mapper.h +6 -16
  53. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +13 -17
  54. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -12
  55. data/src/core/ext/filters/client_channel/resolver.cc +11 -13
  56. data/src/core/ext/filters/client_channel/resolver.h +14 -25
  57. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +57 -70
  58. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -12
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +23 -31
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +27 -45
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -15
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +9 -11
  63. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +53 -66
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +25 -33
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -9
  66. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +26 -35
  67. data/src/core/ext/filters/client_channel/resolver_factory.cc +2 -3
  68. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -12
  69. data/src/core/ext/filters/client_channel/resolver_registry.cc +12 -15
  70. data/src/core/ext/filters/client_channel/resolver_registry.h +3 -12
  71. data/src/core/ext/filters/client_channel/retry_throttle.h +0 -8
  72. data/src/core/ext/filters/client_channel/subchannel.cc +289 -301
  73. data/src/core/ext/filters/client_channel/subchannel.h +57 -84
  74. data/src/core/ext/filters/client_channel/subchannel_index.cc +30 -33
  75. data/src/core/ext/filters/client_channel/subchannel_index.h +4 -16
  76. data/src/core/ext/filters/client_channel/uri_parser.cc +13 -17
  77. data/src/core/ext/filters/client_channel/uri_parser.h +1 -10
  78. data/src/core/ext/filters/deadline/deadline_filter.cc +49 -67
  79. data/src/core/ext/filters/deadline/deadline_filter.h +4 -14
  80. data/src/core/ext/filters/http/client/http_client_filter.cc +60 -77
  81. data/src/core/ext/filters/http/client/http_client_filter.h +0 -8
  82. data/src/core/ext/filters/http/http_filters_plugin.cc +4 -6
  83. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +63 -79
  84. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -8
  85. data/src/core/ext/filters/http/server/http_server_filter.cc +57 -71
  86. data/src/core/ext/filters/http/server/http_server_filter.h +0 -8
  87. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +19 -24
  88. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +0 -8
  89. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +3 -3
  90. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -8
  91. data/src/core/ext/filters/max_age/max_age_filter.cc +49 -62
  92. data/src/core/ext/filters/max_age/max_age_filter.h +0 -8
  93. data/src/core/ext/filters/message_size/message_size_filter.cc +23 -29
  94. data/src/core/ext/filters/message_size/message_size_filter.h +0 -8
  95. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -18
  96. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -8
  97. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -8
  98. data/src/core/ext/transport/chttp2/alpn/alpn.h +0 -8
  99. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +33 -40
  100. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -8
  101. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +15 -17
  102. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +8 -8
  103. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +23 -28
  104. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +50 -57
  105. data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -10
  106. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -3
  107. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +7 -10
  108. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +5 -6
  109. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -9
  110. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -11
  111. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -9
  112. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +10 -2
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +516 -636
  114. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -11
  115. data/src/core/ext/transport/chttp2/transport/flow_control.cc +29 -13
  116. data/src/core/ext/transport/chttp2/transport/flow_control.h +196 -53
  117. data/src/core/ext/transport/chttp2/transport/frame.h +0 -8
  118. data/src/core/ext/transport/chttp2/transport/frame_data.cc +31 -33
  119. data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -3
  121. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -10
  122. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -6
  123. data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -9
  124. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  125. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -10
  126. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +8 -3
  127. data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -10
  128. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +8 -8
  129. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -11
  130. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +63 -81
  131. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -12
  132. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +230 -318
  133. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -19
  134. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +14 -20
  135. data/src/core/ext/transport/chttp2/transport/hpack_table.h +5 -16
  136. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -7
  137. data/src/core/ext/transport/chttp2/transport/huffsyms.h +0 -8
  138. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +8 -11
  139. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +4 -13
  140. data/src/core/ext/transport/chttp2/transport/internal.h +51 -75
  141. data/src/core/ext/transport/chttp2/transport/parsing.cc +83 -109
  142. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
  143. data/src/core/ext/transport/chttp2/transport/stream_map.h +0 -8
  144. data/src/core/ext/transport/chttp2/transport/varint.h +0 -8
  145. data/src/core/ext/transport/chttp2/transport/writing.cc +61 -65
  146. data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -4
  147. data/src/core/ext/transport/inproc/inproc_transport.cc +177 -188
  148. data/src/core/ext/transport/inproc/inproc_transport.h +0 -8
  149. data/src/core/lib/backoff/backoff.cc +39 -44
  150. data/src/core/lib/backoff/backoff.h +61 -57
  151. data/src/core/lib/channel/channel_args.cc +8 -10
  152. data/src/core/lib/channel/channel_args.h +4 -13
  153. data/src/core/lib/channel/channel_stack.cc +19 -27
  154. data/src/core/lib/channel/channel_stack.h +27 -47
  155. data/src/core/lib/channel/channel_stack_builder.cc +11 -14
  156. data/src/core/lib/channel/channel_stack_builder.h +4 -15
  157. data/src/core/lib/channel/connected_channel.cc +23 -36
  158. data/src/core/lib/channel/connected_channel.h +1 -10
  159. data/src/core/lib/channel/handshaker.cc +31 -40
  160. data/src/core/lib/channel/handshaker.h +14 -25
  161. data/src/core/lib/channel/handshaker_factory.cc +6 -6
  162. data/src/core/lib/channel/handshaker_factory.h +5 -15
  163. data/src/core/lib/channel/handshaker_registry.cc +9 -13
  164. data/src/core/lib/channel/handshaker_registry.h +2 -11
  165. data/src/core/lib/compression/algorithm_metadata.h +0 -8
  166. data/src/core/lib/compression/message_compress.cc +19 -23
  167. data/src/core/lib/compression/message_compress.h +2 -12
  168. data/src/core/lib/compression/stream_compression.cc +1 -1
  169. data/src/core/lib/compression/stream_compression.h +0 -8
  170. data/src/core/lib/compression/stream_compression_gzip.cc +12 -11
  171. data/src/core/lib/compression/stream_compression_gzip.h +0 -8
  172. data/src/core/lib/compression/stream_compression_identity.h +0 -8
  173. data/src/core/lib/debug/stats.cc +4 -4
  174. data/src/core/lib/debug/stats.h +9 -19
  175. data/src/core/lib/debug/stats_data.cc +85 -116
  176. data/src/core/lib/debug/stats_data.h +236 -312
  177. data/src/core/lib/debug/trace.cc +1 -1
  178. data/src/core/lib/debug/trace.h +0 -12
  179. data/src/core/lib/{support → gpr++}/abstract.h +8 -3
  180. data/src/core/lib/{support → gpr++}/atomic.h +5 -5
  181. data/src/core/lib/{support → gpr++}/atomic_with_atm.h +3 -3
  182. data/src/core/lib/{support → gpr++}/atomic_with_std.h +3 -3
  183. data/src/core/lib/gpr++/debug_location.h +52 -0
  184. data/src/core/lib/gpr++/inlined_vector.h +112 -0
  185. data/src/core/lib/{support → gpr++}/manual_constructor.h +2 -2
  186. data/src/core/lib/{support → gpr++}/memory.h +3 -3
  187. data/src/core/lib/gpr++/orphanable.h +171 -0
  188. data/src/core/lib/gpr++/ref_counted.h +133 -0
  189. data/src/core/lib/gpr++/ref_counted_ptr.h +99 -0
  190. data/src/core/lib/{support → gpr}/alloc.cc +0 -0
  191. data/src/core/lib/{support → gpr}/arena.cc +1 -1
  192. data/src/core/lib/{support → gpr}/arena.h +3 -11
  193. data/src/core/lib/{support → gpr}/atm.cc +0 -0
  194. data/src/core/lib/{support → gpr}/avl.cc +0 -0
  195. data/src/core/lib/{support → gpr}/cmdline.cc +1 -1
  196. data/src/core/lib/{support → gpr}/cpu_iphone.cc +0 -0
  197. data/src/core/lib/{support → gpr}/cpu_linux.cc +0 -0
  198. data/src/core/lib/{support → gpr}/cpu_posix.cc +0 -0
  199. data/src/core/lib/{support → gpr}/cpu_windows.cc +0 -0
  200. data/src/core/lib/{support → gpr}/env.h +3 -11
  201. data/src/core/lib/{support → gpr}/env_linux.cc +2 -2
  202. data/src/core/lib/{support → gpr}/env_posix.cc +4 -4
  203. data/src/core/lib/{support → gpr}/env_windows.cc +3 -3
  204. data/src/core/lib/{support → gpr}/fork.cc +3 -3
  205. data/src/core/lib/{support → gpr}/fork.h +3 -3
  206. data/src/core/lib/{support → gpr}/host_port.cc +1 -1
  207. data/src/core/lib/{support → gpr}/log.cc +3 -3
  208. data/src/core/lib/{support → gpr}/log_android.cc +3 -3
  209. data/src/core/lib/{support → gpr}/log_linux.cc +1 -1
  210. data/src/core/lib/{support → gpr}/log_posix.cc +5 -5
  211. data/src/core/lib/{support → gpr}/log_windows.cc +3 -3
  212. data/src/core/lib/{support → gpr}/mpscq.cc +1 -1
  213. data/src/core/lib/{support → gpr}/mpscq.h +3 -10
  214. data/src/core/lib/{support → gpr}/murmur_hash.cc +1 -1
  215. data/src/core/lib/{support → gpr}/murmur_hash.h +3 -11
  216. data/src/core/lib/{support → gpr}/spinlock.h +3 -3
  217. data/src/core/lib/{support → gpr}/string.cc +1 -1
  218. data/src/core/lib/{support → gpr}/string.h +3 -10
  219. data/src/core/lib/{support → gpr}/string_posix.cc +0 -0
  220. data/src/core/lib/{support → gpr}/string_util_windows.cc +2 -2
  221. data/src/core/lib/{support → gpr}/string_windows.cc +1 -1
  222. data/src/core/lib/{support → gpr}/string_windows.h +3 -11
  223. data/src/core/lib/{support → gpr}/subprocess_posix.cc +0 -0
  224. data/src/core/lib/{support → gpr}/subprocess_windows.cc +2 -2
  225. data/src/core/lib/{support → gpr}/sync.cc +0 -0
  226. data/src/core/lib/{support → gpr}/sync_posix.cc +10 -1
  227. data/src/core/lib/{support → gpr}/sync_windows.cc +0 -0
  228. data/src/core/lib/{support → gpr}/thd.cc +0 -0
  229. data/src/core/lib/{support → gpr}/thd_internal.h +3 -3
  230. data/src/core/lib/{support → gpr}/thd_posix.cc +18 -2
  231. data/src/core/lib/{support → gpr}/thd_windows.cc +2 -1
  232. data/src/core/lib/{support → gpr}/time.cc +0 -0
  233. data/src/core/lib/{support → gpr}/time_posix.cc +2 -4
  234. data/src/core/lib/{support → gpr}/time_precise.cc +1 -1
  235. data/src/core/lib/{support → gpr}/time_precise.h +3 -11
  236. data/src/core/lib/{support → gpr}/time_windows.cc +1 -3
  237. data/src/core/lib/{support → gpr}/tls_pthread.cc +0 -0
  238. data/src/core/lib/{support → gpr}/tmpfile.h +3 -11
  239. data/src/core/lib/{support → gpr}/tmpfile_msys.cc +2 -2
  240. data/src/core/lib/{support → gpr}/tmpfile_posix.cc +2 -2
  241. data/src/core/lib/{support → gpr}/tmpfile_windows.cc +2 -2
  242. data/src/core/lib/{support → gpr}/wrap_memcpy.cc +0 -0
  243. data/src/core/lib/http/format_request.cc +1 -1
  244. data/src/core/lib/http/format_request.h +0 -8
  245. data/src/core/lib/http/httpcli.cc +55 -74
  246. data/src/core/lib/http/httpcli.h +13 -22
  247. data/src/core/lib/http/httpcli_security_connector.cc +27 -33
  248. data/src/core/lib/http/parser.h +0 -8
  249. data/src/core/lib/iomgr/block_annotate.h +10 -17
  250. data/src/core/lib/iomgr/call_combiner.cc +14 -17
  251. data/src/core/lib/iomgr/call_combiner.h +16 -34
  252. data/src/core/lib/iomgr/closure.h +24 -37
  253. data/src/core/lib/iomgr/combiner.cc +62 -66
  254. data/src/core/lib/iomgr/combiner.h +6 -16
  255. data/src/core/lib/iomgr/endpoint.cc +15 -21
  256. data/src/core/lib/iomgr/endpoint.h +16 -33
  257. data/src/core/lib/iomgr/endpoint_pair.h +0 -8
  258. data/src/core/lib/iomgr/endpoint_pair_posix.cc +4 -5
  259. data/src/core/lib/iomgr/endpoint_pair_windows.cc +4 -6
  260. data/src/core/lib/iomgr/error.cc +2 -6
  261. data/src/core/lib/iomgr/error.h +4 -9
  262. data/src/core/lib/iomgr/error_internal.h +0 -8
  263. data/src/core/lib/iomgr/ev_epoll1_linux.cc +110 -117
  264. data/src/core/lib/iomgr/ev_epoll1_linux.h +0 -8
  265. data/src/core/lib/iomgr/ev_epollex_linux.cc +111 -141
  266. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -8
  267. data/src/core/lib/iomgr/ev_epollsig_linux.cc +83 -109
  268. data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -10
  269. data/src/core/lib/iomgr/ev_poll_posix.cc +103 -125
  270. data/src/core/lib/iomgr/ev_poll_posix.h +0 -8
  271. data/src/core/lib/iomgr/ev_posix.cc +35 -50
  272. data/src/core/lib/iomgr/ev_posix.h +27 -53
  273. data/src/core/lib/iomgr/exec_ctx.cc +46 -78
  274. data/src/core/lib/iomgr/exec_ctx.h +127 -60
  275. data/src/core/lib/iomgr/executor.cc +34 -38
  276. data/src/core/lib/iomgr/executor.h +3 -11
  277. data/src/core/lib/iomgr/fork_posix.cc +13 -12
  278. data/src/core/lib/iomgr/gethostname.h +0 -8
  279. data/src/core/lib/iomgr/gethostname_sysconf.cc +1 -1
  280. data/src/core/lib/iomgr/iocp_windows.cc +14 -16
  281. data/src/core/lib/iomgr/iocp_windows.h +1 -10
  282. data/src/core/lib/iomgr/iomgr.cc +60 -59
  283. data/src/core/lib/iomgr/iomgr.h +3 -12
  284. data/src/core/lib/iomgr/iomgr_internal.h +0 -8
  285. data/src/core/lib/iomgr/iomgr_uv.cc +2 -3
  286. data/src/core/lib/iomgr/iomgr_uv.h +0 -8
  287. data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -1
  288. data/src/core/lib/iomgr/load_file.cc +1 -1
  289. data/src/core/lib/iomgr/load_file.h +0 -8
  290. data/src/core/lib/iomgr/lockfree_event.cc +7 -8
  291. data/src/core/lib/iomgr/lockfree_event.h +3 -3
  292. data/src/core/lib/iomgr/polling_entity.cc +6 -10
  293. data/src/core/lib/iomgr/polling_entity.h +2 -11
  294. data/src/core/lib/iomgr/pollset.h +4 -13
  295. data/src/core/lib/iomgr/pollset_set.h +5 -18
  296. data/src/core/lib/iomgr/pollset_set_uv.cc +5 -10
  297. data/src/core/lib/iomgr/pollset_set_windows.cc +5 -10
  298. data/src/core/lib/iomgr/pollset_uv.cc +8 -9
  299. data/src/core/lib/iomgr/pollset_uv.h +0 -8
  300. data/src/core/lib/iomgr/pollset_windows.cc +14 -15
  301. data/src/core/lib/iomgr/pollset_windows.h +0 -8
  302. data/src/core/lib/iomgr/port.h +6 -1
  303. data/src/core/lib/iomgr/resolve_address.h +1 -10
  304. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -12
  305. data/src/core/lib/iomgr/resolve_address_uv.cc +7 -8
  306. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -9
  307. data/src/core/lib/iomgr/resource_quota.cc +77 -107
  308. data/src/core/lib/iomgr/resource_quota.h +8 -25
  309. data/src/core/lib/iomgr/sockaddr_utils.cc +1 -1
  310. data/src/core/lib/iomgr/sockaddr_utils.h +0 -8
  311. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  312. data/src/core/lib/iomgr/socket_factory_posix.h +0 -8
  313. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  314. data/src/core/lib/iomgr/socket_mutator.h +1 -9
  315. data/src/core/lib/iomgr/socket_utils.h +0 -8
  316. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -1
  317. data/src/core/lib/iomgr/socket_utils_posix.h +0 -8
  318. data/src/core/lib/iomgr/socket_windows.cc +8 -11
  319. data/src/core/lib/iomgr/socket_windows.h +3 -14
  320. data/src/core/lib/iomgr/tcp_client.h +1 -10
  321. data/src/core/lib/iomgr/tcp_client_posix.cc +94 -78
  322. data/src/core/lib/iomgr/tcp_client_posix.h +36 -8
  323. data/src/core/lib/iomgr/tcp_client_uv.cc +16 -23
  324. data/src/core/lib/iomgr/tcp_client_windows.cc +22 -25
  325. data/src/core/lib/iomgr/tcp_posix.cc +131 -153
  326. data/src/core/lib/iomgr/tcp_posix.h +3 -12
  327. data/src/core/lib/iomgr/tcp_server.h +6 -17
  328. data/src/core/lib/iomgr/tcp_server_posix.cc +31 -35
  329. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -8
  330. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
  331. data/src/core/lib/iomgr/tcp_server_uv.cc +23 -34
  332. data/src/core/lib/iomgr/tcp_server_windows.cc +24 -34
  333. data/src/core/lib/iomgr/tcp_uv.cc +42 -56
  334. data/src/core/lib/iomgr/tcp_uv.h +0 -8
  335. data/src/core/lib/iomgr/tcp_windows.cc +43 -50
  336. data/src/core/lib/iomgr/tcp_windows.h +1 -9
  337. data/src/core/lib/iomgr/time_averaged_stats.h +0 -8
  338. data/src/core/lib/iomgr/timer.h +6 -15
  339. data/src/core/lib/iomgr/timer_generic.cc +22 -27
  340. data/src/core/lib/iomgr/timer_heap.h +0 -8
  341. data/src/core/lib/iomgr/timer_manager.cc +17 -19
  342. data/src/core/lib/iomgr/timer_manager.h +0 -8
  343. data/src/core/lib/iomgr/timer_uv.cc +12 -14
  344. data/src/core/lib/iomgr/udp_server.cc +148 -54
  345. data/src/core/lib/iomgr/udp_server.h +16 -21
  346. data/src/core/lib/iomgr/unix_sockets_posix.h +0 -8
  347. data/src/core/lib/iomgr/wakeup_fd_cv.cc +4 -4
  348. data/src/core/lib/iomgr/wakeup_fd_cv.h +12 -20
  349. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -1
  350. data/src/core/lib/iomgr/wakeup_fd_pipe.h +0 -8
  351. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -8
  352. data/src/core/lib/json/json.h +0 -8
  353. data/src/core/lib/json/json_reader.h +0 -8
  354. data/src/core/lib/json/json_writer.h +0 -8
  355. data/src/core/lib/profiling/basic_timers.cc +3 -2
  356. data/src/core/lib/profiling/timers.h +0 -8
  357. data/src/core/lib/security/context/security_context.cc +9 -10
  358. data/src/core/lib/security/context/security_context.h +0 -8
  359. data/src/core/lib/security/credentials/composite/composite_credentials.cc +23 -28
  360. data/src/core/lib/security/credentials/composite/composite_credentials.h +0 -8
  361. data/src/core/lib/security/credentials/credentials.cc +33 -42
  362. data/src/core/lib/security/credentials/credentials.h +24 -43
  363. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
  364. data/src/core/lib/security/credentials/fake/fake_credentials.cc +16 -22
  365. data/src/core/lib/security/credentials/fake/fake_credentials.h +0 -8
  366. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +3 -3
  367. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +28 -34
  368. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +0 -8
  369. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -13
  370. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  371. data/src/core/lib/security/credentials/jwt/json_token.h +0 -8
  372. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -20
  373. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +1 -10
  374. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +56 -72
  375. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +5 -17
  376. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +47 -55
  377. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +3 -12
  378. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +23 -28
  379. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -13
  380. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +0 -8
  381. data/src/core/lib/security/transport/auth_filters.h +0 -8
  382. data/src/core/lib/security/transport/client_auth_filter.cc +45 -54
  383. data/src/core/lib/security/transport/lb_targets_info.cc +2 -2
  384. data/src/core/lib/security/transport/lb_targets_info.h +0 -8
  385. data/src/core/lib/security/transport/secure_endpoint.cc +54 -68
  386. data/src/core/lib/security/transport/secure_endpoint.h +0 -8
  387. data/src/core/lib/security/transport/security_connector.cc +62 -86
  388. data/src/core/lib/security/transport/security_connector.h +22 -39
  389. data/src/core/lib/security/transport/security_handshaker.cc +83 -106
  390. data/src/core/lib/security/transport/security_handshaker.h +1 -10
  391. data/src/core/lib/security/transport/server_auth_filter.cc +31 -38
  392. data/src/core/lib/security/transport/tsi_error.h +0 -8
  393. data/src/core/lib/security/util/json_util.h +0 -8
  394. data/src/core/lib/slice/b64.cc +5 -6
  395. data/src/core/lib/slice/b64.h +3 -12
  396. data/src/core/lib/slice/percent_encoding.h +0 -8
  397. data/src/core/lib/slice/slice.cc +8 -9
  398. data/src/core/lib/slice/slice_buffer.cc +11 -16
  399. data/src/core/lib/slice/slice_hash_table.cc +5 -7
  400. data/src/core/lib/slice/slice_hash_table.h +2 -12
  401. data/src/core/lib/slice/slice_intern.cc +4 -5
  402. data/src/core/lib/slice/slice_internal.h +4 -15
  403. data/src/core/lib/slice/slice_string_helpers.cc +1 -1
  404. data/src/core/lib/slice/slice_string_helpers.h +1 -9
  405. data/src/core/lib/surface/alarm.cc +11 -14
  406. data/src/core/lib/surface/alarm_internal.h +0 -8
  407. data/src/core/lib/surface/byte_buffer.cc +2 -3
  408. data/src/core/lib/surface/byte_buffer_reader.cc +7 -9
  409. data/src/core/lib/surface/call.cc +198 -241
  410. data/src/core/lib/surface/call.h +9 -23
  411. data/src/core/lib/surface/call_details.cc +3 -4
  412. data/src/core/lib/surface/call_log_batch.cc +1 -1
  413. data/src/core/lib/surface/call_test_only.h +0 -8
  414. data/src/core/lib/surface/channel.cc +53 -64
  415. data/src/core/lib/surface/channel.h +12 -23
  416. data/src/core/lib/surface/channel_init.cc +2 -3
  417. data/src/core/lib/surface/channel_init.h +2 -12
  418. data/src/core/lib/surface/channel_ping.cc +7 -9
  419. data/src/core/lib/surface/channel_stack_type.h +0 -8
  420. data/src/core/lib/surface/completion_queue.cc +158 -176
  421. data/src/core/lib/surface/completion_queue.h +9 -20
  422. data/src/core/lib/surface/completion_queue_factory.h +0 -8
  423. data/src/core/lib/surface/event_string.cc +1 -1
  424. data/src/core/lib/surface/event_string.h +0 -8
  425. data/src/core/lib/surface/init.cc +27 -25
  426. data/src/core/lib/surface/init.h +0 -8
  427. data/src/core/lib/surface/init_secure.cc +2 -2
  428. data/src/core/lib/surface/lame_client.cc +30 -33
  429. data/src/core/lib/surface/lame_client.h +0 -8
  430. data/src/core/lib/surface/server.cc +151 -203
  431. data/src/core/lib/surface/server.h +7 -16
  432. data/src/core/lib/surface/validate_metadata.h +0 -8
  433. data/src/core/lib/surface/version.cc +2 -2
  434. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  435. data/src/core/lib/transport/bdp_estimator.h +1 -1
  436. data/src/core/lib/transport/byte_stream.cc +24 -38
  437. data/src/core/lib/transport/byte_stream.h +10 -25
  438. data/src/core/lib/transport/connectivity_state.cc +9 -13
  439. data/src/core/lib/transport/connectivity_state.h +4 -14
  440. data/src/core/lib/transport/error_utils.cc +6 -6
  441. data/src/core/lib/transport/error_utils.h +2 -11
  442. data/src/core/lib/transport/metadata.cc +21 -23
  443. data/src/core/lib/transport/metadata.h +8 -20
  444. data/src/core/lib/transport/metadata_batch.cc +34 -45
  445. data/src/core/lib/transport/metadata_batch.h +18 -32
  446. data/src/core/lib/transport/service_config.cc +11 -15
  447. data/src/core/lib/transport/service_config.h +3 -13
  448. data/src/core/lib/transport/static_metadata.cc +1 -1
  449. data/src/core/lib/transport/static_metadata.h +1 -7
  450. data/src/core/lib/transport/status_conversion.cc +2 -3
  451. data/src/core/lib/transport/status_conversion.h +1 -10
  452. data/src/core/lib/transport/timeout_encoding.cc +1 -1
  453. data/src/core/lib/transport/timeout_encoding.h +1 -9
  454. data/src/core/lib/transport/transport.cc +36 -50
  455. data/src/core/lib/transport/transport.h +28 -30
  456. data/src/core/lib/transport/transport_impl.h +12 -23
  457. data/src/core/lib/transport/transport_op_string.cc +2 -2
  458. data/src/core/plugin_registry/grpc_plugin_registry.cc +34 -34
  459. data/src/core/tsi/fake_transport_security.cc +7 -10
  460. data/src/core/tsi/fake_transport_security.h +0 -8
  461. data/src/core/tsi/gts_transport_security.cc +2 -2
  462. data/src/core/tsi/gts_transport_security.h +0 -8
  463. data/src/core/tsi/ssl_transport_security.cc +3 -0
  464. data/src/core/tsi/ssl_transport_security.h +0 -8
  465. data/src/core/tsi/ssl_types.h +0 -8
  466. data/src/core/tsi/transport_security.h +1 -9
  467. data/src/core/tsi/transport_security_adapter.h +0 -8
  468. data/src/core/tsi/transport_security_grpc.cc +11 -18
  469. data/src/core/tsi/transport_security_grpc.h +9 -21
  470. data/src/core/tsi/transport_security_interface.h +0 -8
  471. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -30
  472. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -48
  473. data/src/ruby/lib/grpc/version.rb +1 -1
  474. data/src/ruby/spec/channel_connection_spec.rb +2 -1
  475. data/src/ruby/spec/client_auth_spec.rb +1 -1
  476. data/src/ruby/spec/client_server_spec.rb +2 -2
  477. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  478. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  479. data/src/ruby/spec/generic/interceptor_registry_spec.rb +1 -1
  480. data/src/ruby/spec/generic/rpc_server_spec.rb +12 -12
  481. data/src/ruby/spec/google_rpc_status_utils_spec.rb +3 -2
  482. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  483. data/src/ruby/spec/server_spec.rb +9 -9
  484. data/src/ruby/spec/support/helpers.rb +35 -1
  485. metadata +68 -66
  486. data/include/grpc/impl/codegen/exec_ctx_fwd.h +0 -26
  487. data/include/grpc/support/histogram.h +0 -64
  488. data/src/core/lib/support/histogram.cc +0 -227
@@ -89,8 +89,7 @@ void grpc_channel_init_shutdown(void) {
89
89
  }
90
90
  }
91
91
 
92
- bool grpc_channel_init_create_stack(grpc_exec_ctx* exec_ctx,
93
- grpc_channel_stack_builder* builder,
92
+ bool grpc_channel_init_create_stack(grpc_channel_stack_builder* builder,
94
93
  grpc_channel_stack_type type) {
95
94
  GPR_ASSERT(g_finalized);
96
95
 
@@ -99,7 +98,7 @@ bool grpc_channel_init_create_stack(grpc_exec_ctx* exec_ctx,
99
98
 
100
99
  for (size_t i = 0; i < g_slots[type].num_slots; i++) {
101
100
  const stage_slot* slot = &g_slots[type].slots[i];
102
- if (!slot->fn(exec_ctx, builder, slot->arg)) {
101
+ if (!slot->fn(builder, slot->arg)) {
103
102
  return false;
104
103
  }
105
104
  }
@@ -25,10 +25,6 @@
25
25
 
26
26
  #define GRPC_CHANNEL_INIT_BUILTIN_PRIORITY 10000
27
27
 
28
- #ifdef __cplusplus
29
- extern "C" {
30
- #endif
31
-
32
28
  /// This module provides a way for plugins (and the grpc core library itself)
33
29
  /// to register mutators for channel stacks.
34
30
  /// It also provides a universal entry path to run those mutators to build
@@ -36,8 +32,7 @@ extern "C" {
36
32
 
37
33
  /// One stage of mutation: call functions against \a builder to influence the
38
34
  /// finally constructed channel stack
39
- typedef bool (*grpc_channel_init_stage)(grpc_exec_ctx* exec_ctx,
40
- grpc_channel_stack_builder* builder,
35
+ typedef bool (*grpc_channel_init_stage)(grpc_channel_stack_builder* builder,
41
36
  void* arg);
42
37
 
43
38
  /// Global initialization of the system
@@ -70,12 +65,7 @@ void grpc_channel_init_shutdown(void);
70
65
  /// \a optional_transport is either NULL or a constructed transport object
71
66
  /// Returns a pointer to the base of the memory allocated (the actual channel
72
67
  /// stack object will be prefix_bytes past that pointer)
73
- bool grpc_channel_init_create_stack(grpc_exec_ctx* exec_ctx,
74
- grpc_channel_stack_builder* builder,
68
+ bool grpc_channel_init_create_stack(grpc_channel_stack_builder* builder,
75
69
  grpc_channel_stack_type type);
76
70
 
77
- #ifdef __cplusplus
78
- }
79
- #endif
80
-
81
71
  #endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_INIT_H */
@@ -33,15 +33,14 @@ typedef struct {
33
33
  grpc_cq_completion completion_storage;
34
34
  } ping_result;
35
35
 
36
- static void ping_destroy(grpc_exec_ctx* exec_ctx, void* arg,
37
- grpc_cq_completion* storage) {
36
+ static void ping_destroy(void* arg, grpc_cq_completion* storage) {
38
37
  gpr_free(arg);
39
38
  }
40
39
 
41
- static void ping_done(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) {
40
+ static void ping_done(void* arg, grpc_error* error) {
42
41
  ping_result* pr = (ping_result*)arg;
43
- grpc_cq_end_op(exec_ctx, pr->cq, pr->tag, GRPC_ERROR_REF(error), ping_destroy,
44
- pr, &pr->completion_storage);
42
+ grpc_cq_end_op(pr->cq, pr->tag, GRPC_ERROR_REF(error), ping_destroy, pr,
43
+ &pr->completion_storage);
45
44
  }
46
45
 
47
46
  void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq,
@@ -52,14 +51,13 @@ void grpc_channel_ping(grpc_channel* channel, grpc_completion_queue* cq,
52
51
  ping_result* pr = (ping_result*)gpr_malloc(sizeof(*pr));
53
52
  grpc_channel_element* top_elem =
54
53
  grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
55
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
54
+ grpc_core::ExecCtx exec_ctx;
56
55
  GPR_ASSERT(reserved == nullptr);
57
56
  pr->tag = tag;
58
57
  pr->cq = cq;
59
58
  GRPC_CLOSURE_INIT(&pr->closure, ping_done, pr, grpc_schedule_on_exec_ctx);
60
- op->send_ping = &pr->closure;
59
+ op->send_ping.on_ack = &pr->closure;
61
60
  op->bind_pollset = grpc_cq_pollset(cq);
62
61
  GPR_ASSERT(grpc_cq_begin_op(cq, tag));
63
- top_elem->filter->start_transport_op(&exec_ctx, top_elem, op);
64
- grpc_exec_ctx_finish(&exec_ctx);
62
+ top_elem->filter->start_transport_op(top_elem, op);
65
63
  }
@@ -21,10 +21,6 @@
21
21
 
22
22
  #include <stdbool.h>
23
23
 
24
- #ifdef __cplusplus
25
- extern "C" {
26
- #endif
27
-
28
24
  typedef enum {
29
25
  // normal top-half client channel with load-balancing, connection management
30
26
  GRPC_CLIENT_CHANNEL,
@@ -46,8 +42,4 @@ bool grpc_channel_stack_type_is_client(grpc_channel_stack_type type);
46
42
 
47
43
  const char* grpc_channel_stack_type_string(grpc_channel_stack_type type);
48
44
 
49
- #ifdef __cplusplus
50
- }
51
- #endif
52
-
53
45
  #endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_STACK_TYPE_H */
@@ -31,11 +31,11 @@
31
31
  #include <grpc/support/tls.h>
32
32
 
33
33
  #include "src/core/lib/debug/stats.h"
34
+ #include "src/core/lib/gpr/spinlock.h"
35
+ #include "src/core/lib/gpr/string.h"
34
36
  #include "src/core/lib/iomgr/pollset.h"
35
37
  #include "src/core/lib/iomgr/timer.h"
36
38
  #include "src/core/lib/profiling/timers.h"
37
- #include "src/core/lib/support/spinlock.h"
38
- #include "src/core/lib/support/string.h"
39
39
  #include "src/core/lib/surface/api_trace.h"
40
40
  #include "src/core/lib/surface/call.h"
41
41
  #include "src/core/lib/surface/event_string.h"
@@ -62,13 +62,12 @@ typedef struct {
62
62
  bool can_listen;
63
63
  size_t (*size)(void);
64
64
  void (*init)(grpc_pollset* pollset, gpr_mu** mu);
65
- grpc_error* (*kick)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
65
+ grpc_error* (*kick)(grpc_pollset* pollset,
66
66
  grpc_pollset_worker* specific_worker);
67
- grpc_error* (*work)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
68
- grpc_pollset_worker** worker, grpc_millis deadline);
69
- void (*shutdown)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
70
- grpc_closure* closure);
71
- void (*destroy)(grpc_exec_ctx* exec_ctx, grpc_pollset* pollset);
67
+ grpc_error* (*work)(grpc_pollset* pollset, grpc_pollset_worker** worker,
68
+ grpc_millis deadline);
69
+ void (*shutdown)(grpc_pollset* pollset, grpc_closure* closure);
70
+ void (*destroy)(grpc_pollset* pollset);
72
71
  } cq_poller_vtable;
73
72
 
74
73
  typedef struct non_polling_worker {
@@ -94,14 +93,12 @@ static void non_polling_poller_init(grpc_pollset* pollset, gpr_mu** mu) {
94
93
  *mu = &npp->mu;
95
94
  }
96
95
 
97
- static void non_polling_poller_destroy(grpc_exec_ctx* exec_ctx,
98
- grpc_pollset* pollset) {
96
+ static void non_polling_poller_destroy(grpc_pollset* pollset) {
99
97
  non_polling_poller* npp = (non_polling_poller*)pollset;
100
98
  gpr_mu_destroy(&npp->mu);
101
99
  }
102
100
 
103
- static grpc_error* non_polling_poller_work(grpc_exec_ctx* exec_ctx,
104
- grpc_pollset* pollset,
101
+ static grpc_error* non_polling_poller_work(grpc_pollset* pollset,
105
102
  grpc_pollset_worker** worker,
106
103
  grpc_millis deadline) {
107
104
  non_polling_poller* npp = (non_polling_poller*)pollset;
@@ -118,16 +115,16 @@ static grpc_error* non_polling_poller_work(grpc_exec_ctx* exec_ctx,
118
115
  }
119
116
  w.kicked = false;
120
117
  gpr_timespec deadline_ts =
121
- grpc_millis_to_timespec(deadline, GPR_CLOCK_REALTIME);
118
+ grpc_millis_to_timespec(deadline, GPR_CLOCK_MONOTONIC);
122
119
  while (!npp->shutdown && !w.kicked &&
123
120
  !gpr_cv_wait(&w.cv, &npp->mu, deadline_ts))
124
121
  ;
125
- grpc_exec_ctx_invalidate_now(exec_ctx);
122
+ grpc_core::ExecCtx::Get()->InvalidateNow();
126
123
  if (&w == npp->root) {
127
124
  npp->root = w.next;
128
125
  if (&w == npp->root) {
129
126
  if (npp->shutdown) {
130
- GRPC_CLOSURE_SCHED(exec_ctx, npp->shutdown, GRPC_ERROR_NONE);
127
+ GRPC_CLOSURE_SCHED(npp->shutdown, GRPC_ERROR_NONE);
131
128
  }
132
129
  npp->root = nullptr;
133
130
  }
@@ -140,8 +137,7 @@ static grpc_error* non_polling_poller_work(grpc_exec_ctx* exec_ctx,
140
137
  }
141
138
 
142
139
  static grpc_error* non_polling_poller_kick(
143
- grpc_exec_ctx* exec_ctx, grpc_pollset* pollset,
144
- grpc_pollset_worker* specific_worker) {
140
+ grpc_pollset* pollset, grpc_pollset_worker* specific_worker) {
145
141
  non_polling_poller* p = (non_polling_poller*)pollset;
146
142
  if (specific_worker == nullptr)
147
143
  specific_worker = (grpc_pollset_worker*)p->root;
@@ -155,14 +151,13 @@ static grpc_error* non_polling_poller_kick(
155
151
  return GRPC_ERROR_NONE;
156
152
  }
157
153
 
158
- static void non_polling_poller_shutdown(grpc_exec_ctx* exec_ctx,
159
- grpc_pollset* pollset,
154
+ static void non_polling_poller_shutdown(grpc_pollset* pollset,
160
155
  grpc_closure* closure) {
161
156
  non_polling_poller* p = (non_polling_poller*)pollset;
162
157
  GPR_ASSERT(closure != nullptr);
163
158
  p->shutdown = closure;
164
159
  if (p->root == nullptr) {
165
- GRPC_CLOSURE_SCHED(exec_ctx, closure, GRPC_ERROR_NONE);
160
+ GRPC_CLOSURE_SCHED(closure, GRPC_ERROR_NONE);
166
161
  } else {
167
162
  non_polling_worker* w = p->root;
168
163
  do {
@@ -189,13 +184,11 @@ typedef struct cq_vtable {
189
184
  grpc_cq_completion_type cq_completion_type;
190
185
  size_t data_size;
191
186
  void (*init)(void* data);
192
- void (*shutdown)(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq);
187
+ void (*shutdown)(grpc_completion_queue* cq);
193
188
  void (*destroy)(void* data);
194
189
  bool (*begin_op)(grpc_completion_queue* cq, void* tag);
195
- void (*end_op)(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq, void* tag,
196
- grpc_error* error,
197
- void (*done)(grpc_exec_ctx* exec_ctx, void* done_arg,
198
- grpc_cq_completion* storage),
190
+ void (*end_op)(grpc_completion_queue* cq, void* tag, grpc_error* error,
191
+ void (*done)(void* done_arg, grpc_cq_completion* storage),
199
192
  void* done_arg, grpc_cq_completion* storage);
200
193
  grpc_event (*next)(grpc_completion_queue* cq, gpr_timespec deadline,
201
194
  void* reserved);
@@ -280,31 +273,23 @@ struct grpc_completion_queue {
280
273
  };
281
274
 
282
275
  /* Forward declarations */
283
- static void cq_finish_shutdown_next(grpc_exec_ctx* exec_ctx,
284
- grpc_completion_queue* cq);
285
- static void cq_finish_shutdown_pluck(grpc_exec_ctx* exec_ctx,
286
- grpc_completion_queue* cq);
287
- static void cq_shutdown_next(grpc_exec_ctx* exec_ctx,
288
- grpc_completion_queue* cq);
289
- static void cq_shutdown_pluck(grpc_exec_ctx* exec_ctx,
290
- grpc_completion_queue* cq);
276
+ static void cq_finish_shutdown_next(grpc_completion_queue* cq);
277
+ static void cq_finish_shutdown_pluck(grpc_completion_queue* cq);
278
+ static void cq_shutdown_next(grpc_completion_queue* cq);
279
+ static void cq_shutdown_pluck(grpc_completion_queue* cq);
291
280
 
292
281
  static bool cq_begin_op_for_next(grpc_completion_queue* cq, void* tag);
293
282
  static bool cq_begin_op_for_pluck(grpc_completion_queue* cq, void* tag);
294
283
 
295
- static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
296
- grpc_completion_queue* cq, void* tag,
284
+ static void cq_end_op_for_next(grpc_completion_queue* cq, void* tag,
297
285
  grpc_error* error,
298
- void (*done)(grpc_exec_ctx* exec_ctx,
299
- void* done_arg,
286
+ void (*done)(void* done_arg,
300
287
  grpc_cq_completion* storage),
301
288
  void* done_arg, grpc_cq_completion* storage);
302
289
 
303
- static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
304
- grpc_completion_queue* cq, void* tag,
290
+ static void cq_end_op_for_pluck(grpc_completion_queue* cq, void* tag,
305
291
  grpc_error* error,
306
- void (*done)(grpc_exec_ctx* exec_ctx,
307
- void* done_arg,
292
+ void (*done)(void* done_arg,
308
293
  grpc_cq_completion* storage),
309
294
  void* done_arg, grpc_cq_completion* storage);
310
295
 
@@ -346,8 +331,7 @@ grpc_core::TraceFlag grpc_cq_event_timeout_trace(true, "queue_timeout");
346
331
  gpr_free(_ev); \
347
332
  }
348
333
 
349
- static void on_pollset_shutdown_done(grpc_exec_ctx* exec_ctx, void* cq,
350
- grpc_error* error);
334
+ static void on_pollset_shutdown_done(void* cq, grpc_error* error);
351
335
 
352
336
  void grpc_cq_global_init() {
353
337
  gpr_tls_init(&g_cached_event);
@@ -369,19 +353,18 @@ int grpc_completion_queue_thread_local_cache_flush(grpc_completion_queue* cq,
369
353
  if (storage != nullptr &&
370
354
  (grpc_completion_queue*)gpr_tls_get(&g_cached_cq) == cq) {
371
355
  *tag = storage->tag;
372
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
356
+ grpc_core::ExecCtx exec_ctx;
373
357
  *ok = (storage->next & (uintptr_t)(1)) == 1;
374
- storage->done(&exec_ctx, storage->done_arg, storage);
358
+ storage->done(storage->done_arg, storage);
375
359
  ret = 1;
376
360
  cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
377
361
  if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
378
362
  GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
379
363
  gpr_mu_lock(cq->mu);
380
- cq_finish_shutdown_next(&exec_ctx, cq);
364
+ cq_finish_shutdown_next(cq);
381
365
  gpr_mu_unlock(cq->mu);
382
- GRPC_CQ_INTERNAL_UNREF(&exec_ctx, cq, "shutting_down");
366
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
383
367
  }
384
- grpc_exec_ctx_finish(&exec_ctx);
385
368
  }
386
369
  gpr_tls_set(&g_cached_event, (intptr_t)0);
387
370
  gpr_tls_set(&g_cached_cq, (intptr_t)0);
@@ -406,24 +389,22 @@ static bool cq_event_queue_push(grpc_cq_event_queue* q, grpc_cq_completion* c) {
406
389
 
407
390
  static grpc_cq_completion* cq_event_queue_pop(grpc_cq_event_queue* q) {
408
391
  grpc_cq_completion* c = nullptr;
409
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
392
+ grpc_core::ExecCtx exec_ctx;
410
393
 
411
394
  if (gpr_spinlock_trylock(&q->queue_lock)) {
412
- GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_SUCCESSES(&exec_ctx);
395
+ GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_SUCCESSES();
413
396
 
414
397
  bool is_empty = false;
415
398
  c = (grpc_cq_completion*)gpr_mpscq_pop_and_check_end(&q->queue, &is_empty);
416
399
  gpr_spinlock_unlock(&q->queue_lock);
417
400
 
418
401
  if (c == nullptr && !is_empty) {
419
- GRPC_STATS_INC_CQ_EV_QUEUE_TRANSIENT_POP_FAILURES(&exec_ctx);
402
+ GRPC_STATS_INC_CQ_EV_QUEUE_TRANSIENT_POP_FAILURES();
420
403
  }
421
404
  } else {
422
- GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_FAILURES(&exec_ctx);
405
+ GRPC_STATS_INC_CQ_EV_QUEUE_TRYLOCK_FAILURES();
423
406
  }
424
407
 
425
- grpc_exec_ctx_finish(&exec_ctx);
426
-
427
408
  if (c) {
428
409
  gpr_atm_no_barrier_fetch_add(&q->num_queue_items, -1);
429
410
  }
@@ -453,9 +434,8 @@ grpc_completion_queue* grpc_completion_queue_create_internal(
453
434
  const cq_poller_vtable* poller_vtable =
454
435
  &g_poller_vtable_by_poller_type[polling_type];
455
436
 
456
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
457
- GRPC_STATS_INC_CQS_CREATED(&exec_ctx);
458
- grpc_exec_ctx_finish(&exec_ctx);
437
+ grpc_core::ExecCtx exec_ctx;
438
+ GRPC_STATS_INC_CQS_CREATED();
459
439
 
460
440
  cq = (grpc_completion_queue*)gpr_zalloc(sizeof(grpc_completion_queue) +
461
441
  vtable->data_size +
@@ -537,15 +517,14 @@ void grpc_cq_internal_ref(grpc_completion_queue* cq) {
537
517
  gpr_ref(&cq->owning_refs);
538
518
  }
539
519
 
540
- static void on_pollset_shutdown_done(grpc_exec_ctx* exec_ctx, void* arg,
541
- grpc_error* error) {
520
+ static void on_pollset_shutdown_done(void* arg, grpc_error* error) {
542
521
  grpc_completion_queue* cq = (grpc_completion_queue*)arg;
543
- GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "pollset_destroy");
522
+ GRPC_CQ_INTERNAL_UNREF(cq, "pollset_destroy");
544
523
  }
545
524
 
546
525
  #ifndef NDEBUG
547
- void grpc_cq_internal_unref(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq,
548
- const char* reason, const char* file, int line) {
526
+ void grpc_cq_internal_unref(grpc_completion_queue* cq, const char* reason,
527
+ const char* file, int line) {
549
528
  if (grpc_trace_cq_refcount.enabled()) {
550
529
  gpr_atm val = gpr_atm_no_barrier_load(&cq->owning_refs.count);
551
530
  gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
@@ -553,12 +532,11 @@ void grpc_cq_internal_unref(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq,
553
532
  reason);
554
533
  }
555
534
  #else
556
- void grpc_cq_internal_unref(grpc_exec_ctx* exec_ctx,
557
- grpc_completion_queue* cq) {
535
+ void grpc_cq_internal_unref(grpc_completion_queue* cq) {
558
536
  #endif
559
537
  if (gpr_unref(&cq->owning_refs)) {
560
538
  cq->vtable->destroy(DATA_FROM_CQ(cq));
561
- cq->poller_vtable->destroy(exec_ctx, POLLSET_FROM_CQ(cq));
539
+ cq->poller_vtable->destroy(POLLSET_FROM_CQ(cq));
562
540
  #ifndef NDEBUG
563
541
  gpr_free(cq->outstanding_tags);
564
542
  #endif
@@ -639,11 +617,9 @@ bool grpc_cq_begin_op(grpc_completion_queue* cq, void* tag) {
639
617
  /* Queue a GRPC_OP_COMPLETED operation to a completion queue (with a
640
618
  * completion
641
619
  * type of GRPC_CQ_NEXT) */
642
- static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
643
- grpc_completion_queue* cq, void* tag,
620
+ static void cq_end_op_for_next(grpc_completion_queue* cq, void* tag,
644
621
  grpc_error* error,
645
- void (*done)(grpc_exec_ctx* exec_ctx,
646
- void* done_arg,
622
+ void (*done)(void* done_arg,
647
623
  grpc_cq_completion* storage),
648
624
  void* done_arg, grpc_cq_completion* storage) {
649
625
  GPR_TIMER_BEGIN("cq_end_op_for_next", 0);
@@ -652,9 +628,9 @@ static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
652
628
  (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE)) {
653
629
  const char* errmsg = grpc_error_string(error);
654
630
  GRPC_API_TRACE(
655
- "cq_end_op_for_next(exec_ctx=%p, cq=%p, tag=%p, error=%s, "
631
+ "cq_end_op_for_next(cq=%p, tag=%p, error=%s, "
656
632
  "done=%p, done_arg=%p, storage=%p)",
657
- 7, (exec_ctx, cq, tag, errmsg, done, done_arg, storage));
633
+ 6, (cq, tag, errmsg, done, done_arg, storage));
658
634
  if (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE) {
659
635
  gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
660
636
  }
@@ -689,7 +665,7 @@ static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
689
665
  if (is_first) {
690
666
  gpr_mu_lock(cq->mu);
691
667
  grpc_error* kick_error =
692
- cq->poller_vtable->kick(exec_ctx, POLLSET_FROM_CQ(cq), nullptr);
668
+ cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), nullptr);
693
669
  gpr_mu_unlock(cq->mu);
694
670
 
695
671
  if (kick_error != GRPC_ERROR_NONE) {
@@ -701,17 +677,17 @@ static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
701
677
  if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
702
678
  GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
703
679
  gpr_mu_lock(cq->mu);
704
- cq_finish_shutdown_next(exec_ctx, cq);
680
+ cq_finish_shutdown_next(cq);
705
681
  gpr_mu_unlock(cq->mu);
706
- GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down");
682
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
707
683
  }
708
684
  } else {
709
685
  GRPC_CQ_INTERNAL_REF(cq, "shutting_down");
710
686
  gpr_atm_rel_store(&cqd->pending_events, 0);
711
687
  gpr_mu_lock(cq->mu);
712
- cq_finish_shutdown_next(exec_ctx, cq);
688
+ cq_finish_shutdown_next(cq);
713
689
  gpr_mu_unlock(cq->mu);
714
- GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down");
690
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
715
691
  }
716
692
  }
717
693
 
@@ -723,11 +699,9 @@ static void cq_end_op_for_next(grpc_exec_ctx* exec_ctx,
723
699
  /* Queue a GRPC_OP_COMPLETED operation to a completion queue (with a
724
700
  * completion
725
701
  * type of GRPC_CQ_PLUCK) */
726
- static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
727
- grpc_completion_queue* cq, void* tag,
702
+ static void cq_end_op_for_pluck(grpc_completion_queue* cq, void* tag,
728
703
  grpc_error* error,
729
- void (*done)(grpc_exec_ctx* exec_ctx,
730
- void* done_arg,
704
+ void (*done)(void* done_arg,
731
705
  grpc_cq_completion* storage),
732
706
  void* done_arg, grpc_cq_completion* storage) {
733
707
  cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
@@ -739,9 +713,9 @@ static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
739
713
  (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE)) {
740
714
  const char* errmsg = grpc_error_string(error);
741
715
  GRPC_API_TRACE(
742
- "cq_end_op_for_pluck(exec_ctx=%p, cq=%p, tag=%p, error=%s, "
716
+ "cq_end_op_for_pluck(cq=%p, tag=%p, error=%s, "
743
717
  "done=%p, done_arg=%p, storage=%p)",
744
- 7, (exec_ctx, cq, tag, errmsg, done, done_arg, storage));
718
+ 6, (cq, tag, errmsg, done, done_arg, storage));
745
719
  if (grpc_trace_operation_failures.enabled() && error != GRPC_ERROR_NONE) {
746
720
  gpr_log(GPR_ERROR, "Operation failed: tag=%p, error=%s", tag, errmsg);
747
721
  }
@@ -762,7 +736,7 @@ static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
762
736
  cqd->completed_tail = storage;
763
737
 
764
738
  if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
765
- cq_finish_shutdown_pluck(exec_ctx, cq);
739
+ cq_finish_shutdown_pluck(cq);
766
740
  gpr_mu_unlock(cq->mu);
767
741
  } else {
768
742
  grpc_pollset_worker* pluck_worker = nullptr;
@@ -774,7 +748,7 @@ static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
774
748
  }
775
749
 
776
750
  grpc_error* kick_error =
777
- cq->poller_vtable->kick(exec_ctx, POLLSET_FROM_CQ(cq), pluck_worker);
751
+ cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), pluck_worker);
778
752
 
779
753
  gpr_mu_unlock(cq->mu);
780
754
 
@@ -791,12 +765,10 @@ static void cq_end_op_for_pluck(grpc_exec_ctx* exec_ctx,
791
765
  GRPC_ERROR_UNREF(error);
792
766
  }
793
767
 
794
- void grpc_cq_end_op(grpc_exec_ctx* exec_ctx, grpc_completion_queue* cq,
795
- void* tag, grpc_error* error,
796
- void (*done)(grpc_exec_ctx* exec_ctx, void* done_arg,
797
- grpc_cq_completion* storage),
768
+ void grpc_cq_end_op(grpc_completion_queue* cq, void* tag, grpc_error* error,
769
+ void (*done)(void* done_arg, grpc_cq_completion* storage),
798
770
  void* done_arg, grpc_cq_completion* storage) {
799
- cq->vtable->end_op(exec_ctx, cq, tag, error, done, done_arg, storage);
771
+ cq->vtable->end_op(cq, tag, error, done, done_arg, storage);
800
772
  }
801
773
 
802
774
  typedef struct {
@@ -808,31 +780,40 @@ typedef struct {
808
780
  bool first_loop;
809
781
  } cq_is_finished_arg;
810
782
 
811
- static bool cq_is_next_finished(grpc_exec_ctx* exec_ctx, void* arg) {
812
- cq_is_finished_arg* a = (cq_is_finished_arg*)arg;
813
- grpc_completion_queue* cq = a->cq;
814
- cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
815
- GPR_ASSERT(a->stolen_completion == nullptr);
783
+ class ExecCtxNext : public grpc_core::ExecCtx {
784
+ public:
785
+ ExecCtxNext(void* arg) : ExecCtx(0), check_ready_to_finish_arg_(arg) {}
816
786
 
817
- gpr_atm current_last_seen_things_queued_ever =
818
- gpr_atm_no_barrier_load(&cqd->things_queued_ever);
787
+ bool CheckReadyToFinish() override {
788
+ cq_is_finished_arg* a = (cq_is_finished_arg*)check_ready_to_finish_arg_;
789
+ grpc_completion_queue* cq = a->cq;
790
+ cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
791
+ GPR_ASSERT(a->stolen_completion == nullptr);
819
792
 
820
- if (current_last_seen_things_queued_ever != a->last_seen_things_queued_ever) {
821
- a->last_seen_things_queued_ever =
793
+ gpr_atm current_last_seen_things_queued_ever =
822
794
  gpr_atm_no_barrier_load(&cqd->things_queued_ever);
823
795
 
824
- /* Pop a cq_completion from the queue. Returns NULL if the queue is empty
825
- * might return NULL in some cases even if the queue is not empty; but
826
- * that
827
- * is ok and doesn't affect correctness. Might effect the tail latencies a
828
- * bit) */
829
- a->stolen_completion = cq_event_queue_pop(&cqd->queue);
830
- if (a->stolen_completion != nullptr) {
831
- return true;
796
+ if (current_last_seen_things_queued_ever !=
797
+ a->last_seen_things_queued_ever) {
798
+ a->last_seen_things_queued_ever =
799
+ gpr_atm_no_barrier_load(&cqd->things_queued_ever);
800
+
801
+ /* Pop a cq_completion from the queue. Returns NULL if the queue is empty
802
+ * might return NULL in some cases even if the queue is not empty; but
803
+ * that
804
+ * is ok and doesn't affect correctness. Might effect the tail latencies a
805
+ * bit) */
806
+ a->stolen_completion = cq_event_queue_pop(&cqd->queue);
807
+ if (a->stolen_completion != nullptr) {
808
+ return true;
809
+ }
832
810
  }
811
+ return !a->first_loop && a->deadline < grpc_core::ExecCtx::Get()->Now();
833
812
  }
834
- return !a->first_loop && a->deadline < grpc_exec_ctx_now(exec_ctx);
835
- }
813
+
814
+ private:
815
+ void* check_ready_to_finish_arg_;
816
+ };
836
817
 
837
818
  #ifndef NDEBUG
838
819
  static void dump_pending_tags(grpc_completion_queue* cq) {
@@ -887,8 +868,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
887
868
  nullptr,
888
869
  nullptr,
889
870
  true};
890
- grpc_exec_ctx exec_ctx =
891
- GRPC_EXEC_CTX_INITIALIZER(0, cq_is_next_finished, &is_finished_arg);
871
+ ExecCtxNext exec_ctx(&is_finished_arg);
892
872
  for (;;) {
893
873
  grpc_millis iteration_deadline = deadline_millis;
894
874
 
@@ -898,7 +878,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
898
878
  ret.type = GRPC_OP_COMPLETE;
899
879
  ret.success = c->next & 1u;
900
880
  ret.tag = c->tag;
901
- c->done(&exec_ctx, c->done_arg, c);
881
+ c->done(c->done_arg, c);
902
882
  break;
903
883
  }
904
884
 
@@ -908,7 +888,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
908
888
  ret.type = GRPC_OP_COMPLETE;
909
889
  ret.success = c->next & 1u;
910
890
  ret.tag = c->tag;
911
- c->done(&exec_ctx, c->done_arg, c);
891
+ c->done(c->done_arg, c);
912
892
  break;
913
893
  } else {
914
894
  /* If c == NULL it means either the queue is empty OR in an transient
@@ -939,7 +919,7 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
939
919
  }
940
920
 
941
921
  if (!is_finished_arg.first_loop &&
942
- grpc_exec_ctx_now(&exec_ctx) >= deadline_millis) {
922
+ grpc_core::ExecCtx::Get()->Now() >= deadline_millis) {
943
923
  memset(&ret, 0, sizeof(ret));
944
924
  ret.type = GRPC_QUEUE_TIMEOUT;
945
925
  dump_pending_tags(cq);
@@ -949,8 +929,8 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
949
929
  /* The main polling work happens in grpc_pollset_work */
950
930
  gpr_mu_lock(cq->mu);
951
931
  cq->num_polls++;
952
- grpc_error* err = cq->poller_vtable->work(&exec_ctx, POLLSET_FROM_CQ(cq),
953
- nullptr, iteration_deadline);
932
+ grpc_error* err = cq->poller_vtable->work(POLLSET_FROM_CQ(cq), nullptr,
933
+ iteration_deadline);
954
934
  gpr_mu_unlock(cq->mu);
955
935
 
956
936
  if (err != GRPC_ERROR_NONE) {
@@ -969,13 +949,13 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
969
949
  if (cq_event_queue_num_items(&cqd->queue) > 0 &&
970
950
  gpr_atm_acq_load(&cqd->pending_events) > 0) {
971
951
  gpr_mu_lock(cq->mu);
972
- cq->poller_vtable->kick(&exec_ctx, POLLSET_FROM_CQ(cq), nullptr);
952
+ cq->poller_vtable->kick(POLLSET_FROM_CQ(cq), nullptr);
973
953
  gpr_mu_unlock(cq->mu);
974
954
  }
975
955
 
976
956
  GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, &ret);
977
- GRPC_CQ_INTERNAL_UNREF(&exec_ctx, cq, "next");
978
- grpc_exec_ctx_finish(&exec_ctx);
957
+ GRPC_CQ_INTERNAL_UNREF(cq, "next");
958
+
979
959
  GPR_ASSERT(is_finished_arg.stolen_completion == nullptr);
980
960
 
981
961
  GPR_TIMER_END("grpc_completion_queue_next", 0);
@@ -989,19 +969,16 @@ static grpc_event cq_next(grpc_completion_queue* cq, gpr_timespec deadline,
989
969
  - Must be called only once in completion queue's lifetime
990
970
  - grpc_completion_queue_shutdown() MUST have been called before calling
991
971
  this function */
992
- static void cq_finish_shutdown_next(grpc_exec_ctx* exec_ctx,
993
- grpc_completion_queue* cq) {
972
+ static void cq_finish_shutdown_next(grpc_completion_queue* cq) {
994
973
  cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
995
974
 
996
975
  GPR_ASSERT(cqd->shutdown_called);
997
976
  GPR_ASSERT(gpr_atm_no_barrier_load(&cqd->pending_events) == 0);
998
977
 
999
- cq->poller_vtable->shutdown(exec_ctx, POLLSET_FROM_CQ(cq),
1000
- &cq->pollset_shutdown_done);
978
+ cq->poller_vtable->shutdown(POLLSET_FROM_CQ(cq), &cq->pollset_shutdown_done);
1001
979
  }
1002
980
 
1003
- static void cq_shutdown_next(grpc_exec_ctx* exec_ctx,
1004
- grpc_completion_queue* cq) {
981
+ static void cq_shutdown_next(grpc_completion_queue* cq) {
1005
982
  cq_next_data* cqd = (cq_next_data*)DATA_FROM_CQ(cq);
1006
983
 
1007
984
  /* Need an extra ref for cq here because:
@@ -1014,7 +991,7 @@ static void cq_shutdown_next(grpc_exec_ctx* exec_ctx,
1014
991
  gpr_mu_lock(cq->mu);
1015
992
  if (cqd->shutdown_called) {
1016
993
  gpr_mu_unlock(cq->mu);
1017
- GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down");
994
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
1018
995
  return;
1019
996
  }
1020
997
  cqd->shutdown_called = true;
@@ -1022,10 +999,10 @@ static void cq_shutdown_next(grpc_exec_ctx* exec_ctx,
1022
999
  * cq_begin_op_for_next and and cq_end_op_for_next functions which read/write
1023
1000
  * on this counter without necessarily holding a lock on cq */
1024
1001
  if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
1025
- cq_finish_shutdown_next(exec_ctx, cq);
1002
+ cq_finish_shutdown_next(cq);
1026
1003
  }
1027
1004
  gpr_mu_unlock(cq->mu);
1028
- GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down");
1005
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down");
1029
1006
  }
1030
1007
 
1031
1008
  grpc_event grpc_completion_queue_next(grpc_completion_queue* cq,
@@ -1058,37 +1035,46 @@ static void del_plucker(grpc_completion_queue* cq, void* tag,
1058
1035
  GPR_UNREACHABLE_CODE(return );
1059
1036
  }
1060
1037
 
1061
- static bool cq_is_pluck_finished(grpc_exec_ctx* exec_ctx, void* arg) {
1062
- cq_is_finished_arg* a = (cq_is_finished_arg*)arg;
1063
- grpc_completion_queue* cq = a->cq;
1064
- cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
1038
+ class ExecCtxPluck : public grpc_core::ExecCtx {
1039
+ public:
1040
+ ExecCtxPluck(void* arg) : ExecCtx(0), check_ready_to_finish_arg_(arg) {}
1065
1041
 
1066
- GPR_ASSERT(a->stolen_completion == nullptr);
1067
- gpr_atm current_last_seen_things_queued_ever =
1068
- gpr_atm_no_barrier_load(&cqd->things_queued_ever);
1069
- if (current_last_seen_things_queued_ever != a->last_seen_things_queued_ever) {
1070
- gpr_mu_lock(cq->mu);
1071
- a->last_seen_things_queued_ever =
1042
+ bool CheckReadyToFinish() override {
1043
+ cq_is_finished_arg* a = (cq_is_finished_arg*)check_ready_to_finish_arg_;
1044
+ grpc_completion_queue* cq = a->cq;
1045
+ cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
1046
+
1047
+ GPR_ASSERT(a->stolen_completion == nullptr);
1048
+ gpr_atm current_last_seen_things_queued_ever =
1072
1049
  gpr_atm_no_barrier_load(&cqd->things_queued_ever);
1073
- grpc_cq_completion* c;
1074
- grpc_cq_completion* prev = &cqd->completed_head;
1075
- while ((c = (grpc_cq_completion*)(prev->next & ~(uintptr_t)1)) !=
1076
- &cqd->completed_head) {
1077
- if (c->tag == a->tag) {
1078
- prev->next = (prev->next & (uintptr_t)1) | (c->next & ~(uintptr_t)1);
1079
- if (c == cqd->completed_tail) {
1080
- cqd->completed_tail = prev;
1050
+ if (current_last_seen_things_queued_ever !=
1051
+ a->last_seen_things_queued_ever) {
1052
+ gpr_mu_lock(cq->mu);
1053
+ a->last_seen_things_queued_ever =
1054
+ gpr_atm_no_barrier_load(&cqd->things_queued_ever);
1055
+ grpc_cq_completion* c;
1056
+ grpc_cq_completion* prev = &cqd->completed_head;
1057
+ while ((c = (grpc_cq_completion*)(prev->next & ~(uintptr_t)1)) !=
1058
+ &cqd->completed_head) {
1059
+ if (c->tag == a->tag) {
1060
+ prev->next = (prev->next & (uintptr_t)1) | (c->next & ~(uintptr_t)1);
1061
+ if (c == cqd->completed_tail) {
1062
+ cqd->completed_tail = prev;
1063
+ }
1064
+ gpr_mu_unlock(cq->mu);
1065
+ a->stolen_completion = c;
1066
+ return true;
1081
1067
  }
1082
- gpr_mu_unlock(cq->mu);
1083
- a->stolen_completion = c;
1084
- return true;
1068
+ prev = c;
1085
1069
  }
1086
- prev = c;
1070
+ gpr_mu_unlock(cq->mu);
1087
1071
  }
1088
- gpr_mu_unlock(cq->mu);
1072
+ return !a->first_loop && a->deadline < grpc_core::ExecCtx::Get()->Now();
1089
1073
  }
1090
- return !a->first_loop && a->deadline < grpc_exec_ctx_now(exec_ctx);
1091
- }
1074
+
1075
+ private:
1076
+ void* check_ready_to_finish_arg_;
1077
+ };
1092
1078
 
1093
1079
  static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
1094
1080
  gpr_timespec deadline, void* reserved) {
@@ -1125,8 +1111,7 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
1125
1111
  nullptr,
1126
1112
  tag,
1127
1113
  true};
1128
- grpc_exec_ctx exec_ctx =
1129
- GRPC_EXEC_CTX_INITIALIZER(0, cq_is_pluck_finished, &is_finished_arg);
1114
+ ExecCtxPluck exec_ctx(&is_finished_arg);
1130
1115
  for (;;) {
1131
1116
  if (is_finished_arg.stolen_completion != nullptr) {
1132
1117
  gpr_mu_unlock(cq->mu);
@@ -1135,7 +1120,7 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
1135
1120
  ret.type = GRPC_OP_COMPLETE;
1136
1121
  ret.success = c->next & 1u;
1137
1122
  ret.tag = c->tag;
1138
- c->done(&exec_ctx, c->done_arg, c);
1123
+ c->done(c->done_arg, c);
1139
1124
  break;
1140
1125
  }
1141
1126
  prev = &cqd->completed_head;
@@ -1150,7 +1135,7 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
1150
1135
  ret.type = GRPC_OP_COMPLETE;
1151
1136
  ret.success = c->next & 1u;
1152
1137
  ret.tag = c->tag;
1153
- c->done(&exec_ctx, c->done_arg, c);
1138
+ c->done(c->done_arg, c);
1154
1139
  goto done;
1155
1140
  }
1156
1141
  prev = c;
@@ -1174,7 +1159,7 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
1174
1159
  break;
1175
1160
  }
1176
1161
  if (!is_finished_arg.first_loop &&
1177
- grpc_exec_ctx_now(&exec_ctx) >= deadline_millis) {
1162
+ grpc_core::ExecCtx::Get()->Now() >= deadline_millis) {
1178
1163
  del_plucker(cq, tag, &worker);
1179
1164
  gpr_mu_unlock(cq->mu);
1180
1165
  memset(&ret, 0, sizeof(ret));
@@ -1183,8 +1168,8 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
1183
1168
  break;
1184
1169
  }
1185
1170
  cq->num_polls++;
1186
- grpc_error* err = cq->poller_vtable->work(&exec_ctx, POLLSET_FROM_CQ(cq),
1187
- &worker, deadline_millis);
1171
+ grpc_error* err =
1172
+ cq->poller_vtable->work(POLLSET_FROM_CQ(cq), &worker, deadline_millis);
1188
1173
  if (err != GRPC_ERROR_NONE) {
1189
1174
  del_plucker(cq, tag, &worker);
1190
1175
  gpr_mu_unlock(cq->mu);
@@ -1202,8 +1187,8 @@ static grpc_event cq_pluck(grpc_completion_queue* cq, void* tag,
1202
1187
  }
1203
1188
  done:
1204
1189
  GRPC_SURFACE_TRACE_RETURNED_EVENT(cq, &ret);
1205
- GRPC_CQ_INTERNAL_UNREF(&exec_ctx, cq, "pluck");
1206
- grpc_exec_ctx_finish(&exec_ctx);
1190
+ GRPC_CQ_INTERNAL_UNREF(cq, "pluck");
1191
+
1207
1192
  GPR_ASSERT(is_finished_arg.stolen_completion == nullptr);
1208
1193
 
1209
1194
  GPR_TIMER_END("grpc_completion_queue_pluck", 0);
@@ -1216,22 +1201,19 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue* cq, void* tag,
1216
1201
  return cq->vtable->pluck(cq, tag, deadline, reserved);
1217
1202
  }
1218
1203
 
1219
- static void cq_finish_shutdown_pluck(grpc_exec_ctx* exec_ctx,
1220
- grpc_completion_queue* cq) {
1204
+ static void cq_finish_shutdown_pluck(grpc_completion_queue* cq) {
1221
1205
  cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
1222
1206
 
1223
1207
  GPR_ASSERT(cqd->shutdown_called);
1224
1208
  GPR_ASSERT(!gpr_atm_no_barrier_load(&cqd->shutdown));
1225
1209
  gpr_atm_no_barrier_store(&cqd->shutdown, 1);
1226
1210
 
1227
- cq->poller_vtable->shutdown(exec_ctx, POLLSET_FROM_CQ(cq),
1228
- &cq->pollset_shutdown_done);
1211
+ cq->poller_vtable->shutdown(POLLSET_FROM_CQ(cq), &cq->pollset_shutdown_done);
1229
1212
  }
1230
1213
 
1231
1214
  /* NOTE: This function is almost exactly identical to cq_shutdown_next() but
1232
1215
  * merging them is a bit tricky and probably not worth it */
1233
- static void cq_shutdown_pluck(grpc_exec_ctx* exec_ctx,
1234
- grpc_completion_queue* cq) {
1216
+ static void cq_shutdown_pluck(grpc_completion_queue* cq) {
1235
1217
  cq_pluck_data* cqd = (cq_pluck_data*)DATA_FROM_CQ(cq);
1236
1218
 
1237
1219
  /* Need an extra ref for cq here because:
@@ -1244,25 +1226,25 @@ static void cq_shutdown_pluck(grpc_exec_ctx* exec_ctx,
1244
1226
  gpr_mu_lock(cq->mu);
1245
1227
  if (cqd->shutdown_called) {
1246
1228
  gpr_mu_unlock(cq->mu);
1247
- GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down (pluck cq)");
1229
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (pluck cq)");
1248
1230
  return;
1249
1231
  }
1250
1232
  cqd->shutdown_called = true;
1251
1233
  if (gpr_atm_full_fetch_add(&cqd->pending_events, -1) == 1) {
1252
- cq_finish_shutdown_pluck(exec_ctx, cq);
1234
+ cq_finish_shutdown_pluck(cq);
1253
1235
  }
1254
1236
  gpr_mu_unlock(cq->mu);
1255
- GRPC_CQ_INTERNAL_UNREF(exec_ctx, cq, "shutting_down (pluck cq)");
1237
+ GRPC_CQ_INTERNAL_UNREF(cq, "shutting_down (pluck cq)");
1256
1238
  }
1257
1239
 
1258
1240
  /* Shutdown simply drops a ref that we reserved at creation time; if we drop
1259
1241
  to zero here, then enter shutdown mode and wake up any waiters */
1260
1242
  void grpc_completion_queue_shutdown(grpc_completion_queue* cq) {
1261
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
1243
+ grpc_core::ExecCtx exec_ctx;
1262
1244
  GPR_TIMER_BEGIN("grpc_completion_queue_shutdown", 0);
1263
1245
  GRPC_API_TRACE("grpc_completion_queue_shutdown(cq=%p)", 1, (cq));
1264
- cq->vtable->shutdown(&exec_ctx, cq);
1265
- grpc_exec_ctx_finish(&exec_ctx);
1246
+ cq->vtable->shutdown(cq);
1247
+
1266
1248
  GPR_TIMER_END("grpc_completion_queue_shutdown", 0);
1267
1249
  }
1268
1250
 
@@ -1271,9 +1253,9 @@ void grpc_completion_queue_destroy(grpc_completion_queue* cq) {
1271
1253
  GPR_TIMER_BEGIN("grpc_completion_queue_destroy", 0);
1272
1254
  grpc_completion_queue_shutdown(cq);
1273
1255
 
1274
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
1275
- GRPC_CQ_INTERNAL_UNREF(&exec_ctx, cq, "destroy");
1276
- grpc_exec_ctx_finish(&exec_ctx);
1256
+ grpc_core::ExecCtx exec_ctx;
1257
+ GRPC_CQ_INTERNAL_UNREF(cq, "destroy");
1258
+
1277
1259
  GPR_TIMER_END("grpc_completion_queue_destroy", 0);
1278
1260
  }
1279
1261