grpc 1.4.5 → 1.6.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 (928) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1235 -1100
  3. data/etc/roots.pem +0 -412
  4. data/include/grpc/byte_buffer.h +10 -25
  5. data/include/grpc/byte_buffer_reader.h +10 -25
  6. data/include/grpc/census.h +10 -25
  7. data/include/grpc/compression.h +10 -25
  8. data/include/grpc/grpc.h +15 -26
  9. data/include/grpc/grpc_cronet.h +10 -25
  10. data/include/grpc/grpc_posix.h +10 -25
  11. data/include/grpc/grpc_security.h +10 -25
  12. data/include/grpc/grpc_security_constants.h +10 -25
  13. data/include/grpc/impl/codegen/atm.h +11 -25
  14. data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
  15. data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
  16. data/include/grpc/impl/codegen/atm_windows.h +10 -25
  17. data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
  18. data/include/grpc/impl/codegen/compression_types.h +12 -27
  19. data/include/grpc/impl/codegen/connectivity_state.h +10 -25
  20. data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
  21. data/include/grpc/impl/codegen/gpr_slice.h +10 -25
  22. data/include/grpc/impl/codegen/gpr_types.h +10 -25
  23. data/include/grpc/impl/codegen/grpc_types.h +42 -43
  24. data/include/grpc/impl/codegen/port_platform.h +10 -25
  25. data/include/grpc/impl/codegen/propagation_bits.h +10 -25
  26. data/include/grpc/impl/codegen/slice.h +13 -28
  27. data/include/grpc/impl/codegen/status.h +10 -25
  28. data/include/grpc/impl/codegen/sync.h +10 -25
  29. data/include/grpc/impl/codegen/sync_generic.h +10 -25
  30. data/include/grpc/impl/codegen/sync_posix.h +10 -25
  31. data/include/grpc/impl/codegen/sync_windows.h +10 -25
  32. data/include/grpc/load_reporting.h +10 -25
  33. data/include/grpc/slice.h +10 -25
  34. data/include/grpc/slice_buffer.h +10 -25
  35. data/include/grpc/status.h +10 -25
  36. data/include/grpc/support/alloc.h +10 -25
  37. data/include/grpc/support/atm.h +10 -25
  38. data/include/grpc/support/atm_gcc_atomic.h +10 -25
  39. data/include/grpc/support/atm_gcc_sync.h +10 -25
  40. data/include/grpc/support/atm_windows.h +10 -25
  41. data/include/grpc/support/avl.h +46 -49
  42. data/include/grpc/support/cmdline.h +10 -25
  43. data/include/grpc/support/cpu.h +10 -25
  44. data/include/grpc/support/histogram.h +10 -25
  45. data/include/grpc/support/host_port.h +10 -25
  46. data/include/grpc/support/log.h +10 -25
  47. data/include/grpc/support/log_windows.h +10 -25
  48. data/include/grpc/support/port_platform.h +10 -25
  49. data/include/grpc/support/string_util.h +10 -25
  50. data/include/grpc/support/subprocess.h +10 -25
  51. data/include/grpc/support/sync.h +10 -25
  52. data/include/grpc/support/sync_generic.h +10 -25
  53. data/include/grpc/support/sync_posix.h +10 -25
  54. data/include/grpc/support/sync_windows.h +10 -25
  55. data/include/grpc/support/thd.h +10 -25
  56. data/include/grpc/support/time.h +10 -25
  57. data/include/grpc/support/tls.h +10 -25
  58. data/include/grpc/support/tls_gcc.h +10 -25
  59. data/include/grpc/support/tls_msvc.h +10 -25
  60. data/include/grpc/support/tls_pthread.h +10 -25
  61. data/include/grpc/support/useful.h +10 -25
  62. data/include/grpc/support/workaround_list.h +11 -26
  63. data/src/boringssl/err_data.c +277 -259
  64. data/src/core/ext/census/aggregation.h +10 -25
  65. data/src/core/ext/census/base_resources.c +10 -25
  66. data/src/core/ext/census/base_resources.h +10 -25
  67. data/src/core/ext/census/census_interface.h +10 -25
  68. data/src/core/ext/census/census_rpc_stats.h +10 -25
  69. data/src/core/ext/census/context.c +10 -25
  70. data/src/core/ext/census/gen/census.pb.c +10 -25
  71. data/src/core/ext/census/gen/census.pb.h +10 -25
  72. data/src/core/ext/census/gen/trace_context.pb.c +10 -25
  73. data/src/core/ext/census/gen/trace_context.pb.h +10 -25
  74. data/src/core/ext/census/grpc_context.c +10 -25
  75. data/src/core/ext/census/grpc_filter.c +11 -26
  76. data/src/core/ext/census/grpc_filter.h +10 -25
  77. data/src/core/ext/census/grpc_plugin.c +10 -25
  78. data/src/core/ext/census/initialize.c +10 -25
  79. data/src/core/ext/census/intrusive_hash_map.c +10 -25
  80. data/src/core/ext/census/intrusive_hash_map.h +10 -25
  81. data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
  82. data/src/core/ext/census/mlog.c +10 -25
  83. data/src/core/ext/census/mlog.h +10 -25
  84. data/src/core/ext/census/operation.c +10 -25
  85. data/src/core/ext/census/placeholders.c +10 -25
  86. data/src/core/ext/census/resource.c +10 -25
  87. data/src/core/ext/census/resource.h +10 -25
  88. data/src/core/ext/census/rpc_metric_id.h +10 -25
  89. data/src/core/ext/census/trace_context.c +10 -25
  90. data/src/core/ext/census/trace_context.h +10 -25
  91. data/src/core/ext/census/trace_label.h +10 -25
  92. data/src/core/ext/census/trace_propagation.h +10 -25
  93. data/src/core/ext/census/trace_status.h +10 -25
  94. data/src/core/ext/census/trace_string.h +10 -25
  95. data/src/core/ext/census/tracing.c +10 -26
  96. data/src/core/ext/census/tracing.h +10 -25
  97. data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
  98. data/src/core/ext/filters/client_channel/client_channel.c +617 -520
  99. data/src/core/ext/filters/client_channel/client_channel.h +15 -28
  100. data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
  101. data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
  102. data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
  103. data/src/core/ext/filters/client_channel/connector.c +10 -25
  104. data/src/core/ext/filters/client_channel/connector.h +10 -25
  105. data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
  106. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
  107. data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
  108. data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
  109. data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
  110. data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
  113. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
  114. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
  115. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
  116. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
  117. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
  118. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
  119. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
  120. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
  121. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
  122. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
  123. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
  124. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
  125. data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
  126. data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
  127. data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
  128. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
  129. data/src/core/ext/filters/client_channel/parse_address.c +10 -25
  130. data/src/core/ext/filters/client_channel/parse_address.h +10 -25
  131. data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
  132. data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
  133. data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
  134. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
  135. data/src/core/ext/filters/client_channel/resolver.c +33 -38
  136. data/src/core/ext/filters/client_channel/resolver.h +19 -30
  137. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
  143. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
  144. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
  145. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
  146. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
  147. data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
  148. data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
  149. data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
  150. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
  151. data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
  152. data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
  153. data/src/core/ext/filters/client_channel/subchannel.c +33 -55
  154. data/src/core/ext/filters/client_channel/subchannel.h +16 -26
  155. data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
  156. data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
  157. data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
  158. data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
  159. data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
  160. data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
  161. data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
  162. data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
  163. data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
  164. data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
  165. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
  166. data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
  167. data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
  168. data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
  169. data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
  170. data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
  171. data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
  172. data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
  173. data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
  174. data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
  175. data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
  176. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
  177. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
  178. data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
  179. data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
  180. data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
  181. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
  182. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
  183. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
  184. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
  185. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
  186. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
  187. data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
  188. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
  189. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
  190. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
  191. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
  192. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
  193. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
  194. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
  195. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
  196. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
  197. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
  199. data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
  200. data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
  201. data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
  202. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
  203. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
  204. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
  205. data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
  206. data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
  207. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
  208. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
  209. data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
  210. data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
  211. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
  213. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
  214. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
  215. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
  216. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
  217. data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
  218. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
  219. data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
  220. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
  221. data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
  222. data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
  223. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
  224. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
  225. data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
  226. data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
  227. data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
  228. data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
  229. data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
  230. data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
  231. data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
  232. data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
  233. data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
  234. data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
  235. data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
  236. data/src/core/lib/channel/channel_args.c +52 -27
  237. data/src/core/lib/channel/channel_args.h +18 -27
  238. data/src/core/lib/channel/channel_stack.c +11 -26
  239. data/src/core/lib/channel/channel_stack.h +12 -27
  240. data/src/core/lib/channel/channel_stack_builder.c +11 -26
  241. data/src/core/lib/channel/channel_stack_builder.h +10 -25
  242. data/src/core/lib/channel/connected_channel.c +10 -25
  243. data/src/core/lib/channel/connected_channel.h +10 -25
  244. data/src/core/lib/channel/context.h +10 -25
  245. data/src/core/lib/channel/handshaker.c +14 -29
  246. data/src/core/lib/channel/handshaker.h +10 -25
  247. data/src/core/lib/channel/handshaker_factory.c +10 -25
  248. data/src/core/lib/channel/handshaker_factory.h +10 -25
  249. data/src/core/lib/channel/handshaker_registry.c +10 -25
  250. data/src/core/lib/channel/handshaker_registry.h +10 -25
  251. data/src/core/lib/compression/algorithm_metadata.h +10 -25
  252. data/src/core/lib/compression/compression.c +10 -25
  253. data/src/core/lib/compression/message_compress.c +10 -25
  254. data/src/core/lib/compression/message_compress.h +10 -25
  255. data/src/core/lib/compression/stream_compression.c +191 -0
  256. data/src/core/lib/compression/stream_compression.h +90 -0
  257. data/src/core/lib/debug/trace.c +28 -29
  258. data/src/core/lib/debug/trace.h +16 -30
  259. data/src/core/lib/http/format_request.c +10 -25
  260. data/src/core/lib/http/format_request.h +10 -25
  261. data/src/core/lib/http/httpcli.c +19 -35
  262. data/src/core/lib/http/httpcli.h +10 -25
  263. data/src/core/lib/http/httpcli_security_connector.c +17 -30
  264. data/src/core/lib/http/parser.c +11 -26
  265. data/src/core/lib/http/parser.h +10 -25
  266. data/src/core/lib/iomgr/closure.c +62 -25
  267. data/src/core/lib/iomgr/closure.h +81 -26
  268. data/src/core/lib/iomgr/combiner.c +103 -200
  269. data/src/core/lib/iomgr/combiner.h +14 -32
  270. data/src/core/lib/iomgr/endpoint.c +10 -29
  271. data/src/core/lib/iomgr/endpoint.h +10 -29
  272. data/src/core/lib/iomgr/endpoint_pair.h +10 -25
  273. data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
  274. data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
  275. data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
  276. data/src/core/lib/iomgr/error.c +45 -46
  277. data/src/core/lib/iomgr/error.h +21 -34
  278. data/src/core/lib/iomgr/error_internal.h +10 -25
  279. data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
  280. data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
  281. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
  282. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
  283. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
  284. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
  285. data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
  286. data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
  287. data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
  288. data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
  289. data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
  290. data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
  291. data/src/core/lib/iomgr/ev_posix.c +25 -56
  292. data/src/core/lib/iomgr/ev_posix.h +15 -44
  293. data/src/core/lib/iomgr/ev_windows.c +11 -26
  294. data/src/core/lib/iomgr/exec_ctx.c +36 -45
  295. data/src/core/lib/iomgr/exec_ctx.h +10 -25
  296. data/src/core/lib/iomgr/executor.c +152 -127
  297. data/src/core/lib/iomgr/executor.h +18 -26
  298. data/src/core/lib/iomgr/gethostname.h +26 -0
  299. data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
  300. data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
  301. data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
  302. data/src/core/lib/iomgr/iocp_windows.c +10 -25
  303. data/src/core/lib/iomgr/iocp_windows.h +10 -25
  304. data/src/core/lib/iomgr/iomgr.c +17 -28
  305. data/src/core/lib/iomgr/iomgr.h +12 -27
  306. data/src/core/lib/iomgr/iomgr_internal.h +10 -25
  307. data/src/core/lib/iomgr/iomgr_posix.c +11 -26
  308. data/src/core/lib/iomgr/iomgr_posix.h +10 -25
  309. data/src/core/lib/iomgr/iomgr_uv.c +19 -26
  310. data/src/core/lib/iomgr/iomgr_uv.h +37 -0
  311. data/src/core/lib/iomgr/iomgr_windows.c +10 -25
  312. data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
  313. data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
  314. data/src/core/lib/iomgr/load_file.c +10 -25
  315. data/src/core/lib/iomgr/load_file.h +10 -25
  316. data/src/core/lib/iomgr/lockfree_event.c +22 -35
  317. data/src/core/lib/iomgr/lockfree_event.h +13 -27
  318. data/src/core/lib/iomgr/nameser.h +104 -0
  319. data/src/core/lib/iomgr/network_status_tracker.c +10 -25
  320. data/src/core/lib/iomgr/network_status_tracker.h +10 -25
  321. data/src/core/lib/iomgr/polling_entity.c +10 -25
  322. data/src/core/lib/iomgr/polling_entity.h +14 -34
  323. data/src/core/lib/iomgr/pollset.h +14 -25
  324. data/src/core/lib/iomgr/pollset_set.h +10 -25
  325. data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
  326. data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
  327. data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
  328. data/src/core/lib/iomgr/pollset_uv.c +25 -26
  329. data/src/core/lib/iomgr/pollset_uv.h +10 -25
  330. data/src/core/lib/iomgr/pollset_windows.c +17 -27
  331. data/src/core/lib/iomgr/pollset_windows.h +10 -25
  332. data/src/core/lib/iomgr/port.h +24 -25
  333. data/src/core/lib/iomgr/resolve_address.h +10 -25
  334. data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
  335. data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
  336. data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
  337. data/src/core/lib/iomgr/resource_quota.c +52 -67
  338. data/src/core/lib/iomgr/resource_quota.h +10 -25
  339. data/src/core/lib/iomgr/sockaddr.h +10 -25
  340. data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
  341. data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
  342. data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
  343. data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
  344. data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
  345. data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
  346. data/src/core/lib/iomgr/socket_mutator.c +14 -31
  347. data/src/core/lib/iomgr/socket_mutator.h +10 -25
  348. data/src/core/lib/iomgr/socket_utils.h +10 -25
  349. data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
  350. data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
  351. data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
  352. data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
  353. data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
  354. data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
  355. data/src/core/lib/iomgr/socket_windows.c +12 -27
  356. data/src/core/lib/iomgr/socket_windows.h +10 -25
  357. data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
  358. data/src/core/lib/iomgr/tcp_client.h +10 -25
  359. data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
  360. data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
  361. data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
  362. data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
  363. data/src/core/lib/iomgr/tcp_posix.c +36 -55
  364. data/src/core/lib/iomgr/tcp_posix.h +10 -25
  365. data/src/core/lib/iomgr/tcp_server.h +10 -25
  366. data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
  367. data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
  368. data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
  369. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
  370. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
  371. data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
  372. data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
  373. data/src/core/lib/iomgr/tcp_uv.c +41 -45
  374. data/src/core/lib/iomgr/tcp_uv.h +10 -25
  375. data/src/core/lib/iomgr/tcp_windows.c +39 -53
  376. data/src/core/lib/iomgr/tcp_windows.h +10 -25
  377. data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
  378. data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
  379. data/src/core/lib/iomgr/timer.h +18 -27
  380. data/src/core/lib/iomgr/timer_generic.c +91 -87
  381. data/src/core/lib/iomgr/timer_generic.h +10 -25
  382. data/src/core/lib/iomgr/timer_heap.c +10 -25
  383. data/src/core/lib/iomgr/timer_heap.h +10 -25
  384. data/src/core/lib/iomgr/timer_manager.c +178 -100
  385. data/src/core/lib/iomgr/timer_manager.h +10 -25
  386. data/src/core/lib/iomgr/timer_uv.c +23 -33
  387. data/src/core/lib/iomgr/timer_uv.h +10 -25
  388. data/src/core/lib/iomgr/udp_server.c +17 -32
  389. data/src/core/lib/iomgr/udp_server.h +10 -25
  390. data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
  391. data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
  392. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
  393. data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
  394. data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
  395. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
  396. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
  397. data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
  398. data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
  399. data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
  400. data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
  401. data/src/core/lib/json/json.c +10 -25
  402. data/src/core/lib/json/json.h +10 -25
  403. data/src/core/lib/json/json_common.h +10 -25
  404. data/src/core/lib/json/json_reader.c +11 -25
  405. data/src/core/lib/json/json_reader.h +10 -25
  406. data/src/core/lib/json/json_string.c +10 -25
  407. data/src/core/lib/json/json_writer.c +10 -25
  408. data/src/core/lib/json/json_writer.h +10 -25
  409. data/src/core/lib/profiling/basic_timers.c +10 -25
  410. data/src/core/lib/profiling/stap_timers.c +10 -25
  411. data/src/core/lib/profiling/timers.h +10 -25
  412. data/src/core/lib/security/context/security_context.c +32 -40
  413. data/src/core/lib/security/context/security_context.h +15 -26
  414. data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
  415. data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
  416. data/src/core/lib/security/credentials/credentials.c +29 -49
  417. data/src/core/lib/security/credentials/credentials.h +48 -61
  418. data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
  419. data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
  420. data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
  421. data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
  422. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
  423. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
  424. data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
  425. data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
  426. data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
  427. data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
  428. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
  429. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
  430. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
  431. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
  432. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
  433. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
  434. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
  435. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
  436. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
  437. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
  438. data/src/core/lib/security/transport/auth_filters.h +10 -25
  439. data/src/core/lib/security/transport/client_auth_filter.c +217 -112
  440. data/src/core/lib/security/transport/lb_targets_info.c +16 -32
  441. data/src/core/lib/security/transport/lb_targets_info.h +10 -25
  442. data/src/core/lib/security/transport/secure_endpoint.c +29 -43
  443. data/src/core/lib/security/transport/secure_endpoint.h +10 -25
  444. data/src/core/lib/security/transport/security_connector.c +80 -61
  445. data/src/core/lib/security/transport/security_connector.h +35 -35
  446. data/src/core/lib/security/transport/security_handshaker.c +18 -33
  447. data/src/core/lib/security/transport/security_handshaker.h +10 -25
  448. data/src/core/lib/security/transport/server_auth_filter.c +62 -116
  449. data/src/core/lib/security/transport/tsi_error.c +10 -25
  450. data/src/core/lib/security/transport/tsi_error.h +10 -25
  451. data/src/core/lib/security/util/json_util.c +10 -25
  452. data/src/core/lib/security/util/json_util.h +10 -25
  453. data/src/core/lib/slice/b64.c +10 -25
  454. data/src/core/lib/slice/b64.h +10 -25
  455. data/src/core/lib/slice/percent_encoding.c +10 -25
  456. data/src/core/lib/slice/percent_encoding.h +10 -25
  457. data/src/core/lib/slice/slice.c +10 -25
  458. data/src/core/lib/slice/slice_buffer.c +10 -25
  459. data/src/core/lib/slice/slice_hash_table.c +48 -26
  460. data/src/core/lib/slice/slice_hash_table.h +26 -28
  461. data/src/core/lib/slice/slice_intern.c +10 -25
  462. data/src/core/lib/slice/slice_internal.h +10 -25
  463. data/src/core/lib/slice/slice_string_helpers.c +10 -25
  464. data/src/core/lib/slice/slice_string_helpers.h +10 -25
  465. data/src/core/lib/support/alloc.c +10 -25
  466. data/src/core/lib/support/arena.c +12 -27
  467. data/src/core/lib/support/arena.h +10 -25
  468. data/src/core/lib/support/atm.c +17 -32
  469. data/src/core/lib/support/atomic.h +10 -25
  470. data/src/core/lib/support/atomic_with_atm.h +10 -25
  471. data/src/core/lib/support/atomic_with_std.h +10 -25
  472. data/src/core/lib/support/avl.c +101 -101
  473. data/src/core/lib/support/backoff.c +10 -25
  474. data/src/core/lib/support/backoff.h +10 -25
  475. data/src/core/lib/support/block_annotate.h +10 -25
  476. data/src/core/lib/support/cmdline.c +10 -25
  477. data/src/core/lib/support/cpu_iphone.c +10 -25
  478. data/src/core/lib/support/cpu_linux.c +10 -25
  479. data/src/core/lib/support/cpu_posix.c +10 -25
  480. data/src/core/lib/support/cpu_windows.c +10 -25
  481. data/src/core/lib/support/env.h +16 -25
  482. data/src/core/lib/support/env_linux.c +30 -37
  483. data/src/core/lib/support/env_posix.c +15 -25
  484. data/src/core/lib/support/env_windows.c +15 -25
  485. data/src/core/lib/support/histogram.c +10 -25
  486. data/src/core/lib/support/host_port.c +10 -25
  487. data/src/core/lib/support/log.c +20 -29
  488. data/src/core/lib/support/log_android.c +10 -25
  489. data/src/core/lib/support/log_linux.c +13 -26
  490. data/src/core/lib/support/log_posix.c +10 -25
  491. data/src/core/lib/support/log_windows.c +10 -25
  492. data/src/core/lib/support/memory.h +10 -25
  493. data/src/core/lib/support/mpscq.c +11 -49
  494. data/src/core/lib/support/mpscq.h +11 -50
  495. data/src/core/lib/support/murmur_hash.c +12 -25
  496. data/src/core/lib/support/murmur_hash.h +10 -25
  497. data/src/core/lib/support/spinlock.h +10 -25
  498. data/src/core/lib/support/stack_lockfree.c +10 -25
  499. data/src/core/lib/support/stack_lockfree.h +10 -25
  500. data/src/core/lib/support/string.c +10 -25
  501. data/src/core/lib/support/string.h +10 -25
  502. data/src/core/lib/support/string_posix.c +10 -25
  503. data/src/core/lib/support/string_util_windows.c +10 -25
  504. data/src/core/lib/support/string_windows.c +10 -25
  505. data/src/core/lib/support/string_windows.h +10 -25
  506. data/src/core/lib/support/subprocess_posix.c +10 -25
  507. data/src/core/lib/support/subprocess_windows.c +10 -25
  508. data/src/core/lib/support/sync.c +10 -25
  509. data/src/core/lib/support/sync_posix.c +10 -25
  510. data/src/core/lib/support/sync_windows.c +10 -25
  511. data/src/core/lib/support/thd.c +10 -25
  512. data/src/core/lib/support/thd_internal.h +10 -25
  513. data/src/core/lib/support/thd_posix.c +10 -25
  514. data/src/core/lib/support/thd_windows.c +10 -25
  515. data/src/core/lib/support/time.c +10 -25
  516. data/src/core/lib/support/time_posix.c +10 -25
  517. data/src/core/lib/support/time_precise.c +18 -33
  518. data/src/core/lib/support/time_precise.h +10 -25
  519. data/src/core/lib/support/time_windows.c +10 -25
  520. data/src/core/lib/support/tls_pthread.c +10 -25
  521. data/src/core/lib/support/tmpfile.h +10 -25
  522. data/src/core/lib/support/tmpfile_msys.c +10 -25
  523. data/src/core/lib/support/tmpfile_posix.c +10 -25
  524. data/src/core/lib/support/tmpfile_windows.c +10 -25
  525. data/src/core/lib/support/wrap_memcpy.c +10 -25
  526. data/src/core/lib/surface/alarm.c +78 -35
  527. data/src/core/lib/surface/alarm_internal.h +40 -0
  528. data/src/core/lib/surface/api_trace.c +11 -26
  529. data/src/core/lib/surface/api_trace.h +10 -25
  530. data/src/core/lib/surface/byte_buffer.c +10 -25
  531. data/src/core/lib/surface/byte_buffer_reader.c +10 -25
  532. data/src/core/lib/surface/call.c +64 -84
  533. data/src/core/lib/surface/call.h +11 -26
  534. data/src/core/lib/surface/call_details.c +10 -25
  535. data/src/core/lib/surface/call_log_batch.c +10 -25
  536. data/src/core/lib/surface/call_test_only.h +10 -25
  537. data/src/core/lib/surface/channel.c +11 -26
  538. data/src/core/lib/surface/channel.h +11 -26
  539. data/src/core/lib/surface/channel_init.c +10 -25
  540. data/src/core/lib/surface/channel_init.h +10 -25
  541. data/src/core/lib/surface/channel_ping.c +12 -27
  542. data/src/core/lib/surface/channel_stack_type.c +10 -25
  543. data/src/core/lib/surface/channel_stack_type.h +10 -25
  544. data/src/core/lib/surface/completion_queue.c +442 -331
  545. data/src/core/lib/surface/completion_queue.h +16 -33
  546. data/src/core/lib/surface/completion_queue_factory.c +10 -25
  547. data/src/core/lib/surface/completion_queue_factory.h +10 -25
  548. data/src/core/lib/surface/event_string.c +10 -25
  549. data/src/core/lib/surface/event_string.h +10 -25
  550. data/src/core/lib/surface/init.c +38 -47
  551. data/src/core/lib/surface/init.h +10 -25
  552. data/src/core/lib/surface/init_secure.c +20 -27
  553. data/src/core/lib/surface/lame_client.cc +14 -29
  554. data/src/core/lib/surface/lame_client.h +10 -25
  555. data/src/core/lib/surface/metadata_array.c +10 -25
  556. data/src/core/lib/surface/server.c +128 -81
  557. data/src/core/lib/surface/server.h +10 -25
  558. data/src/core/lib/surface/validate_metadata.c +10 -25
  559. data/src/core/lib/surface/validate_metadata.h +10 -25
  560. data/src/core/lib/surface/version.c +11 -26
  561. data/src/core/lib/transport/bdp_estimator.c +19 -29
  562. data/src/core/lib/transport/bdp_estimator.h +16 -29
  563. data/src/core/lib/transport/byte_stream.c +127 -36
  564. data/src/core/lib/transport/byte_stream.h +88 -46
  565. data/src/core/lib/transport/connectivity_state.c +17 -31
  566. data/src/core/lib/transport/connectivity_state.h +10 -25
  567. data/src/core/lib/transport/error_utils.c +10 -25
  568. data/src/core/lib/transport/error_utils.h +10 -25
  569. data/src/core/lib/transport/http2_errors.h +10 -25
  570. data/src/core/lib/transport/metadata.c +87 -85
  571. data/src/core/lib/transport/metadata.h +15 -28
  572. data/src/core/lib/transport/metadata_batch.c +10 -25
  573. data/src/core/lib/transport/metadata_batch.h +10 -25
  574. data/src/core/lib/transport/pid_controller.c +10 -25
  575. data/src/core/lib/transport/pid_controller.h +10 -25
  576. data/src/core/lib/transport/service_config.c +11 -26
  577. data/src/core/lib/transport/service_config.h +10 -25
  578. data/src/core/lib/transport/static_metadata.c +12 -26
  579. data/src/core/lib/transport/static_metadata.h +10 -25
  580. data/src/core/lib/transport/status_conversion.c +10 -25
  581. data/src/core/lib/transport/status_conversion.h +10 -25
  582. data/src/core/lib/transport/timeout_encoding.c +10 -25
  583. data/src/core/lib/transport/timeout_encoding.h +10 -25
  584. data/src/core/lib/transport/transport.c +60 -53
  585. data/src/core/lib/transport/transport.h +36 -34
  586. data/src/core/lib/transport/transport_impl.h +10 -25
  587. data/src/core/lib/transport/transport_op_string.c +10 -28
  588. data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
  589. data/src/core/tsi/fake_transport_security.c +199 -94
  590. data/src/core/tsi/fake_transport_security.h +11 -26
  591. data/src/core/tsi/gts_transport_security.c +40 -0
  592. data/src/core/tsi/gts_transport_security.h +37 -0
  593. data/src/core/tsi/ssl_transport_security.c +13 -32
  594. data/src/core/tsi/ssl_transport_security.h +10 -25
  595. data/src/core/tsi/ssl_types.h +10 -25
  596. data/src/core/tsi/transport_security.c +48 -78
  597. data/src/core/tsi/transport_security.h +18 -27
  598. data/src/core/tsi/transport_security_adapter.c +17 -29
  599. data/src/core/tsi/transport_security_adapter.h +10 -25
  600. data/src/core/tsi/transport_security_grpc.c +64 -0
  601. data/src/core/tsi/transport_security_grpc.h +80 -0
  602. data/src/core/tsi/transport_security_interface.h +21 -27
  603. data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
  604. data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
  605. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
  606. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
  607. data/src/ruby/bin/math_client.rb +10 -25
  608. data/src/ruby/bin/math_server.rb +10 -25
  609. data/src/ruby/bin/math_services_pb.rb +10 -25
  610. data/src/ruby/bin/noproto_client.rb +10 -25
  611. data/src/ruby/bin/noproto_server.rb +10 -25
  612. data/src/ruby/ext/grpc/extconf.rb +10 -25
  613. data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
  614. data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
  615. data/src/ruby/ext/grpc/rb_call.c +44 -25
  616. data/src/ruby/ext/grpc/rb_call.h +10 -25
  617. data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
  618. data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
  619. data/src/ruby/ext/grpc/rb_channel.c +10 -25
  620. data/src/ruby/ext/grpc/rb_channel.h +10 -25
  621. data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
  622. data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
  623. data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
  624. data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
  625. data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
  626. data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
  627. data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
  628. data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
  629. data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
  630. data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
  631. data/src/ruby/ext/grpc/rb_grpc.c +10 -25
  632. data/src/ruby/ext/grpc/rb_grpc.h +10 -25
  633. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
  634. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
  635. data/src/ruby/ext/grpc/rb_loader.c +10 -25
  636. data/src/ruby/ext/grpc/rb_loader.h +10 -25
  637. data/src/ruby/ext/grpc/rb_server.c +10 -25
  638. data/src/ruby/ext/grpc/rb_server.h +10 -25
  639. data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
  640. data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
  641. data/src/ruby/lib/grpc.rb +10 -25
  642. data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
  643. data/src/ruby/lib/grpc/errors.rb +16 -30
  644. data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
  645. data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
  646. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
  647. data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
  648. data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
  649. data/src/ruby/lib/grpc/generic/service.rb +10 -25
  650. data/src/ruby/lib/grpc/grpc.rb +10 -25
  651. data/src/ruby/lib/grpc/logconfig.rb +10 -25
  652. data/src/ruby/lib/grpc/notifier.rb +10 -25
  653. data/src/ruby/lib/grpc/version.rb +11 -26
  654. data/src/ruby/pb/generate_proto_ruby.sh +10 -25
  655. data/src/ruby/pb/grpc/health/checker.rb +10 -25
  656. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
  657. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
  658. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
  659. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
  660. data/src/ruby/pb/test/client.rb +10 -25
  661. data/src/ruby/pb/test/server.rb +10 -25
  662. data/src/ruby/spec/call_credentials_spec.rb +10 -25
  663. data/src/ruby/spec/call_spec.rb +43 -25
  664. data/src/ruby/spec/channel_connection_spec.rb +10 -25
  665. data/src/ruby/spec/channel_credentials_spec.rb +11 -26
  666. data/src/ruby/spec/channel_spec.rb +10 -25
  667. data/src/ruby/spec/client_auth_spec.rb +10 -25
  668. data/src/ruby/spec/client_server_spec.rb +66 -25
  669. data/src/ruby/spec/compression_options_spec.rb +10 -25
  670. data/src/ruby/spec/error_sanity_spec.rb +10 -25
  671. data/src/ruby/spec/generic/active_call_spec.rb +10 -25
  672. data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
  673. data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
  674. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
  675. data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
  676. data/src/ruby/spec/generic/service_spec.rb +10 -25
  677. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
  678. data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
  679. data/src/ruby/spec/server_credentials_spec.rb +10 -25
  680. data/src/ruby/spec/server_spec.rb +10 -25
  681. data/src/ruby/spec/spec_helper.rb +10 -25
  682. data/src/ruby/spec/time_consts_spec.rb +10 -25
  683. data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
  684. data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
  685. data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
  686. data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
  687. data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
  688. data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
  689. data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
  690. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
  691. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
  692. data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
  693. data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
  694. data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
  695. data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
  696. data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
  697. data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
  698. data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
  699. data/third_party/boringssl/crypto/base64/base64.c +7 -5
  700. data/third_party/boringssl/crypto/bio/bio.c +24 -10
  701. data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
  702. data/third_party/boringssl/crypto/bio/connect.c +7 -18
  703. data/third_party/boringssl/crypto/bio/fd.c +3 -6
  704. data/third_party/boringssl/crypto/bio/file.c +6 -6
  705. data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
  706. data/third_party/boringssl/crypto/bio/pair.c +30 -344
  707. data/third_party/boringssl/crypto/bio/socket.c +6 -7
  708. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
  709. data/third_party/boringssl/crypto/bn/add.c +1 -1
  710. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
  711. data/third_party/boringssl/crypto/bn/bn.c +6 -20
  712. data/third_party/boringssl/crypto/bn/cmp.c +14 -0
  713. data/third_party/boringssl/crypto/bn/convert.c +73 -2
  714. data/third_party/boringssl/crypto/bn/ctx.c +3 -1
  715. data/third_party/boringssl/crypto/bn/div.c +108 -51
  716. data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
  717. data/third_party/boringssl/crypto/bn/gcd.c +29 -22
  718. data/third_party/boringssl/crypto/bn/generic.c +71 -67
  719. data/third_party/boringssl/crypto/bn/internal.h +19 -6
  720. data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
  721. data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
  722. data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
  723. data/third_party/boringssl/crypto/bn/mul.c +11 -9
  724. data/third_party/boringssl/crypto/bn/random.c +6 -3
  725. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
  726. data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
  727. data/third_party/boringssl/crypto/bn/shift.c +9 -1
  728. data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
  729. data/third_party/boringssl/crypto/buf/buf.c +6 -4
  730. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
  731. data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
  732. data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
  733. data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
  734. data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
  735. data/third_party/boringssl/crypto/cipher/aead.c +3 -3
  736. data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
  737. data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
  738. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
  739. data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
  740. data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
  741. data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
  742. data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
  743. data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
  744. data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
  745. data/third_party/boringssl/crypto/conf/conf.c +6 -3
  746. data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
  747. data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
  748. data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
  749. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
  750. data/third_party/boringssl/crypto/des/des.c +1 -1
  751. data/third_party/boringssl/crypto/des/internal.h +58 -46
  752. data/third_party/boringssl/crypto/dh/dh.c +4 -8
  753. data/third_party/boringssl/crypto/digest/digest.c +5 -2
  754. data/third_party/boringssl/crypto/digest/digests.c +70 -33
  755. data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
  756. data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
  757. data/third_party/boringssl/crypto/ec/ec.c +1 -1
  758. data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
  759. data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
  760. data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
  761. data/third_party/boringssl/crypto/ec/oct.c +2 -14
  762. data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
  763. data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
  764. data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
  765. data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
  766. data/third_party/boringssl/crypto/ec/simple.c +2 -1
  767. data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
  768. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
  769. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
  770. data/third_party/boringssl/crypto/engine/engine.c +3 -1
  771. data/third_party/boringssl/crypto/err/err.c +5 -5
  772. data/third_party/boringssl/crypto/evp/evp.c +1 -1
  773. data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
  774. data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
  775. data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
  776. data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
  777. data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
  778. data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
  779. data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
  780. data/third_party/boringssl/crypto/internal.h +81 -0
  781. data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
  782. data/third_party/boringssl/crypto/md4/md4.c +20 -18
  783. data/third_party/boringssl/crypto/md5/md5.c +31 -21
  784. data/third_party/boringssl/crypto/mem.c +4 -10
  785. data/third_party/boringssl/crypto/modes/cbc.c +2 -6
  786. data/third_party/boringssl/crypto/modes/cfb.c +2 -2
  787. data/third_party/boringssl/crypto/modes/ctr.c +1 -1
  788. data/third_party/boringssl/crypto/modes/gcm.c +117 -334
  789. data/third_party/boringssl/crypto/modes/internal.h +107 -84
  790. data/third_party/boringssl/crypto/modes/ofb.c +3 -3
  791. data/third_party/boringssl/crypto/modes/polyval.c +94 -0
  792. data/third_party/boringssl/crypto/obj/obj.c +13 -8
  793. data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
  794. data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
  795. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
  796. data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
  797. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
  798. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
  799. data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
  800. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
  801. data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
  802. data/third_party/boringssl/crypto/pool/pool.c +200 -0
  803. data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
  804. data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
  805. data/third_party/boringssl/crypto/rand/rand.c +7 -7
  806. data/third_party/boringssl/crypto/rand/urandom.c +136 -22
  807. data/third_party/boringssl/crypto/rand/windows.c +2 -2
  808. data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
  809. data/third_party/boringssl/crypto/rsa/padding.c +11 -11
  810. data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
  811. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
  812. data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
  813. data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
  814. data/third_party/boringssl/crypto/sha/sha1.c +60 -42
  815. data/third_party/boringssl/crypto/sha/sha256.c +4 -2
  816. data/third_party/boringssl/crypto/sha/sha512.c +9 -7
  817. data/third_party/boringssl/crypto/stack/stack.c +10 -7
  818. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  819. data/third_party/boringssl/crypto/thread_win.c +2 -2
  820. data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
  821. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
  822. data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
  823. data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
  824. data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
  825. data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
  826. data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
  827. data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
  828. data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
  829. data/third_party/boringssl/crypto/x509/x509name.c +4 -1
  830. data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
  831. data/third_party/boringssl/crypto/x509/x_name.c +23 -13
  832. data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
  833. data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
  834. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  835. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  836. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
  837. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
  838. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
  839. data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
  840. data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
  841. data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
  842. data/third_party/boringssl/include/openssl/aead.h +9 -20
  843. data/third_party/boringssl/include/openssl/aes.h +21 -9
  844. data/third_party/boringssl/include/openssl/asn1.h +9 -1
  845. data/third_party/boringssl/include/openssl/base.h +33 -6
  846. data/third_party/boringssl/include/openssl/bio.h +10 -103
  847. data/third_party/boringssl/include/openssl/bn.h +58 -42
  848. data/third_party/boringssl/include/openssl/bytestring.h +17 -0
  849. data/third_party/boringssl/include/openssl/cipher.h +4 -3
  850. data/third_party/boringssl/include/openssl/conf.h +4 -1
  851. data/third_party/boringssl/include/openssl/curve25519.h +13 -0
  852. data/third_party/boringssl/include/openssl/digest.h +5 -3
  853. data/third_party/boringssl/include/openssl/dsa.h +5 -5
  854. data/third_party/boringssl/include/openssl/ec.h +2 -2
  855. data/third_party/boringssl/include/openssl/ecdh.h +3 -4
  856. data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
  857. data/third_party/boringssl/include/openssl/err.h +5 -5
  858. data/third_party/boringssl/include/openssl/evp.h +11 -7
  859. data/third_party/boringssl/include/openssl/lhash.h +2 -3
  860. data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
  861. data/third_party/boringssl/include/openssl/nid.h +2949 -2916
  862. data/third_party/boringssl/include/openssl/obj.h +1 -1
  863. data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
  864. data/third_party/boringssl/include/openssl/pool.h +87 -0
  865. data/third_party/boringssl/include/openssl/rand.h +1 -1
  866. data/third_party/boringssl/include/openssl/rsa.h +4 -2
  867. data/third_party/boringssl/include/openssl/sha.h +0 -4
  868. data/third_party/boringssl/include/openssl/ssl.h +327 -662
  869. data/third_party/boringssl/include/openssl/ssl3.h +1 -21
  870. data/third_party/boringssl/include/openssl/stack.h +1 -0
  871. data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
  872. data/third_party/boringssl/include/openssl/tls1.h +23 -52
  873. data/third_party/boringssl/include/openssl/type_check.h +4 -0
  874. data/third_party/boringssl/include/openssl/x509.h +10 -59
  875. data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
  876. data/third_party/boringssl/include/openssl/x509v3.h +4 -4
  877. data/third_party/boringssl/ssl/bio_ssl.c +175 -0
  878. data/third_party/boringssl/ssl/custom_extensions.c +24 -21
  879. data/third_party/boringssl/ssl/d1_both.c +259 -289
  880. data/third_party/boringssl/ssl/d1_lib.c +8 -20
  881. data/third_party/boringssl/ssl/d1_pkt.c +6 -15
  882. data/third_party/boringssl/ssl/dtls_method.c +22 -8
  883. data/third_party/boringssl/ssl/dtls_record.c +27 -2
  884. data/third_party/boringssl/ssl/handshake_client.c +460 -579
  885. data/third_party/boringssl/ssl/handshake_server.c +662 -644
  886. data/third_party/boringssl/ssl/internal.h +1009 -375
  887. data/third_party/boringssl/ssl/s3_both.c +312 -162
  888. data/third_party/boringssl/ssl/s3_lib.c +12 -128
  889. data/third_party/boringssl/ssl/s3_pkt.c +22 -30
  890. data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
  891. data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
  892. data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
  893. data/third_party/boringssl/ssl/ssl_cert.c +417 -219
  894. data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
  895. data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
  896. data/third_party/boringssl/ssl/ssl_file.c +0 -11
  897. data/third_party/boringssl/ssl/ssl_lib.c +325 -652
  898. data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
  899. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
  900. data/third_party/boringssl/ssl/ssl_session.c +206 -95
  901. data/third_party/boringssl/ssl/ssl_stat.c +18 -84
  902. data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
  903. data/third_party/boringssl/ssl/ssl_x509.c +815 -0
  904. data/third_party/boringssl/ssl/t1_enc.c +188 -174
  905. data/third_party/boringssl/ssl/t1_lib.c +1064 -764
  906. data/third_party/boringssl/ssl/tls13_both.c +290 -96
  907. data/third_party/boringssl/ssl/tls13_client.c +344 -314
  908. data/third_party/boringssl/ssl/tls13_enc.c +239 -200
  909. data/third_party/boringssl/ssl/tls13_server.c +374 -366
  910. data/third_party/boringssl/ssl/tls_method.c +40 -5
  911. data/third_party/boringssl/ssl/tls_record.c +166 -71
  912. metadata +39 -25
  913. data/src/core/lib/iomgr/workqueue.h +0 -87
  914. data/src/core/lib/iomgr/workqueue_uv.c +0 -65
  915. data/src/core/lib/iomgr/workqueue_uv.h +0 -37
  916. data/src/core/lib/iomgr/workqueue_windows.c +0 -63
  917. data/src/core/lib/iomgr/workqueue_windows.h +0 -37
  918. data/third_party/boringssl/crypto/bio/buffer.c +0 -496
  919. data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
  920. data/third_party/boringssl/crypto/newhope/internal.h +0 -71
  921. data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
  922. data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
  923. data/third_party/boringssl/crypto/newhope/poly.c +0 -183
  924. data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
  925. data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
  926. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
  927. data/third_party/boringssl/include/openssl/newhope.h +0 -158
  928. data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -1,33 +1,18 @@
