grpc 1.50.0 → 1.51.0

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

Potentially problematic release.


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

Files changed (459) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +131 -42
  3. data/include/grpc/event_engine/event_engine.h +10 -3
  4. data/include/grpc/event_engine/slice_buffer.h +17 -0
  5. data/include/grpc/grpc.h +0 -10
  6. data/include/grpc/impl/codegen/grpc_types.h +1 -5
  7. data/include/grpc/impl/codegen/port_platform.h +0 -3
  8. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +19 -13
  9. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +1 -0
  10. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  11. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -5
  12. data/src/core/ext/filters/client_channel/client_channel.cc +120 -140
  13. data/src/core/ext/filters/client_channel/client_channel.h +3 -4
  14. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +0 -2
  15. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  16. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  17. data/src/core/ext/filters/client_channel/{resolver_result_parsing.h → client_channel_service_config.h} +26 -23
  18. data/src/core/ext/filters/client_channel/connector.h +1 -1
  19. data/src/core/ext/filters/client_channel/dynamic_filters.cc +20 -47
  20. data/src/core/ext/filters/client_channel/dynamic_filters.h +7 -8
  21. data/src/core/ext/filters/client_channel/health/health_check_client.cc +3 -4
  22. data/src/core/ext/filters/client_channel/http_proxy.cc +0 -1
  23. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +3 -4
  24. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +5 -0
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +8 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +35 -44
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +0 -1
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -3
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +3 -4
  30. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +41 -29
  32. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +9 -11
  34. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -12
  35. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +8 -10
  36. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +26 -27
  37. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +7 -9
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +44 -26
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +17 -27
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/{xds.h → xds_attributes.h} +15 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +13 -7
  43. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +48 -47
  44. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -126
  45. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +9 -9
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -32
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +22 -23
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +50 -52
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +2 -4
  53. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -3
  54. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +34 -26
  55. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +3 -4
  56. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -7
  57. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +63 -46
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +80 -102
  59. data/src/core/ext/filters/client_channel/retry_service_config.cc +192 -234
  60. data/src/core/ext/filters/client_channel/retry_service_config.h +20 -23
  61. data/src/core/ext/filters/client_channel/retry_throttle.cc +8 -8
  62. data/src/core/ext/filters/client_channel/retry_throttle.h +8 -7
  63. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -2
  64. data/src/core/ext/filters/client_channel/subchannel.cc +21 -25
  65. data/src/core/ext/filters/client_channel/subchannel.h +2 -2
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +11 -12
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +13 -14
  68. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -4
  70. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  71. data/src/core/ext/filters/fault_injection/{service_config_parser.h → fault_injection_service_config_parser.h} +20 -12
  72. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -16
  73. data/src/core/ext/filters/http/client_authority_filter.cc +1 -1
  74. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +13 -13
  75. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +34 -34
  76. data/src/core/ext/filters/http/server/http_server_filter.cc +26 -25
  77. data/src/core/ext/filters/message_size/message_size_filter.cc +86 -117
  78. data/src/core/ext/filters/message_size/message_size_filter.h +22 -15
  79. data/src/core/ext/filters/rbac/rbac_filter.cc +12 -12
  80. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +728 -530
  81. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +4 -3
  82. data/src/core/ext/filters/server_config_selector/server_config_selector.h +1 -1
  83. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -7
  84. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +17 -21
  85. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +57 -72
  86. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +5 -5
  87. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  88. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +212 -253
  89. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -11
  90. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -3
  91. data/src/core/ext/transport/chttp2/transport/frame_data.cc +16 -15
  92. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  93. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +13 -13
  94. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -3
  95. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +10 -7
  96. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +15 -17
  97. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +5 -4
  98. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +5 -6
  99. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +1 -1
  100. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +2 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +31 -39
  102. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +7 -6
  103. data/src/core/ext/transport/chttp2/transport/internal.h +24 -8
  104. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -52
  105. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  106. data/src/core/ext/transport/chttp2/transport/varint.h +11 -8
  107. data/src/core/ext/transport/chttp2/transport/writing.cc +16 -16
  108. data/src/core/ext/transport/inproc/inproc_transport.cc +97 -115
  109. data/src/core/ext/xds/certificate_provider_store.cc +4 -4
  110. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +4 -7
  111. data/src/core/ext/xds/xds_api.cc +15 -68
  112. data/src/core/ext/xds/xds_api.h +3 -7
  113. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  114. data/src/core/ext/xds/xds_bootstrap_grpc.cc +3 -12
  115. data/src/core/ext/xds/xds_bootstrap_grpc.h +16 -1
  116. data/src/core/ext/xds/xds_certificate_provider.cc +22 -25
  117. data/src/core/ext/xds/xds_channel_stack_modifier.cc +0 -1
  118. data/src/core/ext/xds/xds_client.cc +122 -90
  119. data/src/core/ext/xds/xds_client.h +7 -2
  120. data/src/core/ext/xds/xds_client_grpc.cc +5 -24
  121. data/src/core/ext/xds/xds_cluster.cc +291 -183
  122. data/src/core/ext/xds/xds_cluster.h +11 -15
  123. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +32 -29
  124. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +35 -16
  125. data/src/core/ext/xds/xds_common_types.cc +208 -141
  126. data/src/core/ext/xds/xds_common_types.h +19 -13
  127. data/src/core/ext/xds/xds_endpoint.cc +214 -129
  128. data/src/core/ext/xds/xds_endpoint.h +4 -7
  129. data/src/core/ext/xds/xds_http_fault_filter.cc +56 -43
  130. data/src/core/ext/xds/xds_http_fault_filter.h +13 -21
  131. data/src/core/ext/xds/xds_http_filters.cc +60 -73
  132. data/src/core/ext/xds/xds_http_filters.h +67 -19
  133. data/src/core/ext/xds/xds_http_rbac_filter.cc +152 -207
  134. data/src/core/ext/xds/xds_http_rbac_filter.h +12 -15
  135. data/src/core/ext/xds/xds_lb_policy_registry.cc +122 -169
  136. data/src/core/ext/xds/xds_lb_policy_registry.h +10 -11
  137. data/src/core/ext/xds/xds_listener.cc +459 -417
  138. data/src/core/ext/xds/xds_listener.h +43 -47
  139. data/src/core/ext/xds/xds_resource_type.h +3 -11
  140. data/src/core/ext/xds/xds_resource_type_impl.h +8 -13
  141. data/src/core/ext/xds/xds_route_config.cc +94 -80
  142. data/src/core/ext/xds/xds_route_config.h +10 -10
  143. data/src/core/ext/xds/xds_routing.cc +2 -1
  144. data/src/core/ext/xds/xds_routing.h +2 -0
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +109 -94
  146. data/src/core/ext/xds/xds_transport_grpc.cc +4 -5
  147. data/src/core/lib/address_utils/parse_address.cc +11 -10
  148. data/src/core/lib/channel/channel_args.h +16 -1
  149. data/src/core/lib/channel/channel_stack.cc +23 -20
  150. data/src/core/lib/channel/channel_stack.h +17 -4
  151. data/src/core/lib/channel/channel_stack_builder.cc +4 -7
  152. data/src/core/lib/channel/channel_stack_builder.h +14 -6
  153. data/src/core/lib/channel/channel_stack_builder_impl.cc +25 -7
  154. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -0
  155. data/src/core/lib/channel/channel_trace.cc +4 -5
  156. data/src/core/lib/channel/channelz.cc +1 -1
  157. data/src/core/lib/channel/connected_channel.cc +695 -35
  158. data/src/core/lib/channel/connected_channel.h +0 -4
  159. data/src/core/lib/channel/promise_based_filter.cc +1004 -140
  160. data/src/core/lib/channel/promise_based_filter.h +364 -87
  161. data/src/core/lib/compression/message_compress.cc +5 -5
  162. data/src/core/lib/debug/event_log.cc +88 -0
  163. data/src/core/lib/debug/event_log.h +81 -0
  164. data/src/core/lib/debug/histogram_view.cc +69 -0
  165. data/src/core/lib/{slice/slice_refcount.cc → debug/histogram_view.h} +15 -13
  166. data/src/core/lib/debug/stats.cc +22 -119
  167. data/src/core/lib/debug/stats.h +29 -35
  168. data/src/core/lib/debug/stats_data.cc +224 -73
  169. data/src/core/lib/debug/stats_data.h +263 -122
  170. data/src/core/lib/event_engine/common_closures.h +71 -0
  171. data/src/core/lib/event_engine/default_event_engine.cc +38 -15
  172. data/src/core/lib/event_engine/default_event_engine.h +15 -3
  173. data/src/core/lib/event_engine/default_event_engine_factory.cc +2 -4
  174. data/src/core/lib/event_engine/memory_allocator.cc +1 -1
  175. data/src/core/lib/event_engine/poller.h +10 -4
  176. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  177. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  178. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  179. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  180. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  181. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  182. data/src/core/lib/event_engine/{executor/threaded_executor.cc → posix_engine/event_poller_posix_default.h} +13 -16
  183. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  184. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  185. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  186. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  187. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  188. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  189. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +453 -18
  190. data/src/core/lib/event_engine/posix_engine/posix_engine.h +148 -24
  191. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  192. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  193. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  194. data/src/core/lib/event_engine/posix_engine/timer.h +9 -8
  195. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +57 -194
  196. data/src/core/lib/event_engine/posix_engine/timer_manager.h +21 -49
  197. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  198. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  199. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  200. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  201. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  202. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  203. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  204. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  205. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  206. data/src/core/lib/event_engine/slice.cc +7 -6
  207. data/src/core/lib/event_engine/slice_buffer.cc +2 -2
  208. data/src/core/lib/event_engine/thread_pool.cc +106 -25
  209. data/src/core/lib/event_engine/thread_pool.h +32 -9
  210. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  211. data/src/core/lib/event_engine/windows/windows_engine.cc +18 -12
  212. data/src/core/lib/event_engine/windows/windows_engine.h +8 -4
  213. data/src/core/lib/experiments/config.cc +1 -1
  214. data/src/core/lib/experiments/experiments.cc +13 -2
  215. data/src/core/lib/experiments/experiments.h +8 -1
  216. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  217. data/src/core/lib/gpr/log_linux.cc +3 -4
  218. data/src/core/lib/gpr/string.h +1 -1
  219. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  220. data/src/core/lib/gprpp/load_file.cc +75 -0
  221. data/src/core/lib/gprpp/load_file.h +33 -0
  222. data/src/core/lib/gprpp/per_cpu.h +46 -0
  223. data/src/core/lib/gprpp/stat_posix.cc +5 -4
  224. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  225. data/src/core/lib/gprpp/status_helper.h +1 -3
  226. data/src/core/lib/gprpp/strerror.cc +41 -0
  227. data/src/core/{ext/xds/xds_resource_type.cc → lib/gprpp/strerror.h} +9 -13
  228. data/src/core/lib/gprpp/thd_windows.cc +1 -2
  229. data/src/core/lib/gprpp/time.cc +3 -4
  230. data/src/core/lib/gprpp/time.h +13 -2
  231. data/src/core/lib/gprpp/validation_errors.h +18 -1
  232. data/src/core/lib/http/httpcli.cc +40 -44
  233. data/src/core/lib/http/httpcli.h +6 -5
  234. data/src/core/lib/http/httpcli_security_connector.cc +4 -6
  235. data/src/core/lib/http/parser.cc +54 -65
  236. data/src/core/lib/iomgr/buffer_list.cc +105 -116
  237. data/src/core/lib/iomgr/buffer_list.h +60 -44
  238. data/src/core/lib/iomgr/call_combiner.cc +11 -10
  239. data/src/core/lib/iomgr/call_combiner.h +3 -4
  240. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  241. data/src/core/lib/iomgr/closure.h +49 -5
  242. data/src/core/lib/iomgr/combiner.cc +2 -2
  243. data/src/core/lib/iomgr/endpoint.h +1 -1
  244. data/src/core/lib/iomgr/endpoint_cfstream.cc +26 -25
  245. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  246. data/src/core/lib/iomgr/error.cc +27 -42
  247. data/src/core/lib/iomgr/error.h +22 -152
  248. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  249. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -25
  250. data/src/core/lib/iomgr/ev_poll_posix.cc +27 -31
  251. data/src/core/lib/iomgr/exec_ctx.cc +3 -4
  252. data/src/core/lib/iomgr/exec_ctx.h +2 -3
  253. data/src/core/lib/iomgr/executor.cc +1 -2
  254. data/src/core/lib/iomgr/internal_errqueue.cc +3 -1
  255. data/src/core/lib/iomgr/iocp_windows.cc +1 -0
  256. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  257. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -1
  258. data/src/core/lib/iomgr/iomgr_windows.cc +2 -1
  259. data/src/core/lib/iomgr/load_file.cc +5 -9
  260. data/src/core/lib/iomgr/lockfree_event.cc +10 -10
  261. data/src/core/lib/iomgr/pollset_windows.cc +4 -4
  262. data/src/core/lib/iomgr/python_util.h +2 -2
  263. data/src/core/lib/iomgr/resolve_address.cc +8 -3
  264. data/src/core/lib/iomgr/resolve_address.h +3 -4
  265. data/src/core/lib/iomgr/resolve_address_impl.h +1 -1
  266. data/src/core/lib/iomgr/resolve_address_posix.cc +14 -25
  267. data/src/core/lib/iomgr/resolve_address_posix.h +1 -2
  268. data/src/core/lib/iomgr/resolve_address_windows.cc +14 -17
  269. data/src/core/lib/iomgr/resolve_address_windows.h +1 -2
  270. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -29
  271. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -0
  272. data/src/core/lib/iomgr/socket_utils_posix.h +2 -2
  273. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  274. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -10
  275. data/src/core/lib/iomgr/tcp_client_posix.cc +31 -35
  276. data/src/core/lib/iomgr/tcp_client_windows.cc +8 -12
  277. data/src/core/lib/iomgr/tcp_posix.cc +92 -108
  278. data/src/core/lib/iomgr/tcp_server_posix.cc +34 -34
  279. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  280. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +18 -21
  281. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -13
  282. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  283. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -29
  284. data/src/core/lib/iomgr/tcp_windows.cc +27 -34
  285. data/src/core/lib/iomgr/timer.h +8 -8
  286. data/src/core/lib/iomgr/timer_generic.cc +9 -15
  287. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  288. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -3
  289. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  290. data/src/core/lib/json/json_channel_args.h +42 -0
  291. data/src/core/lib/json/json_object_loader.cc +7 -2
  292. data/src/core/lib/json/json_object_loader.h +22 -0
  293. data/src/core/lib/json/json_util.cc +5 -5
  294. data/src/core/lib/json/json_util.h +4 -4
  295. data/src/core/lib/load_balancing/lb_policy.cc +1 -1
  296. data/src/core/lib/load_balancing/lb_policy.h +4 -0
  297. data/src/core/lib/load_balancing/subchannel_interface.h +0 -7
  298. data/src/core/lib/matchers/matchers.cc +3 -4
  299. data/src/core/lib/promise/activity.cc +16 -2
  300. data/src/core/lib/promise/activity.h +38 -15
  301. data/src/core/lib/promise/arena_promise.h +80 -51
  302. data/src/core/lib/promise/context.h +13 -6
  303. data/src/core/lib/promise/detail/basic_seq.h +9 -28
  304. data/src/core/lib/promise/detail/promise_factory.h +58 -10
  305. data/src/core/lib/promise/detail/status.h +28 -0
  306. data/src/core/lib/promise/detail/switch.h +1455 -0
  307. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +3 -1
  308. data/src/core/lib/promise/for_each.h +129 -0
  309. data/src/core/lib/promise/loop.h +7 -5
  310. data/src/core/lib/promise/map_pipe.h +87 -0
  311. data/src/core/lib/promise/pipe.cc +19 -0
  312. data/src/core/lib/promise/pipe.h +505 -0
  313. data/src/core/lib/promise/poll.h +13 -0
  314. data/src/core/lib/promise/seq.h +3 -5
  315. data/src/core/lib/promise/sleep.cc +5 -4
  316. data/src/core/lib/promise/sleep.h +1 -2
  317. data/src/core/lib/promise/try_concurrently.h +341 -0
  318. data/src/core/lib/promise/try_seq.h +10 -13
  319. data/src/core/lib/resolver/server_address.cc +1 -0
  320. data/src/core/lib/resolver/server_address.h +1 -3
  321. data/src/core/lib/resource_quota/api.cc +0 -1
  322. data/src/core/lib/resource_quota/arena.cc +19 -0
  323. data/src/core/lib/resource_quota/arena.h +89 -0
  324. data/src/core/lib/resource_quota/memory_quota.cc +1 -0
  325. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +1 -3
  326. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -2
  327. data/src/core/lib/security/authorization/matchers.cc +25 -22
  328. data/src/core/lib/security/authorization/rbac_policy.cc +2 -3
  329. data/src/core/lib/security/context/security_context.h +10 -0
  330. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +3 -4
  331. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +77 -55
  333. data/src/core/lib/security/credentials/external/aws_request_signer.cc +4 -3
  334. data/src/core/lib/security/credentials/external/external_account_credentials.cc +40 -51
  335. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +17 -21
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +21 -25
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -0
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -24
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +1 -0
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -2
  341. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +1 -1
  342. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -5
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +24 -30
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -5
  345. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +3 -3
  346. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +19 -27
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +4 -11
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -41
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +1 -1
  350. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +6 -11
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +8 -15
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +2 -6
  354. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +1 -4
  355. data/src/core/lib/security/security_connector/local/local_security_connector.cc +7 -11
  356. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +9 -14
  357. data/src/core/lib/security/security_connector/ssl_utils.cc +5 -7
  358. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -27
  359. data/src/core/lib/security/transport/client_auth_filter.cc +1 -1
  360. data/src/core/lib/security/transport/secure_endpoint.cc +26 -28
  361. data/src/core/lib/security/transport/security_handshaker.cc +53 -53
  362. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  363. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  364. data/src/core/lib/security/util/json_util.cc +4 -5
  365. data/src/core/lib/service_config/service_config.h +1 -1
  366. data/src/core/lib/service_config/service_config_impl.cc +111 -158
  367. data/src/core/lib/service_config/service_config_impl.h +14 -17
  368. data/src/core/lib/service_config/service_config_parser.cc +14 -31
  369. data/src/core/lib/service_config/service_config_parser.h +14 -10
  370. data/src/core/lib/slice/b64.cc +2 -2
  371. data/src/core/lib/slice/slice.cc +7 -1
  372. data/src/core/lib/slice/slice.h +19 -6
  373. data/src/core/lib/slice/slice_buffer.cc +13 -14
  374. data/src/core/lib/slice/slice_internal.h +13 -21
  375. data/src/core/lib/slice/slice_refcount.h +34 -19
  376. data/src/core/lib/surface/byte_buffer.cc +3 -4
  377. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  378. data/src/core/lib/surface/call.cc +1366 -239
  379. data/src/core/lib/surface/call.h +44 -0
  380. data/src/core/lib/surface/call_details.cc +3 -3
  381. data/src/core/lib/surface/call_trace.cc +113 -0
  382. data/src/core/lib/surface/call_trace.h +30 -0
  383. data/src/core/lib/surface/channel.cc +44 -49
  384. data/src/core/lib/surface/channel.h +9 -1
  385. data/src/core/lib/surface/channel_ping.cc +1 -1
  386. data/src/core/lib/surface/channel_stack_type.cc +4 -0
  387. data/src/core/lib/surface/channel_stack_type.h +2 -0
  388. data/src/core/lib/surface/completion_queue.cc +38 -52
  389. data/src/core/lib/surface/init.cc +8 -39
  390. data/src/core/lib/surface/init_internally.h +8 -0
  391. data/src/core/lib/surface/lame_client.cc +10 -8
  392. data/src/core/lib/surface/server.cc +48 -70
  393. data/src/core/lib/surface/server.h +3 -4
  394. data/src/core/lib/surface/validate_metadata.cc +11 -12
  395. data/src/core/lib/surface/version.cc +2 -2
  396. data/src/core/lib/transport/connectivity_state.cc +2 -2
  397. data/src/core/lib/transport/error_utils.cc +34 -28
  398. data/src/core/lib/transport/error_utils.h +3 -3
  399. data/src/core/lib/transport/handshaker.cc +14 -14
  400. data/src/core/lib/transport/handshaker.h +1 -1
  401. data/src/core/lib/transport/handshaker_factory.h +26 -0
  402. data/src/core/lib/transport/handshaker_registry.cc +8 -2
  403. data/src/core/lib/transport/handshaker_registry.h +3 -4
  404. data/src/core/lib/transport/http_connect_handshaker.cc +23 -24
  405. data/src/core/lib/transport/metadata_batch.h +17 -1
  406. data/src/core/lib/transport/parsed_metadata.cc +2 -6
  407. data/src/core/lib/transport/tcp_connect_handshaker.cc +15 -20
  408. data/src/core/lib/transport/transport.cc +63 -17
  409. data/src/core/lib/transport/transport.h +64 -68
  410. data/src/core/lib/transport/transport_impl.h +1 -1
  411. data/src/core/lib/transport/transport_op_string.cc +7 -6
  412. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -10
  413. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -14
  414. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +10 -10
  415. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +8 -8
  416. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -1
  417. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  418. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  419. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  420. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +5 -5
  421. data/src/core/tsi/fake_transport_security.cc +3 -3
  422. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +7 -3
  423. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  424. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +6 -2
  425. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +0 -2
  426. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +0 -3
  427. data/src/ruby/lib/grpc/version.rb +1 -1
  428. data/src/ruby/spec/channel_spec.rb +0 -43
  429. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  430. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  431. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  432. data/third_party/zlib/compress.c +3 -3
  433. data/third_party/zlib/crc32.c +21 -12
  434. data/third_party/zlib/deflate.c +112 -106
  435. data/third_party/zlib/deflate.h +2 -2
  436. data/third_party/zlib/gzlib.c +1 -1
  437. data/third_party/zlib/gzread.c +3 -5
  438. data/third_party/zlib/gzwrite.c +1 -1
  439. data/third_party/zlib/infback.c +10 -7
  440. data/third_party/zlib/inflate.c +5 -2
  441. data/third_party/zlib/inftrees.c +2 -2
  442. data/third_party/zlib/inftrees.h +1 -1
  443. data/third_party/zlib/trees.c +61 -62
  444. data/third_party/zlib/uncompr.c +2 -2
  445. data/third_party/zlib/zconf.h +16 -3
  446. data/third_party/zlib/zlib.h +10 -10
  447. data/third_party/zlib/zutil.c +9 -7
  448. data/third_party/zlib/zutil.h +1 -0
  449. metadata +55 -18
  450. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -188
  451. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -187
  452. data/src/core/lib/event_engine/executor/threaded_executor.h +0 -44
  453. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  454. data/src/core/lib/gpr/murmur_hash.h +0 -29
  455. data/src/core/lib/gpr/tls.h +0 -156
  456. data/src/core/lib/promise/call_push_pull.h +0 -148
  457. data/src/core/lib/slice/slice_api.cc +0 -39
  458. data/src/core/lib/slice/slice_buffer_api.cc +0 -35
  459. data/src/core/lib/slice/slice_refcount_base.h +0 -60
