grpc-z 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1318) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/Makefile +23896 -0
  4. data/etc/roots.pem +4475 -0
  5. data/include/grpc/byte_buffer.h +27 -0
  6. data/include/grpc/byte_buffer_reader.h +26 -0
  7. data/include/grpc/census.h +40 -0
  8. data/include/grpc/compression.h +75 -0
  9. data/include/grpc/fork.h +26 -0
  10. data/include/grpc/grpc.h +469 -0
  11. data/include/grpc/grpc_cronet.h +38 -0
  12. data/include/grpc/grpc_posix.h +67 -0
  13. data/include/grpc/grpc_security.h +495 -0
  14. data/include/grpc/grpc_security_constants.h +107 -0
  15. data/include/grpc/impl/codegen/atm.h +95 -0
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +91 -0
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +83 -0
  18. data/include/grpc/impl/codegen/atm_windows.h +126 -0
  19. data/include/grpc/impl/codegen/byte_buffer.h +88 -0
  20. data/include/grpc/impl/codegen/byte_buffer_reader.h +42 -0
  21. data/include/grpc/impl/codegen/compression_types.h +107 -0
  22. data/include/grpc/impl/codegen/connectivity_state.h +44 -0
  23. data/include/grpc/impl/codegen/fork.h +48 -0
  24. data/include/grpc/impl/codegen/gpr_slice.h +69 -0
  25. data/include/grpc/impl/codegen/gpr_types.h +59 -0
  26. data/include/grpc/impl/codegen/grpc_types.h +669 -0
  27. data/include/grpc/impl/codegen/port_platform.h +507 -0
  28. data/include/grpc/impl/codegen/propagation_bits.h +52 -0
  29. data/include/grpc/impl/codegen/slice.h +147 -0
  30. data/include/grpc/impl/codegen/status.h +153 -0
  31. data/include/grpc/impl/codegen/sync.h +63 -0
  32. data/include/grpc/impl/codegen/sync_custom.h +38 -0
  33. data/include/grpc/impl/codegen/sync_generic.h +48 -0
  34. data/include/grpc/impl/codegen/sync_posix.h +34 -0
  35. data/include/grpc/impl/codegen/sync_windows.h +36 -0
  36. data/include/grpc/load_reporting.h +48 -0
  37. data/include/grpc/module.modulemap +74 -0
  38. data/include/grpc/slice.h +172 -0
  39. data/include/grpc/slice_buffer.h +84 -0
  40. data/include/grpc/status.h +26 -0
  41. data/include/grpc/support/alloc.h +68 -0
  42. data/include/grpc/support/atm.h +26 -0
  43. data/include/grpc/support/atm_gcc_atomic.h +26 -0
  44. data/include/grpc/support/atm_gcc_sync.h +26 -0
  45. data/include/grpc/support/atm_windows.h +26 -0
  46. data/include/grpc/support/cpu.h +44 -0
  47. data/include/grpc/support/log.h +104 -0
  48. data/include/grpc/support/log_windows.h +38 -0
  49. data/include/grpc/support/port_platform.h +24 -0
  50. data/include/grpc/support/string_util.h +49 -0
  51. data/include/grpc/support/sync.h +298 -0
  52. data/include/grpc/support/sync_custom.h +26 -0
  53. data/include/grpc/support/sync_generic.h +26 -0
  54. data/include/grpc/support/sync_posix.h +26 -0
  55. data/include/grpc/support/sync_windows.h +26 -0
  56. data/include/grpc/support/thd_id.h +44 -0
  57. data/include/grpc/support/time.h +92 -0
  58. data/include/grpc/support/workaround_list.h +31 -0
  59. data/src/boringssl/err_data.c +1348 -0
  60. data/src/core/ext/census/grpc_context.cc +38 -0
  61. data/src/core/ext/filters/client_channel/backup_poller.cc +174 -0
  62. data/src/core/ext/filters/client_channel/backup_poller.h +35 -0
  63. data/src/core/ext/filters/client_channel/channel_connectivity.cc +248 -0
  64. data/src/core/ext/filters/client_channel/client_channel.cc +3209 -0
  65. data/src/core/ext/filters/client_channel/client_channel.h +57 -0
  66. data/src/core/ext/filters/client_channel/client_channel_factory.cc +67 -0
  67. data/src/core/ext/filters/client_channel/client_channel_factory.h +74 -0
  68. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +62 -0
  69. data/src/core/ext/filters/client_channel/connector.cc +41 -0
  70. data/src/core/ext/filters/client_channel/connector.h +73 -0
  71. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +370 -0
  72. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +34 -0
  73. data/src/core/ext/filters/client_channel/http_proxy.cc +195 -0
  74. data/src/core/ext/filters/client_channel/http_proxy.h +24 -0
  75. data/src/core/ext/filters/client_channel/lb_policy.cc +59 -0
  76. data/src/core/ext/filters/client_channel/lb_policy.h +201 -0
  77. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +138 -0
  78. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +29 -0
  79. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1906 -0
  80. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +36 -0
  81. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +108 -0
  82. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +152 -0
  83. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +67 -0
  84. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +304 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +88 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +102 -0
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +190 -0
  88. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +591 -0
  89. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +687 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +253 -0
  91. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +136 -0
  92. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +155 -0
  93. data/src/core/ext/filters/client_channel/lb_policy_factory.h +127 -0
  94. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +97 -0
  95. data/src/core/ext/filters/client_channel/lb_policy_registry.h +54 -0
  96. data/src/core/ext/filters/client_channel/method_params.cc +178 -0
  97. data/src/core/ext/filters/client_channel/method_params.h +74 -0
  98. data/src/core/ext/filters/client_channel/parse_address.cc +192 -0
  99. data/src/core/ext/filters/client_channel/parse_address.h +50 -0
  100. data/src/core/ext/filters/client_channel/proxy_mapper.cc +48 -0
  101. data/src/core/ext/filters/client_channel/proxy_mapper.h +74 -0
  102. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +122 -0
  103. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +44 -0
  104. data/src/core/ext/filters/client_channel/resolver.cc +35 -0
  105. data/src/core/ext/filters/client_channel/resolver.h +134 -0
  106. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +493 -0
  107. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +53 -0
  108. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +351 -0
  109. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +593 -0
  110. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +74 -0
  111. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +59 -0
  112. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +340 -0
  113. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +297 -0
  114. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +83 -0
  115. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +214 -0
  116. data/src/core/ext/filters/client_channel/resolver_factory.h +71 -0
  117. data/src/core/ext/filters/client_channel/resolver_registry.cc +178 -0
  118. data/src/core/ext/filters/client_channel/resolver_registry.h +83 -0
  119. data/src/core/ext/filters/client_channel/retry_throttle.cc +191 -0
  120. data/src/core/ext/filters/client_channel/retry_throttle.h +77 -0
  121. data/src/core/ext/filters/client_channel/subchannel.cc +815 -0
  122. data/src/core/ext/filters/client_channel/subchannel.h +183 -0
  123. data/src/core/ext/filters/client_channel/subchannel_index.cc +254 -0
  124. data/src/core/ext/filters/client_channel/subchannel_index.h +79 -0
  125. data/src/core/ext/filters/client_channel/uri_parser.cc +314 -0
  126. data/src/core/ext/filters/client_channel/uri_parser.h +50 -0
  127. data/src/core/ext/filters/deadline/deadline_filter.cc +386 -0
  128. data/src/core/ext/filters/deadline/deadline_filter.h +93 -0
  129. data/src/core/ext/filters/http/client/http_client_filter.cc +558 -0
  130. data/src/core/ext/filters/http/client/http_client_filter.h +31 -0
  131. data/src/core/ext/filters/http/client_authority_filter.cc +156 -0
  132. data/src/core/ext/filters/http/client_authority_filter.h +34 -0
  133. data/src/core/ext/filters/http/http_filters_plugin.cc +89 -0
  134. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +499 -0
  135. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +53 -0
  136. data/src/core/ext/filters/http/server/http_server_filter.cc +434 -0
  137. data/src/core/ext/filters/http/server/http_server_filter.h +29 -0
  138. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +222 -0
  139. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +30 -0
  140. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +71 -0
  141. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +61 -0
  142. data/src/core/ext/filters/max_age/max_age_filter.cc +543 -0
  143. data/src/core/ext/filters/max_age/max_age_filter.h +26 -0
  144. data/src/core/ext/filters/message_size/message_size_filter.cc +324 -0
  145. data/src/core/ext/filters/message_size/message_size_filter.h +26 -0
  146. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +208 -0
  147. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +27 -0
  148. data/src/core/ext/filters/workarounds/workaround_utils.cc +53 -0
  149. data/src/core/ext/filters/workarounds/workaround_utils.h +39 -0
  150. data/src/core/ext/transport/chttp2/alpn/alpn.cc +44 -0
  151. data/src/core/ext/transport/chttp2/alpn/alpn.h +36 -0
  152. data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
  153. data/src/core/ext/transport/chttp2/client/authority.h +36 -0
  154. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +229 -0
  155. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +28 -0
  156. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +110 -0
  157. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +79 -0
  158. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +230 -0
  159. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +353 -0
  160. data/src/core/ext/transport/chttp2/server/chttp2_server.h +33 -0
  161. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +45 -0
  162. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +74 -0
  163. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +89 -0
  164. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +249 -0
  165. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +56 -0
  166. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +231 -0
  167. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +41 -0
  168. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +35 -0
  169. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3102 -0
  170. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +45 -0
  171. data/src/core/ext/transport/chttp2/transport/flow_control.cc +405 -0
  172. data/src/core/ext/transport/chttp2/transport/flow_control.h +482 -0
  173. data/src/core/ext/transport/chttp2/transport/frame.h +47 -0
  174. data/src/core/ext/transport/chttp2/transport/frame_data.cc +314 -0
  175. data/src/core/ext/transport/chttp2/transport/frame_data.h +84 -0
  176. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +186 -0
  177. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +62 -0
  178. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +131 -0
  179. data/src/core/ext/transport/chttp2/transport/frame_ping.h +45 -0
  180. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +112 -0
  181. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +43 -0
  182. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +238 -0
  183. data/src/core/ext/transport/chttp2/transport/frame_settings.h +60 -0
  184. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +122 -0
  185. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +45 -0
  186. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +699 -0
  187. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +95 -0
  188. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1680 -0
  189. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +109 -0
  190. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +368 -0
  191. data/src/core/ext/transport/chttp2/transport/hpack_table.h +95 -0
  192. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +62 -0
  193. data/src/core/ext/transport/chttp2/transport/http2_settings.h +62 -0
  194. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +92 -0
  195. data/src/core/ext/transport/chttp2/transport/huffsyms.h +33 -0
  196. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +73 -0
  197. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +49 -0
  198. data/src/core/ext/transport/chttp2/transport/internal.h +799 -0
  199. data/src/core/ext/transport/chttp2/transport/parsing.cc +745 -0
  200. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +216 -0
  201. data/src/core/ext/transport/chttp2/transport/stream_map.cc +167 -0
  202. data/src/core/ext/transport/chttp2/transport/stream_map.h +68 -0
  203. data/src/core/ext/transport/chttp2/transport/varint.cc +56 -0
  204. data/src/core/ext/transport/chttp2/transport/varint.h +60 -0
  205. data/src/core/ext/transport/chttp2/transport/writing.cc +641 -0
  206. data/src/core/ext/transport/inproc/inproc_plugin.cc +28 -0
  207. data/src/core/ext/transport/inproc/inproc_transport.cc +1240 -0
  208. data/src/core/ext/transport/inproc/inproc_transport.h +35 -0
  209. data/src/core/lib/avl/avl.cc +306 -0
  210. data/src/core/lib/avl/avl.h +94 -0
  211. data/src/core/lib/backoff/backoff.cc +78 -0
  212. data/src/core/lib/backoff/backoff.h +89 -0
  213. data/src/core/lib/channel/channel_args.cc +413 -0
  214. data/src/core/lib/channel/channel_args.h +127 -0
  215. data/src/core/lib/channel/channel_stack.cc +258 -0
  216. data/src/core/lib/channel/channel_stack.h +280 -0
  217. data/src/core/lib/channel/channel_stack_builder.cc +314 -0
  218. data/src/core/lib/channel/channel_stack_builder.h +160 -0
  219. data/src/core/lib/channel/channel_trace.cc +239 -0
  220. data/src/core/lib/channel/channel_trace.h +133 -0
  221. data/src/core/lib/channel/channel_trace_registry.cc +80 -0
  222. data/src/core/lib/channel/channel_trace_registry.h +43 -0
  223. data/src/core/lib/channel/connected_channel.cc +236 -0
  224. data/src/core/lib/channel/connected_channel.h +34 -0
  225. data/src/core/lib/channel/context.h +49 -0
  226. data/src/core/lib/channel/handshaker.cc +259 -0
  227. data/src/core/lib/channel/handshaker.h +166 -0
  228. data/src/core/lib/channel/handshaker_factory.cc +41 -0
  229. data/src/core/lib/channel/handshaker_factory.h +50 -0
  230. data/src/core/lib/channel/handshaker_registry.cc +97 -0
  231. data/src/core/lib/channel/handshaker_registry.h +48 -0
  232. data/src/core/lib/channel/status_util.cc +100 -0
  233. data/src/core/lib/channel/status_util.h +58 -0
  234. data/src/core/lib/compression/algorithm_metadata.h +61 -0
  235. data/src/core/lib/compression/compression.cc +174 -0
  236. data/src/core/lib/compression/compression_internal.cc +276 -0
  237. data/src/core/lib/compression/compression_internal.h +88 -0
  238. data/src/core/lib/compression/message_compress.cc +187 -0
  239. data/src/core/lib/compression/message_compress.h +40 -0
  240. data/src/core/lib/compression/stream_compression.cc +79 -0
  241. data/src/core/lib/compression/stream_compression.h +116 -0
  242. data/src/core/lib/compression/stream_compression_gzip.cc +230 -0
  243. data/src/core/lib/compression/stream_compression_gzip.h +28 -0
  244. data/src/core/lib/compression/stream_compression_identity.cc +94 -0
  245. data/src/core/lib/compression/stream_compression_identity.h +29 -0
  246. data/src/core/lib/debug/stats.cc +178 -0
  247. data/src/core/lib/debug/stats.h +61 -0
  248. data/src/core/lib/debug/stats_data.cc +682 -0
  249. data/src/core/lib/debug/stats_data.h +435 -0
  250. data/src/core/lib/debug/trace.cc +144 -0
  251. data/src/core/lib/debug/trace.h +104 -0
  252. data/src/core/lib/gpr/alloc.cc +99 -0
  253. data/src/core/lib/gpr/arena.cc +152 -0
  254. data/src/core/lib/gpr/arena.h +41 -0
  255. data/src/core/lib/gpr/atm.cc +35 -0
  256. data/src/core/lib/gpr/cpu_iphone.cc +36 -0
  257. data/src/core/lib/gpr/cpu_linux.cc +82 -0
  258. data/src/core/lib/gpr/cpu_posix.cc +81 -0
  259. data/src/core/lib/gpr/cpu_windows.cc +33 -0
  260. data/src/core/lib/gpr/env.h +43 -0
  261. data/src/core/lib/gpr/env_linux.cc +82 -0
  262. data/src/core/lib/gpr/env_posix.cc +47 -0
  263. data/src/core/lib/gpr/env_windows.cc +72 -0
  264. data/src/core/lib/gpr/fork.cc +78 -0
  265. data/src/core/lib/gpr/fork.h +35 -0
  266. data/src/core/lib/gpr/host_port.cc +98 -0
  267. data/src/core/lib/gpr/host_port.h +43 -0
  268. data/src/core/lib/gpr/log.cc +96 -0
  269. data/src/core/lib/gpr/log_android.cc +72 -0
  270. data/src/core/lib/gpr/log_linux.cc +93 -0
  271. data/src/core/lib/gpr/log_posix.cc +90 -0
  272. data/src/core/lib/gpr/log_windows.cc +97 -0
  273. data/src/core/lib/gpr/mpscq.cc +117 -0
  274. data/src/core/lib/gpr/mpscq.h +86 -0
  275. data/src/core/lib/gpr/murmur_hash.cc +80 -0
  276. data/src/core/lib/gpr/murmur_hash.h +29 -0
  277. data/src/core/lib/gpr/spinlock.h +46 -0
  278. data/src/core/lib/gpr/string.cc +319 -0
  279. data/src/core/lib/gpr/string.h +109 -0
  280. data/src/core/lib/gpr/string_posix.cc +72 -0
  281. data/src/core/lib/gpr/string_util_windows.cc +82 -0
  282. data/src/core/lib/gpr/string_windows.cc +69 -0
  283. data/src/core/lib/gpr/string_windows.h +32 -0
  284. data/src/core/lib/gpr/sync.cc +124 -0
  285. data/src/core/lib/gpr/sync_posix.cc +107 -0
  286. data/src/core/lib/gpr/sync_windows.cc +118 -0
  287. data/src/core/lib/gpr/time.cc +251 -0
  288. data/src/core/lib/gpr/time_posix.cc +167 -0
  289. data/src/core/lib/gpr/time_precise.cc +78 -0
  290. data/src/core/lib/gpr/time_precise.h +29 -0
  291. data/src/core/lib/gpr/time_windows.cc +98 -0
  292. data/src/core/lib/gpr/tls.h +68 -0
  293. data/src/core/lib/gpr/tls_gcc.h +52 -0
  294. data/src/core/lib/gpr/tls_msvc.h +52 -0
  295. data/src/core/lib/gpr/tls_pthread.cc +30 -0
  296. data/src/core/lib/gpr/tls_pthread.h +56 -0
  297. data/src/core/lib/gpr/tmpfile.h +32 -0
  298. data/src/core/lib/gpr/tmpfile_msys.cc +58 -0
  299. data/src/core/lib/gpr/tmpfile_posix.cc +70 -0
  300. data/src/core/lib/gpr/tmpfile_windows.cc +69 -0
  301. data/src/core/lib/gpr/useful.h +65 -0
  302. data/src/core/lib/gpr/wrap_memcpy.cc +42 -0
  303. data/src/core/lib/gprpp/abstract.h +34 -0
  304. data/src/core/lib/gprpp/atomic.h +30 -0
  305. data/src/core/lib/gprpp/atomic_with_atm.h +57 -0
  306. data/src/core/lib/gprpp/atomic_with_std.h +35 -0
  307. data/src/core/lib/gprpp/debug_location.h +52 -0
  308. data/src/core/lib/gprpp/inlined_vector.h +136 -0
  309. data/src/core/lib/gprpp/manual_constructor.h +213 -0
  310. data/src/core/lib/gprpp/memory.h +111 -0
  311. data/src/core/lib/gprpp/orphanable.h +199 -0
  312. data/src/core/lib/gprpp/ref_counted.h +169 -0
  313. data/src/core/lib/gprpp/ref_counted_ptr.h +112 -0
  314. data/src/core/lib/gprpp/thd.h +135 -0
  315. data/src/core/lib/gprpp/thd_posix.cc +209 -0
  316. data/src/core/lib/gprpp/thd_windows.cc +162 -0
  317. data/src/core/lib/http/format_request.cc +122 -0
  318. data/src/core/lib/http/format_request.h +34 -0
  319. data/src/core/lib/http/httpcli.cc +303 -0
  320. data/src/core/lib/http/httpcli.h +127 -0
  321. data/src/core/lib/http/httpcli_security_connector.cc +202 -0
  322. data/src/core/lib/http/parser.cc +371 -0
  323. data/src/core/lib/http/parser.h +113 -0
  324. data/src/core/lib/iomgr/block_annotate.h +57 -0
  325. data/src/core/lib/iomgr/call_combiner.cc +212 -0
  326. data/src/core/lib/iomgr/call_combiner.h +112 -0
  327. data/src/core/lib/iomgr/closure.h +351 -0
  328. data/src/core/lib/iomgr/combiner.cc +358 -0
  329. data/src/core/lib/iomgr/combiner.h +66 -0
  330. data/src/core/lib/iomgr/endpoint.cc +63 -0
  331. data/src/core/lib/iomgr/endpoint.h +98 -0
  332. data/src/core/lib/iomgr/endpoint_pair.h +34 -0
  333. data/src/core/lib/iomgr/endpoint_pair_posix.cc +73 -0
  334. data/src/core/lib/iomgr/endpoint_pair_uv.cc +40 -0
  335. data/src/core/lib/iomgr/endpoint_pair_windows.cc +87 -0
  336. data/src/core/lib/iomgr/error.cc +793 -0
  337. data/src/core/lib/iomgr/error.h +207 -0
  338. data/src/core/lib/iomgr/error_internal.h +63 -0
  339. data/src/core/lib/iomgr/ev_epoll1_linux.cc +1248 -0
  340. data/src/core/lib/iomgr/ev_epoll1_linux.h +31 -0
  341. data/src/core/lib/iomgr/ev_epollex_linux.cc +1494 -0
  342. data/src/core/lib/iomgr/ev_epollex_linux.h +30 -0
  343. data/src/core/lib/iomgr/ev_epollsig_linux.cc +1735 -0
  344. data/src/core/lib/iomgr/ev_epollsig_linux.h +35 -0
  345. data/src/core/lib/iomgr/ev_poll_posix.cc +1758 -0
  346. data/src/core/lib/iomgr/ev_poll_posix.h +29 -0
  347. data/src/core/lib/iomgr/ev_posix.cc +330 -0
  348. data/src/core/lib/iomgr/ev_posix.h +145 -0
  349. data/src/core/lib/iomgr/ev_windows.cc +30 -0
  350. data/src/core/lib/iomgr/exec_ctx.cc +147 -0
  351. data/src/core/lib/iomgr/exec_ctx.h +210 -0
  352. data/src/core/lib/iomgr/executor.cc +301 -0
  353. data/src/core/lib/iomgr/executor.h +50 -0
  354. data/src/core/lib/iomgr/fork_posix.cc +89 -0
  355. data/src/core/lib/iomgr/fork_windows.cc +41 -0
  356. data/src/core/lib/iomgr/gethostname.h +26 -0
  357. data/src/core/lib/iomgr/gethostname_fallback.cc +30 -0
  358. data/src/core/lib/iomgr/gethostname_host_name_max.cc +40 -0
  359. data/src/core/lib/iomgr/gethostname_sysconf.cc +40 -0
  360. data/src/core/lib/iomgr/iocp_windows.cc +152 -0
  361. data/src/core/lib/iomgr/iocp_windows.h +48 -0
  362. data/src/core/lib/iomgr/iomgr.cc +178 -0
  363. data/src/core/lib/iomgr/iomgr.h +36 -0
  364. data/src/core/lib/iomgr/iomgr_custom.cc +63 -0
  365. data/src/core/lib/iomgr/iomgr_custom.h +47 -0
  366. data/src/core/lib/iomgr/iomgr_internal.cc +43 -0
  367. data/src/core/lib/iomgr/iomgr_internal.h +57 -0
  368. data/src/core/lib/iomgr/iomgr_posix.cc +67 -0
  369. data/src/core/lib/iomgr/iomgr_posix.h +26 -0
  370. data/src/core/lib/iomgr/iomgr_uv.cc +40 -0
  371. data/src/core/lib/iomgr/iomgr_windows.cc +87 -0
  372. data/src/core/lib/iomgr/is_epollexclusive_available.cc +104 -0
  373. data/src/core/lib/iomgr/is_epollexclusive_available.h +36 -0
  374. data/src/core/lib/iomgr/load_file.cc +80 -0
  375. data/src/core/lib/iomgr/load_file.h +35 -0
  376. data/src/core/lib/iomgr/lockfree_event.cc +250 -0
  377. data/src/core/lib/iomgr/lockfree_event.h +72 -0
  378. data/src/core/lib/iomgr/nameser.h +106 -0
  379. data/src/core/lib/iomgr/network_status_tracker.cc +36 -0
  380. data/src/core/lib/iomgr/network_status_tracker.h +32 -0
  381. data/src/core/lib/iomgr/polling_entity.cc +87 -0
  382. data/src/core/lib/iomgr/polling_entity.h +68 -0
  383. data/src/core/lib/iomgr/pollset.cc +56 -0
  384. data/src/core/lib/iomgr/pollset.h +99 -0
  385. data/src/core/lib/iomgr/pollset_custom.cc +106 -0
  386. data/src/core/lib/iomgr/pollset_custom.h +35 -0
  387. data/src/core/lib/iomgr/pollset_set.cc +55 -0
  388. data/src/core/lib/iomgr/pollset_set.h +55 -0
  389. data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
  390. data/src/core/lib/iomgr/pollset_set_custom.h +26 -0
  391. data/src/core/lib/iomgr/pollset_set_windows.cc +51 -0
  392. data/src/core/lib/iomgr/pollset_set_windows.h +26 -0
  393. data/src/core/lib/iomgr/pollset_uv.cc +93 -0
  394. data/src/core/lib/iomgr/pollset_windows.cc +229 -0
  395. data/src/core/lib/iomgr/pollset_windows.h +70 -0
  396. data/src/core/lib/iomgr/port.h +147 -0
  397. data/src/core/lib/iomgr/resolve_address.cc +50 -0
  398. data/src/core/lib/iomgr/resolve_address.h +83 -0
  399. data/src/core/lib/iomgr/resolve_address_custom.cc +187 -0
  400. data/src/core/lib/iomgr/resolve_address_custom.h +43 -0
  401. data/src/core/lib/iomgr/resolve_address_posix.cc +180 -0
  402. data/src/core/lib/iomgr/resolve_address_windows.cc +165 -0
  403. data/src/core/lib/iomgr/resource_quota.cc +871 -0
  404. data/src/core/lib/iomgr/resource_quota.h +142 -0
  405. data/src/core/lib/iomgr/sockaddr.h +32 -0
  406. data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
  407. data/src/core/lib/iomgr/sockaddr_posix.h +55 -0
  408. data/src/core/lib/iomgr/sockaddr_utils.cc +298 -0
  409. data/src/core/lib/iomgr/sockaddr_utils.h +84 -0
  410. data/src/core/lib/iomgr/sockaddr_windows.h +55 -0
  411. data/src/core/lib/iomgr/socket_factory_posix.cc +94 -0
  412. data/src/core/lib/iomgr/socket_factory_posix.h +69 -0
  413. data/src/core/lib/iomgr/socket_mutator.cc +83 -0
  414. data/src/core/lib/iomgr/socket_mutator.h +61 -0
  415. data/src/core/lib/iomgr/socket_utils.h +38 -0
  416. data/src/core/lib/iomgr/socket_utils_common_posix.cc +327 -0
  417. data/src/core/lib/iomgr/socket_utils_linux.cc +43 -0
  418. data/src/core/lib/iomgr/socket_utils_posix.cc +59 -0
  419. data/src/core/lib/iomgr/socket_utils_posix.h +134 -0
  420. data/src/core/lib/iomgr/socket_utils_uv.cc +45 -0
  421. data/src/core/lib/iomgr/socket_utils_windows.cc +43 -0
  422. data/src/core/lib/iomgr/socket_windows.cc +151 -0
  423. data/src/core/lib/iomgr/socket_windows.h +113 -0
  424. data/src/core/lib/iomgr/sys_epoll_wrapper.h +30 -0
  425. data/src/core/lib/iomgr/tcp_client.cc +36 -0
  426. data/src/core/lib/iomgr/tcp_client.h +52 -0
  427. data/src/core/lib/iomgr/tcp_client_custom.cc +151 -0
  428. data/src/core/lib/iomgr/tcp_client_posix.cc +359 -0
  429. data/src/core/lib/iomgr/tcp_client_posix.h +68 -0
  430. data/src/core/lib/iomgr/tcp_client_windows.cc +231 -0
  431. data/src/core/lib/iomgr/tcp_custom.cc +365 -0
  432. data/src/core/lib/iomgr/tcp_custom.h +81 -0
  433. data/src/core/lib/iomgr/tcp_posix.cc +814 -0
  434. data/src/core/lib/iomgr/tcp_posix.h +57 -0
  435. data/src/core/lib/iomgr/tcp_server.cc +73 -0
  436. data/src/core/lib/iomgr/tcp_server.h +122 -0
  437. data/src/core/lib/iomgr/tcp_server_custom.cc +472 -0
  438. data/src/core/lib/iomgr/tcp_server_posix.cc +582 -0
  439. data/src/core/lib/iomgr/tcp_server_utils_posix.h +122 -0
  440. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +208 -0
  441. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +184 -0
  442. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +36 -0
  443. data/src/core/lib/iomgr/tcp_server_windows.cc +559 -0
  444. data/src/core/lib/iomgr/tcp_uv.cc +417 -0
  445. data/src/core/lib/iomgr/tcp_windows.cc +455 -0
  446. data/src/core/lib/iomgr/tcp_windows.h +51 -0
  447. data/src/core/lib/iomgr/time_averaged_stats.cc +64 -0
  448. data/src/core/lib/iomgr/time_averaged_stats.h +73 -0
  449. data/src/core/lib/iomgr/timer.cc +45 -0
  450. data/src/core/lib/iomgr/timer.h +125 -0
  451. data/src/core/lib/iomgr/timer_custom.cc +93 -0
  452. data/src/core/lib/iomgr/timer_custom.h +43 -0
  453. data/src/core/lib/iomgr/timer_generic.cc +663 -0
  454. data/src/core/lib/iomgr/timer_heap.cc +135 -0
  455. data/src/core/lib/iomgr/timer_heap.h +44 -0
  456. data/src/core/lib/iomgr/timer_manager.cc +347 -0
  457. data/src/core/lib/iomgr/timer_manager.h +39 -0
  458. data/src/core/lib/iomgr/timer_uv.cc +63 -0
  459. data/src/core/lib/iomgr/udp_server.cc +692 -0
  460. data/src/core/lib/iomgr/udp_server.h +103 -0
  461. data/src/core/lib/iomgr/unix_sockets_posix.cc +104 -0
  462. data/src/core/lib/iomgr/unix_sockets_posix.h +43 -0
  463. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +49 -0
  464. data/src/core/lib/iomgr/wakeup_fd_cv.cc +107 -0
  465. data/src/core/lib/iomgr/wakeup_fd_cv.h +69 -0
  466. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +83 -0
  467. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +38 -0
  468. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +100 -0
  469. data/src/core/lib/iomgr/wakeup_fd_pipe.h +28 -0
  470. data/src/core/lib/iomgr/wakeup_fd_posix.cc +87 -0
  471. data/src/core/lib/iomgr/wakeup_fd_posix.h +96 -0
  472. data/src/core/lib/json/json.cc +86 -0
  473. data/src/core/lib/json/json.h +94 -0
  474. data/src/core/lib/json/json_common.h +34 -0
  475. data/src/core/lib/json/json_reader.cc +663 -0
  476. data/src/core/lib/json/json_reader.h +146 -0
  477. data/src/core/lib/json/json_string.cc +367 -0
  478. data/src/core/lib/json/json_writer.cc +245 -0
  479. data/src/core/lib/json/json_writer.h +84 -0
  480. data/src/core/lib/profiling/basic_timers.cc +286 -0
  481. data/src/core/lib/profiling/stap_timers.cc +50 -0
  482. data/src/core/lib/profiling/timers.h +94 -0
  483. data/src/core/lib/security/context/security_context.cc +348 -0
  484. data/src/core/lib/security/context/security_context.h +115 -0
  485. data/src/core/lib/security/credentials/alts/alts_credentials.cc +119 -0
  486. data/src/core/lib/security/credentials/alts/alts_credentials.h +102 -0
  487. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
  488. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
  489. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +67 -0
  490. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
  491. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +114 -0
  492. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +126 -0
  493. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
  494. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +112 -0
  495. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +58 -0
  496. data/src/core/lib/security/credentials/composite/composite_credentials.cc +269 -0
  497. data/src/core/lib/security/credentials/composite/composite_credentials.h +59 -0
  498. data/src/core/lib/security/credentials/credentials.cc +286 -0
  499. data/src/core/lib/security/credentials/credentials.h +246 -0
  500. data/src/core/lib/security/credentials/credentials_metadata.cc +62 -0
  501. data/src/core/lib/security/credentials/fake/fake_credentials.cc +136 -0
  502. data/src/core/lib/security/credentials/fake/fake_credentials.h +64 -0
  503. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +41 -0
  504. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +322 -0
  505. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +45 -0
  506. data/src/core/lib/security/credentials/iam/iam_credentials.cc +86 -0
  507. data/src/core/lib/security/credentials/iam/iam_credentials.h +31 -0
  508. data/src/core/lib/security/credentials/jwt/json_token.cc +314 -0
  509. data/src/core/lib/security/credentials/jwt/json_token.h +75 -0
  510. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +190 -0
  511. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +49 -0
  512. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +934 -0
  513. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +123 -0
  514. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +532 -0
  515. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +106 -0
  516. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +271 -0
  517. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +46 -0
  518. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +349 -0
  519. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +54 -0
  520. data/src/core/lib/security/security_connector/alts_security_connector.cc +287 -0
  521. data/src/core/lib/security/security_connector/alts_security_connector.h +69 -0
  522. data/src/core/lib/security/security_connector/security_connector.cc +1200 -0
  523. data/src/core/lib/security/security_connector/security_connector.h +283 -0
  524. data/src/core/lib/security/transport/auth_filters.h +37 -0
  525. data/src/core/lib/security/transport/client_auth_filter.cc +418 -0
  526. data/src/core/lib/security/transport/secure_endpoint.cc +429 -0
  527. data/src/core/lib/security/transport/secure_endpoint.h +41 -0
  528. data/src/core/lib/security/transport/security_handshaker.cc +526 -0
  529. data/src/core/lib/security/transport/security_handshaker.h +34 -0
  530. data/src/core/lib/security/transport/server_auth_filter.cc +269 -0
  531. data/src/core/lib/security/transport/target_authority_table.cc +75 -0
  532. data/src/core/lib/security/transport/target_authority_table.h +40 -0
  533. data/src/core/lib/security/transport/tsi_error.cc +29 -0
  534. data/src/core/lib/security/transport/tsi_error.h +29 -0
  535. data/src/core/lib/security/util/json_util.cc +48 -0
  536. data/src/core/lib/security/util/json_util.h +42 -0
  537. data/src/core/lib/slice/b64.cc +240 -0
  538. data/src/core/lib/slice/b64.h +51 -0
  539. data/src/core/lib/slice/percent_encoding.cc +169 -0
  540. data/src/core/lib/slice/percent_encoding.h +65 -0
  541. data/src/core/lib/slice/slice.cc +489 -0
  542. data/src/core/lib/slice/slice_buffer.cc +359 -0
  543. data/src/core/lib/slice/slice_hash_table.h +201 -0
  544. data/src/core/lib/slice/slice_intern.cc +332 -0
  545. data/src/core/lib/slice/slice_internal.h +49 -0
  546. data/src/core/lib/slice/slice_string_helpers.cc +118 -0
  547. data/src/core/lib/slice/slice_string_helpers.h +47 -0
  548. data/src/core/lib/slice/slice_weak_hash_table.h +105 -0
  549. data/src/core/lib/surface/api_trace.cc +24 -0
  550. data/src/core/lib/surface/api_trace.h +52 -0
  551. data/src/core/lib/surface/byte_buffer.cc +92 -0
  552. data/src/core/lib/surface/byte_buffer_reader.cc +129 -0
  553. data/src/core/lib/surface/call.cc +2002 -0
  554. data/src/core/lib/surface/call.h +109 -0
  555. data/src/core/lib/surface/call_details.cc +42 -0
  556. data/src/core/lib/surface/call_log_batch.cc +120 -0
  557. data/src/core/lib/surface/call_test_only.h +43 -0
  558. data/src/core/lib/surface/channel.cc +450 -0
  559. data/src/core/lib/surface/channel.h +83 -0
  560. data/src/core/lib/surface/channel_init.cc +109 -0
  561. data/src/core/lib/surface/channel_init.h +73 -0
  562. data/src/core/lib/surface/channel_ping.cc +65 -0
  563. data/src/core/lib/surface/channel_stack_type.cc +58 -0
  564. data/src/core/lib/surface/channel_stack_type.h +47 -0
  565. data/src/core/lib/surface/completion_queue.cc +1262 -0
  566. data/src/core/lib/surface/completion_queue.h +93 -0
  567. data/src/core/lib/surface/completion_queue_factory.cc +79 -0
  568. data/src/core/lib/surface/completion_queue_factory.h +38 -0
  569. data/src/core/lib/surface/event_string.cc +68 -0
  570. data/src/core/lib/surface/event_string.h +29 -0
  571. data/src/core/lib/surface/init.cc +196 -0
  572. data/src/core/lib/surface/init.h +27 -0
  573. data/src/core/lib/surface/init_secure.cc +81 -0
  574. data/src/core/lib/surface/lame_client.cc +180 -0
  575. data/src/core/lib/surface/lame_client.h +28 -0
  576. data/src/core/lib/surface/metadata_array.cc +36 -0
  577. data/src/core/lib/surface/server.cc +1445 -0
  578. data/src/core/lib/surface/server.h +58 -0
  579. data/src/core/lib/surface/validate_metadata.cc +95 -0
  580. data/src/core/lib/surface/validate_metadata.h +30 -0
  581. data/src/core/lib/surface/version.cc +28 -0
  582. data/src/core/lib/transport/bdp_estimator.cc +87 -0
  583. data/src/core/lib/transport/bdp_estimator.h +94 -0
  584. data/src/core/lib/transport/byte_stream.cc +160 -0
  585. data/src/core/lib/transport/byte_stream.h +164 -0
  586. data/src/core/lib/transport/connectivity_state.cc +196 -0
  587. data/src/core/lib/transport/connectivity_state.h +87 -0
  588. data/src/core/lib/transport/error_utils.cc +118 -0
  589. data/src/core/lib/transport/error_utils.h +46 -0
  590. data/src/core/lib/transport/http2_errors.h +41 -0
  591. data/src/core/lib/transport/metadata.cc +539 -0
  592. data/src/core/lib/transport/metadata.h +165 -0
  593. data/src/core/lib/transport/metadata_batch.cc +329 -0
  594. data/src/core/lib/transport/metadata_batch.h +150 -0
  595. data/src/core/lib/transport/pid_controller.cc +51 -0
  596. data/src/core/lib/transport/pid_controller.h +116 -0
  597. data/src/core/lib/transport/service_config.cc +106 -0
  598. data/src/core/lib/transport/service_config.h +249 -0
  599. data/src/core/lib/transport/static_metadata.cc +601 -0
  600. data/src/core/lib/transport/static_metadata.h +603 -0
  601. data/src/core/lib/transport/status_conversion.cc +100 -0
  602. data/src/core/lib/transport/status_conversion.h +38 -0
  603. data/src/core/lib/transport/status_metadata.cc +54 -0
  604. data/src/core/lib/transport/status_metadata.h +30 -0
  605. data/src/core/lib/transport/timeout_encoding.cc +144 -0
  606. data/src/core/lib/transport/timeout_encoding.h +37 -0
  607. data/src/core/lib/transport/transport.cc +278 -0
  608. data/src/core/lib/transport/transport.h +378 -0
  609. data/src/core/lib/transport/transport_impl.h +71 -0
  610. data/src/core/lib/transport/transport_op_string.cc +214 -0
  611. data/src/core/plugin_registry/grpc_plugin_registry.cc +97 -0
  612. data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
  613. data/src/core/tsi/alts/crypt/gsec.cc +189 -0
  614. data/src/core/tsi/alts/crypt/gsec.h +454 -0
  615. data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
  616. data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
  617. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
  618. data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
  619. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
  620. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
  621. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
  622. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
  623. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
  624. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
  625. data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
  626. data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
  627. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +316 -0
  628. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +137 -0
  629. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +520 -0
  630. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +323 -0
  631. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +143 -0
  632. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +149 -0
  633. data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +73 -0
  634. data/src/core/tsi/alts/handshaker/alts_tsi_event.h +93 -0
  635. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +483 -0
  636. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +83 -0
  637. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +52 -0
  638. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +58 -0
  639. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +52 -0
  640. data/src/core/tsi/alts/handshaker/altscontext.pb.c +48 -0
  641. data/src/core/tsi/alts/handshaker/altscontext.pb.h +64 -0
  642. data/src/core/tsi/alts/handshaker/handshaker.pb.c +123 -0
  643. data/src/core/tsi/alts/handshaker/handshaker.pb.h +255 -0
  644. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +50 -0
  645. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +78 -0
  646. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +196 -0
  647. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +163 -0
  648. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +180 -0
  649. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +52 -0
  650. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
  651. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
  652. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
  653. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
  654. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +100 -0
  655. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
  656. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
  657. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +296 -0
  658. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +52 -0
  659. data/src/core/tsi/alts_transport_security.cc +63 -0
  660. data/src/core/tsi/alts_transport_security.h +47 -0
  661. data/src/core/tsi/fake_transport_security.cc +787 -0
  662. data/src/core/tsi/fake_transport_security.h +45 -0
  663. data/src/core/tsi/ssl/session_cache/ssl_session.h +73 -0
  664. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +58 -0
  665. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +211 -0
  666. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +93 -0
  667. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +76 -0
  668. data/src/core/tsi/ssl_transport_security.cc +1831 -0
  669. data/src/core/tsi/ssl_transport_security.h +314 -0
  670. data/src/core/tsi/ssl_types.h +42 -0
  671. data/src/core/tsi/transport_security.cc +326 -0
  672. data/src/core/tsi/transport_security.h +127 -0
  673. data/src/core/tsi/transport_security_adapter.cc +235 -0
  674. data/src/core/tsi/transport_security_adapter.h +41 -0
  675. data/src/core/tsi/transport_security_grpc.cc +66 -0
  676. data/src/core/tsi/transport_security_grpc.h +74 -0
  677. data/src/core/tsi/transport_security_interface.h +454 -0
  678. data/src/ruby/bin/apis/google/protobuf/empty.rb +29 -0
  679. data/src/ruby/bin/apis/pubsub_demo.rb +241 -0
  680. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +159 -0
  681. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +88 -0
  682. data/src/ruby/bin/math_client.rb +132 -0
  683. data/src/ruby/bin/math_pb.rb +32 -0
  684. data/src/ruby/bin/math_server.rb +191 -0
  685. data/src/ruby/bin/math_services_pb.rb +51 -0
  686. data/src/ruby/bin/noproto_client.rb +93 -0
  687. data/src/ruby/bin/noproto_server.rb +97 -0
  688. data/src/ruby/ext/grpc/extconf.rb +118 -0
  689. data/src/ruby/ext/grpc/rb_byte_buffer.c +64 -0
  690. data/src/ruby/ext/grpc/rb_byte_buffer.h +35 -0
  691. data/src/ruby/ext/grpc/rb_call.c +1041 -0
  692. data/src/ruby/ext/grpc/rb_call.h +53 -0
  693. data/src/ruby/ext/grpc/rb_call_credentials.c +290 -0
  694. data/src/ruby/ext/grpc/rb_call_credentials.h +31 -0
  695. data/src/ruby/ext/grpc/rb_channel.c +828 -0
  696. data/src/ruby/ext/grpc/rb_channel.h +34 -0
  697. data/src/ruby/ext/grpc/rb_channel_args.c +155 -0
  698. data/src/ruby/ext/grpc/rb_channel_args.h +38 -0
  699. data/src/ruby/ext/grpc/rb_channel_credentials.c +263 -0
  700. data/src/ruby/ext/grpc/rb_channel_credentials.h +32 -0
  701. data/src/ruby/ext/grpc/rb_completion_queue.c +100 -0
  702. data/src/ruby/ext/grpc/rb_completion_queue.h +36 -0
  703. data/src/ruby/ext/grpc/rb_compression_options.c +468 -0
  704. data/src/ruby/ext/grpc/rb_compression_options.h +29 -0
  705. data/src/ruby/ext/grpc/rb_event_thread.c +141 -0
  706. data/src/ruby/ext/grpc/rb_event_thread.h +21 -0
  707. data/src/ruby/ext/grpc/rb_grpc.c +340 -0
  708. data/src/ruby/ext/grpc/rb_grpc.h +72 -0
  709. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +507 -0
  710. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +766 -0
  711. data/src/ruby/ext/grpc/rb_loader.c +57 -0
  712. data/src/ruby/ext/grpc/rb_loader.h +25 -0
  713. data/src/ruby/ext/grpc/rb_server.c +366 -0
  714. data/src/ruby/ext/grpc/rb_server.h +32 -0
  715. data/src/ruby/ext/grpc/rb_server_credentials.c +243 -0
  716. data/src/ruby/ext/grpc/rb_server_credentials.h +32 -0
  717. data/src/ruby/lib/grpc.rb +35 -0
  718. data/src/ruby/lib/grpc/core/time_consts.rb +56 -0
  719. data/src/ruby/lib/grpc/errors.rb +201 -0
  720. data/src/ruby/lib/grpc/generic/active_call.rb +674 -0
  721. data/src/ruby/lib/grpc/generic/bidi_call.rb +233 -0
  722. data/src/ruby/lib/grpc/generic/client_stub.rb +501 -0
  723. data/src/ruby/lib/grpc/generic/interceptor_registry.rb +53 -0
  724. data/src/ruby/lib/grpc/generic/interceptors.rb +186 -0
  725. data/src/ruby/lib/grpc/generic/rpc_desc.rb +204 -0
  726. data/src/ruby/lib/grpc/generic/rpc_server.rb +490 -0
  727. data/src/ruby/lib/grpc/generic/service.rb +210 -0
  728. data/src/ruby/lib/grpc/google_rpc_status_utils.rb +35 -0
  729. data/src/ruby/lib/grpc/grpc.rb +24 -0
  730. data/src/ruby/lib/grpc/logconfig.rb +44 -0
  731. data/src/ruby/lib/grpc/notifier.rb +45 -0
  732. data/src/ruby/lib/grpc/version.rb +18 -0
  733. data/src/ruby/pb/README.md +42 -0
  734. data/src/ruby/pb/generate_proto_ruby.sh +43 -0
  735. data/src/ruby/pb/grpc/health/checker.rb +76 -0
  736. data/src/ruby/pb/grpc/health/v1/health_pb.rb +28 -0
  737. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +41 -0
  738. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +44 -0
  739. data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
  740. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +49 -0
  741. data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +15 -0
  742. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +82 -0
  743. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +14 -0
  744. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +102 -0
  745. data/src/ruby/pb/test/client.rb +764 -0
  746. data/src/ruby/pb/test/server.rb +252 -0
  747. data/src/ruby/spec/call_credentials_spec.rb +42 -0
  748. data/src/ruby/spec/call_spec.rb +180 -0
  749. data/src/ruby/spec/channel_connection_spec.rb +126 -0
  750. data/src/ruby/spec/channel_credentials_spec.rb +82 -0
  751. data/src/ruby/spec/channel_spec.rb +190 -0
  752. data/src/ruby/spec/client_auth_spec.rb +137 -0
  753. data/src/ruby/spec/client_server_spec.rb +664 -0
  754. data/src/ruby/spec/compression_options_spec.rb +149 -0
  755. data/src/ruby/spec/error_sanity_spec.rb +49 -0
  756. data/src/ruby/spec/generic/active_call_spec.rb +672 -0
  757. data/src/ruby/spec/generic/client_interceptors_spec.rb +153 -0
  758. data/src/ruby/spec/generic/client_stub_spec.rb +1067 -0
  759. data/src/ruby/spec/generic/interceptor_registry_spec.rb +65 -0
  760. data/src/ruby/spec/generic/rpc_desc_spec.rb +374 -0
  761. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +127 -0
  762. data/src/ruby/spec/generic/rpc_server_spec.rb +726 -0
  763. data/src/ruby/spec/generic/server_interceptors_spec.rb +218 -0
  764. data/src/ruby/spec/generic/service_spec.rb +261 -0
  765. data/src/ruby/spec/google_rpc_status_utils_spec.rb +293 -0
  766. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +56 -0
  767. data/src/ruby/spec/pb/health/checker_spec.rb +236 -0
  768. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +54 -0
  769. data/src/ruby/spec/pb/package_with_underscore/data.proto +23 -0
  770. data/src/ruby/spec/pb/package_with_underscore/service.proto +23 -0
  771. data/src/ruby/spec/server_credentials_spec.rb +79 -0
  772. data/src/ruby/spec/server_spec.rb +209 -0
  773. data/src/ruby/spec/spec_helper.rb +60 -0
  774. data/src/ruby/spec/support/helpers.rb +107 -0
  775. data/src/ruby/spec/support/services.rb +147 -0
  776. data/src/ruby/spec/testdata/README +1 -0
  777. data/src/ruby/spec/testdata/ca.pem +15 -0
  778. data/src/ruby/spec/testdata/client.key +16 -0
  779. data/src/ruby/spec/testdata/client.pem +14 -0
  780. data/src/ruby/spec/testdata/server1.key +16 -0
  781. data/src/ruby/spec/testdata/server1.pem +16 -0
  782. data/src/ruby/spec/time_consts_spec.rb +74 -0
  783. data/third_party/address_sorting/address_sorting.c +369 -0
  784. data/third_party/address_sorting/address_sorting_internal.h +70 -0
  785. data/third_party/address_sorting/address_sorting_posix.c +97 -0
  786. data/third_party/address_sorting/address_sorting_windows.c +55 -0
  787. data/third_party/address_sorting/include/address_sorting/address_sorting.h +110 -0
  788. data/third_party/boringssl/crypto/asn1/a_bitstr.c +271 -0
  789. data/third_party/boringssl/crypto/asn1/a_bool.c +110 -0
  790. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +297 -0
  791. data/third_party/boringssl/crypto/asn1/a_dup.c +111 -0
  792. data/third_party/boringssl/crypto/asn1/a_enum.c +195 -0
  793. data/third_party/boringssl/crypto/asn1/a_gentm.c +261 -0
  794. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +150 -0
  795. data/third_party/boringssl/crypto/asn1/a_int.c +474 -0
  796. data/third_party/boringssl/crypto/asn1/a_mbstr.c +409 -0
  797. data/third_party/boringssl/crypto/asn1/a_object.c +275 -0
  798. data/third_party/boringssl/crypto/asn1/a_octet.c +77 -0
  799. data/third_party/boringssl/crypto/asn1/a_print.c +93 -0
  800. data/third_party/boringssl/crypto/asn1/a_strnid.c +312 -0
  801. data/third_party/boringssl/crypto/asn1/a_time.c +213 -0
  802. data/third_party/boringssl/crypto/asn1/a_type.c +151 -0
  803. data/third_party/boringssl/crypto/asn1/a_utctm.c +303 -0
  804. data/third_party/boringssl/crypto/asn1/a_utf8.c +234 -0
  805. data/third_party/boringssl/crypto/asn1/asn1_lib.c +442 -0
  806. data/third_party/boringssl/crypto/asn1/asn1_locl.h +101 -0
  807. data/third_party/boringssl/crypto/asn1/asn1_par.c +80 -0
  808. data/third_party/boringssl/crypto/asn1/asn_pack.c +105 -0
  809. data/third_party/boringssl/crypto/asn1/f_enum.c +93 -0
  810. data/third_party/boringssl/crypto/asn1/f_int.c +97 -0
  811. data/third_party/boringssl/crypto/asn1/f_string.c +91 -0
  812. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1223 -0
  813. data/third_party/boringssl/crypto/asn1/tasn_enc.c +662 -0
  814. data/third_party/boringssl/crypto/asn1/tasn_fre.c +244 -0
  815. data/third_party/boringssl/crypto/asn1/tasn_new.c +387 -0
  816. data/third_party/boringssl/crypto/asn1/tasn_typ.c +131 -0
  817. data/third_party/boringssl/crypto/asn1/tasn_utl.c +280 -0
  818. data/third_party/boringssl/crypto/asn1/time_support.c +206 -0
  819. data/third_party/boringssl/crypto/base64/base64.c +466 -0
  820. data/third_party/boringssl/crypto/bio/bio.c +636 -0
  821. data/third_party/boringssl/crypto/bio/bio_mem.c +330 -0
  822. data/third_party/boringssl/crypto/bio/connect.c +542 -0
  823. data/third_party/boringssl/crypto/bio/fd.c +275 -0
  824. data/third_party/boringssl/crypto/bio/file.c +313 -0
  825. data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
  826. data/third_party/boringssl/crypto/bio/internal.h +111 -0
  827. data/third_party/boringssl/crypto/bio/pair.c +489 -0
  828. data/third_party/boringssl/crypto/bio/printf.c +115 -0
  829. data/third_party/boringssl/crypto/bio/socket.c +202 -0
  830. data/third_party/boringssl/crypto/bio/socket_helper.c +114 -0
  831. data/third_party/boringssl/crypto/bn_extra/bn_asn1.c +64 -0
  832. data/third_party/boringssl/crypto/bn_extra/convert.c +465 -0
  833. data/third_party/boringssl/crypto/buf/buf.c +231 -0
  834. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +52 -0
  835. data/third_party/boringssl/crypto/bytestring/ber.c +264 -0
  836. data/third_party/boringssl/crypto/bytestring/cbb.c +568 -0
  837. data/third_party/boringssl/crypto/bytestring/cbs.c +487 -0
  838. data/third_party/boringssl/crypto/bytestring/internal.h +75 -0
  839. data/third_party/boringssl/crypto/chacha/chacha.c +167 -0
  840. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +114 -0
  841. data/third_party/boringssl/crypto/cipher_extra/derive_key.c +152 -0
  842. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
  843. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
  844. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
  845. data/third_party/boringssl/crypto/cipher_extra/e_null.c +85 -0
  846. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +460 -0
  847. data/third_party/boringssl/crypto/cipher_extra/e_rc4.c +87 -0
  848. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +460 -0
  849. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +681 -0
  850. data/third_party/boringssl/crypto/cipher_extra/internal.h +128 -0
  851. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
  852. data/third_party/boringssl/crypto/cmac/cmac.c +241 -0
  853. data/third_party/boringssl/crypto/conf/conf.c +803 -0
  854. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  855. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  856. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  857. data/third_party/boringssl/crypto/cpu-arm-linux.c +363 -0
  858. data/third_party/boringssl/crypto/cpu-arm.c +38 -0
  859. data/third_party/boringssl/crypto/cpu-intel.c +288 -0
  860. data/third_party/boringssl/crypto/cpu-ppc64le.c +38 -0
  861. data/third_party/boringssl/crypto/crypto.c +198 -0
  862. data/third_party/boringssl/crypto/curve25519/spake25519.c +539 -0
  863. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +247 -0
  864. data/third_party/boringssl/crypto/dh/check.c +217 -0
  865. data/third_party/boringssl/crypto/dh/dh.c +519 -0
  866. data/third_party/boringssl/crypto/dh/dh_asn1.c +160 -0
  867. data/third_party/boringssl/crypto/dh/params.c +93 -0
  868. data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
  869. data/third_party/boringssl/crypto/dsa/dsa.c +984 -0
  870. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +339 -0
  871. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +563 -0
  872. data/third_party/boringssl/crypto/ecdh/ecdh.c +161 -0
  873. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +275 -0
  874. data/third_party/boringssl/crypto/engine/engine.c +98 -0
  875. data/third_party/boringssl/crypto/err/err.c +847 -0
  876. data/third_party/boringssl/crypto/err/internal.h +58 -0
  877. data/third_party/boringssl/crypto/evp/digestsign.c +231 -0
  878. data/third_party/boringssl/crypto/evp/evp.c +362 -0
  879. data/third_party/boringssl/crypto/evp/evp_asn1.c +337 -0
  880. data/third_party/boringssl/crypto/evp/evp_ctx.c +446 -0
  881. data/third_party/boringssl/crypto/evp/internal.h +252 -0
  882. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +268 -0
  883. data/third_party/boringssl/crypto/evp/p_ec.c +239 -0
  884. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +256 -0
  885. data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
  886. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
  887. data/third_party/boringssl/crypto/evp/p_rsa.c +634 -0
  888. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +189 -0
  889. data/third_party/boringssl/crypto/evp/pbkdf.c +146 -0
  890. data/third_party/boringssl/crypto/evp/print.c +489 -0
  891. data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
  892. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  893. data/third_party/boringssl/crypto/ex_data.c +261 -0
  894. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +1100 -0
  895. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
  896. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +138 -0
  897. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +112 -0
  898. data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
  899. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +371 -0
  900. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +540 -0
  901. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +370 -0
  902. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +269 -0
  903. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +254 -0
  904. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +303 -0
  905. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +733 -0
  906. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +1390 -0
  907. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +627 -0
  908. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +710 -0
  909. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +413 -0
  910. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +146 -0
  911. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +483 -0
  912. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +207 -0
  913. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +902 -0
  914. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +894 -0
  915. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +299 -0
  916. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +254 -0
  917. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +53 -0
  918. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +305 -0
  919. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +502 -0
  920. data/third_party/boringssl/crypto/fipsmodule/cipher/aead.c +284 -0
  921. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +615 -0
  922. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +1437 -0
  923. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +233 -0
  924. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +129 -0
  925. data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
  926. data/third_party/boringssl/crypto/fipsmodule/des/des.c +785 -0
  927. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +238 -0
  928. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +256 -0
  929. data/third_party/boringssl/crypto/fipsmodule/digest/digests.c +280 -0
  930. data/third_party/boringssl/crypto/fipsmodule/digest/internal.h +112 -0
  931. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +268 -0
  932. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +943 -0
  933. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +517 -0
  934. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +277 -0
  935. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +316 -0
  936. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +404 -0
  937. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +1131 -0
  938. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +1674 -0
  939. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9543 -0
  940. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +456 -0
  941. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +113 -0
  942. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +1052 -0
  943. data/third_party/boringssl/crypto/fipsmodule/ec/util-64.c +109 -0
  944. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +474 -0
  945. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +442 -0
  946. data/third_party/boringssl/crypto/fipsmodule/hmac/hmac.c +228 -0
  947. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +27 -0
  948. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +254 -0
  949. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +298 -0
  950. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +211 -0
  951. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +234 -0
  952. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +220 -0
  953. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +1063 -0
  954. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +384 -0
  955. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +95 -0
  956. data/third_party/boringssl/crypto/fipsmodule/modes/polyval.c +91 -0
  957. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +200 -0
  958. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
  959. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +358 -0
  960. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +302 -0
  961. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +263 -0
  962. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +131 -0
  963. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +692 -0
  964. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +857 -0
  965. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +1051 -0
  966. data/third_party/boringssl/crypto/fipsmodule/sha/sha1-altivec.c +361 -0
  967. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +375 -0
  968. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +337 -0
  969. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +608 -0
  970. data/third_party/boringssl/crypto/hkdf/hkdf.c +112 -0
  971. data/third_party/boringssl/crypto/internal.h +676 -0
  972. data/third_party/boringssl/crypto/lhash/lhash.c +336 -0
  973. data/third_party/boringssl/crypto/mem.c +237 -0
  974. data/third_party/boringssl/crypto/obj/obj.c +621 -0
  975. data/third_party/boringssl/crypto/obj/obj_dat.h +6244 -0
  976. data/third_party/boringssl/crypto/obj/obj_xref.c +122 -0
  977. data/third_party/boringssl/crypto/pem/pem_all.c +262 -0
  978. data/third_party/boringssl/crypto/pem/pem_info.c +379 -0
  979. data/third_party/boringssl/crypto/pem/pem_lib.c +776 -0
  980. data/third_party/boringssl/crypto/pem/pem_oth.c +88 -0
  981. data/third_party/boringssl/crypto/pem/pem_pk8.c +258 -0
  982. data/third_party/boringssl/crypto/pem/pem_pkey.c +227 -0
  983. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  984. data/third_party/boringssl/crypto/pem/pem_xaux.c +65 -0
  985. data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
  986. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
  987. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +233 -0
  988. data/third_party/boringssl/crypto/pkcs8/internal.h +120 -0
  989. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +307 -0
  990. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +513 -0
  991. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
  992. data/third_party/boringssl/crypto/poly1305/internal.h +41 -0
  993. data/third_party/boringssl/crypto/poly1305/poly1305.c +318 -0
  994. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +304 -0
  995. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +839 -0
  996. data/third_party/boringssl/crypto/pool/internal.h +45 -0
  997. data/third_party/boringssl/crypto/pool/pool.c +200 -0
  998. data/third_party/boringssl/crypto/rand_extra/deterministic.c +48 -0
  999. data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
  1000. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +43 -0
  1001. data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
  1002. data/third_party/boringssl/crypto/rand_extra/windows.c +53 -0
  1003. data/third_party/boringssl/crypto/rc4/rc4.c +98 -0
  1004. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  1005. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  1006. data/third_party/boringssl/crypto/rsa_extra/rsa_asn1.c +325 -0
  1007. data/third_party/boringssl/crypto/stack/stack.c +380 -0
  1008. data/third_party/boringssl/crypto/thread.c +110 -0
  1009. data/third_party/boringssl/crypto/thread_none.c +59 -0
  1010. data/third_party/boringssl/crypto/thread_pthread.c +176 -0
  1011. data/third_party/boringssl/crypto/thread_win.c +237 -0
  1012. data/third_party/boringssl/crypto/x509/a_digest.c +96 -0
  1013. data/third_party/boringssl/crypto/x509/a_sign.c +128 -0
  1014. data/third_party/boringssl/crypto/x509/a_strex.c +633 -0
  1015. data/third_party/boringssl/crypto/x509/a_verify.c +115 -0
  1016. data/third_party/boringssl/crypto/x509/algorithm.c +153 -0
  1017. data/third_party/boringssl/crypto/x509/asn1_gen.c +841 -0
  1018. data/third_party/boringssl/crypto/x509/by_dir.c +451 -0
  1019. data/third_party/boringssl/crypto/x509/by_file.c +274 -0
  1020. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  1021. data/third_party/boringssl/crypto/x509/i2d_pr.c +83 -0
  1022. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  1023. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  1024. data/third_party/boringssl/crypto/x509/t_crl.c +128 -0
  1025. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  1026. data/third_party/boringssl/crypto/x509/t_x509.c +547 -0
  1027. data/third_party/boringssl/crypto/x509/t_x509a.c +111 -0
  1028. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  1029. data/third_party/boringssl/crypto/x509/x509.c +157 -0
  1030. data/third_party/boringssl/crypto/x509/x509_att.c +381 -0
  1031. data/third_party/boringssl/crypto/x509/x509_cmp.c +477 -0
  1032. data/third_party/boringssl/crypto/x509/x509_d2.c +106 -0
  1033. data/third_party/boringssl/crypto/x509/x509_def.c +103 -0
  1034. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  1035. data/third_party/boringssl/crypto/x509/x509_lu.c +725 -0
  1036. data/third_party/boringssl/crypto/x509/x509_obj.c +198 -0
  1037. data/third_party/boringssl/crypto/x509/x509_r2x.c +117 -0
  1038. data/third_party/boringssl/crypto/x509/x509_req.c +322 -0
  1039. data/third_party/boringssl/crypto/x509/x509_set.c +164 -0
  1040. data/third_party/boringssl/crypto/x509/x509_trs.c +326 -0
  1041. data/third_party/boringssl/crypto/x509/x509_txt.c +205 -0
  1042. data/third_party/boringssl/crypto/x509/x509_v3.c +278 -0
  1043. data/third_party/boringssl/crypto/x509/x509_vfy.c +2472 -0
  1044. data/third_party/boringssl/crypto/x509/x509_vpm.c +648 -0
  1045. data/third_party/boringssl/crypto/x509/x509cset.c +170 -0
  1046. data/third_party/boringssl/crypto/x509/x509name.c +389 -0
  1047. data/third_party/boringssl/crypto/x509/x509rset.c +81 -0
  1048. data/third_party/boringssl/crypto/x509/x509spki.c +137 -0
  1049. data/third_party/boringssl/crypto/x509/x_algor.c +151 -0
  1050. data/third_party/boringssl/crypto/x509/x_all.c +501 -0
  1051. data/third_party/boringssl/crypto/x509/x_attrib.c +111 -0
  1052. data/third_party/boringssl/crypto/x509/x_crl.c +541 -0
  1053. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  1054. data/third_party/boringssl/crypto/x509/x_info.c +98 -0
  1055. data/third_party/boringssl/crypto/x509/x_name.c +541 -0
  1056. data/third_party/boringssl/crypto/x509/x_pkey.c +106 -0
  1057. data/third_party/boringssl/crypto/x509/x_pubkey.c +368 -0
  1058. data/third_party/boringssl/crypto/x509/x_req.c +109 -0
  1059. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  1060. data/third_party/boringssl/crypto/x509/x_spki.c +80 -0
  1061. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  1062. data/third_party/boringssl/crypto/x509/x_x509.c +328 -0
  1063. data/third_party/boringssl/crypto/x509/x_x509a.c +198 -0
  1064. data/third_party/boringssl/crypto/x509v3/ext_dat.h +143 -0
  1065. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +284 -0
  1066. data/third_party/boringssl/crypto/x509v3/pcy_data.c +130 -0
  1067. data/third_party/boringssl/crypto/x509v3/pcy_int.h +217 -0
  1068. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +155 -0
  1069. data/third_party/boringssl/crypto/x509v3/pcy_map.c +130 -0
  1070. data/third_party/boringssl/crypto/x509v3/pcy_node.c +188 -0
  1071. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +840 -0
  1072. data/third_party/boringssl/crypto/x509v3/v3_akey.c +204 -0
  1073. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +72 -0
  1074. data/third_party/boringssl/crypto/x509v3/v3_alt.c +623 -0
  1075. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +133 -0
  1076. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  1077. data/third_party/boringssl/crypto/x509v3/v3_conf.c +462 -0
  1078. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +502 -0
  1079. data/third_party/boringssl/crypto/x509v3/v3_crld.c +561 -0
  1080. data/third_party/boringssl/crypto/x509v3/v3_enum.c +100 -0
  1081. data/third_party/boringssl/crypto/x509v3/v3_extku.c +148 -0
  1082. data/third_party/boringssl/crypto/x509v3/v3_genn.c +251 -0
  1083. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +122 -0
  1084. data/third_party/boringssl/crypto/x509v3/v3_info.c +219 -0
  1085. data/third_party/boringssl/crypto/x509v3/v3_int.c +91 -0
  1086. data/third_party/boringssl/crypto/x509v3/v3_lib.c +370 -0
  1087. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +501 -0
  1088. data/third_party/boringssl/crypto/x509v3/v3_pci.c +287 -0
  1089. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +57 -0
  1090. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +139 -0
  1091. data/third_party/boringssl/crypto/x509v3/v3_pku.c +110 -0
  1092. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +154 -0
  1093. data/third_party/boringssl/crypto/x509v3/v3_prn.c +229 -0
  1094. data/third_party/boringssl/crypto/x509v3/v3_purp.c +866 -0
  1095. data/third_party/boringssl/crypto/x509v3/v3_skey.c +152 -0
  1096. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +274 -0
  1097. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1352 -0
  1098. data/third_party/boringssl/include/openssl/aead.h +423 -0
  1099. data/third_party/boringssl/include/openssl/aes.h +170 -0
  1100. data/third_party/boringssl/include/openssl/arm_arch.h +121 -0
  1101. data/third_party/boringssl/include/openssl/asn1.h +982 -0
  1102. data/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
  1103. data/third_party/boringssl/include/openssl/asn1t.h +892 -0
  1104. data/third_party/boringssl/include/openssl/base.h +469 -0
  1105. data/third_party/boringssl/include/openssl/base64.h +187 -0
  1106. data/third_party/boringssl/include/openssl/bio.h +902 -0
  1107. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  1108. data/third_party/boringssl/include/openssl/bn.h +975 -0
  1109. data/third_party/boringssl/include/openssl/buf.h +137 -0
  1110. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  1111. data/third_party/boringssl/include/openssl/bytestring.h +480 -0
  1112. data/third_party/boringssl/include/openssl/cast.h +96 -0
  1113. data/third_party/boringssl/include/openssl/chacha.h +41 -0
  1114. data/third_party/boringssl/include/openssl/cipher.h +608 -0
  1115. data/third_party/boringssl/include/openssl/cmac.h +87 -0
  1116. data/third_party/boringssl/include/openssl/conf.h +183 -0
  1117. data/third_party/boringssl/include/openssl/cpu.h +196 -0
  1118. data/third_party/boringssl/include/openssl/crypto.h +118 -0
  1119. data/third_party/boringssl/include/openssl/curve25519.h +201 -0
  1120. data/third_party/boringssl/include/openssl/des.h +177 -0
  1121. data/third_party/boringssl/include/openssl/dh.h +298 -0
  1122. data/third_party/boringssl/include/openssl/digest.h +316 -0
  1123. data/third_party/boringssl/include/openssl/dsa.h +435 -0
  1124. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  1125. data/third_party/boringssl/include/openssl/ec.h +407 -0
  1126. data/third_party/boringssl/include/openssl/ec_key.h +341 -0
  1127. data/third_party/boringssl/include/openssl/ecdh.h +101 -0
  1128. data/third_party/boringssl/include/openssl/ecdsa.h +199 -0
  1129. data/third_party/boringssl/include/openssl/engine.h +109 -0
  1130. data/third_party/boringssl/include/openssl/err.h +458 -0
  1131. data/third_party/boringssl/include/openssl/evp.h +873 -0
  1132. data/third_party/boringssl/include/openssl/ex_data.h +203 -0
  1133. data/third_party/boringssl/include/openssl/hkdf.h +64 -0
  1134. data/third_party/boringssl/include/openssl/hmac.h +186 -0
  1135. data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  1136. data/third_party/boringssl/include/openssl/lhash.h +174 -0
  1137. data/third_party/boringssl/include/openssl/lhash_macros.h +174 -0
  1138. data/third_party/boringssl/include/openssl/md4.h +106 -0
  1139. data/third_party/boringssl/include/openssl/md5.h +107 -0
  1140. data/third_party/boringssl/include/openssl/mem.h +156 -0
  1141. data/third_party/boringssl/include/openssl/nid.h +4242 -0
  1142. data/third_party/boringssl/include/openssl/obj.h +233 -0
  1143. data/third_party/boringssl/include/openssl/obj_mac.h +18 -0
  1144. data/third_party/boringssl/include/openssl/objects.h +18 -0
  1145. data/third_party/boringssl/include/openssl/opensslconf.h +67 -0
  1146. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  1147. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  1148. data/third_party/boringssl/include/openssl/pem.h +397 -0
  1149. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  1150. data/third_party/boringssl/include/openssl/pkcs7.h +82 -0
  1151. data/third_party/boringssl/include/openssl/pkcs8.h +230 -0
  1152. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  1153. data/third_party/boringssl/include/openssl/pool.h +91 -0
  1154. data/third_party/boringssl/include/openssl/rand.h +125 -0
  1155. data/third_party/boringssl/include/openssl/rc4.h +96 -0
  1156. data/third_party/boringssl/include/openssl/ripemd.h +107 -0
  1157. data/third_party/boringssl/include/openssl/rsa.h +731 -0
  1158. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  1159. data/third_party/boringssl/include/openssl/sha.h +256 -0
  1160. data/third_party/boringssl/include/openssl/span.h +191 -0
  1161. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  1162. data/third_party/boringssl/include/openssl/ssl.h +4592 -0
  1163. data/third_party/boringssl/include/openssl/ssl3.h +333 -0
  1164. data/third_party/boringssl/include/openssl/stack.h +485 -0
  1165. data/third_party/boringssl/include/openssl/thread.h +191 -0
  1166. data/third_party/boringssl/include/openssl/tls1.h +610 -0
  1167. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  1168. data/third_party/boringssl/include/openssl/x509.h +1176 -0
  1169. data/third_party/boringssl/include/openssl/x509_vfy.h +614 -0
  1170. data/third_party/boringssl/include/openssl/x509v3.h +826 -0
  1171. data/third_party/boringssl/ssl/bio_ssl.cc +179 -0
  1172. data/third_party/boringssl/ssl/custom_extensions.cc +265 -0
  1173. data/third_party/boringssl/ssl/d1_both.cc +837 -0
  1174. data/third_party/boringssl/ssl/d1_lib.cc +267 -0
  1175. data/third_party/boringssl/ssl/d1_pkt.cc +274 -0
  1176. data/third_party/boringssl/ssl/d1_srtp.cc +232 -0
  1177. data/third_party/boringssl/ssl/dtls_method.cc +193 -0
  1178. data/third_party/boringssl/ssl/dtls_record.cc +353 -0
  1179. data/third_party/boringssl/ssl/handshake.cc +616 -0
  1180. data/third_party/boringssl/ssl/handshake_client.cc +1836 -0
  1181. data/third_party/boringssl/ssl/handshake_server.cc +1662 -0
  1182. data/third_party/boringssl/ssl/internal.h +3011 -0
  1183. data/third_party/boringssl/ssl/s3_both.cc +585 -0
  1184. data/third_party/boringssl/ssl/s3_lib.cc +224 -0
  1185. data/third_party/boringssl/ssl/s3_pkt.cc +443 -0
  1186. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
  1187. data/third_party/boringssl/ssl/ssl_asn1.cc +840 -0
  1188. data/third_party/boringssl/ssl/ssl_buffer.cc +286 -0
  1189. data/third_party/boringssl/ssl/ssl_cert.cc +913 -0
  1190. data/third_party/boringssl/ssl/ssl_cipher.cc +1777 -0
  1191. data/third_party/boringssl/ssl/ssl_file.cc +583 -0
  1192. data/third_party/boringssl/ssl/ssl_key_share.cc +250 -0
  1193. data/third_party/boringssl/ssl/ssl_lib.cc +2650 -0
  1194. data/third_party/boringssl/ssl/ssl_privkey.cc +488 -0
  1195. data/third_party/boringssl/ssl/ssl_session.cc +1221 -0
  1196. data/third_party/boringssl/ssl/ssl_stat.cc +224 -0
  1197. data/third_party/boringssl/ssl/ssl_transcript.cc +398 -0
  1198. data/third_party/boringssl/ssl/ssl_versions.cc +472 -0
  1199. data/third_party/boringssl/ssl/ssl_x509.cc +1299 -0
  1200. data/third_party/boringssl/ssl/t1_enc.cc +503 -0
  1201. data/third_party/boringssl/ssl/t1_lib.cc +3457 -0
  1202. data/third_party/boringssl/ssl/tls13_both.cc +551 -0
  1203. data/third_party/boringssl/ssl/tls13_client.cc +977 -0
  1204. data/third_party/boringssl/ssl/tls13_enc.cc +563 -0
  1205. data/third_party/boringssl/ssl/tls13_server.cc +1068 -0
  1206. data/third_party/boringssl/ssl/tls_method.cc +291 -0
  1207. data/third_party/boringssl/ssl/tls_record.cc +712 -0
  1208. data/third_party/boringssl/third_party/fiat/curve25519.c +5062 -0
  1209. data/third_party/boringssl/third_party/fiat/internal.h +142 -0
  1210. data/third_party/cares/ares_build.h +223 -0
  1211. data/third_party/cares/cares/ares.h +658 -0
  1212. data/third_party/cares/cares/ares__close_sockets.c +61 -0
  1213. data/third_party/cares/cares/ares__get_hostent.c +261 -0
  1214. data/third_party/cares/cares/ares__read_line.c +73 -0
  1215. data/third_party/cares/cares/ares__timeval.c +111 -0
  1216. data/third_party/cares/cares/ares_cancel.c +63 -0
  1217. data/third_party/cares/cares/ares_create_query.c +202 -0
  1218. data/third_party/cares/cares/ares_data.c +221 -0
  1219. data/third_party/cares/cares/ares_data.h +72 -0
  1220. data/third_party/cares/cares/ares_destroy.c +108 -0
  1221. data/third_party/cares/cares/ares_dns.h +103 -0
  1222. data/third_party/cares/cares/ares_expand_name.c +209 -0
  1223. data/third_party/cares/cares/ares_expand_string.c +70 -0
  1224. data/third_party/cares/cares/ares_fds.c +59 -0
  1225. data/third_party/cares/cares/ares_free_hostent.c +41 -0
  1226. data/third_party/cares/cares/ares_free_string.c +25 -0
  1227. data/third_party/cares/cares/ares_getenv.c +30 -0
  1228. data/third_party/cares/cares/ares_getenv.h +26 -0
  1229. data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
  1230. data/third_party/cares/cares/ares_gethostbyname.c +518 -0
  1231. data/third_party/cares/cares/ares_getnameinfo.c +442 -0
  1232. data/third_party/cares/cares/ares_getopt.c +122 -0
  1233. data/third_party/cares/cares/ares_getopt.h +53 -0
  1234. data/third_party/cares/cares/ares_getsock.c +66 -0
  1235. data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
  1236. data/third_party/cares/cares/ares_init.c +2514 -0
  1237. data/third_party/cares/cares/ares_iphlpapi.h +221 -0
  1238. data/third_party/cares/cares/ares_ipv6.h +78 -0
  1239. data/third_party/cares/cares/ares_library_init.c +177 -0
  1240. data/third_party/cares/cares/ares_library_init.h +43 -0
  1241. data/third_party/cares/cares/ares_llist.c +63 -0
  1242. data/third_party/cares/cares/ares_llist.h +39 -0
  1243. data/third_party/cares/cares/ares_mkquery.c +24 -0
  1244. data/third_party/cares/cares/ares_nowarn.c +260 -0
  1245. data/third_party/cares/cares/ares_nowarn.h +61 -0
  1246. data/third_party/cares/cares/ares_options.c +402 -0
  1247. data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
  1248. data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
  1249. data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
  1250. data/third_party/cares/cares/ares_parse_naptr_reply.c +193 -0
  1251. data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
  1252. data/third_party/cares/cares/ares_parse_ptr_reply.c +219 -0
  1253. data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
  1254. data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
  1255. data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
  1256. data/third_party/cares/cares/ares_platform.c +11035 -0
  1257. data/third_party/cares/cares/ares_platform.h +43 -0
  1258. data/third_party/cares/cares/ares_private.h +374 -0
  1259. data/third_party/cares/cares/ares_process.c +1448 -0
  1260. data/third_party/cares/cares/ares_query.c +186 -0
  1261. data/third_party/cares/cares/ares_rules.h +125 -0
  1262. data/third_party/cares/cares/ares_search.c +316 -0
  1263. data/third_party/cares/cares/ares_send.c +131 -0
  1264. data/third_party/cares/cares/ares_setup.h +217 -0
  1265. data/third_party/cares/cares/ares_strcasecmp.c +66 -0
  1266. data/third_party/cares/cares/ares_strcasecmp.h +30 -0
  1267. data/third_party/cares/cares/ares_strdup.c +49 -0
  1268. data/third_party/cares/cares/ares_strdup.h +24 -0
  1269. data/third_party/cares/cares/ares_strerror.c +56 -0
  1270. data/third_party/cares/cares/ares_timeout.c +88 -0
  1271. data/third_party/cares/cares/ares_version.c +11 -0
  1272. data/third_party/cares/cares/ares_version.h +24 -0
  1273. data/third_party/cares/cares/ares_writev.c +79 -0
  1274. data/third_party/cares/cares/bitncmp.c +59 -0
  1275. data/third_party/cares/cares/bitncmp.h +26 -0
  1276. data/third_party/cares/cares/config-win32.h +351 -0
  1277. data/third_party/cares/cares/inet_net_pton.c +450 -0
  1278. data/third_party/cares/cares/inet_ntop.c +208 -0
  1279. data/third_party/cares/cares/setup_once.h +554 -0
  1280. data/third_party/cares/cares/windows_port.c +22 -0
  1281. data/third_party/cares/config_darwin/ares_config.h +425 -0
  1282. data/third_party/cares/config_freebsd/ares_config.h +502 -0
  1283. data/third_party/cares/config_linux/ares_config.h +458 -0
  1284. data/third_party/cares/config_openbsd/ares_config.h +502 -0
  1285. data/third_party/nanopb/pb.h +579 -0
  1286. data/third_party/nanopb/pb_common.c +97 -0
  1287. data/third_party/nanopb/pb_common.h +42 -0
  1288. data/third_party/nanopb/pb_decode.c +1347 -0
  1289. data/third_party/nanopb/pb_decode.h +149 -0
  1290. data/third_party/nanopb/pb_encode.c +696 -0
  1291. data/third_party/nanopb/pb_encode.h +154 -0
  1292. data/third_party/zlib/adler32.c +186 -0
  1293. data/third_party/zlib/compress.c +86 -0
  1294. data/third_party/zlib/crc32.c +442 -0
  1295. data/third_party/zlib/crc32.h +441 -0
  1296. data/third_party/zlib/deflate.c +2163 -0
  1297. data/third_party/zlib/deflate.h +349 -0
  1298. data/third_party/zlib/gzclose.c +25 -0
  1299. data/third_party/zlib/gzguts.h +218 -0
  1300. data/third_party/zlib/gzlib.c +637 -0
  1301. data/third_party/zlib/gzread.c +654 -0
  1302. data/third_party/zlib/gzwrite.c +665 -0
  1303. data/third_party/zlib/infback.c +640 -0
  1304. data/third_party/zlib/inffast.c +323 -0
  1305. data/third_party/zlib/inffast.h +11 -0
  1306. data/third_party/zlib/inffixed.h +94 -0
  1307. data/third_party/zlib/inflate.c +1561 -0
  1308. data/third_party/zlib/inflate.h +125 -0
  1309. data/third_party/zlib/inftrees.c +304 -0
  1310. data/third_party/zlib/inftrees.h +62 -0
  1311. data/third_party/zlib/trees.c +1203 -0
  1312. data/third_party/zlib/trees.h +128 -0
  1313. data/third_party/zlib/uncompr.c +93 -0
  1314. data/third_party/zlib/zconf.h +534 -0
  1315. data/third_party/zlib/zlib.h +1912 -0
  1316. data/third_party/zlib/zutil.c +325 -0
  1317. data/third_party/zlib/zutil.h +271 -0
  1318. metadata +1586 -0