1
1
  /*
2
2
  *
3
- * Copyright 2016, Google Inc.
4
- * All rights reserved.
3
+ * Copyright 2016 gRPC authors.
5
4
  *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
9
8
  *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
9
+ * http://www.apache.org/licenses/LICENSE-2.0
19
10
  *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
31
16
  *
32
17
  */
33
18
 
@@ -41,6 +26,8 @@
41
26
  #include <grpc/status.h>
42
27
  #include <grpc/support/time.h>
43
28
 
29
+ #include "src/core/lib/debug/trace.h"
30
+
44
31
  #ifdef __cplusplus
45
32
  extern "C" {
46
33
  #endif
@@ -51,6 +38,10 @@ extern "C" {
51
38
 
52
39
  typedef struct grpc_error grpc_error;
53
40
 
41
+ #ifndef NDEBUG
42
+ extern grpc_tracer_flag grpc_trace_error_refcount;
43
+ #endif
44
+
54
45
  typedef enum {
55
46
  /// 'errno' from the operating system
56
47
  GRPC_ERROR_INT_ERRNO,
@@ -164,15 +155,11 @@ grpc_error *grpc_error_create(const char *file, int line, grpc_slice desc,
164
155
  grpc_error_create(__FILE__, __LINE__, grpc_slice_from_copied_string(desc), \
165
156
  errs, count)
166
157
 
167
- //#define GRPC_ERROR_REFCOUNT_DEBUG
168
- #ifdef GRPC_ERROR_REFCOUNT_DEBUG
169
- grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line,
170
- const char *func);
171
- void grpc_error_unref(grpc_error *err, const char *file, int line,
172
- const char *func);
173
- #define GRPC_ERROR_REF(err) grpc_error_ref(err, __FILE__, __LINE__, __func__)
174
- #define GRPC_ERROR_UNREF(err) \
175
- grpc_error_unref(err, __FILE__, __LINE__, __func__)
158
+ #ifndef NDEBUG
159
+ grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line);
160
+ void grpc_error_unref(grpc_error *err, const char *file, int line);
161
+ #define GRPC_ERROR_REF(err) grpc_error_ref(err, __FILE__, __LINE__)
162
+ #define GRPC_ERROR_UNREF(err) grpc_error_unref(err, __FILE__, __LINE__)
176
163
  #else
177
164
  grpc_error *grpc_error_ref(grpc_error *err);
178
165
  void grpc_error_unref(grpc_error *err);
@@ -1,33 +1,18 @@
1
1
  /*
2
2
  *
3
- * Copyright 2016, Google Inc.
4
- * All rights reserved.
3
+ * Copyright 2016 gRPC authors.
5
4
  *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
9
8
  *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
9
+ * http://www.apache.org/licenses/LICENSE-2.0
19
10
  *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
31
16
  *
32
17
  */
33
18
 
@@ -1,33 +1,18 @@
1
1
  /*
2
2
  *
3
- * Copyright 2017, Google Inc.
4
- * All rights reserved.
3
+ * Copyright 2017 gRPC authors.
5
4
  *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
9
8
  *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
9
+ * http://www.apache.org/licenses/LICENSE-2.0
19
10
  *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
31
16
  *
32
17
  */
33
18
 
@@ -58,9 +43,9 @@
58
43
  #include "src/core/lib/iomgr/iomgr_internal.h"
59
44
  #include "src/core/lib/iomgr/lockfree_event.h"
60
45
  #include "src/core/lib/iomgr/wakeup_fd_posix.h"
61
- #include "src/core/lib/iomgr/workqueue.h"
62
46
  #include "src/core/lib/profiling/timers.h"
63
47
  #include "src/core/lib/support/block_annotate.h"
48
+ #include "src/core/lib/support/string.h"
64
49
 
65
50
  static grpc_wakeup_fd global_wakeup_fd;
66
51
  static int g_epfd;
@@ -93,8 +78,21 @@ static void fd_global_shutdown(void);
93
78
 
94
79
  typedef enum { UNKICKED, KICKED, DESIGNATED_POLLER } kick_state;
95
80
 
81
+ static const char *kick_state_string(kick_state st) {
82
+ switch (st) {
83
+ case UNKICKED:
84
+ return "UNKICKED";
85
+ case KICKED:
86
+ return "KICKED";
87
+ case DESIGNATED_POLLER:
88
+ return "DESIGNATED_POLLER";
89
+ }
90
+ GPR_UNREACHABLE_CODE(return "UNKNOWN");
91
+ }
92
+
96
93
  struct grpc_pollset_worker {
97
94
  kick_state kick_state;
95
+ int kick_state_mutator; // which line of code last changed kick state
98
96
  bool initialized_cv;
99
97
  grpc_pollset_worker *next;
100
98
  grpc_pollset_worker *prev;
@@ -102,6 +100,12 @@ struct grpc_pollset_worker {
102
100
  grpc_closure_list schedule_on_end_work;
103
101
  };
104
102
 
103
+ #define SET_KICK_STATE(worker, state) \
104
+ do { \
105
+ (worker)->kick_state = (state); \
106
+ (worker)->kick_state_mutator = __LINE__; \
107
+ } while (false)
108
+
105
109
  #define MAX_NEIGHBOURHOODS 1024
106
110
 
107
111
  typedef struct pollset_neighbourhood {
@@ -116,10 +120,15 @@ struct grpc_pollset {
116
120
  bool reassigning_neighbourhood;
117
121
  grpc_pollset_worker *root_worker;
118
122
  bool kicked_without_poller;
123
+
124
+ /* Set to true if the pollset is observed to have no workers available to
125
+ * poll */
119
126
  bool seen_inactive;
120
- bool shutting_down; /* Is the pollset shutting down ? */
121
- bool finish_shutdown_called; /* Is the 'finish_shutdown_locked()' called ? */
127
+ bool shutting_down; /* Is the pollset shutting down ? */
122
128
  grpc_closure *shutdown_closure; /* Called after after shutdown is complete */
129
+
130
+ /* Number of workers who are *about-to* attach themselves to the pollset
131
+ * worker list */
123
132
  int begin_refs;
124
133
 
125
134
  grpc_pollset *next;
@@ -130,7 +139,9 @@ struct grpc_pollset {
130
139
  * Pollset-set Declarations
131
140
  */
132
141
 
133
- struct grpc_pollset_set {};
142
+ struct grpc_pollset_set {
143
+ char unused;
144
+ };
134
145
 
135
146
  /*******************************************************************************
136
147
  * Common helpers
@@ -208,8 +219,10 @@ static grpc_fd *fd_create(int fd, const char *name) {
208
219
  char *fd_name;
209
220
  gpr_asprintf(&fd_name, "%s fd=%d", name, fd);
210
221
  grpc_iomgr_register_object(&new_fd->iomgr_object, fd_name);
211
- #ifdef GRPC_FD_REF_COUNT_DEBUG
212
- gpr_log(GPR_DEBUG, "FD %d %p create %s", fd, (void *)new_fd, fd_name);
222
+ #ifndef NDEBUG
223
+ if (GRPC_TRACER_ON(grpc_trace_fd_refcount)) {
224
+ gpr_log(GPR_DEBUG, "FD %d %p create %s", fd, new_fd, fd_name);
225
+ }
213
226
  #endif
214
227
  gpr_free(fd_name);
215
228
 
@@ -224,34 +237,47 @@ static grpc_fd *fd_create(int fd, const char *name) {
224
237
 
225
238
  static int fd_wrapped_fd(grpc_fd *fd) { return fd->fd; }
226
239
 
227
- /* Might be called multiple times */
228
- static void fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_error *why) {
240
+ /* if 'releasing_fd' is true, it means that we are going to detach the internal
241
+ * fd from grpc_fd structure (i.e which means we should not be calling
242
+ * shutdown() syscall on that fd) */
243
+ static void fd_shutdown_internal(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
244
+ grpc_error *why, bool releasing_fd) {
229
245
  if (grpc_lfev_set_shutdown(exec_ctx, &fd->read_closure,
230
246
  GRPC_ERROR_REF(why))) {
231
- shutdown(fd->fd, SHUT_RDWR);
247
+ if (!releasing_fd) {
248
+ shutdown(fd->fd, SHUT_RDWR);
249
+ }
232
250
  grpc_lfev_set_shutdown(exec_ctx, &fd->write_closure, GRPC_ERROR_REF(why));
233
251
  }
234
252
  GRPC_ERROR_UNREF(why);
235
253
  }
236
254
 
255
+ /* Might be called multiple times */
256
+ static void fd_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_error *why) {
257
+ fd_shutdown_internal(exec_ctx, fd, why, false);
258
+ }
259
+
237
260
  static void fd_orphan(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
238
261
  grpc_closure *on_done, int *release_fd,
239
- const char *reason) {
262
+ bool already_closed, const char *reason) {
240
263
  grpc_error *error = GRPC_ERROR_NONE;
264
+ bool is_release_fd = (release_fd != NULL);
241
265
 
242
266
  if (!grpc_lfev_is_shutdown(&fd->read_closure)) {
243
- fd_shutdown(exec_ctx, fd, GRPC_ERROR_CREATE_FROM_COPIED_STRING(reason));
267
+ fd_shutdown_internal(exec_ctx, fd,
268
+ GRPC_ERROR_CREATE_FROM_COPIED_STRING(reason),
269
+ is_release_fd);
244
270
  }
245
271
 
246
272
  /* If release_fd is not NULL, we should be relinquishing control of the file
247
273
  descriptor fd->fd (but we still own the grpc_fd structure). */
248
- if (release_fd != NULL) {
274
+ if (is_release_fd) {
249
275
  *release_fd = fd->fd;
250
- } else {
276
+ } else if (!already_closed) {
251
277
  close(fd->fd);
252
278
  }
253
279
 
254
- grpc_closure_sched(exec_ctx, on_done, GRPC_ERROR_REF(error));
280
+ GRPC_CLOSURE_SCHED(exec_ctx, on_done, GRPC_ERROR_REF(error));
255
281
 
256
282
  grpc_iomgr_unregister_object(&fd->iomgr_object);
257
283
  grpc_lfev_destroy(&fd->read_closure);
@@ -275,33 +301,23 @@ static bool fd_is_shutdown(grpc_fd *fd) {
275
301
 
276
302
  static void fd_notify_on_read(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
277
303
  grpc_closure *closure) {
278
- grpc_lfev_notify_on(exec_ctx, &fd->read_closure, closure);
304
+ grpc_lfev_notify_on(exec_ctx, &fd->read_closure, closure, "read");
279
305
  }
280
306
 
281
307
  static void fd_notify_on_write(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
282
308
  grpc_closure *closure) {
283
- grpc_lfev_notify_on(exec_ctx, &fd->write_closure, closure);
284
- }
285
-
286
- static grpc_workqueue *fd_get_workqueue(grpc_fd *fd) {
287
- return (grpc_workqueue *)0xb0b51ed;
309
+ grpc_lfev_notify_on(exec_ctx, &fd->write_closure, closure, "write");
288
310
  }
289
311
 
290
312
  static void fd_become_readable(grpc_exec_ctx *exec_ctx, grpc_fd *fd,
291
313
  grpc_pollset *notifier) {
292
- grpc_lfev_set_ready(exec_ctx, &fd->read_closure);
293
-
294
- /* Note, it is possible that fd_become_readable might be called twice with
295
- different 'notifier's when an fd becomes readable and it is in two epoll
296
- sets (This can happen briefly during polling island merges). In such cases
297
- it does not really matter which notifer is set as the read_notifier_pollset
298
- (They would both point to the same polling island anyway) */
314
+ grpc_lfev_set_ready(exec_ctx, &fd->read_closure, "read");
299
315
  /* Use release store to match with acquire load in fd_get_read_notifier */
300
316
  gpr_atm_rel_store(&fd->read_notifier_pollset, (gpr_atm)notifier);
301
317
  }
302
318
 
303
319
  static void fd_become_writable(grpc_exec_ctx *exec_ctx, grpc_fd *fd) {
304
- grpc_lfev_set_ready(exec_ctx, &fd->write_closure);
320
+ grpc_lfev_set_ready(exec_ctx, &fd->write_closure, "write");
305
321
  }
306
322
 
307
323
  /*******************************************************************************
@@ -313,8 +329,6 @@ GPR_TLS_DECL(g_current_thread_worker);
313
329
  static gpr_atm g_active_poller;
314
330
  static pollset_neighbourhood *g_neighbourhoods;
315
331
  static size_t g_num_neighbourhoods;
316
- static gpr_mu g_wq_mu;
317
- static grpc_closure_list g_wq_items;
318
332
 
319
333
  /* Return true if first in list */
320
334
  static bool worker_insert(grpc_pollset *pollset, grpc_pollset_worker *worker) {
@@ -363,8 +377,6 @@ static grpc_error *pollset_global_init(void) {
363
377
  gpr_atm_no_barrier_store(&g_active_poller, 0);
364
378
  global_wakeup_fd.read_fd = -1;
365
379
  grpc_error *err = grpc_wakeup_fd_init(&global_wakeup_fd);
366
- gpr_mu_init(&g_wq_mu);
367
- g_wq_items = (grpc_closure_list)GRPC_CLOSURE_LIST_INIT;
368
380
  if (err != GRPC_ERROR_NONE) return err;
369
381
  struct epoll_event ev = {.events = (uint32_t)(EPOLLIN | EPOLLET),
370
382
  .data.ptr = &global_wakeup_fd};
@@ -383,7 +395,6 @@ static grpc_error *pollset_global_init(void) {
383
395
  static void pollset_global_shutdown(void) {
384
396
  gpr_tls_destroy(&g_current_thread_pollset);
385
397
  gpr_tls_destroy(&g_current_thread_worker);
386
- gpr_mu_destroy(&g_wq_mu);
387
398
  if (global_wakeup_fd.read_fd != -1) grpc_wakeup_fd_destroy(&global_wakeup_fd);
388
399
  for (size_t i = 0; i < g_num_neighbourhoods; i++) {
389
400
  gpr_mu_destroy(&g_neighbourhoods[i].mu);
@@ -431,18 +442,28 @@ static grpc_error *pollset_kick_all(grpc_pollset *pollset) {
431
442
  if (pollset->root_worker != NULL) {
432
443
  grpc_pollset_worker *worker = pollset->root_worker;
433
444
  do {
434
- if (worker->initialized_cv) {
435
- worker->kick_state = KICKED;
436
- gpr_cv_signal(&worker->cv);
437
- } else {
438
- worker->kick_state = KICKED;
439
- append_error(&error, grpc_wakeup_fd_wakeup(&global_wakeup_fd),
440
- "pollset_shutdown");
445
+ switch (worker->kick_state) {
446
+ case KICKED:
447
+ break;
448
+ case UNKICKED:
449
+ SET_KICK_STATE(worker, KICKED);
450
+ if (worker->initialized_cv) {
451
+ gpr_cv_signal(&worker->cv);
452
+ }
453
+ break;
454
+ case DESIGNATED_POLLER:
455
+ SET_KICK_STATE(worker, KICKED);
456
+ append_error(&error, grpc_wakeup_fd_wakeup(&global_wakeup_fd),
457
+ "pollset_kick_all");
458
+ break;
441
459
  }
442
460
 
443
461
  worker = worker->next;
444
462
  } while (worker != pollset->root_worker);
445
463
  }
464
+ // TODO: sreek. Check if we need to set 'kicked_without_poller' to true here
465
+ // in the else case
466
+
446
467
  return error;
447
468
  }
448
469
 
@@ -450,7 +471,7 @@ static void pollset_maybe_finish_shutdown(grpc_exec_ctx *exec_ctx,
450
471
  grpc_pollset *pollset) {
451
472
  if (pollset->shutdown_closure != NULL && pollset->root_worker == NULL &&
452
473
  pollset->begin_refs == 0) {
453
- grpc_closure_sched(exec_ctx, pollset->shutdown_closure, GRPC_ERROR_NONE);
474
+ GRPC_CLOSURE_SCHED(exec_ctx, pollset->shutdown_closure, GRPC_ERROR_NONE);
454
475
  pollset->shutdown_closure = NULL;
455
476
  }
456
477
  }
@@ -458,7 +479,9 @@ static void pollset_maybe_finish_shutdown(grpc_exec_ctx *exec_ctx,
458
479
  static void pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
459
480
  grpc_closure *closure) {
460
481
  GPR_ASSERT(pollset->shutdown_closure == NULL);
482
+ GPR_ASSERT(!pollset->shutting_down);
461
483
  pollset->shutdown_closure = closure;
484
+ pollset->shutting_down = true;
462
485
  GRPC_LOG_IF_ERROR("pollset_shutdown", pollset_kick_all(pollset));
463
486
  pollset_maybe_finish_shutdown(exec_ctx, pollset);
464
487
  }
@@ -507,9 +530,6 @@ static grpc_error *pollset_epoll(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
507
530
  for (int i = 0; i < r; i++) {
508
531
  void *data_ptr = events[i].data.ptr;
509
532
  if (data_ptr == &global_wakeup_fd) {
510
- gpr_mu_lock(&g_wq_mu);
511
- grpc_closure_list_move(&g_wq_items, &exec_ctx->closure_list);
512
- gpr_mu_unlock(&g_wq_mu);
513
533
  append_error(&error, grpc_wakeup_fd_consume_wakeup(&global_wakeup_fd),
514
534
  err_desc);
515
535
  } else {
@@ -534,10 +554,14 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
534
554
  gpr_timespec deadline) {
535
555
  if (worker_hdl != NULL) *worker_hdl = worker;
536
556
  worker->initialized_cv = false;
537
- worker->kick_state = UNKICKED;
557
+ SET_KICK_STATE(worker, UNKICKED);
538
558
  worker->schedule_on_end_work = (grpc_closure_list)GRPC_CLOSURE_LIST_INIT;
539
559
  pollset->begin_refs++;
540
560
 
561
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
562
+ gpr_log(GPR_ERROR, "PS:%p BEGIN_STARTS:%p", pollset, worker);
563
+ }
564
+
541
565
  if (pollset->seen_inactive) {
542
566
  // pollset has been observed to be inactive, we need to move back to the
543
567
  // active list
@@ -553,6 +577,11 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
553
577
  retry_lock_neighbourhood:
554
578
  gpr_mu_lock(&neighbourhood->mu);
555
579
  gpr_mu_lock(&pollset->mu);
580
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
581
+ gpr_log(GPR_ERROR, "PS:%p BEGIN_REORG:%p kick_state=%s is_reassigning=%d",
582
+ pollset, worker, kick_state_string(worker->kick_state),
583
+ is_reassigning);
584
+ }
556
585
  if (pollset->seen_inactive) {
557
586
  if (neighbourhood != pollset->neighbourhood) {
558
587
  gpr_mu_unlock(&neighbourhood->mu);
@@ -563,8 +592,14 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
563
592
  pollset->seen_inactive = false;
564
593
  if (neighbourhood->active_root == NULL) {
565
594
  neighbourhood->active_root = pollset->next = pollset->prev = pollset;
566
- if (gpr_atm_no_barrier_cas(&g_active_poller, 0, (gpr_atm)worker)) {
567
- worker->kick_state = DESIGNATED_POLLER;
595
+ /* TODO: sreek. Why would this worker state be other than UNKICKED
596
+ * here ? (since the worker isn't added to the pollset yet, there is no
597
+ * way it can be "found" by other threads to get kicked). */
598
+
599
+ /* If there is no designated poller, make this the designated poller */
600
+ if (worker->kick_state == UNKICKED &&
601
+ gpr_atm_no_barrier_cas(&g_active_poller, 0, (gpr_atm)worker)) {
602
+ SET_KICK_STATE(worker, DESIGNATED_POLLER);
568
603
  }
569
604
  } else {
570
605
  pollset->next = neighbourhood->active_root;
@@ -578,24 +613,53 @@ static bool begin_worker(grpc_pollset *pollset, grpc_pollset_worker *worker,
578
613
  }
579
614
  gpr_mu_unlock(&neighbourhood->mu);
580
615
  }
616
+
581
617
  worker_insert(pollset, worker);
582
618
  pollset->begin_refs--;
583
- if (worker->kick_state == UNKICKED) {
619
+ if (worker->kick_state == UNKICKED && !pollset->kicked_without_poller) {
584
620
  GPR_ASSERT(gpr_atm_no_barrier_load(&g_active_poller) != (gpr_atm)worker);
585
621
  worker->initialized_cv = true;
586
622
  gpr_cv_init(&worker->cv);
587
- while (worker->kick_state == UNKICKED &&
588
- pollset->shutdown_closure == NULL) {
623
+ while (worker->kick_state == UNKICKED && !pollset->shutting_down) {
624
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
625
+ gpr_log(GPR_ERROR, "PS:%p BEGIN_WAIT:%p kick_state=%s shutdown=%d",
626
+ pollset, worker, kick_state_string(worker->kick_state),
627
+ pollset->shutting_down);
628
+ }
629
+
589
630
  if (gpr_cv_wait(&worker->cv, &pollset->mu, deadline) &&
590
631
  worker->kick_state == UNKICKED) {
591
- worker->kick_state = KICKED;
632
+ /* If gpr_cv_wait returns true (i.e a timeout), pretend that the worker
633
+ received a kick */
634
+ SET_KICK_STATE(worker, KICKED);
592
635
  }
593
636
  }
594
637
  *now = gpr_now(now->clock_type);
595
638
  }
596
639
 
597
- return worker->kick_state == DESIGNATED_POLLER &&
598
- pollset->shutdown_closure == NULL;
640
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
641
+ gpr_log(GPR_ERROR,
642
+ "PS:%p BEGIN_DONE:%p kick_state=%s shutdown=%d "
643
+ "kicked_without_poller: %d",
644
+ pollset, worker, kick_state_string(worker->kick_state),
645
+ pollset->shutting_down, pollset->kicked_without_poller);
646
+ }
647
+
648
+ /* We release pollset lock in this function at a couple of places:
649
+ * 1. Briefly when assigning pollset to a neighbourhood
650
+ * 2. When doing gpr_cv_wait()
651
+ * It is possible that 'kicked_without_poller' was set to true during (1) and
652
+ * 'shutting_down' is set to true during (1) or (2). If either of them is
653
+ * true, this worker cannot do polling */
654
+ /* TODO(sreek): Perhaps there is a better way to handle kicked_without_poller
655
+ * case; especially when the worker is the DESIGNATED_POLLER */
656
+
657
+ if (pollset->kicked_without_poller) {
658
+ pollset->kicked_without_poller = false;
659
+ return false;
660
+ }
661
+
662
+ return worker->kick_state == DESIGNATED_POLLER && !pollset->shutting_down;
599
663
  }
600
664
 
601
665
  static bool check_neighbourhood_for_available_poller(
@@ -615,10 +679,18 @@ static bool check_neighbourhood_for_available_poller(
615
679
  case UNKICKED:
616
680
  if (gpr_atm_no_barrier_cas(&g_active_poller, 0,
617
681
  (gpr_atm)inspect_worker)) {
618
- inspect_worker->kick_state = DESIGNATED_POLLER;
682
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
683
+ gpr_log(GPR_DEBUG, " .. choose next poller to be %p",
684
+ inspect_worker);
685
+ }
686
+ SET_KICK_STATE(inspect_worker, DESIGNATED_POLLER);
619
687
  if (inspect_worker->initialized_cv) {
620
688
  gpr_cv_signal(&inspect_worker->cv);
621
689
  }
690
+ } else {
691
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
692
+ gpr_log(GPR_DEBUG, " .. beaten to choose next poller");
693
+ }
622
694
  }
623
695
  // even if we didn't win the cas, there's a worker, we can stop
624
696
  found_worker = true;
@@ -631,9 +703,12 @@ static bool check_neighbourhood_for_available_poller(
631
703
  break;
632
704
  }
633
705
  inspect_worker = inspect_worker->next;
634
- } while (inspect_worker != inspect->root_worker);
706
+ } while (!found_worker && inspect_worker != inspect->root_worker);
635
707
  }
636
708
  if (!found_worker) {
709
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
710
+ gpr_log(GPR_DEBUG, " .. mark pollset %p inactive", inspect);
711
+ }
637
712
  inspect->seen_inactive = true;
638
713
  if (inspect == neighbourhood->active_root) {
639
714
  neighbourhood->active_root =
@@ -651,15 +726,22 @@ static bool check_neighbourhood_for_available_poller(
651
726
  static void end_worker(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
652
727
  grpc_pollset_worker *worker,
653
728
  grpc_pollset_worker **worker_hdl) {
729
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
730
+ gpr_log(GPR_DEBUG, "PS:%p END_WORKER:%p", pollset, worker);
731
+ }
654
732
  if (worker_hdl != NULL) *worker_hdl = NULL;
655
- worker->kick_state = KICKED;
733
+ /* Make sure we appear kicked */
734
+ SET_KICK_STATE(worker, KICKED);
656
735
  grpc_closure_list_move(&worker->schedule_on_end_work,
657
736
  &exec_ctx->closure_list);
658
737
  if (gpr_atm_no_barrier_load(&g_active_poller) == (gpr_atm)worker) {
659
738
  if (worker->next != worker && worker->next->kick_state == UNKICKED) {
739
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
740
+ gpr_log(GPR_DEBUG, " .. choose next poller to be peer %p", worker);
741
+ }
660
742
  GPR_ASSERT(worker->next->initialized_cv);
661
743
  gpr_atm_no_barrier_store(&g_active_poller, (gpr_atm)worker->next);
662
- worker->next->kick_state = DESIGNATED_POLLER;
744
+ SET_KICK_STATE(worker->next, DESIGNATED_POLLER);
663
745
  gpr_cv_signal(&worker->next->cv);
664
746
  if (grpc_exec_ctx_has_work(exec_ctx)) {
665
747
  gpr_mu_unlock(&pollset->mu);
@@ -668,9 +750,9 @@ static void end_worker(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
668
750
  }
669
751
  } else {
670
752
  gpr_atm_no_barrier_store(&g_active_poller, 0);
671
- gpr_mu_unlock(&pollset->mu);
672
753
  size_t poller_neighbourhood_idx =
673
754
  (size_t)(pollset->neighbourhood - g_neighbourhoods);
755
+ gpr_mu_unlock(&pollset->mu);
674
756
  bool found_worker = false;
675
757
  bool scan_state[MAX_NEIGHBOURHOODS];
676
758
  for (size_t i = 0; !found_worker && i < g_num_neighbourhoods; i++) {
@@ -706,6 +788,9 @@ static void end_worker(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
706
788
  if (worker->initialized_cv) {
707
789
  gpr_cv_destroy(&worker->cv);
708
790
  }
791
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
792
+ gpr_log(GPR_DEBUG, " .. remove worker");
793
+ }
709
794
  if (EMPTIED == worker_remove(pollset, worker)) {
710
795
  pollset_maybe_finish_shutdown(exec_ctx, pollset);
711
796
  }
@@ -726,16 +811,18 @@ static grpc_error *pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
726
811
  pollset->kicked_without_poller = false;
727
812
  return GRPC_ERROR_NONE;
728
813
  }
729
- gpr_tls_set(&g_current_thread_pollset, (intptr_t)pollset);
730
814
  if (begin_worker(pollset, &worker, worker_hdl, &now, deadline)) {
815
+ gpr_tls_set(&g_current_thread_pollset, (intptr_t)pollset);
731
816
  gpr_tls_set(&g_current_thread_worker, (intptr_t)&worker);
732
- GPR_ASSERT(!pollset->shutdown_closure);
817
+ GPR_ASSERT(!pollset->shutting_down);
733
818
  GPR_ASSERT(!pollset->seen_inactive);
734
819
  gpr_mu_unlock(&pollset->mu);
735
820
  append_error(&error, pollset_epoll(exec_ctx, pollset, now, deadline),
736
821
  err_desc);
737
822
  gpr_mu_lock(&pollset->mu);
738
823
  gpr_tls_set(&g_current_thread_worker, 0);
824
+ } else {
825
+ gpr_tls_set(&g_current_thread_pollset, (intptr_t)pollset);
739
826
  }
740
827
  end_worker(exec_ctx, pollset, &worker, worker_hdl);
741
828
  gpr_tls_set(&g_current_thread_pollset, 0);
@@ -744,46 +831,136 @@ static grpc_error *pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
744
831
 
745
832
  static grpc_error *pollset_kick(grpc_pollset *pollset,
746
833
  grpc_pollset_worker *specific_worker) {
834
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
835
+ gpr_strvec log;
836
+ gpr_strvec_init(&log);
837
+ char *tmp;
838
+ gpr_asprintf(
839
+ &tmp, "PS:%p KICK:%p curps=%p curworker=%p root=%p", pollset,
840
+ specific_worker, (void *)gpr_tls_get(&g_current_thread_pollset),
841
+ (void *)gpr_tls_get(&g_current_thread_worker), pollset->root_worker);
842
+ gpr_strvec_add(&log, tmp);
843
+ if (pollset->root_worker != NULL) {
844
+ gpr_asprintf(&tmp, " {kick_state=%s next=%p {kick_state=%s}}",
845
+ kick_state_string(pollset->root_worker->kick_state),
846
+ pollset->root_worker->next,
847
+ kick_state_string(pollset->root_worker->next->kick_state));
848
+ gpr_strvec_add(&log, tmp);
849
+ }
850
+ if (specific_worker != NULL) {
851
+ gpr_asprintf(&tmp, " worker_kick_state=%s",
852
+ kick_state_string(specific_worker->kick_state));
853
+ gpr_strvec_add(&log, tmp);
854
+ }
855
+ tmp = gpr_strvec_flatten(&log, NULL);
856
+ gpr_strvec_destroy(&log);
857
+ gpr_log(GPR_ERROR, "%s", tmp);
858
+ gpr_free(tmp);
859
+ }
747
860
  if (specific_worker == NULL) {
748
861
  if (gpr_tls_get(&g_current_thread_pollset) != (intptr_t)pollset) {
749
862
  grpc_pollset_worker *root_worker = pollset->root_worker;
750
863
  if (root_worker == NULL) {
751
864
  pollset->kicked_without_poller = true;
865
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
866
+ gpr_log(GPR_ERROR, " .. kicked_without_poller");
867
+ }
752
868
  return GRPC_ERROR_NONE;
753
869
  }
754
870
  grpc_pollset_worker *next_worker = root_worker->next;
755
- if (root_worker == next_worker &&
756
- root_worker == (grpc_pollset_worker *)gpr_atm_no_barrier_load(
757
- &g_active_poller)) {
758
- root_worker->kick_state = KICKED;
871
+ if (root_worker->kick_state == KICKED) {
872
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
873
+ gpr_log(GPR_ERROR, " .. already kicked %p", root_worker);
874
+ }
875
+ SET_KICK_STATE(root_worker, KICKED);
876
+ return GRPC_ERROR_NONE;
877
+ } else if (next_worker->kick_state == KICKED) {
878
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
879
+ gpr_log(GPR_ERROR, " .. already kicked %p", next_worker);
880
+ }
881
+ SET_KICK_STATE(next_worker, KICKED);
882
+ return GRPC_ERROR_NONE;
883
+ } else if (root_worker ==
884
+ next_worker && // only try and wake up a poller if
885
+ // there is no next worker
886
+ root_worker == (grpc_pollset_worker *)gpr_atm_no_barrier_load(
887
+ &g_active_poller)) {
888
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
889
+ gpr_log(GPR_ERROR, " .. kicked %p", root_worker);
890
+ }
891
+ SET_KICK_STATE(root_worker, KICKED);
759
892
  return grpc_wakeup_fd_wakeup(&global_wakeup_fd);
760
893
  } else if (next_worker->kick_state == UNKICKED) {
894
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
895
+ gpr_log(GPR_ERROR, " .. kicked %p", next_worker);
896
+ }
761
897
  GPR_ASSERT(next_worker->initialized_cv);
762
- next_worker->kick_state = KICKED;
898
+ SET_KICK_STATE(next_worker, KICKED);
763
899
  gpr_cv_signal(&next_worker->cv);
764
900
  return GRPC_ERROR_NONE;
901
+ } else if (next_worker->kick_state == DESIGNATED_POLLER) {
902
+ if (root_worker->kick_state != DESIGNATED_POLLER) {
903
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
904
+ gpr_log(
905
+ GPR_ERROR,
906
+ " .. kicked root non-poller %p (initialized_cv=%d) (poller=%p)",
907
+ root_worker, root_worker->initialized_cv, next_worker);
908
+ }
909
+ SET_KICK_STATE(root_worker, KICKED);
910
+ if (root_worker->initialized_cv) {
911
+ gpr_cv_signal(&root_worker->cv);
912
+ }
913
+ return GRPC_ERROR_NONE;
914
+ } else {
915
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
916
+ gpr_log(GPR_ERROR, " .. non-root poller %p (root=%p)", next_worker,
917
+ root_worker);
918
+ }
919
+ SET_KICK_STATE(next_worker, KICKED);
920
+ return grpc_wakeup_fd_wakeup(&global_wakeup_fd);
921
+ }
765
922
  } else {
923
+ GPR_ASSERT(next_worker->kick_state == KICKED);
924
+ SET_KICK_STATE(next_worker, KICKED);
766
925
  return GRPC_ERROR_NONE;
767
926
  }
768
927
  } else {
928
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
929
+ gpr_log(GPR_ERROR, " .. kicked while waking up");
930
+ }
769
931
  return GRPC_ERROR_NONE;
770
932
  }
771
933
  } else if (specific_worker->kick_state == KICKED) {
934
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
935
+ gpr_log(GPR_ERROR, " .. specific worker already kicked");
936
+ }
772
937
  return GRPC_ERROR_NONE;
773
938
  } else if (gpr_tls_get(&g_current_thread_worker) ==
774
939
  (intptr_t)specific_worker) {
775
- specific_worker->kick_state = KICKED;
940
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
941
+ gpr_log(GPR_ERROR, " .. mark %p kicked", specific_worker);
942
+ }
943
+ SET_KICK_STATE(specific_worker, KICKED);
776
944
  return GRPC_ERROR_NONE;
777
945
  } else if (specific_worker ==
778
946
  (grpc_pollset_worker *)gpr_atm_no_barrier_load(&g_active_poller)) {
779
- specific_worker->kick_state = KICKED;
947
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
948
+ gpr_log(GPR_ERROR, " .. kick active poller");
949
+ }
950
+ SET_KICK_STATE(specific_worker, KICKED);
780
951
  return grpc_wakeup_fd_wakeup(&global_wakeup_fd);
781
952
  } else if (specific_worker->initialized_cv) {
782
- specific_worker->kick_state = KICKED;
953
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
954
+ gpr_log(GPR_ERROR, " .. kick waiting worker");
955
+ }
956
+ SET_KICK_STATE(specific_worker, KICKED);
783
957
  gpr_cv_signal(&specific_worker->cv);
784
958
  return GRPC_ERROR_NONE;
785
959
  } else {
786
- specific_worker->kick_state = KICKED;
960
+ if (GRPC_TRACER_ON(grpc_polling_trace)) {
961
+ gpr_log(GPR_ERROR, " .. kick non-waiting worker");
962
+ }
963
+ SET_KICK_STATE(specific_worker, KICKED);
787
964
  return GRPC_ERROR_NONE;
788
965
  }
789
966
  }
@@ -791,84 +968,6 @@ static grpc_error *pollset_kick(grpc_pollset *pollset,
791
968
  static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
792
969
  grpc_fd *fd) {}
793
970
 
794
- /*******************************************************************************
795
- * Workqueue Definitions
796
- */
797
-
798
- #ifdef GRPC_WORKQUEUE_REFCOUNT_DEBUG
799
- static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue,
800
- const char *file, int line,
801
- const char *reason) {
802
- return workqueue;
803
- }
804
-
805
- static void workqueue_unref(grpc_exec_ctx *exec_ctx, grpc_workqueue *workqueue,
806
- const char *file, int line, const char *reason) {}
807
- #else
808
- static grpc_workqueue *workqueue_ref(grpc_workqueue *workqueue) {
809
- return workqueue;
810
- }
811
-
812
- static void workqueue_unref(grpc_exec_ctx *exec_ctx,
813
- grpc_workqueue *workqueue) {}
814
- #endif
815
-
816
- static void wq_sched(grpc_exec_ctx *exec_ctx, grpc_closure *closure,
817
- grpc_error *error) {
818
- // find a neighbourhood to wakeup
819
- bool scheduled = false;
820
- size_t initial_neighbourhood = choose_neighbourhood();
821
- for (size_t i = 0; !scheduled && i < g_num_neighbourhoods; i++) {
822
- pollset_neighbourhood *neighbourhood =
823
- &g_neighbourhoods[(initial_neighbourhood + i) % g_num_neighbourhoods];
824
- if (gpr_mu_trylock(&neighbourhood->mu)) {
825
- if (neighbourhood->active_root != NULL) {
826
- grpc_pollset *inspect = neighbourhood->active_root;
827
- do {
828
- if (gpr_mu_trylock(&inspect->mu)) {
829
- if (inspect->root_worker != NULL) {
830
- grpc_pollset_worker *inspect_worker = inspect->root_worker;
831
- do {
832
- if (inspect_worker->kick_state == UNKICKED) {
833
- inspect_worker->kick_state = KICKED;
834
- grpc_closure_list_append(
835
- &inspect_worker->schedule_on_end_work, closure, error);
836
- if (inspect_worker->initialized_cv) {
837
- gpr_cv_signal(&inspect_worker->cv);
838
- }
839
- scheduled = true;
840
- }
841
- inspect_worker = inspect_worker->next;
842
- } while (!scheduled && inspect_worker != inspect->root_worker);
843
- }
844
- gpr_mu_unlock(&inspect->mu);
845
- }
846
- inspect = inspect->next;
847
- } while (!scheduled && inspect != neighbourhood->active_root);
848
- }
849
- gpr_mu_unlock(&neighbourhood->mu);
850
- }
851
- }
852
- if (!scheduled) {
853
- gpr_mu_lock(&g_wq_mu);
854
- grpc_closure_list_append(&g_wq_items, closure, error);
855
- gpr_mu_unlock(&g_wq_mu);
856
- GRPC_LOG_IF_ERROR("workqueue_scheduler",
857
- grpc_wakeup_fd_wakeup(&global_wakeup_fd));
858
- }
859
- }
860
-
861
- static const grpc_closure_scheduler_vtable
862
- singleton_workqueue_scheduler_vtable = {wq_sched, wq_sched,
863
- "epoll1_workqueue"};
864
-
865
- static grpc_closure_scheduler singleton_workqueue_scheduler = {
866
- &singleton_workqueue_scheduler_vtable};
867
-
868
- static grpc_closure_scheduler *workqueue_scheduler(grpc_workqueue *workqueue) {
869
- return &singleton_workqueue_scheduler;
870
- }
871
-
872
971
  /*******************************************************************************
873
972
  * Pollset-set Definitions
874
973
  */
@@ -907,6 +1006,7 @@ static void pollset_set_del_pollset_set(grpc_exec_ctx *exec_ctx,
907
1006
  static void shutdown_engine(void) {
908
1007
  fd_global_shutdown();
909
1008
  pollset_global_shutdown();
1009
+ close(g_epfd);
910
1010
  }
911
1011
 
912
1012
  static const grpc_event_engine_vtable vtable = {
@@ -920,7 +1020,6 @@ static const grpc_event_engine_vtable vtable = {
920
1020
  .fd_notify_on_read = fd_notify_on_read,
921
1021
  .fd_notify_on_write = fd_notify_on_write,
922
1022
  .fd_get_read_notifier_pollset = fd_get_read_notifier_pollset,
923
- .fd_get_workqueue = fd_get_workqueue,
924
1023
 
925
1024
  .pollset_init = pollset_init,
926
1025
  .pollset_shutdown = pollset_shutdown,
@@ -938,18 +1037,17 @@ static const grpc_event_engine_vtable vtable = {
938
1037
  .pollset_set_add_fd = pollset_set_add_fd,
939
1038
  .pollset_set_del_fd = pollset_set_del_fd,
940
1039
 
941
- .workqueue_ref = workqueue_ref,
942
- .workqueue_unref = workqueue_unref,
943
- .workqueue_scheduler = workqueue_scheduler,
944
-
945
1040
  .shutdown_engine = shutdown_engine,
946
1041
  };
947
1042
 
948
1043
  /* It is possible that GLIBC has epoll but the underlying kernel doesn't.
949
1044
  * Create a dummy epoll_fd to make sure epoll support is available */
950
1045
  const grpc_event_engine_vtable *grpc_init_epoll1_linux(bool explicit_request) {
951
- /* TODO(ctiller): temporary, until this stabilizes */
952
- if (!explicit_request) return NULL;
1046
+ /* TODO(sreek): Temporarily disable this poller unless explicitly requested
1047
+ * via GRPC_POLL_STRATEGY */
1048
+ if (!explicit_request) {
1049
+ return NULL;
1050
+ }
953
1051
 
954
1052
  if (!grpc_has_wakeup_fd()) {
955
1053
  return NULL;
@@ -969,6 +1067,8 @@ const grpc_event_engine_vtable *grpc_init_epoll1_linux(bool explicit_request) {
969
1067
  return NULL;
970
1068
  }
971
1069
 
1070
+ gpr_log(GPR_ERROR, "grpc epoll fd: %d", g_epfd);
1071
+
972
1072
  return &vtable;
973
1073
  }
974
1074