@@ -42,123 +42,7 @@
42
42
 
43
43
  typedef absl::Status grpc_error_handle;
44
44
 
45
- typedef enum {
46
- /// 'errno' from the operating system
47
- GRPC_ERROR_INT_ERRNO =
48
- static_cast<int>(grpc_core::StatusIntProperty::kErrorNo),
49
- /// __LINE__ from the call site creating the error
50
- GRPC_ERROR_INT_FILE_LINE =
51
- static_cast<int>(grpc_core::StatusIntProperty::kFileLine),
52
- /// stream identifier: for errors that are associated with an individual
53
- /// wire stream
54
- GRPC_ERROR_INT_STREAM_ID =
55
- static_cast<int>(grpc_core::StatusIntProperty::kStreamId),
56
- /// grpc status code representing this error
57
- GRPC_ERROR_INT_GRPC_STATUS =
58
- static_cast<int>(grpc_core::StatusIntProperty::kRpcStatus),
59
- /// offset into some binary blob (usually represented by
60
- /// GRPC_ERROR_STR_RAW_BYTES) where the error occurred
61
- GRPC_ERROR_INT_OFFSET =
62
- static_cast<int>(grpc_core::StatusIntProperty::kOffset),
63
- /// context sensitive index associated with the error
64
- GRPC_ERROR_INT_INDEX = static_cast<int>(grpc_core::StatusIntProperty::kIndex),
65
- /// context sensitive size associated with the error
66
- GRPC_ERROR_INT_SIZE = static_cast<int>(grpc_core::StatusIntProperty::kSize),
67
- /// http2 error code associated with the error (see the HTTP2 RFC)
68
- GRPC_ERROR_INT_HTTP2_ERROR =
69
- static_cast<int>(grpc_core::StatusIntProperty::kHttp2Error),
70
- /// TSI status code associated with the error
71
- GRPC_ERROR_INT_TSI_CODE =
72
- static_cast<int>(grpc_core::StatusIntProperty::kTsiCode),
73
- /// WSAGetLastError() reported when this error occurred
74
- GRPC_ERROR_INT_WSA_ERROR =
75
- static_cast<int>(grpc_core::StatusIntProperty::kWsaError),
76
- /// File descriptor associated with this error
77
- GRPC_ERROR_INT_FD = static_cast<int>(grpc_core::StatusIntProperty::kFd),
78
- /// HTTP status (i.e. 404)
79
- GRPC_ERROR_INT_HTTP_STATUS =
80
- static_cast<int>(grpc_core::StatusIntProperty::kHttpStatus),
81
- /// chttp2: did the error occur while a write was in progress
82
- GRPC_ERROR_INT_OCCURRED_DURING_WRITE =
83
- static_cast<int>(grpc_core::StatusIntProperty::kOccurredDuringWrite),
84
- /// channel connectivity state associated with the error
85
- GRPC_ERROR_INT_CHANNEL_CONNECTIVITY_STATE =
86
- static_cast<int>(grpc_core::StatusIntProperty::ChannelConnectivityState),
87
- /// LB policy drop
88
- GRPC_ERROR_INT_LB_POLICY_DROP =
89
- static_cast<int>(grpc_core::StatusIntProperty::kLbPolicyDrop),
90
-
91
- /// Must always be last
92
- GRPC_ERROR_INT_MAX,
93
- } grpc_error_ints;
94
-
95
- typedef enum {
96
- /// top-level textual description of this error
97
- GRPC_ERROR_STR_DESCRIPTION =
98
- static_cast<int>(grpc_core::StatusStrProperty::kDescription),
99
- /// source file in which this error occurred
100
- GRPC_ERROR_STR_FILE = static_cast<int>(grpc_core::StatusStrProperty::kFile),
101
- /// operating system description of this error
102
- GRPC_ERROR_STR_OS_ERROR =
103
- static_cast<int>(grpc_core::StatusStrProperty::kOsError),
104
- /// syscall that generated this error
105
- GRPC_ERROR_STR_SYSCALL =
106
- static_cast<int>(grpc_core::StatusStrProperty::kSyscall),
107
- /// peer that we were trying to communicate when this error occurred
108
- GRPC_ERROR_STR_TARGET_ADDRESS =
109
- static_cast<int>(grpc_core::StatusStrProperty::kTargetAddress),
110
- /// grpc status message associated with this error
111
- GRPC_ERROR_STR_GRPC_MESSAGE =
112
- static_cast<int>(grpc_core::StatusStrProperty::kGrpcMessage),
113
- /// hex dump (or similar) with the data that generated this error
114
- GRPC_ERROR_STR_RAW_BYTES =
115
- static_cast<int>(grpc_core::StatusStrProperty::kRawBytes),
116
- /// tsi error string associated with this error
117
- GRPC_ERROR_STR_TSI_ERROR =
118
- static_cast<int>(grpc_core::StatusStrProperty::kTsiError),
119
- /// filename that we were trying to read/write when this error occurred
120
- GRPC_ERROR_STR_FILENAME =
121
- static_cast<int>(grpc_core::StatusStrProperty::kFilename),
122
- /// key associated with the error
123
- GRPC_ERROR_STR_KEY = static_cast<int>(grpc_core::StatusStrProperty::kKey),
124
- /// value associated with the error
125
- GRPC_ERROR_STR_VALUE = static_cast<int>(grpc_core::StatusStrProperty::kValue),
126
-
127
- /// Must always be last
128
- GRPC_ERROR_STR_MAX,
129
- } grpc_error_strs;
130
-
131
- typedef enum {
132
- /// timestamp of error creation
133
- GRPC_ERROR_TIME_CREATED,
134
-
135
- /// Must always be last
136
- GRPC_ERROR_TIME_MAX,
137
- } grpc_error_times;
138
-
139
- std::string grpc_error_std_string(grpc_error_handle error);
140
-
141
- // debug only toggles that allow for a sanity to check that ensures we will
142
- // never create any errors in the per-RPC hotpath.
143
- void grpc_disable_error_creation();
144
- void grpc_enable_error_creation();
145
-
146
- #define GRPC_ERROR_NONE absl::OkStatus()
147
- #define GRPC_ERROR_OOM absl::Status(absl::ResourceExhaustedError(""))
148
- #define GRPC_ERROR_CANCELLED absl::CancelledError()
149
-
150
- #define GRPC_ERROR_REF(err) (err)
151
- #define GRPC_ERROR_UNREF(err) (void)(err)
152
-
153
- #define GRPC_ERROR_IS_NONE(err) (err).ok()
154
-
155
- #define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc) \
156
- StatusCreate(absl::StatusCode::kUnknown, desc, DEBUG_LOCATION, {})
157
- #define GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc) \
158
- StatusCreate(absl::StatusCode::kUnknown, desc, DEBUG_LOCATION, {})
159
- #define GRPC_ERROR_CREATE_FROM_CPP_STRING(desc) \
160
- StatusCreate(absl::StatusCode::kUnknown, desc, DEBUG_LOCATION, {})
161
- #define GRPC_ERROR_CREATE_FROM_STRING_VIEW(desc) \
45
+ #define GRPC_ERROR_CREATE(desc) \
162
46
  StatusCreate(absl::StatusCode::kUnknown, desc, DEBUG_LOCATION, {})