@@ -0,0 +1,207 @@
1
+ /*
2
+ *
3
+ * Copyright 2016 gRPC authors.
4
+ *
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
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
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.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_LIB_IOMGR_ERROR_H
20
+ #define GRPC_CORE_LIB_IOMGR_ERROR_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <inttypes.h>
25
+ #include <stdbool.h>
26
+
27
+ #include <grpc/slice.h>
28
+ #include <grpc/status.h>
29
+ #include <grpc/support/log.h>
30
+ #include <grpc/support/time.h>
31
+
32
+ #include "src/core/lib/debug/trace.h"
33
+
34
+ /// Opaque representation of an error.
35
+ /// See https://github.com/grpc/grpc/blob/master/doc/core/grpc-error.md for a
36
+ /// full write up of this object.
37
+
38
+ typedef struct grpc_error grpc_error;
39
+
40
+ extern grpc_core::DebugOnlyTraceFlag grpc_trace_error_refcount;
41
+
42
+ typedef enum {
43
+ /// 'errno' from the operating system
44
+ GRPC_ERROR_INT_ERRNO,
45
+ /// __LINE__ from the call site creating the error
46
+ GRPC_ERROR_INT_FILE_LINE,
47
+ /// stream identifier: for errors that are associated with an individual
48
+ /// wire stream
49
+ GRPC_ERROR_INT_STREAM_ID,
50
+ /// grpc status code representing this error
51
+ GRPC_ERROR_INT_GRPC_STATUS,
52
+ /// offset into some binary blob (usually represented by
53
+ /// GRPC_ERROR_STR_RAW_BYTES) where the error occurred
54
+ GRPC_ERROR_INT_OFFSET,
55
+ /// context sensitive index associated with the error
56
+ GRPC_ERROR_INT_INDEX,
57
+ /// context sensitive size associated with the error
58
+ GRPC_ERROR_INT_SIZE,
59
+ /// http2 error code associated with the error (see the HTTP2 RFC)
60
+ GRPC_ERROR_INT_HTTP2_ERROR,
61
+ /// TSI status code associated with the error
62
+ GRPC_ERROR_INT_TSI_CODE,
63
+ /// grpc_security_status associated with the error
64
+ GRPC_ERROR_INT_SECURITY_STATUS,
65
+ /// WSAGetLastError() reported when this error occurred
66
+ GRPC_ERROR_INT_WSA_ERROR,
67
+ /// File descriptor associated with this error
68
+ GRPC_ERROR_INT_FD,
69
+ /// HTTP status (i.e. 404)
70
+ GRPC_ERROR_INT_HTTP_STATUS,
71
+ /// context sensitive limit associated with the error
72
+ GRPC_ERROR_INT_LIMIT,
73
+ /// chttp2: did the error occur while a write was in progress
74
+ GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
75
+
76
+ /// Must always be last
77
+ GRPC_ERROR_INT_MAX,
78
+ } grpc_error_ints;
79
+
80
+ typedef enum {
81
+ /// top-level textual description of this error
82
+ GRPC_ERROR_STR_DESCRIPTION,
83
+ /// source file in which this error occurred
84
+ GRPC_ERROR_STR_FILE,
85
+ /// operating system description of this error
86
+ GRPC_ERROR_STR_OS_ERROR,
87
+ /// syscall that generated this error
88
+ GRPC_ERROR_STR_SYSCALL,
89
+ /// peer that we were trying to communicate when this error occurred
90
+ GRPC_ERROR_STR_TARGET_ADDRESS,
91
+ /// grpc status message associated with this error
92
+ GRPC_ERROR_STR_GRPC_MESSAGE,
93
+ /// hex dump (or similar) with the data that generated this error
94
+ GRPC_ERROR_STR_RAW_BYTES,
95
+ /// tsi error string associated with this error
96
+ GRPC_ERROR_STR_TSI_ERROR,
97
+ /// filename that we were trying to read/write when this error occurred
98
+ GRPC_ERROR_STR_FILENAME,
99
+ /// which data was queued for writing when the error occurred
100
+ GRPC_ERROR_STR_QUEUED_BUFFERS,
101
+ /// key associated with the error
102
+ GRPC_ERROR_STR_KEY,
103
+ /// value associated with the error
104
+ GRPC_ERROR_STR_VALUE,
105
+
106
+ /// Must always be last
107
+ GRPC_ERROR_STR_MAX,
108
+ } grpc_error_strs;
109
+
110
+ typedef enum {
111
+ /// timestamp of error creation
112
+ GRPC_ERROR_TIME_CREATED,
113
+
114
+ /// Must always be last
115
+ GRPC_ERROR_TIME_MAX,
116
+ } grpc_error_times;
117
+
118
+ /// The following "special" errors can be propagated without allocating memory.
119
+ /// They are always even so that other code (particularly combiner locks,
120
+ /// polling engines) can safely use the lower bit for themselves.
121
+
122
+ #define GRPC_ERROR_NONE ((grpc_error*)NULL)
123
+ #define GRPC_ERROR_OOM ((grpc_error*)2)
124
+ #define GRPC_ERROR_CANCELLED ((grpc_error*)4)
125
+
126
+ const char* grpc_error_string(grpc_error* error);
127
+
128
+ /// Create an error - but use GRPC_ERROR_CREATE instead
129
+ grpc_error* grpc_error_create(const char* file, int line, grpc_slice desc,
130
+ grpc_error** referencing, size_t num_referencing);
131
+ /// Create an error (this is the preferred way of generating an error that is
132
+ /// not due to a system call - for system calls, use GRPC_OS_ERROR or
133
+ /// GRPC_WSA_ERROR as appropriate)
134
+ /// \a referencing is an array of num_referencing elements indicating one or
135
+ /// more errors that are believed to have contributed to this one
136
+ /// err = grpc_error_create(x, y, z, r, nr) is equivalent to:
137
+ /// err = grpc_error_create(x, y, z, NULL, 0);
138
+ /// for (i=0; i<nr; i++) err = grpc_error_add_child(err, r[i]);
139
+ #define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc) \
140
+ grpc_error_create(__FILE__, __LINE__, grpc_slice_from_static_string(desc), \
141
+ NULL, 0)
142
+ #define GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc) \
143
+ grpc_error_create(__FILE__, __LINE__, grpc_slice_from_copied_string(desc), \
144
+ NULL, 0)
145
+
146
+ // Create an error that references some other errors. This function adds a
147
+ // reference to each error in errs - it does not consume an existing reference
148
+ #define GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(desc, errs, count) \
149
+ grpc_error_create(__FILE__, __LINE__, grpc_slice_from_static_string(desc), \
150
+ errs, count)
151
+ #define GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(desc, errs, count) \
152
+ grpc_error_create(__FILE__, __LINE__, grpc_slice_from_copied_string(desc), \
153
+ errs, count)
154
+
155
+ #ifndef NDEBUG
156
+ grpc_error* grpc_error_ref(grpc_error* err, const char* file, int line);
157
+ void grpc_error_unref(grpc_error* err, const char* file, int line);
158
+ #define GRPC_ERROR_REF(err) grpc_error_ref(err, __FILE__, __LINE__)
159
+ #define GRPC_ERROR_UNREF(err) grpc_error_unref(err, __FILE__, __LINE__)
160
+ #else
161
+ grpc_error* grpc_error_ref(grpc_error* err);
162
+ void grpc_error_unref(grpc_error* err);
163
+ #define GRPC_ERROR_REF(err) grpc_error_ref(err)
164
+ #define GRPC_ERROR_UNREF(err) grpc_error_unref(err)
165
+ #endif
166
+
167
+ grpc_error* grpc_error_set_int(grpc_error* src, grpc_error_ints which,
168
+ intptr_t value) GRPC_MUST_USE_RESULT;
169
+ bool grpc_error_get_int(grpc_error* error, grpc_error_ints which, intptr_t* p);
170
+ /// This call takes ownership of the slice; the error is responsible for
171
+ /// eventually unref-ing it.
172
+ grpc_error* grpc_error_set_str(grpc_error* src, grpc_error_strs which,
173
+ grpc_slice str) GRPC_MUST_USE_RESULT;
174
+ /// Returns false if the specified string is not set.
175
+ /// Caller does NOT own the slice.
176
+ bool grpc_error_get_str(grpc_error* error, grpc_error_strs which,
177
+ grpc_slice* s);
178
+
179
+ /// Add a child error: an error that is believed to have contributed to this
180
+ /// error occurring. Allows root causing high level errors from lower level
181
+ /// errors that contributed to them. The src error takes ownership of the
182
+ /// child error.
183
+ grpc_error* grpc_error_add_child(grpc_error* src,
184
+ grpc_error* child) GRPC_MUST_USE_RESULT;
185
+ grpc_error* grpc_os_error(const char* file, int line, int err,
186
+ const char* call_name) GRPC_MUST_USE_RESULT;
187
+
188
+ inline grpc_error* grpc_assert_never_ok(grpc_error* error) {
189
+ GPR_ASSERT(error != GRPC_ERROR_NONE);
190
+ return error;
191
+ }
192
+
193
+ /// create an error associated with errno!=0 (an 'operating system' error)
194
+ #define GRPC_OS_ERROR(err, call_name) \
195
+ grpc_assert_never_ok(grpc_os_error(__FILE__, __LINE__, err, call_name))
196
+ grpc_error* grpc_wsa_error(const char* file, int line, int err,
197
+ const char* call_name) GRPC_MUST_USE_RESULT;
198
+ /// windows only: create an error associated with WSAGetLastError()!=0
199
+ #define GRPC_WSA_ERROR(err, call_name) \
200
+ grpc_wsa_error(__FILE__, __LINE__, err, call_name)
201
+
202
+ bool grpc_log_if_error(const char* what, grpc_error* error, const char* file,
203
+ int line);
204
+ #define GRPC_LOG_IF_ERROR(what, error) \
205
+ grpc_log_if_error((what), (error), __FILE__, __LINE__)
206
+
207
+ #endif /* GRPC_CORE_LIB_IOMGR_ERROR_H */
@@ -0,0 +1,63 @@
1
+ /*
2
+ *
3
+ * Copyright 2016 gRPC authors.
4
+ *
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
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
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.
16
+ *
17
+ */
18
+
19
+ #ifndef GRPC_CORE_LIB_IOMGR_ERROR_INTERNAL_H
20
+ #define GRPC_CORE_LIB_IOMGR_ERROR_INTERNAL_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <inttypes.h>
25
+ #include <stdbool.h> // TODO, do we need this?
26
+
27
+ #include <grpc/support/sync.h>
28
+ #include "src/core/lib/iomgr/error.h"
29
+
30
+ typedef struct grpc_linked_error grpc_linked_error;
31
+
32
+ struct grpc_linked_error {
33
+ grpc_error* err;
34
+ uint8_t next;
35
+ };
36
+
37
+ // c core representation of an error. See error.h for high level description of
38
+ // this object.
39
+ struct grpc_error {
40
+ // All atomics in grpc_error must be stored in this nested struct. The rest of
41
+ // the object is memcpy-ed in bulk in copy_and_unref.
42
+ struct atomics {
43
+ gpr_refcount refs;
44
+ gpr_atm error_string;
45
+ } atomics;
46
+ // These arrays index into dynamic arena at the bottom of the struct.
47
+ // UINT8_MAX is used as a sentinel value.
48
+ uint8_t ints[GRPC_ERROR_INT_MAX];
49
+ uint8_t strs[GRPC_ERROR_STR_MAX];
50
+ uint8_t times[GRPC_ERROR_TIME_MAX];
51
+ // The child errors are stored in the arena, but are effectively a linked list
52
+ // structure, since they are contained withing grpc_linked_error objects.
53
+ uint8_t first_err;
54
+ uint8_t last_err;
55
+ // The arena is dynamically reallocated with a grow factor of 1.5.
56
+ uint8_t arena_size;
57
+ uint8_t arena_capacity;
58
+ intptr_t arena[0];
59
+ };
60
+
61
+ bool grpc_error_is_special(struct grpc_error* err);
62
+
63
+ #endif /* GRPC_CORE_LIB_IOMGR_ERROR_INTERNAL_H */
@@ -0,0 +1,1248 @@
1
+ /*
2
+ *
3
+ * Copyright 2017 gRPC authors.
4
+ *
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
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
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.
16
+ *
17
+ */
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/iomgr/port.h"
22
+
23
+ #include <grpc/support/log.h>
24
+
25
+ /* This polling engine is only relevant on linux kernels supporting epoll
26
+ epoll_create() or epoll_create1() */
27
+ #ifdef GRPC_LINUX_EPOLL
28
+ #include "src/core/lib/iomgr/ev_epoll1_linux.h"
29
+
30
+ #include <assert.h>
31
+ #include <errno.h>
32
+ #include <fcntl.h>
33
+ #include <limits.h>
34
+ #include <poll.h>
35
+ #include <pthread.h>
36
+ #include <string.h>
37
+ #include <sys/epoll.h>
38
+ #include <sys/socket.h>
39
+ #include <unistd.h>
40
+
41
+ #include <grpc/support/alloc.h>
42
+ #include <grpc/support/cpu.h>
43
+ #include <grpc/support/string_util.h>
44
+
45
+ #include "src/core/lib/debug/stats.h"
46
+ #include "src/core/lib/gpr/string.h"
47
+ #include "src/core/lib/gpr/tls.h"
48
+ #include "src/core/lib/gpr/useful.h"
49
+ #include "src/core/lib/gprpp/manual_constructor.h"
50
+ #include "src/core/lib/iomgr/block_annotate.h"
51
+ #include "src/core/lib/iomgr/ev_posix.h"
52
+ #include "src/core/lib/iomgr/iomgr_internal.h"
53
+ #include "src/core/lib/iomgr/lockfree_event.h"
54
+ #include "src/core/lib/iomgr/wakeup_fd_posix.h"
55
+ #include "src/core/lib/profiling/timers.h"
56
+
57
+ static grpc_wakeup_fd global_wakeup_fd;
58
+
59
+ /*******************************************************************************
60
+ * Singleton epoll set related fields
61
+ */
62
+
63
+ #define MAX_EPOLL_EVENTS 100
64
+ #define MAX_EPOLL_EVENTS_HANDLED_PER_ITERATION 1
65
+
66
+ /* NOTE ON SYNCHRONIZATION:
67
+ * - Fields in this struct are only modified by the designated poller. Hence
68
+ * there is no need for any locks to protect the struct.
69
+ * - num_events and cursor fields have to be of atomic type to provide memory
70
+ * visibility guarantees only. i.e In case of multiple pollers, the designated
71
+ * polling thread keeps changing; the thread that wrote these values may be
72
+ * different from the thread reading the values
73
+ */
74
+ typedef struct epoll_set {
75
+ int epfd;
76
+
77
+ /* The epoll_events after the last call to epoll_wait() */
78
+ struct epoll_event events[MAX_EPOLL_EVENTS];
79
+
80
+ /* The number of epoll_events after the last call to epoll_wait() */
81
+ gpr_atm num_events;
82
+
83
+ /* Index of the first event in epoll_events that has to be processed. This
84
+ * field is only valid if num_events > 0 */
85
+ gpr_atm cursor;
86
+ } epoll_set;
87
+
88
+ /* The global singleton epoll set */
89
+ static epoll_set g_epoll_set;
90
+
91
+ static int epoll_create_and_cloexec() {
92
+ #ifdef GRPC_LINUX_EPOLL_CREATE1
93
+ int fd = epoll_create1(EPOLL_CLOEXEC);
94
+ if (fd < 0) {
95
+ gpr_log(GPR_ERROR, "epoll_create1 unavailable");
96
+ }
97
+ #else
98
+ int fd = epoll_create(MAX_EPOLL_EVENTS);
99
+ if (fd < 0) {
100
+ gpr_log(GPR_ERROR, "epoll_create unavailable");
101
+ } else if (fcntl(fd, F_SETFD, FD_CLOEXEC) != 0) {
102
+ gpr_log(GPR_ERROR, "fcntl following epoll_create failed");
103
+ return -1;
104
+ }
105
+ #endif
106
+ return fd;
107
+ }
108
+
109
+ /* Must be called *only* once */
110
+ static bool epoll_set_init() {
111
+ g_epoll_set.epfd = epoll_create_and_cloexec();
112
+ if (g_epoll_set.epfd < 0) {
113
+ return false;
114
+ }
115
+
116
+ gpr_log(GPR_INFO, "grpc epoll fd: %d", g_epoll_set.epfd);
117
+ gpr_atm_no_barrier_store(&g_epoll_set.num_events, 0);
118
+ gpr_atm_no_barrier_store(&g_epoll_set.cursor, 0);
119
+ return true;
120
+ }
121
+
122
+ /* epoll_set_init() MUST be called before calling this. */
123
+ static void epoll_set_shutdown() {
124
+ if (g_epoll_set.epfd >= 0) {
125
+ close(g_epoll_set.epfd);
126
+ g_epoll_set.epfd = -1;
127
+ }
128
+ }
129
+
130
+ /*******************************************************************************
131
+ * Fd Declarations
132
+ */
133
+
134
+ struct grpc_fd {
135
+ int fd;
136
+
137
+ grpc_core::ManualConstructor<grpc_core::LockfreeEvent> read_closure;
138
+ grpc_core::ManualConstructor<grpc_core::LockfreeEvent> write_closure;
139
+
140
+ struct grpc_fd* freelist_next;
141
+
142
+ /* The pollset that last noticed that the fd is readable. The actual type
143
+ * stored in this is (grpc_pollset *) */
144
+ gpr_atm read_notifier_pollset;
145
+
146
+ grpc_iomgr_object iomgr_object;
147
+ };
148
+
149
+ static void fd_global_init(void);
150
+ static void fd_global_shutdown(void);
151
+
152
+ /*******************************************************************************
153
+ * Pollset Declarations
154
+ */
155
+
156
+ typedef enum { UNKICKED, KICKED, DESIGNATED_POLLER } kick_state;
157
+
158
+ static const char* kick_state_string(kick_state st) {
159
+ switch (st) {
160
+ case UNKICKED:
161
+ return "UNKICKED";
162
+ case KICKED:
163
+ return "KICKED";
164
+ case DESIGNATED_POLLER:
165
+ return "DESIGNATED_POLLER";
166
+ }
167
+ GPR_UNREACHABLE_CODE(return "UNKNOWN");
168
+ }
169
+
170
+ struct grpc_pollset_worker {
171
+ kick_state state;
172
+ int kick_state_mutator; // which line of code last changed kick state
173
+ bool initialized_cv;
174
+ grpc_pollset_worker* next;
175
+ grpc_pollset_worker* prev;
176
+ gpr_cv cv;
177
+ grpc_closure_list schedule_on_end_work;
178
+ };
179
+
180
+ #define SET_KICK_STATE(worker, kick_state) \
181
+ do { \
182
+ (worker)->state = (kick_state); \
183
+ (worker)->kick_state_mutator = __LINE__; \
184
+ } while (false)
185
+
186
+ #define MAX_NEIGHBORHOODS 1024
187
+
188
+ typedef struct pollset_neighborhood {
189
+ gpr_mu mu;
190
+ grpc_pollset* active_root;
191
+ char pad[GPR_CACHELINE_SIZE];
192
+ } pollset_neighborhood;
193
+
194
+ struct grpc_pollset {
195
+ gpr_mu mu;
196
+ pollset_neighborhood* neighborhood;
197
+ bool reassigning_neighborhood;
198
+ grpc_pollset_worker* root_worker;
199
+ bool kicked_without_poller;
200
+
201
+ /* Set to true if the pollset is observed to have no workers available to
202
+ poll */
203
+ bool seen_inactive;
204
+ bool shutting_down; /* Is the pollset shutting down ? */
205
+ grpc_closure* shutdown_closure; /* Called after after shutdown is complete */
206
+
207
+ /* Number of workers who are *about-to* attach themselves to the pollset
208
+ * worker list */
209
+ int begin_refs;
210
+
211
+ grpc_pollset* next;
212
+ grpc_pollset* prev;
213
+ };
214
+
215
+ /*******************************************************************************
216
+ * Pollset-set Declarations
217
+ */
218
+
219
+ struct grpc_pollset_set {
220
+ char unused;
221
+ };
222
+
223
+ /*******************************************************************************
224
+ * Common helpers
225
+ */
226
+
227
+ static bool append_error(grpc_error** composite, grpc_error* error,
228
+ const char* desc) {
229
+ if (error == GRPC_ERROR_NONE) return true;
230
+ if (*composite == GRPC_ERROR_NONE) {
231
+ *composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc);
232
+ }
233
+ *composite = grpc_error_add_child(*composite, error);
234
+ return false;
235
+ }
236
+
237
+ /*******************************************************************************
238
+ * Fd Definitions
239
+ */
240
+
241
+ /* We need to keep a freelist not because of any concerns of malloc performance
242
+ * but instead so that implementations with multiple threads in (for example)
243
+ * epoll_wait deal with the race between pollset removal and incoming poll
244
+ * notifications.
245
+ *
246
+ * The problem is that the poller ultimately holds a reference to this
247
+ * object, so it is very difficult to know when is safe to free it, at least
248
+ * without some expensive synchronization.
249
+ *
250
+ * If we keep the object freelisted, in the worst case losing this race just
251
+ * becomes a spurious read notification on a reused fd.
252
+ */
253
+
254
+ /* The alarm system needs to be able to wakeup 'some poller' sometimes
255
+ * (specifically when a new alarm needs to be triggered earlier than the next
256
+ * alarm 'epoch'). This wakeup_fd gives us something to alert on when such a
257
+ * case occurs. */
258
+
259
+ static grpc_fd* fd_freelist = nullptr;
260
+ static gpr_mu fd_freelist_mu;
261
+
262
+ static void fd_global_init(void) { gpr_mu_init(&fd_freelist_mu); }
263
+
264
+ static void fd_global_shutdown(void) {
265
+ gpr_mu_lock(&fd_freelist_mu);
266
+ gpr_mu_unlock(&fd_freelist_mu);
267
+ while (fd_freelist != nullptr) {
268
+ grpc_fd* fd = fd_freelist;
269
+ fd_freelist = fd_freelist->freelist_next;
270
+ gpr_free(fd);
271
+ }
272
+ gpr_mu_destroy(&fd_freelist_mu);
273
+ }
274
+
275
+ static grpc_fd* fd_create(int fd, const char* name) {
276
+ grpc_fd* new_fd = nullptr;
277
+
278
+ gpr_mu_lock(&fd_freelist_mu);
279
+ if (fd_freelist != nullptr) {
280
+ new_fd = fd_freelist;
281
+ fd_freelist = fd_freelist->freelist_next;
282
+ }
283
+ gpr_mu_unlock(&fd_freelist_mu);
284
+
285
+ if (new_fd == nullptr) {
286
+ new_fd = static_cast<grpc_fd*>(gpr_malloc(sizeof(grpc_fd)));
287
+ new_fd->read_closure.Init();
288
+ new_fd->write_closure.Init();
289
+ }
290
+
291
+ new_fd->fd = fd;
292
+ new_fd->read_closure->InitEvent();
293
+ new_fd->write_closure->InitEvent();
294
+ gpr_atm_no_barrier_store(&new_fd->read_notifier_pollset, (gpr_atm)NULL);
295
+
296
+ new_fd->freelist_next = nullptr;
297
+
298
+ char* fd_name;
299
+ gpr_asprintf(&fd_name, "%s fd=%d", name, fd);
300
+ grpc_iomgr_register_object(&new_fd->iomgr_object, fd_name);
301
+ #ifndef NDEBUG
302
+ if (grpc_trace_fd_refcount.enabled()) {
303
+ gpr_log(GPR_DEBUG, "FD %d %p create %s", fd, new_fd, fd_name);
304
+ }
305
+ #endif
306
+ gpr_free(fd_name);
307
+
308
+ struct epoll_event ev;
309
+ ev.events = static_cast<uint32_t>(EPOLLIN | EPOLLOUT | EPOLLET);
310
+ ev.data.ptr = new_fd;
311
+ if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_ADD, fd, &ev) != 0) {
312
+ gpr_log(GPR_ERROR, "epoll_ctl failed: %s", strerror(errno));
313
+ }
314
+
315
+ return new_fd;
316
+ }
317
+
318
+ static int fd_wrapped_fd(grpc_fd* fd) { return fd->fd; }
319
+
320
+ /* if 'releasing_fd' is true, it means that we are going to detach the internal
321
+ * fd from grpc_fd structure (i.e which means we should not be calling
322
+ * shutdown() syscall on that fd) */
323
+ static void fd_shutdown_internal(grpc_fd* fd, grpc_error* why,
324
+ bool releasing_fd) {
325
+ if (fd->read_closure->SetShutdown(GRPC_ERROR_REF(why))) {
326
+ if (!releasing_fd) {
327
+ shutdown(fd->fd, SHUT_RDWR);
328
+ }
329
+ fd->write_closure->SetShutdown(GRPC_ERROR_REF(why));
330
+ }
331
+ GRPC_ERROR_UNREF(why);
332
+ }
333
+
334
+ /* Might be called multiple times */
335
+ static void fd_shutdown(grpc_fd* fd, grpc_error* why) {
336
+ fd_shutdown_internal(fd, why, false);
337
+ }
338
+
339
+ static void fd_orphan(grpc_fd* fd, grpc_closure* on_done, int* release_fd,
340
+ bool already_closed, const char* reason) {
341
+ grpc_error* error = GRPC_ERROR_NONE;
342
+ bool is_release_fd = (release_fd != nullptr);
343
+
344
+ if (!fd->read_closure->IsShutdown()) {
345
+ fd_shutdown_internal(fd, GRPC_ERROR_CREATE_FROM_COPIED_STRING(reason),
346
+ is_release_fd);
347
+ }
348
+
349
+ /* If release_fd is not NULL, we should be relinquishing control of the file
350
+ descriptor fd->fd (but we still own the grpc_fd structure). */
351
+ if (is_release_fd) {
352
+ *release_fd = fd->fd;
353
+ } else if (!already_closed) {
354
+ close(fd->fd);
355
+ }
356
+
357
+ GRPC_CLOSURE_SCHED(on_done, GRPC_ERROR_REF(error));
358
+
359
+ grpc_iomgr_unregister_object(&fd->iomgr_object);
360
+ fd->read_closure->DestroyEvent();
361
+ fd->write_closure->DestroyEvent();
362
+
363
+ gpr_mu_lock(&fd_freelist_mu);
364
+ fd->freelist_next = fd_freelist;
365
+ fd_freelist = fd;
366
+ gpr_mu_unlock(&fd_freelist_mu);
367
+ }
368
+
369
+ static grpc_pollset* fd_get_read_notifier_pollset(grpc_fd* fd) {
370
+ gpr_atm notifier = gpr_atm_acq_load(&fd->read_notifier_pollset);
371
+ return (grpc_pollset*)notifier;
372
+ }
373
+
374
+ static bool fd_is_shutdown(grpc_fd* fd) {
375
+ return fd->read_closure->IsShutdown();
376
+ }
377
+
378
+ static void fd_notify_on_read(grpc_fd* fd, grpc_closure* closure) {
379
+ fd->read_closure->NotifyOn(closure);
380
+ }
381
+
382
+ static void fd_notify_on_write(grpc_fd* fd, grpc_closure* closure) {
383
+ fd->write_closure->NotifyOn(closure);
384
+ }
385
+
386
+ static void fd_become_readable(grpc_fd* fd, grpc_pollset* notifier) {
387
+ fd->read_closure->SetReady();
388
+ /* Use release store to match with acquire load in fd_get_read_notifier */
389
+ gpr_atm_rel_store(&fd->read_notifier_pollset, (gpr_atm)notifier);
390
+ }
391
+
392
+ static void fd_become_writable(grpc_fd* fd) { fd->write_closure->SetReady(); }
393
+
394
+ /*******************************************************************************
395
+ * Pollset Definitions
396
+ */
397
+
398
+ GPR_TLS_DECL(g_current_thread_pollset);
399
+ GPR_TLS_DECL(g_current_thread_worker);
400
+
401
+ /* The designated poller */
402
+ static gpr_atm g_active_poller;
403
+
404
+ static pollset_neighborhood* g_neighborhoods;
405
+ static size_t g_num_neighborhoods;
406
+
407
+ /* Return true if first in list */
408
+ static bool worker_insert(grpc_pollset* pollset, grpc_pollset_worker* worker) {
409
+ if (pollset->root_worker == nullptr) {
410
+ pollset->root_worker = worker;
411
+ worker->next = worker->prev = worker;
412
+ return true;
413
+ } else {
414
+ worker->next = pollset->root_worker;
415
+ worker->prev = worker->next->prev;
416
+ worker->next->prev = worker;
417
+ worker->prev->next = worker;
418
+ return false;
419
+ }
420
+ }
421
+
422
+ /* Return true if last in list */
423
+ typedef enum { EMPTIED, NEW_ROOT, REMOVED } worker_remove_result;
424
+
425
+ static worker_remove_result worker_remove(grpc_pollset* pollset,
426
+ grpc_pollset_worker* worker) {
427
+ if (worker == pollset->root_worker) {
428
+ if (worker == worker->next) {
429
+ pollset->root_worker = nullptr;
430
+ return EMPTIED;
431
+ } else {
432
+ pollset->root_worker = worker->next;
433
+ worker->prev->next = worker->next;
434
+ worker->next->prev = worker->prev;
435
+ return NEW_ROOT;
436
+ }
437
+ } else {
438
+ worker->prev->next = worker->next;
439
+ worker->next->prev = worker->prev;
440
+ return REMOVED;
441
+ }
442
+ }
443
+
444
+ static size_t choose_neighborhood(void) {
445
+ return static_cast<size_t>(gpr_cpu_current_cpu()) % g_num_neighborhoods;
446
+ }
447
+
448
+ static grpc_error* pollset_global_init(void) {
449
+ gpr_tls_init(&g_current_thread_pollset);
450
+ gpr_tls_init(&g_current_thread_worker);
451
+ gpr_atm_no_barrier_store(&g_active_poller, 0);
452
+ global_wakeup_fd.read_fd = -1;
453
+ grpc_error* err = grpc_wakeup_fd_init(&global_wakeup_fd);
454
+ if (err != GRPC_ERROR_NONE) return err;
455
+ struct epoll_event ev;
456
+ ev.events = static_cast<uint32_t>(EPOLLIN | EPOLLET);
457
+ ev.data.ptr = &global_wakeup_fd;
458
+ if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_ADD, global_wakeup_fd.read_fd,
459
+ &ev) != 0) {
460
+ return GRPC_OS_ERROR(errno, "epoll_ctl");
461
+ }
462
+ g_num_neighborhoods = GPR_CLAMP(gpr_cpu_num_cores(), 1, MAX_NEIGHBORHOODS);
463
+ g_neighborhoods = static_cast<pollset_neighborhood*>(
464
+ gpr_zalloc(sizeof(*g_neighborhoods) * g_num_neighborhoods));
465
+ for (size_t i = 0; i < g_num_neighborhoods; i++) {
466
+ gpr_mu_init(&g_neighborhoods[i].mu);
467
+ }
468
+ return GRPC_ERROR_NONE;
469
+ }
470
+
471
+ static void pollset_global_shutdown(void) {
472
+ gpr_tls_destroy(&g_current_thread_pollset);
473
+ gpr_tls_destroy(&g_current_thread_worker);
474
+ if (global_wakeup_fd.read_fd != -1) grpc_wakeup_fd_destroy(&global_wakeup_fd);
475
+ for (size_t i = 0; i < g_num_neighborhoods; i++) {
476
+ gpr_mu_destroy(&g_neighborhoods[i].mu);
477
+ }
478
+ gpr_free(g_neighborhoods);
479
+ }
480
+
481
+ static void pollset_init(grpc_pollset* pollset, gpr_mu** mu) {
482
+ gpr_mu_init(&pollset->mu);
483
+ *mu = &pollset->mu;
484
+ pollset->neighborhood = &g_neighborhoods[choose_neighborhood()];
485
+ pollset->reassigning_neighborhood = false;
486
+ pollset->root_worker = nullptr;
487
+ pollset->kicked_without_poller = false;
488
+ pollset->seen_inactive = true;
489
+ pollset->shutting_down = false;
490
+ pollset->shutdown_closure = nullptr;
491
+ pollset->begin_refs = 0;
492
+ pollset->next = pollset->prev = nullptr;
493
+ }
494
+
495
+ static void pollset_destroy(grpc_pollset* pollset) {
496
+ gpr_mu_lock(&pollset->mu);
497
+ if (!pollset->seen_inactive) {
498
+ pollset_neighborhood* neighborhood = pollset->neighborhood;
499
+ gpr_mu_unlock(&pollset->mu);
500
+ retry_lock_neighborhood:
501
+ gpr_mu_lock(&neighborhood->mu);
502
+ gpr_mu_lock(&pollset->mu);
503
+ if (!pollset->seen_inactive) {
504
+ if (pollset->neighborhood != neighborhood) {
505
+ gpr_mu_unlock(&neighborhood->mu);
506
+ neighborhood = pollset->neighborhood;
507
+ gpr_mu_unlock(&pollset->mu);
508
+ goto retry_lock_neighborhood;
509
+ }
510
+ pollset->prev->next = pollset->next;
511
+ pollset->next->prev = pollset->prev;
512
+ if (pollset == pollset->neighborhood->active_root) {
513
+ pollset->neighborhood->active_root =
514
+ pollset->next == pollset ? nullptr : pollset->next;
515
+ }
516
+ }
517
+ gpr_mu_unlock(&pollset->neighborhood->mu);
518
+ }
519
+ gpr_mu_unlock(&pollset->mu);
520
+ gpr_mu_destroy(&pollset->mu);
521
+ }
522
+
523
+ static grpc_error* pollset_kick_all(grpc_pollset* pollset) {
524
+ GPR_TIMER_SCOPE("pollset_kick_all", 0);
525
+ grpc_error* error = GRPC_ERROR_NONE;
526
+ if (pollset->root_worker != nullptr) {
527
+ grpc_pollset_worker* worker = pollset->root_worker;
528
+ do {
529
+ GRPC_STATS_INC_POLLSET_KICK();
530
+ switch (worker->state) {
531
+ case KICKED:
532
+ GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
533
+ break;
534
+ case UNKICKED:
535
+ SET_KICK_STATE(worker, KICKED);
536
+ if (worker->initialized_cv) {
537
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
538
+ gpr_cv_signal(&worker->cv);
539
+ }
540
+ break;
541
+ case DESIGNATED_POLLER:
542
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
543
+ SET_KICK_STATE(worker, KICKED);
544
+ append_error(&error, grpc_wakeup_fd_wakeup(&global_wakeup_fd),
545
+ "pollset_kick_all");
546
+ break;
547
+ }
548
+
549
+ worker = worker->next;
550
+ } while (worker != pollset->root_worker);
551
+ }
552
+ // TODO: sreek. Check if we need to set 'kicked_without_poller' to true here
553
+ // in the else case
554
+ return error;
555
+ }
556
+
557
+ static void pollset_maybe_finish_shutdown(grpc_pollset* pollset) {
558
+ if (pollset->shutdown_closure != nullptr && pollset->root_worker == nullptr &&
559
+ pollset->begin_refs == 0) {
560
+ GPR_TIMER_MARK("pollset_finish_shutdown", 0);
561
+ GRPC_CLOSURE_SCHED(pollset->shutdown_closure, GRPC_ERROR_NONE);
562
+ pollset->shutdown_closure = nullptr;
563
+ }
564
+ }
565
+
566
+ static void pollset_shutdown(grpc_pollset* pollset, grpc_closure* closure) {
567
+ GPR_TIMER_SCOPE("pollset_shutdown", 0);
568
+ GPR_ASSERT(pollset->shutdown_closure == nullptr);
569
+ GPR_ASSERT(!pollset->shutting_down);
570
+ pollset->shutdown_closure = closure;
571
+ pollset->shutting_down = true;
572
+ GRPC_LOG_IF_ERROR("pollset_shutdown", pollset_kick_all(pollset));
573
+ pollset_maybe_finish_shutdown(pollset);
574
+ }
575
+
576
+ static int poll_deadline_to_millis_timeout(grpc_millis millis) {
577
+ if (millis == GRPC_MILLIS_INF_FUTURE) return -1;
578
+ grpc_millis delta = millis - grpc_core::ExecCtx::Get()->Now();
579
+ if (delta > INT_MAX) {
580
+ return INT_MAX;
581
+ } else if (delta < 0) {
582
+ return 0;
583
+ } else {
584
+ return static_cast<int>(delta);
585
+ }
586
+ }
587
+
588
+ /* Process the epoll events found by do_epoll_wait() function.
589
+ - g_epoll_set.cursor points to the index of the first event to be processed
590
+ - This function then processes up-to MAX_EPOLL_EVENTS_PER_ITERATION and
591
+ updates the g_epoll_set.cursor
592
+
593
+ NOTE ON SYNCRHONIZATION: Similar to do_epoll_wait(), this function is only
594
+ called by g_active_poller thread. So there is no need for synchronization
595
+ when accessing fields in g_epoll_set */
596
+ static grpc_error* process_epoll_events(grpc_pollset* pollset) {
597
+ GPR_TIMER_SCOPE("process_epoll_events", 0);
598
+
599
+ static const char* err_desc = "process_events";
600
+ grpc_error* error = GRPC_ERROR_NONE;
601
+ long num_events = gpr_atm_acq_load(&g_epoll_set.num_events);
602
+ long cursor = gpr_atm_acq_load(&g_epoll_set.cursor);
603
+ for (int idx = 0;
604
+ (idx < MAX_EPOLL_EVENTS_HANDLED_PER_ITERATION) && cursor != num_events;
605
+ idx++) {
606
+ long c = cursor++;
607
+ struct epoll_event* ev = &g_epoll_set.events[c];
608
+ void* data_ptr = ev->data.ptr;
609
+
610
+ if (data_ptr == &global_wakeup_fd) {
611
+ append_error(&error, grpc_wakeup_fd_consume_wakeup(&global_wakeup_fd),
612
+ err_desc);
613
+ } else {
614
+ grpc_fd* fd = static_cast<grpc_fd*>(data_ptr);
615
+ bool cancel = (ev->events & (EPOLLERR | EPOLLHUP)) != 0;
616
+ bool read_ev = (ev->events & (EPOLLIN | EPOLLPRI)) != 0;
617
+ bool write_ev = (ev->events & EPOLLOUT) != 0;
618
+
619
+ if (read_ev || cancel) {
620
+ fd_become_readable(fd, pollset);
621
+ }
622
+
623
+ if (write_ev || cancel) {
624
+ fd_become_writable(fd);
625
+ }
626
+ }
627
+ }
628
+ gpr_atm_rel_store(&g_epoll_set.cursor, cursor);
629
+ return error;
630
+ }
631
+
632
+ /* Do epoll_wait and store the events in g_epoll_set.events field. This does not
633
+ "process" any of the events yet; that is done in process_epoll_events().
634
+ *See process_epoll_events() function for more details.
635
+
636
+ NOTE ON SYNCHRONIZATION: At any point of time, only the g_active_poller
637
+ (i.e the designated poller thread) will be calling this function. So there is
638
+ no need for any synchronization when accesing fields in g_epoll_set */
639
+ static grpc_error* do_epoll_wait(grpc_pollset* ps, grpc_millis deadline) {
640
+ GPR_TIMER_SCOPE("do_epoll_wait", 0);
641
+
642
+ int r;
643
+ int timeout = poll_deadline_to_millis_timeout(deadline);
644
+ if (timeout != 0) {
645
+ GRPC_SCHEDULING_START_BLOCKING_REGION;
646
+ }
647
+ do {
648
+ GRPC_STATS_INC_SYSCALL_POLL();
649
+ r = epoll_wait(g_epoll_set.epfd, g_epoll_set.events, MAX_EPOLL_EVENTS,
650
+ timeout);
651
+ } while (r < 0 && errno == EINTR);
652
+ if (timeout != 0) {
653
+ GRPC_SCHEDULING_END_BLOCKING_REGION;
654
+ }
655
+
656
+ if (r < 0) return GRPC_OS_ERROR(errno, "epoll_wait");
657
+
658
+ GRPC_STATS_INC_POLL_EVENTS_RETURNED(r);
659
+
660
+ if (grpc_polling_trace.enabled()) {
661
+ gpr_log(GPR_DEBUG, "ps: %p poll got %d events", ps, r);
662
+ }
663
+
664
+ gpr_atm_rel_store(&g_epoll_set.num_events, r);
665
+ gpr_atm_rel_store(&g_epoll_set.cursor, 0);
666
+
667
+ return GRPC_ERROR_NONE;
668
+ }
669
+
670
+ static bool begin_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
671
+ grpc_pollset_worker** worker_hdl,
672
+ grpc_millis deadline) {
673
+ GPR_TIMER_SCOPE("begin_worker", 0);
674
+ if (worker_hdl != nullptr) *worker_hdl = worker;
675
+ worker->initialized_cv = false;
676
+ SET_KICK_STATE(worker, UNKICKED);
677
+ worker->schedule_on_end_work = (grpc_closure_list)GRPC_CLOSURE_LIST_INIT;
678
+ pollset->begin_refs++;
679
+
680
+ if (grpc_polling_trace.enabled()) {
681
+ gpr_log(GPR_DEBUG, "PS:%p BEGIN_STARTS:%p", pollset, worker);
682
+ }
683
+
684
+ if (pollset->seen_inactive) {
685
+ // pollset has been observed to be inactive, we need to move back to the
686
+ // active list
687
+ bool is_reassigning = false;
688
+ if (!pollset->reassigning_neighborhood) {
689
+ is_reassigning = true;
690
+ pollset->reassigning_neighborhood = true;
691
+ pollset->neighborhood = &g_neighborhoods[choose_neighborhood()];
692
+ }
693
+ pollset_neighborhood* neighborhood = pollset->neighborhood;
694
+ gpr_mu_unlock(&pollset->mu);
695
+ // pollset unlocked: state may change (even worker->kick_state)
696
+ retry_lock_neighborhood:
697
+ gpr_mu_lock(&neighborhood->mu);
698
+ gpr_mu_lock(&pollset->mu);
699
+ if (grpc_polling_trace.enabled()) {
700
+ gpr_log(GPR_DEBUG, "PS:%p BEGIN_REORG:%p kick_state=%s is_reassigning=%d",
701
+ pollset, worker, kick_state_string(worker->state),
702
+ is_reassigning);
703
+ }
704
+ if (pollset->seen_inactive) {
705
+ if (neighborhood != pollset->neighborhood) {
706
+ gpr_mu_unlock(&neighborhood->mu);
707
+ neighborhood = pollset->neighborhood;
708
+ gpr_mu_unlock(&pollset->mu);
709
+ goto retry_lock_neighborhood;
710
+ }
711
+
712
+ /* In the brief time we released the pollset locks above, the worker MAY
713
+ have been kicked. In this case, the worker should get out of this
714
+ pollset ASAP and hence this should neither add the pollset to
715
+ neighborhood nor mark the pollset as active.
716
+
717
+ On a side note, the only way a worker's kick state could have changed
718
+ at this point is if it were "kicked specifically". Since the worker has
719
+ not added itself to the pollset yet (by calling worker_insert()), it is
720
+ not visible in the "kick any" path yet */
721
+ if (worker->state == UNKICKED) {
722
+ pollset->seen_inactive = false;
723
+ if (neighborhood->active_root == nullptr) {
724
+ neighborhood->active_root = pollset->next = pollset->prev = pollset;
725
+ /* Make this the designated poller if there isn't one already */
726
+ if (worker->state == UNKICKED &&
727
+ gpr_atm_no_barrier_cas(&g_active_poller, 0, (gpr_atm)worker)) {
728
+ SET_KICK_STATE(worker, DESIGNATED_POLLER);
729
+ }
730
+ } else {
731
+ pollset->next = neighborhood->active_root;
732
+ pollset->prev = pollset->next->prev;
733
+ pollset->next->prev = pollset->prev->next = pollset;
734
+ }
735
+ }
736
+ }
737
+ if (is_reassigning) {
738
+ GPR_ASSERT(pollset->reassigning_neighborhood);
739
+ pollset->reassigning_neighborhood = false;
740
+ }
741
+ gpr_mu_unlock(&neighborhood->mu);
742
+ }
743
+
744
+ worker_insert(pollset, worker);
745
+ pollset->begin_refs--;
746
+ if (worker->state == UNKICKED && !pollset->kicked_without_poller) {
747
+ GPR_ASSERT(gpr_atm_no_barrier_load(&g_active_poller) != (gpr_atm)worker);
748
+ worker->initialized_cv = true;
749
+ gpr_cv_init(&worker->cv);
750
+ while (worker->state == UNKICKED && !pollset->shutting_down) {
751
+ if (grpc_polling_trace.enabled()) {
752
+ gpr_log(GPR_DEBUG, "PS:%p BEGIN_WAIT:%p kick_state=%s shutdown=%d",
753
+ pollset, worker, kick_state_string(worker->state),
754
+ pollset->shutting_down);
755
+ }
756
+
757
+ if (gpr_cv_wait(&worker->cv, &pollset->mu,
758
+ grpc_millis_to_timespec(deadline, GPR_CLOCK_MONOTONIC)) &&
759
+ worker->state == UNKICKED) {
760
+ /* If gpr_cv_wait returns true (i.e a timeout), pretend that the worker
761
+ received a kick */
762
+ SET_KICK_STATE(worker, KICKED);
763
+ }
764
+ }
765
+ grpc_core::ExecCtx::Get()->InvalidateNow();
766
+ }
767
+
768
+ if (grpc_polling_trace.enabled()) {
769
+ gpr_log(GPR_DEBUG,
770
+ "PS:%p BEGIN_DONE:%p kick_state=%s shutdown=%d "
771
+ "kicked_without_poller: %d",
772
+ pollset, worker, kick_state_string(worker->state),
773
+ pollset->shutting_down, pollset->kicked_without_poller);
774
+ }
775
+
776
+ /* We release pollset lock in this function at a couple of places:
777
+ * 1. Briefly when assigning pollset to a neighborhood
778
+ * 2. When doing gpr_cv_wait()
779
+ * It is possible that 'kicked_without_poller' was set to true during (1) and
780
+ * 'shutting_down' is set to true during (1) or (2). If either of them is
781
+ * true, this worker cannot do polling */
782
+ /* TODO(sreek): Perhaps there is a better way to handle kicked_without_poller
783
+ * case; especially when the worker is the DESIGNATED_POLLER */
784
+
785
+ if (pollset->kicked_without_poller) {
786
+ pollset->kicked_without_poller = false;
787
+ return false;
788
+ }
789
+
790
+ return worker->state == DESIGNATED_POLLER && !pollset->shutting_down;
791
+ }
792
+
793
+ static bool check_neighborhood_for_available_poller(
794
+ pollset_neighborhood* neighborhood) {
795
+ GPR_TIMER_SCOPE("check_neighborhood_for_available_poller", 0);
796
+ bool found_worker = false;
797
+ do {
798
+ grpc_pollset* inspect = neighborhood->active_root;
799
+ if (inspect == nullptr) {
800
+ break;
801
+ }
802
+ gpr_mu_lock(&inspect->mu);
803
+ GPR_ASSERT(!inspect->seen_inactive);
804
+ grpc_pollset_worker* inspect_worker = inspect->root_worker;
805
+ if (inspect_worker != nullptr) {
806
+ do {
807
+ switch (inspect_worker->state) {
808
+ case UNKICKED:
809
+ if (gpr_atm_no_barrier_cas(&g_active_poller, 0,
810
+ (gpr_atm)inspect_worker)) {
811
+ if (grpc_polling_trace.enabled()) {
812
+ gpr_log(GPR_DEBUG, " .. choose next poller to be %p",
813
+ inspect_worker);
814
+ }
815
+ SET_KICK_STATE(inspect_worker, DESIGNATED_POLLER);
816
+ if (inspect_worker->initialized_cv) {
817
+ GPR_TIMER_MARK("signal worker", 0);
818
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
819
+ gpr_cv_signal(&inspect_worker->cv);
820
+ }
821
+ } else {
822
+ if (grpc_polling_trace.enabled()) {
823
+ gpr_log(GPR_DEBUG, " .. beaten to choose next poller");
824
+ }
825
+ }
826
+ // even if we didn't win the cas, there's a worker, we can stop
827
+ found_worker = true;
828
+ break;
829
+ case KICKED:
830
+ break;
831
+ case DESIGNATED_POLLER:
832
+ found_worker = true; // ok, so someone else found the worker, but
833
+ // we'll accept that
834
+ break;
835
+ }
836
+ inspect_worker = inspect_worker->next;
837
+ } while (!found_worker && inspect_worker != inspect->root_worker);
838
+ }
839
+ if (!found_worker) {
840
+ if (grpc_polling_trace.enabled()) {
841
+ gpr_log(GPR_DEBUG, " .. mark pollset %p inactive", inspect);
842
+ }
843
+ inspect->seen_inactive = true;
844
+ if (inspect == neighborhood->active_root) {
845
+ neighborhood->active_root =
846
+ inspect->next == inspect ? nullptr : inspect->next;
847
+ }
848
+ inspect->next->prev = inspect->prev;
849
+ inspect->prev->next = inspect->next;
850
+ inspect->next = inspect->prev = nullptr;
851
+ }
852
+ gpr_mu_unlock(&inspect->mu);
853
+ } while (!found_worker);
854
+ return found_worker;
855
+ }
856
+
857
+ static void end_worker(grpc_pollset* pollset, grpc_pollset_worker* worker,
858
+ grpc_pollset_worker** worker_hdl) {
859
+ GPR_TIMER_SCOPE("end_worker", 0);
860
+ if (grpc_polling_trace.enabled()) {
861
+ gpr_log(GPR_DEBUG, "PS:%p END_WORKER:%p", pollset, worker);
862
+ }
863
+ if (worker_hdl != nullptr) *worker_hdl = nullptr;
864
+ /* Make sure we appear kicked */
865
+ SET_KICK_STATE(worker, KICKED);
866
+ grpc_closure_list_move(&worker->schedule_on_end_work,
867
+ grpc_core::ExecCtx::Get()->closure_list());
868
+ if (gpr_atm_no_barrier_load(&g_active_poller) == (gpr_atm)worker) {
869
+ if (worker->next != worker && worker->next->state == UNKICKED) {
870
+ if (grpc_polling_trace.enabled()) {
871
+ gpr_log(GPR_DEBUG, " .. choose next poller to be peer %p", worker);
872
+ }
873
+ GPR_ASSERT(worker->next->initialized_cv);
874
+ gpr_atm_no_barrier_store(&g_active_poller, (gpr_atm)worker->next);
875
+ SET_KICK_STATE(worker->next, DESIGNATED_POLLER);
876
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
877
+ gpr_cv_signal(&worker->next->cv);
878
+ if (grpc_core::ExecCtx::Get()->HasWork()) {
879
+ gpr_mu_unlock(&pollset->mu);
880
+ grpc_core::ExecCtx::Get()->Flush();
881
+ gpr_mu_lock(&pollset->mu);
882
+ }
883
+ } else {
884
+ gpr_atm_no_barrier_store(&g_active_poller, 0);
885
+ size_t poller_neighborhood_idx =
886
+ static_cast<size_t>(pollset->neighborhood - g_neighborhoods);
887
+ gpr_mu_unlock(&pollset->mu);
888
+ bool found_worker = false;
889
+ bool scan_state[MAX_NEIGHBORHOODS];
890
+ for (size_t i = 0; !found_worker && i < g_num_neighborhoods; i++) {
891
+ pollset_neighborhood* neighborhood =
892
+ &g_neighborhoods[(poller_neighborhood_idx + i) %
893
+ g_num_neighborhoods];
894
+ if (gpr_mu_trylock(&neighborhood->mu)) {
895
+ found_worker = check_neighborhood_for_available_poller(neighborhood);
896
+ gpr_mu_unlock(&neighborhood->mu);
897
+ scan_state[i] = true;
898
+ } else {
899
+ scan_state[i] = false;
900
+ }
901
+ }
902
+ for (size_t i = 0; !found_worker && i < g_num_neighborhoods; i++) {
903
+ if (scan_state[i]) continue;
904
+ pollset_neighborhood* neighborhood =
905
+ &g_neighborhoods[(poller_neighborhood_idx + i) %
906
+ g_num_neighborhoods];
907
+ gpr_mu_lock(&neighborhood->mu);
908
+ found_worker = check_neighborhood_for_available_poller(neighborhood);
909
+ gpr_mu_unlock(&neighborhood->mu);
910
+ }
911
+ grpc_core::ExecCtx::Get()->Flush();
912
+ gpr_mu_lock(&pollset->mu);
913
+ }
914
+ } else if (grpc_core::ExecCtx::Get()->HasWork()) {
915
+ gpr_mu_unlock(&pollset->mu);
916
+ grpc_core::ExecCtx::Get()->Flush();
917
+ gpr_mu_lock(&pollset->mu);
918
+ }
919
+ if (worker->initialized_cv) {
920
+ gpr_cv_destroy(&worker->cv);
921
+ }
922
+ if (grpc_polling_trace.enabled()) {
923
+ gpr_log(GPR_DEBUG, " .. remove worker");
924
+ }
925
+ if (EMPTIED == worker_remove(pollset, worker)) {
926
+ pollset_maybe_finish_shutdown(pollset);
927
+ }
928
+ GPR_ASSERT(gpr_atm_no_barrier_load(&g_active_poller) != (gpr_atm)worker);
929
+ }
930
+
931
+ /* pollset->po.mu lock must be held by the caller before calling this.
932
+ The function pollset_work() may temporarily release the lock (pollset->po.mu)
933
+ during the course of its execution but it will always re-acquire the lock and
934
+ ensure that it is held by the time the function returns */
935
+ static grpc_error* pollset_work(grpc_pollset* ps,
936
+ grpc_pollset_worker** worker_hdl,
937
+ grpc_millis deadline) {
938
+ GPR_TIMER_SCOPE("pollset_work", 0);
939
+ grpc_pollset_worker worker;
940
+ grpc_error* error = GRPC_ERROR_NONE;
941
+ static const char* err_desc = "pollset_work";
942
+ if (ps->kicked_without_poller) {
943
+ ps->kicked_without_poller = false;
944
+ return GRPC_ERROR_NONE;
945
+ }
946
+
947
+ if (begin_worker(ps, &worker, worker_hdl, deadline)) {
948
+ gpr_tls_set(&g_current_thread_pollset, (intptr_t)ps);
949
+ gpr_tls_set(&g_current_thread_worker, (intptr_t)&worker);
950
+ GPR_ASSERT(!ps->shutting_down);
951
+ GPR_ASSERT(!ps->seen_inactive);
952
+
953
+ gpr_mu_unlock(&ps->mu); /* unlock */
954
+ /* This is the designated polling thread at this point and should ideally do
955
+ polling. However, if there are unprocessed events left from a previous
956
+ call to do_epoll_wait(), skip calling epoll_wait() in this iteration and
957
+ process the pending epoll events.
958
+
959
+ The reason for decoupling do_epoll_wait and process_epoll_events is to
960
+ better distrubute the work (i.e handling epoll events) across multiple
961
+ threads
962
+
963
+ process_epoll_events() returns very quickly: It just queues the work on
964
+ exec_ctx but does not execute it (the actual exectution or more
965
+ accurately grpc_core::ExecCtx::Get()->Flush() happens in end_worker()
966
+ AFTER selecting a designated poller). So we are not waiting long periods
967
+ without a designated poller */
968
+ if (gpr_atm_acq_load(&g_epoll_set.cursor) ==
969
+ gpr_atm_acq_load(&g_epoll_set.num_events)) {
970
+ append_error(&error, do_epoll_wait(ps, deadline), err_desc);
971
+ }
972
+ append_error(&error, process_epoll_events(ps), err_desc);
973
+
974
+ gpr_mu_lock(&ps->mu); /* lock */
975
+
976
+ gpr_tls_set(&g_current_thread_worker, 0);
977
+ } else {
978
+ gpr_tls_set(&g_current_thread_pollset, (intptr_t)ps);
979
+ }
980
+ end_worker(ps, &worker, worker_hdl);
981
+
982
+ gpr_tls_set(&g_current_thread_pollset, 0);
983
+ return error;
984
+ }
985
+
986
+ static grpc_error* pollset_kick(grpc_pollset* pollset,
987
+ grpc_pollset_worker* specific_worker) {
988
+ GPR_TIMER_SCOPE("pollset_kick", 0);
989
+ GRPC_STATS_INC_POLLSET_KICK();
990
+ grpc_error* ret_err = GRPC_ERROR_NONE;
991
+ if (grpc_polling_trace.enabled()) {
992
+ gpr_strvec log;
993
+ gpr_strvec_init(&log);
994
+ char* tmp;
995
+ gpr_asprintf(&tmp, "PS:%p KICK:%p curps=%p curworker=%p root=%p", pollset,
996
+ specific_worker, (void*)gpr_tls_get(&g_current_thread_pollset),
997
+ (void*)gpr_tls_get(&g_current_thread_worker),
998
+ pollset->root_worker);
999
+ gpr_strvec_add(&log, tmp);
1000
+ if (pollset->root_worker != nullptr) {
1001
+ gpr_asprintf(&tmp, " {kick_state=%s next=%p {kick_state=%s}}",
1002
+ kick_state_string(pollset->root_worker->state),
1003
+ pollset->root_worker->next,
1004
+ kick_state_string(pollset->root_worker->next->state));
1005
+ gpr_strvec_add(&log, tmp);
1006
+ }
1007
+ if (specific_worker != nullptr) {
1008
+ gpr_asprintf(&tmp, " worker_kick_state=%s",
1009
+ kick_state_string(specific_worker->state));
1010
+ gpr_strvec_add(&log, tmp);
1011
+ }
1012
+ tmp = gpr_strvec_flatten(&log, nullptr);
1013
+ gpr_strvec_destroy(&log);
1014
+ gpr_log(GPR_DEBUG, "%s", tmp);
1015
+ gpr_free(tmp);
1016
+ }
1017
+
1018
+ if (specific_worker == nullptr) {
1019
+ if (gpr_tls_get(&g_current_thread_pollset) != (intptr_t)pollset) {
1020
+ grpc_pollset_worker* root_worker = pollset->root_worker;
1021
+ if (root_worker == nullptr) {
1022
+ GRPC_STATS_INC_POLLSET_KICKED_WITHOUT_POLLER();
1023
+ pollset->kicked_without_poller = true;
1024
+ if (grpc_polling_trace.enabled()) {
1025
+ gpr_log(GPR_DEBUG, " .. kicked_without_poller");
1026
+ }
1027
+ goto done;
1028
+ }
1029
+ grpc_pollset_worker* next_worker = root_worker->next;
1030
+ if (root_worker->state == KICKED) {
1031
+ GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
1032
+ if (grpc_polling_trace.enabled()) {
1033
+ gpr_log(GPR_DEBUG, " .. already kicked %p", root_worker);
1034
+ }
1035
+ SET_KICK_STATE(root_worker, KICKED);
1036
+ goto done;
1037
+ } else if (next_worker->state == KICKED) {
1038
+ GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
1039
+ if (grpc_polling_trace.enabled()) {
1040
+ gpr_log(GPR_DEBUG, " .. already kicked %p", next_worker);
1041
+ }
1042
+ SET_KICK_STATE(next_worker, KICKED);
1043
+ goto done;
1044
+ } else if (root_worker ==
1045
+ next_worker && // only try and wake up a poller if
1046
+ // there is no next worker
1047
+ root_worker == (grpc_pollset_worker*)gpr_atm_no_barrier_load(
1048
+ &g_active_poller)) {
1049
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
1050
+ if (grpc_polling_trace.enabled()) {
1051
+ gpr_log(GPR_DEBUG, " .. kicked %p", root_worker);
1052
+ }
1053
+ SET_KICK_STATE(root_worker, KICKED);
1054
+ ret_err = grpc_wakeup_fd_wakeup(&global_wakeup_fd);
1055
+ goto done;
1056
+ } else if (next_worker->state == UNKICKED) {
1057
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
1058
+ if (grpc_polling_trace.enabled()) {
1059
+ gpr_log(GPR_DEBUG, " .. kicked %p", next_worker);
1060
+ }
1061
+ GPR_ASSERT(next_worker->initialized_cv);
1062
+ SET_KICK_STATE(next_worker, KICKED);
1063
+ gpr_cv_signal(&next_worker->cv);
1064
+ goto done;
1065
+ } else if (next_worker->state == DESIGNATED_POLLER) {
1066
+ if (root_worker->state != DESIGNATED_POLLER) {
1067
+ if (grpc_polling_trace.enabled()) {
1068
+ gpr_log(
1069
+ GPR_DEBUG,
1070
+ " .. kicked root non-poller %p (initialized_cv=%d) (poller=%p)",
1071
+ root_worker, root_worker->initialized_cv, next_worker);
1072
+ }
1073
+ SET_KICK_STATE(root_worker, KICKED);
1074
+ if (root_worker->initialized_cv) {
1075
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
1076
+ gpr_cv_signal(&root_worker->cv);
1077
+ }
1078
+ goto done;
1079
+ } else {
1080
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
1081
+ if (grpc_polling_trace.enabled()) {
1082
+ gpr_log(GPR_DEBUG, " .. non-root poller %p (root=%p)", next_worker,
1083
+ root_worker);
1084
+ }
1085
+ SET_KICK_STATE(next_worker, KICKED);
1086
+ ret_err = grpc_wakeup_fd_wakeup(&global_wakeup_fd);
1087
+ goto done;
1088
+ }
1089
+ } else {
1090
+ GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
1091
+ GPR_ASSERT(next_worker->state == KICKED);
1092
+ SET_KICK_STATE(next_worker, KICKED);
1093
+ goto done;
1094
+ }
1095
+ } else {
1096
+ GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD();
1097
+ if (grpc_polling_trace.enabled()) {
1098
+ gpr_log(GPR_DEBUG, " .. kicked while waking up");
1099
+ }
1100
+ goto done;
1101
+ }
1102
+
1103
+ GPR_UNREACHABLE_CODE(goto done);
1104
+ }
1105
+
1106
+ if (specific_worker->state == KICKED) {
1107
+ if (grpc_polling_trace.enabled()) {
1108
+ gpr_log(GPR_DEBUG, " .. specific worker already kicked");
1109
+ }
1110
+ goto done;
1111
+ } else if (gpr_tls_get(&g_current_thread_worker) ==
1112
+ (intptr_t)specific_worker) {
1113
+ GRPC_STATS_INC_POLLSET_KICK_OWN_THREAD();
1114
+ if (grpc_polling_trace.enabled()) {
1115
+ gpr_log(GPR_DEBUG, " .. mark %p kicked", specific_worker);
1116
+ }
1117
+ SET_KICK_STATE(specific_worker, KICKED);
1118
+ goto done;
1119
+ } else if (specific_worker ==
1120
+ (grpc_pollset_worker*)gpr_atm_no_barrier_load(&g_active_poller)) {
1121
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_FD();
1122
+ if (grpc_polling_trace.enabled()) {
1123
+ gpr_log(GPR_DEBUG, " .. kick active poller");
1124
+ }
1125
+ SET_KICK_STATE(specific_worker, KICKED);
1126
+ ret_err = grpc_wakeup_fd_wakeup(&global_wakeup_fd);
1127
+ goto done;
1128
+ } else if (specific_worker->initialized_cv) {
1129
+ GRPC_STATS_INC_POLLSET_KICK_WAKEUP_CV();
1130
+ if (grpc_polling_trace.enabled()) {
1131
+ gpr_log(GPR_DEBUG, " .. kick waiting worker");
1132
+ }
1133
+ SET_KICK_STATE(specific_worker, KICKED);
1134
+ gpr_cv_signal(&specific_worker->cv);
1135
+ goto done;
1136
+ } else {
1137
+ GRPC_STATS_INC_POLLSET_KICKED_AGAIN();
1138
+ if (grpc_polling_trace.enabled()) {
1139
+ gpr_log(GPR_DEBUG, " .. kick non-waiting worker");
1140
+ }
1141
+ SET_KICK_STATE(specific_worker, KICKED);
1142
+ goto done;
1143
+ }
1144
+ done:
1145
+ return ret_err;
1146
+ }
1147
+
1148
+ static void pollset_add_fd(grpc_pollset* pollset, grpc_fd* fd) {}
1149
+
1150
+ /*******************************************************************************
1151
+ * Pollset-set Definitions
1152
+ */
1153
+
1154
+ static grpc_pollset_set* pollset_set_create(void) {
1155
+ return (grpc_pollset_set*)(static_cast<intptr_t>(0xdeafbeef));
1156
+ }
1157
+
1158
+ static void pollset_set_destroy(grpc_pollset_set* pss) {}
1159
+
1160
+ static void pollset_set_add_fd(grpc_pollset_set* pss, grpc_fd* fd) {}
1161
+
1162
+ static void pollset_set_del_fd(grpc_pollset_set* pss, grpc_fd* fd) {}
1163
+
1164
+ static void pollset_set_add_pollset(grpc_pollset_set* pss, grpc_pollset* ps) {}
1165
+
1166
+ static void pollset_set_del_pollset(grpc_pollset_set* pss, grpc_pollset* ps) {}
1167
+
1168
+ static void pollset_set_add_pollset_set(grpc_pollset_set* bag,
1169
+ grpc_pollset_set* item) {}
1170
+
1171
+ static void pollset_set_del_pollset_set(grpc_pollset_set* bag,
1172
+ grpc_pollset_set* item) {}
1173
+
1174
+ /*******************************************************************************
1175
+ * Event engine binding
1176
+ */
1177
+
1178
+ static void shutdown_engine(void) {
1179
+ fd_global_shutdown();
1180
+ pollset_global_shutdown();
1181
+ epoll_set_shutdown();
1182
+ }
1183
+
1184
+ static const grpc_event_engine_vtable vtable = {
1185
+ sizeof(grpc_pollset),
1186
+
1187
+ fd_create,
1188
+ fd_wrapped_fd,
1189
+ fd_orphan,
1190
+ fd_shutdown,
1191
+ fd_notify_on_read,
1192
+ fd_notify_on_write,
1193
+ fd_is_shutdown,
1194
+ fd_get_read_notifier_pollset,
1195
+
1196
+ pollset_init,
1197
+ pollset_shutdown,
1198
+ pollset_destroy,
1199
+ pollset_work,
1200
+ pollset_kick,
1201
+ pollset_add_fd,
1202
+
1203
+ pollset_set_create,
1204
+ pollset_set_destroy,
1205
+ pollset_set_add_pollset,
1206
+ pollset_set_del_pollset,
1207
+ pollset_set_add_pollset_set,
1208
+ pollset_set_del_pollset_set,
1209
+ pollset_set_add_fd,
1210
+ pollset_set_del_fd,
1211
+
1212
+ shutdown_engine,
1213
+ };
1214
+
1215
+ /* It is possible that GLIBC has epoll but the underlying kernel doesn't.
1216
+ * Create epoll_fd (epoll_set_init() takes care of that) to make sure epoll
1217
+ * support is available */
1218
+ const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
1219
+ if (!grpc_has_wakeup_fd()) {
1220
+ gpr_log(GPR_ERROR, "Skipping epoll1 because of no wakeup fd.");
1221
+ return nullptr;
1222
+ }
1223
+
1224
+ if (!epoll_set_init()) {
1225
+ return nullptr;
1226
+ }
1227
+
1228
+ fd_global_init();
1229
+
1230
+ if (!GRPC_LOG_IF_ERROR("pollset_global_init", pollset_global_init())) {
1231
+ fd_global_shutdown();
1232
+ epoll_set_shutdown();
1233
+ return nullptr;
1234
+ }
1235
+
1236
+ return &vtable;
1237
+ }
1238
+
1239
+ #else /* defined(GRPC_LINUX_EPOLL) */
1240
+ #if defined(GRPC_POSIX_SOCKET)
1241
+ #include "src/core/lib/iomgr/ev_epoll1_linux.h"
1242
+ /* If GRPC_LINUX_EPOLL is not defined, it means epoll is not available. Return
1243
+ * NULL */
1244
+ const grpc_event_engine_vtable* grpc_init_epoll1_linux(bool explicit_request) {
1245
+ return nullptr;
1246
+ }
1247
+ #endif /* defined(GRPC_POSIX_SOCKET) */
1248
+ #endif /* !defined(GRPC_LINUX_EPOLL) */