163
47
 
164
48
  absl::Status grpc_status_create(absl::StatusCode code, absl::string_view msg,
@@ -166,22 +50,18 @@ absl::Status grpc_status_create(absl::StatusCode code, absl::string_view msg,
166
50
  size_t children_count,
167
51
  absl::Status* children) GRPC_MUST_USE_RESULT;
168
52
 
169
- // Create an error that references some other errors. This function adds a
170
- // reference to each error in errs - it does not consume an existing reference
171
- #define GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(desc, errs, count) \
172
- grpc_status_create(absl::StatusCode::kUnknown, desc, DEBUG_LOCATION, count, \
173
- errs)
174
- #define GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(desc, errs, count) \
53
+ // Create an error that references some other errors.
54
+ #define GRPC_ERROR_CREATE_REFERENCING(desc, errs, count) \
175
55
  grpc_status_create(absl::StatusCode::kUnknown, desc, DEBUG_LOCATION, count, \
176
56
  errs)
177
57
 
178
58
  // Consumes all the errors in the vector and forms a referencing error from
179
- // them. If the vector is empty, return GRPC_ERROR_NONE.
59
+ // them. If the vector is empty, return absl::OkStatus().
180
60
  template <typename VectorType>
181
61
  static absl::Status grpc_status_create_from_vector(
182
62
  const grpc_core::DebugLocation& location, absl::string_view desc,
183
63
  VectorType* error_list) {
184
- absl::Status error = GRPC_ERROR_NONE;
64
+ absl::Status error;
185
65
  if (error_list->size() != 0) {
186
66
  error = grpc_status_create(absl::StatusCode::kUnknown, desc, location,
187
67
  error_list->size(), error_list->data());
@@ -192,14 +72,12 @@ static absl::Status grpc_status_create_from_vector(
192
72
 
193
73
  #define GRPC_ERROR_CREATE_FROM_VECTOR(desc, error_list) \
194
74
  grpc_status_create_from_vector(DEBUG_LOCATION, desc, error_list)
195
- #define GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(desc, error_list) \
196
- grpc_status_create_from_vector(DEBUG_LOCATION, desc, error_list)
197
75
 
198
76
  absl::Status grpc_os_error(const grpc_core::DebugLocation& location, int err,
199
77
  const char* call_name) GRPC_MUST_USE_RESULT;
200
78
 
201
79
  inline absl::Status grpc_assert_never_ok(absl::Status error) {
202
- GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
80
+ GPR_ASSERT(!error.ok());
203
81
  return error;
204
82
  }
205
83
 
@@ -215,18 +93,18 @@ absl::Status grpc_wsa_error(const grpc_core::DebugLocation& location, int err,
215
93
  grpc_wsa_error(DEBUG_LOCATION, err, call_name)
216
94
 
217
95
  grpc_error_handle grpc_error_set_int(grpc_error_handle src,
218
- grpc_error_ints which,
96
+ grpc_core::StatusIntProperty which,
219
97
  intptr_t value) GRPC_MUST_USE_RESULT;
220
98
  /// It is an error to pass nullptr as `p`. Caller should allocate a phony
221
99
  /// intptr_t for `p`, even if the value of `p` is not used.
222
- bool grpc_error_get_int(grpc_error_handle error, grpc_error_ints which,
223
- intptr_t* p);
100
+ bool grpc_error_get_int(grpc_error_handle error,
101
+ grpc_core::StatusIntProperty which, intptr_t* p);
224
102
  grpc_error_handle grpc_error_set_str(
225
- grpc_error_handle src, grpc_error_strs which,
103
+ grpc_error_handle src, grpc_core::StatusStrProperty which,
226
104
  absl::string_view str) GRPC_MUST_USE_RESULT;
227
105
  /// Returns false if the specified string is not set.
228
- bool grpc_error_get_str(grpc_error_handle error, grpc_error_strs which,
229
- std::string* str);
106
+ bool grpc_error_get_str(grpc_error_handle error,
107
+ grpc_core::StatusStrProperty which, std::string* str);
230
108
 
231
109
  /// Add a child error: an error that is believed to have contributed to this
232
110
  /// error occurring. Allows root causing high level errors from lower level
@@ -234,9 +112,9 @@ bool grpc_error_get_str(grpc_error_handle error, grpc_error_strs which,
234
112
  /// child error.
235
113
  ///
236
114
  /// Edge Conditions -
237
- /// 1) If either of \a src or \a child is GRPC_ERROR_NONE, returns a reference
238
- /// to the other argument. 2) If both \a src and \a child are GRPC_ERROR_NONE,
239
- /// returns GRPC_ERROR_NONE. 3) If \a src and \a child point to the same error,
115
+ /// 1) If either of \a src or \a child is absl::OkStatus(), returns a reference
116
+ /// to the other argument. 2) If both \a src and \a child are absl::OkStatus(),
117
+ /// returns absl::OkStatus(). 3) If \a src and \a child point to the same error,
240
118
  /// returns a single reference. (Note that, 2 references should have been
241
119
  /// received to the error in this case.)
242
120
  grpc_error_handle grpc_error_add_child(
@@ -246,8 +124,7 @@ bool grpc_log_error(const char* what, grpc_error_handle error, const char* file,
246
124
  int line);
247
125
  inline bool grpc_log_if_error(const char* what, grpc_error_handle error,
248
126
  const char* file, int line) {
249
- return GRPC_ERROR_IS_NONE(error) ? true
250
- : grpc_log_error(what, error, file, line);
127
+ return error.ok() ? true : grpc_log_error(what, error, file, line);
251
128
  }
252
129
 
253
130
  #define GRPC_LOG_IF_ERROR(what, error) \
@@ -257,22 +134,16 @@ inline bool grpc_log_if_error(const char* what, grpc_error_handle error,
257
134
  /// This could be considered as atomic<grpc_error_handle>.
258
135
  class AtomicError {
259
136
  public:
260
- AtomicError() {
261
- error_ = GRPC_ERROR_NONE;
262
- lock_ = GPR_SPINLOCK_STATIC_INITIALIZER;
263
- }
264
- explicit AtomicError(grpc_error_handle error) {
265
- error_ = GRPC_ERROR_REF(error);
266
- }
267
- ~AtomicError() { GRPC_ERROR_UNREF(error_); }
137
+ AtomicError() = default;
138
+ explicit AtomicError(grpc_error_handle error) { error_ = error; }
268
139
 
269
140
  AtomicError(const AtomicError&) = delete;
270
141
  AtomicError& operator=(const AtomicError&) = delete;
271
142
 
272
- /// returns get() == GRPC_ERROR_NONE
143
+ /// returns get() == absl::OkStatus()
273
144
  bool ok() {
274
145
  gpr_spinlock_lock(&lock_);
275
- bool ret = GRPC_ERROR_IS_NONE(error_);
146
+ bool ret = error_.ok();
276
147
  gpr_spinlock_unlock(&lock_);
277
148
  return ret;
278
149
  }
@@ -286,14 +157,13 @@ class AtomicError {
286
157
 
287
158
  void set(grpc_error_handle error) {
288
159
  gpr_spinlock_lock(&lock_);
289
- GRPC_ERROR_UNREF(error_);
290
- error_ = GRPC_ERROR_REF(error);
160
+ error_ = error;
291
161
  gpr_spinlock_unlock(&lock_);
292
162
  }
293
163
 
294
164
  private:
295
165
  grpc_error_handle error_;
296
- gpr_spinlock lock_;
166
+ gpr_spinlock lock_ = GPR_SPINLOCK_STATIC_INITIALIZER;
297
167
  };
298
168
 
299
169
  #endif /* GRPC_CORE_LIB_IOMGR_ERROR_H */
@@ -256,11 +256,11 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
256
256
  // callback will be called.
257
257
  if (apple_pollset->is_shutdown && apple_pollset->workers.empty()) {
258
258
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, apple_pollset->shutdown_closure,
259
- GRPC_ERROR_NONE);
259
+ absl::OkStatus());
260
260
  }
261
261
  }
262
262
 
263
- return GRPC_ERROR_NONE;
263
+ return absl::OkStatus();
264
264
  }
265
265
 
266
266
  /// Kick a specific worker. The caller must acquire the lock GrpcApplePollset.mu
@@ -297,7 +297,7 @@ static grpc_error_handle pollset_kick(grpc_pollset* pollset,
297
297
  kick_worker(actual_worker);
298
298
  }
299
299
 
300
- return GRPC_ERROR_NONE;
300
+ return absl::OkStatus();
301
301
  }
302
302
 
303
303
  static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
@@ -318,7 +318,7 @@ static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
318
318
 
319
319
  // If there is any worker blocked, shutdown will be done asynchronously.
320
320
  if (apple_pollset->workers.empty()) {
321
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_NONE);
321
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, absl::OkStatus());
322
322
  } else {
323
323
  apple_pollset->shutdown_closure = closure;
324
324
  }
@@ -47,10 +47,11 @@
47
47
  #include <grpc/support/cpu.h>
48
48
 
49
49
  #include "src/core/lib/debug/stats.h"
50
+ #include "src/core/lib/debug/stats_data.h"
50
51
  #include "src/core/lib/gpr/string.h"
51
- #include "src/core/lib/gpr/tls.h"
52
52
  #include "src/core/lib/gpr/useful.h"
53
53
  #include "src/core/lib/gprpp/manual_constructor.h"
54
+ #include "src/core/lib/gprpp/strerror.h"
54
55
  #include "src/core/lib/iomgr/block_annotate.h"
55
56
  #include "src/core/lib/iomgr/ev_epoll1_linux.h"
56
57
  #include "src/core/lib/iomgr/ev_posix.h"
@@ -241,9 +242,9 @@ struct grpc_pollset_set {
241
242
 
242
243
  static bool append_error(grpc_error_handle* composite, grpc_error_handle error,
243
244
  const char* desc) {
244
- if (GRPC_ERROR_IS_NONE(error)) return true;
245
- if (GRPC_ERROR_IS_NONE(*composite)) {
246
- *composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc);
245
+ if (error.ok()) return true;
246
+ if (composite->ok()) {
247
+ *composite = GRPC_ERROR_CREATE(desc);
247
248
  }
248
249
  *composite = grpc_error_add_child(*composite, error);
249
250
  return false;
@@ -369,7 +370,8 @@ static grpc_fd* fd_create(int fd, const char* name, bool track_err) {
369
370
  ev.data.ptr = reinterpret_cast<void*>(reinterpret_cast<intptr_t>(new_fd) |
370
371
  (track_err ? 1 : 0));
371
372
  if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_ADD, fd, &ev) != 0) {
372
- gpr_log(GPR_ERROR, "epoll_ctl failed: %s", strerror(errno));
373
+ gpr_log(GPR_ERROR, "epoll_ctl failed: %s",
374
+ grpc_core::StrError(errno).c_str());
373
375
  }
374
376
 
375
377
  return new_fd;
@@ -382,7 +384,7 @@ static int fd_wrapped_fd(grpc_fd* fd) { return fd->fd; }
382
384
  * shutdown() syscall on that fd) */
383
385
  static void fd_shutdown_internal(grpc_fd* fd, grpc_error_handle why,
384
386
  bool releasing_fd) {
385
- if (fd->read_closure->SetShutdown(GRPC_ERROR_REF(why))) {
387
+ if (fd->read_closure->SetShutdown(why)) {
386
388
  if (!releasing_fd) {
387
389
  shutdown(fd->fd, SHUT_RDWR);
388
390
  } else {
@@ -390,13 +392,13 @@ static void fd_shutdown_internal(grpc_fd* fd, grpc_error_handle why,
390
392
  epoll_event phony_event;
391
393
  if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_DEL, fd->fd, &phony_event) !=
392
394
  0) {
393
- gpr_log(GPR_ERROR, "epoll_ctl failed: %s", strerror(errno));
395
+ gpr_log(GPR_ERROR, "epoll_ctl failed: %s",
396
+ grpc_core::StrError(errno).c_str());
394
397
  }
395
398
  }
396
- fd->write_closure->SetShutdown(GRPC_ERROR_REF(why));
397
- fd->error_closure->SetShutdown(GRPC_ERROR_REF(why));
399
+ fd->write_closure->SetShutdown(why);
400
+ fd->error_closure->SetShutdown(why);
398
401
  }
399
- GRPC_ERROR_UNREF(why);
400
402
  }
401
403
 
402
404
  /* Might be called multiple times */
@@ -406,12 +408,11 @@ static void fd_shutdown(grpc_fd* fd, grpc_error_handle why) {
406
408
 
407
409
  static void fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd,
408
410
  const char* reason) {
409
- grpc_error_handle error = GRPC_ERROR_NONE;
411
+ grpc_error_handle error;
410
412
  bool is_release_fd = (release_fd != nullptr);
411
413
 
412
414
  if (!fd->read_closure->IsShutdown()) {
413
- fd_shutdown_internal(fd, GRPC_ERROR_CREATE_FROM_COPIED_STRING(reason),
414
- is_release_fd);
415
+ fd_shutdown_internal(fd, GRPC_ERROR_CREATE(reason), is_release_fd);
415
416
  }
416
417
 
417
418
  /* If release_fd is not NULL, we should be relinquishing control of the file
@@ -422,7 +423,7 @@ static void fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd,
422
423
  close(fd->fd);
423
424
  }
424
425
 
425
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done, GRPC_ERROR_REF(error));
426
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_done, error);
426
427
 
427
428
  grpc_iomgr_unregister_object(&fd->iomgr_object);
428
429
  fork_fd_list_remove_grpc_fd(fd);
@@ -462,8 +463,8 @@ static void fd_has_errors(grpc_fd* fd) { fd->error_closure->SetReady(); }
462
463
  * Pollset Definitions
463
464
  */
464
465
 
465
- static GPR_THREAD_LOCAL(grpc_pollset*) g_current_thread_pollset;
466
- static GPR_THREAD_LOCAL(grpc_pollset_worker*) g_current_thread_worker;
466
+ static thread_local grpc_pollset* g_current_thread_pollset;
467
+ static thread_local grpc_pollset_worker* g_current_thread_worker;
467
468
 
468
469
  /* The designated poller */
469
470
  static gpr_atm g_active_poller;
@@ -516,7 +517,7 @@ static grpc_error_handle pollset_global_init(void) {
516
517
  gpr_atm_no_barrier_store(&g_active_poller, 0);
517
518
  global_wakeup_fd.read_fd = -1;
518
519
  grpc_error_handle err = grpc_wakeup_fd_init(&global_wakeup_fd);
519
- if (!GRPC_ERROR_IS_NONE(err)) return err;
520
+ if (!err.ok()) return err;
520
521
  struct epoll_event ev;
521
522
  ev.events = static_cast<uint32_t>(EPOLLIN | EPOLLET);
522
523
  ev.data.ptr = &global_wakeup_fd;
@@ -531,7 +532,7 @@ static grpc_error_handle pollset_global_init(void) {
531
532
  for (size_t i = 0; i < g_num_neighborhoods; i++) {
532
533
  gpr_mu_init(&g_neighborhoods[i].mu);
533
534
  }
534
- return GRPC_ERROR_NONE;
535
+ return absl::OkStatus();
535
536
  }
536
537
 
537
538
  static void pollset_global_shutdown(void) {
@@ -585,7 +586,7 @@ static void pollset_destroy(grpc_pollset* pollset) {
585
586
  }
586
587
 
587
588
  static grpc_error_handle pollset_kick_all(grpc_pollset* pollset) {
588
- grpc_error_handle error = GRPC_ERROR_NONE;
589
+ grpc_error_handle error;
589
590
  if (pollset->root_worker != nullptr) {
590
591
  grpc_pollset_worker* worker = pollset->root_worker;
591
592
  do {
@@ -617,7 +618,7 @@ static void pollset_maybe_finish_shutdown(grpc_pollset* pollset) {
617
618
  if (pollset->shutdown_closure != nullptr && pollset->root_worker == nullptr &&
618
619
  pollset->begin_refs == 0) {
619
620
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, pollset->shutdown_closure,
620
- GRPC_ERROR_NONE);
621
+ absl::OkStatus());
621
622
  pollset->shutdown_closure = nullptr;
622
623
  }
623
624
  }
@@ -653,7 +654,7 @@ static int poll_deadline_to_millis_timeout(grpc_core::Timestamp millis) {
653
654
  when accessing fields in g_epoll_set */
654
655
  static grpc_error_handle process_epoll_events(grpc_pollset* /*pollset*/) {
655
656
  static const char* err_desc = "process_events";
656
- grpc_error_handle error = GRPC_ERROR_NONE;
657
+ grpc_error_handle error;
657
658
  long num_events = gpr_atm_acq_load(&g_epoll_set.num_events);
658
659
  long cursor = gpr_atm_acq_load(&g_epoll_set.cursor);
659
660
  for (int idx = 0;
@@ -725,7 +726,7 @@ static grpc_error_handle do_epoll_wait(grpc_pollset* ps,
725
726
  gpr_atm_rel_store(&g_epoll_set.num_events, r);
726
727
  gpr_atm_rel_store(&g_epoll_set.cursor, 0);
727
728
 
728
- return GRPC_ERROR_NONE;
729
+ return absl::OkStatus();
729
730
  }
730
731
 
731
732
  static bool begin_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
@@ -994,11 +995,11 @@ static grpc_error_handle pollset_work(grpc_pollset* ps,
994
995
  grpc_pollset_worker** worker_hdl,
995
996
  grpc_core::Timestamp deadline) {
996
997
  grpc_pollset_worker worker;
997
- grpc_error_handle error = GRPC_ERROR_NONE;
998
+ grpc_error_handle error;
998
999
  static const char* err_desc = "pollset_work";
999
1000
  if (ps->kicked_without_poller) {
1000
1001
  ps->kicked_without_poller = false;
1001
- return GRPC_ERROR_NONE;
1002
+ return absl::OkStatus();
1002
1003
  }
1003
1004
 
1004
1005
  if (begin_worker(ps, &worker, worker_hdl, deadline)) {
@@ -1042,7 +1043,7 @@ static grpc_error_handle pollset_work(grpc_pollset* ps,
1042
1043
 
1043
1044
  static grpc_error_handle pollset_kick(grpc_pollset* pollset,
1044
1045
  grpc_pollset_worker* specific_worker) {
1045
- grpc_error_handle ret_err = GRPC_ERROR_NONE;
1046
+ grpc_error_handle ret_err;
1046
1047
  if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
1047
1048
  std::vector<std::string> log;
1048
1049
  log.push_back(absl::StrFormat(
@@ -40,8 +40,7 @@
40
40
  #include <grpc/support/log.h>
41
41
 
42
42
  #include "src/core/lib/debug/stats.h"
43
- #include "src/core/lib/gpr/murmur_hash.h"
44
- #include "src/core/lib/gpr/tls.h"
43
+ #include "src/core/lib/debug/stats_data.h"
45
44
  #include "src/core/lib/gpr/useful.h"
46
45
  #include "src/core/lib/gprpp/thd.h"
47
46
  #include "src/core/lib/iomgr/block_annotate.h"
@@ -359,7 +358,6 @@ static void unref_by(grpc_fd* fd, int n) {
359
358
  grpc_iomgr_unregister_object(&fd->iomgr_object);
360
359
  fork_fd_list_remove_node(fd->fork_fd_list);
361
360
  if (fd->shutdown) {
362
- GRPC_ERROR_UNREF(fd->shutdown_error);
363
361
  }
364
362
  fd->shutdown_error.~Status();
365
363
  gpr_free(fd);
@@ -442,7 +440,8 @@ static void close_fd_locked(grpc_fd* fd) {
442
440
  if (!fd->released) {
443
441
  close(fd->fd);
444
442
  }
445
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, fd->on_done_closure, GRPC_ERROR_NONE);
443
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, fd->on_done_closure,
444
+ absl::OkStatus());
446
445
  }
447
446
 
448
447
  static int fd_wrapped_fd(grpc_fd* fd) {
@@ -491,12 +490,11 @@ static void fd_unref(grpc_fd* fd) { unref_by(fd, 2); }
491
490
 
492
491
  static grpc_error_handle fd_shutdown_error(grpc_fd* fd) {
493
492
  if (!fd->shutdown) {
494
- return GRPC_ERROR_NONE;
493
+ return absl::OkStatus();
495
494
  } else {
496
- return grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
497
- "FD shutdown", &fd->shutdown_error, 1),
498
- GRPC_ERROR_INT_GRPC_STATUS,
499
- GRPC_STATUS_UNAVAILABLE);
495
+ return grpc_error_set_int(
496
+ GRPC_ERROR_CREATE_REFERENCING("FD shutdown", &fd->shutdown_error, 1),
497
+ grpc_core::StatusIntProperty::kRpcStatus, GRPC_STATUS_UNAVAILABLE);
500
498
  }
501
499
  }
502
500
 
@@ -505,8 +503,8 @@ static void notify_on_locked(grpc_fd* fd, grpc_closure** st,
505
503
  if (fd->shutdown || gpr_atm_no_barrier_load(&fd->pollhup)) {
506
504
  grpc_core::ExecCtx::Run(
507
505
  DEBUG_LOCATION, closure,
508
- grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("FD shutdown"),
509
- GRPC_ERROR_INT_GRPC_STATUS,
506
+ grpc_error_set_int(GRPC_ERROR_CREATE("FD shutdown"),
507
+ grpc_core::StatusIntProperty::kRpcStatus,
510
508
  GRPC_STATUS_UNAVAILABLE));
511
509
  } else if (*st == CLOSURE_NOT_READY) {
512
510
  /* not ready ==> switch to a waiting state by setting the closure */
@@ -552,8 +550,6 @@ static void fd_shutdown(grpc_fd* fd, grpc_error_handle why) {
552
550
  shutdown(fd->fd, SHUT_RDWR);
553
551
  set_ready_locked(fd, &fd->read_closure);
554
552
  set_ready_locked(fd, &fd->write_closure);
555
- } else {
556
- GRPC_ERROR_UNREF(why);
557
553
  }
558
554
  gpr_mu_unlock(&fd->mu);
559
555
  }
@@ -581,7 +577,7 @@ static void fd_notify_on_error(grpc_fd* /*fd*/, grpc_closure* closure) {
581
577
  if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
582
578
  gpr_log(GPR_ERROR, "Polling engine does not support tracking errors.");
583
579
  }
584
- grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, GRPC_ERROR_CANCELLED);
580
+ grpc_core::ExecCtx::Run(DEBUG_LOCATION, closure, absl::CancelledError());
585
581
  }
586
582
 
587
583
  static void fd_set_readable(grpc_fd* fd) {
@@ -714,8 +710,8 @@ static void fd_end_poll(grpc_fd_watcher* watcher, int got_read, int got_write) {
714
710
  * pollset_posix.c
715
711
  */
716
712
 
717
- static GPR_THREAD_LOCAL(grpc_pollset*) g_current_thread_poller;
718
- static GPR_THREAD_LOCAL(grpc_pollset_worker*) g_current_thread_worker;
713
+ static thread_local grpc_pollset* g_current_thread_poller;
714
+ static thread_local grpc_pollset_worker* g_current_thread_worker;
719
715
 
720
716
  static void remove_worker(grpc_pollset* /*p*/, grpc_pollset_worker* worker) {
721
717
  worker->prev->next = worker->next;
@@ -758,9 +754,9 @@ static void push_front_worker(grpc_pollset* p, grpc_pollset_worker* worker) {
758
754
 
759
755
  static void kick_append_error(grpc_error_handle* composite,
760
756
  grpc_error_handle error) {
761
- if (GRPC_ERROR_IS_NONE(error)) return;
762
- if (GRPC_ERROR_IS_NONE(*composite)) {
763
- *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Kick Failure");
757
+ if (error.ok()) return;
758
+ if (composite->ok()) {
759
+ *composite = GRPC_ERROR_CREATE("Kick Failure");
764
760
  }
765
761
  *composite = grpc_error_add_child(*composite, error);
766
762
  }
@@ -768,7 +764,7 @@ static void kick_append_error(grpc_error_handle* composite,
768
764
  static grpc_error_handle pollset_kick_ext(grpc_pollset* p,
769
765
  grpc_pollset_worker* specific_worker,
770
766
  uint32_t flags) {
771
- grpc_error_handle error = GRPC_ERROR_NONE;
767
+ grpc_error_handle error;
772
768
 
773
769
  /* pollset->mu already held */
774
770
  if (specific_worker != nullptr) {
@@ -819,7 +815,7 @@ static grpc_error_handle pollset_kick_ext(grpc_pollset* p,
819
815
  }
820
816
  }
821
817
 
822
- GRPC_LOG_IF_ERROR("pollset_kick_ext", GRPC_ERROR_REF(error));
818
+ GRPC_LOG_IF_ERROR("pollset_kick_ext", error);
823
819
  return error;
824
820
  }
825
821
 
@@ -830,7 +826,7 @@ static grpc_error_handle pollset_kick(grpc_pollset* p,
830
826
 
831
827
  /* global state management */
832
828
 
833
- static grpc_error_handle pollset_global_init(void) { return GRPC_ERROR_NONE; }
829
+ static grpc_error_handle pollset_global_init(void) { return absl::OkStatus(); }
834
830
 
835
831
  /* main interface */
836
832
 
@@ -889,14 +885,14 @@ static void finish_shutdown(grpc_pollset* pollset) {
889
885
  }
890
886
  pollset->fd_count = 0;
891
887
  grpc_core::ExecCtx::Run(DEBUG_LOCATION, pollset->shutdown_done,
892
- GRPC_ERROR_NONE);
888
+ absl::OkStatus());
893
889
  }
894
890
 
895
891
  static void work_combine_error(grpc_error_handle* composite,
896
892
  grpc_error_handle error) {
897
- if (GRPC_ERROR_IS_NONE(error)) return;
898
- if (GRPC_ERROR_IS_NONE(*composite)) {
899
- *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("pollset_work");
893
+ if (error.ok()) return;
894
+ if (composite->ok()) {
895
+ *composite = GRPC_ERROR_CREATE("pollset_work");
900
896
  }
901
897
  *composite = grpc_error_add_child(*composite, error);
902
898
  }
@@ -906,7 +902,7 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
906
902
  grpc_core::Timestamp deadline) {
907
903
  grpc_pollset_worker worker;
908
904
  if (worker_hdl) *worker_hdl = &worker;
909
- grpc_error_handle error = GRPC_ERROR_NONE;
905
+ grpc_error_handle error;
910
906
 
911
907
  /* Avoid malloc for small number of elements. */
912
908
  enum { inline_elements = 96 };
@@ -929,8 +925,8 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
929
925
  gpr_malloc(sizeof(*worker.wakeup_fd)));
930
926
  error = grpc_wakeup_fd_init(&worker.wakeup_fd->fd);
931
927
  fork_fd_list_add_wakeup_fd(worker.wakeup_fd);
932
- if (!GRPC_ERROR_IS_NONE(error)) {
933
- GRPC_LOG_IF_ERROR("pollset_work", GRPC_ERROR_REF(error));
928
+ if (!error.ok()) {
929
+ GRPC_LOG_IF_ERROR("pollset_work", error);
934
930
  return error;
935
931
  }
936
932
  }
@@ -1091,7 +1087,7 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
1091
1087
  /* If we're forced to re-evaluate polling (via pollset_kick with
1092
1088
  GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) then we land here and force
1093
1089
  a loop */
1094
- if (worker.reevaluate_polling_on_wakeup && GRPC_ERROR_IS_NONE(error)) {
1090
+ if (worker.reevaluate_polling_on_wakeup && error.ok()) {
1095
1091
  worker.reevaluate_polling_on_wakeup = 0;
1096
1092
  pollset->kicked_without_pollers = 0;
1097
1093
  if (queued_work || worker.kicked_specifically) {
@@ -1127,7 +1123,7 @@ static grpc_error_handle pollset_work(grpc_pollset* pollset,
1127
1123
  }
1128
1124
  }
1129
1125
  if (worker_hdl) *worker_hdl = nullptr;
1130
- GRPC_LOG_IF_ERROR("pollset_work", GRPC_ERROR_REF(error));
1126
+ GRPC_LOG_IF_ERROR("pollset_work", error);
1131
1127
  return error;
1132
1128
  }
1133
1129
 
@@ -53,9 +53,9 @@ static void exec_ctx_sched(grpc_closure* closure) {
53
53
 
54
54
  namespace grpc_core {
55
55
 
56
- GPR_THREAD_LOCAL(ExecCtx*) ExecCtx::exec_ctx_;
57
- GPR_THREAD_LOCAL(ApplicationCallbackExecCtx*)
58
- ApplicationCallbackExecCtx::callback_exec_ctx_;
56
+ thread_local ExecCtx* ExecCtx::exec_ctx_;
57
+ thread_local ApplicationCallbackExecCtx*
58
+ ApplicationCallbackExecCtx::callback_exec_ctx_;
59
59
 
60
60
  bool ExecCtx::Flush() {
61
61
  bool did_something = false;
@@ -81,7 +81,6 @@ void ExecCtx::Run(const DebugLocation& location, grpc_closure* closure,
81
81
  grpc_error_handle error) {
82
82
  (void)location;
83
83
  if (closure == nullptr) {
84
- GRPC_ERROR_UNREF(error);
85
84
  return;
86
85
  }
87
86
  #ifndef NDEBUG