grpc 0.13.1 → 0.14.1.pre1

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

Potentially problematic release.


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

Files changed (724) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -828
  3. data/include/grpc/byte_buffer.h +1 -1
  4. data/include/grpc/byte_buffer_reader.h +1 -20
  5. data/include/grpc/census.h +4 -4
  6. data/include/grpc/compression.h +6 -5
  7. data/include/grpc/grpc.h +31 -20
  8. data/include/grpc/grpc_security.h +17 -31
  9. data/include/grpc/grpc_security_constants.h +114 -0
  10. data/include/grpc/grpc_zookeeper.h +1 -1
  11. data/include/grpc/impl/codegen/alloc.h +1 -1
  12. data/include/grpc/impl/codegen/atm.h +1 -1
  13. data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
  14. data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
  15. data/include/grpc/impl/codegen/atm_win32.h +1 -1
  16. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  17. data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
  18. data/include/grpc/impl/codegen/grpc_types.h +20 -3
  19. data/include/grpc/impl/codegen/log.h +9 -2
  20. data/include/grpc/impl/codegen/port_platform.h +102 -17
  21. data/include/grpc/impl/codegen/propagation_bits.h +3 -3
  22. data/include/grpc/impl/codegen/slice.h +3 -3
  23. data/include/grpc/impl/codegen/slice_buffer.h +3 -3
  24. data/include/grpc/impl/codegen/status.h +1 -1
  25. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  26. data/include/grpc/impl/codegen/sync_posix.h +1 -1
  27. data/include/grpc/impl/codegen/sync_win32.h +1 -1
  28. data/include/grpc/impl/codegen/time.h +3 -3
  29. data/include/grpc/status.h +1 -1
  30. data/include/grpc/support/alloc.h +1 -1
  31. data/include/grpc/support/atm.h +1 -1
  32. data/include/grpc/support/atm_gcc_atomic.h +4 -4
  33. data/include/grpc/support/atm_gcc_sync.h +1 -1
  34. data/include/grpc/support/atm_win32.h +1 -1
  35. data/include/grpc/support/avl.h +1 -1
  36. data/include/grpc/support/cmdline.h +1 -1
  37. data/include/grpc/support/cpu.h +1 -1
  38. data/include/grpc/support/histogram.h +1 -1
  39. data/include/grpc/support/host_port.h +1 -1
  40. data/include/grpc/support/log.h +1 -1
  41. data/include/grpc/support/log_win32.h +1 -1
  42. data/include/grpc/support/port_platform.h +1 -1
  43. data/include/grpc/support/slice.h +1 -1
  44. data/include/grpc/support/slice_buffer.h +1 -1
  45. data/include/grpc/support/string_util.h +3 -1
  46. data/include/grpc/support/subprocess.h +2 -2
  47. data/include/grpc/support/sync.h +1 -1
  48. data/include/grpc/support/sync_generic.h +1 -1
  49. data/include/grpc/support/sync_posix.h +1 -1
  50. data/include/grpc/support/sync_win32.h +1 -1
  51. data/include/grpc/support/thd.h +1 -1
  52. data/include/grpc/support/time.h +1 -1
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +45 -1
  55. data/include/grpc/support/tls_msvc.h +3 -3
  56. data/include/grpc/support/tls_pthread.h +1 -1
  57. data/include/grpc/support/useful.h +1 -1
  58. data/src/boringssl/err_data.c +258 -252
  59. data/src/core/{census → ext/census}/aggregation.h +3 -3
  60. data/src/core/{statistics → ext/census}/census_interface.h +3 -3
  61. data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
  62. data/src/core/{census → ext/census}/context.c +2 -2
  63. data/src/core/{census → ext/census}/grpc_context.c +2 -2
  64. data/src/core/{census → ext/census}/grpc_filter.c +30 -16
  65. data/src/core/{census → ext/census}/grpc_filter.h +4 -4
  66. data/src/core/ext/census/grpc_plugin.c +82 -0
  67. data/src/core/{census → ext/census}/initialize.c +1 -1
  68. data/src/core/{census → ext/census}/mlog.c +2 -2
  69. data/src/core/{census → ext/census}/mlog.h +4 -4
  70. data/src/core/{census → ext/census}/operation.c +0 -0
  71. data/src/core/{census → ext/census}/placeholders.c +0 -0
  72. data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
  73. data/src/core/{census → ext/census}/tracing.c +0 -0
  74. data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
  75. data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
  76. data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
  77. data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
  78. data/src/core/ext/client_config/client_channel_factory.h +85 -0
  79. data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
  80. data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
  81. data/src/core/ext/client_config/client_config_plugin.c +95 -0
  82. data/src/core/{client_config → ext/client_config}/connector.c +2 -2
  83. data/src/core/{client_config → ext/client_config}/connector.h +7 -10
  84. data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
  85. data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
  86. data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
  87. data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
  88. data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
  89. data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
  90. data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
  91. data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
  92. data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
  93. data/src/core/ext/client_config/parse_address.c +137 -0
  94. data/src/core/ext/client_config/parse_address.h +56 -0
  95. data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
  96. data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
  97. data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
  98. data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
  99. data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
  100. data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
  101. data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
  102. data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
  103. data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
  104. data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
  105. data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
  106. data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
  107. data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
  108. data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
  109. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
  110. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
  111. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
  112. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
  113. data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
  114. data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
  115. data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
  116. data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
  117. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
  118. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
  119. data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
  120. data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
  121. data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
  122. data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
  123. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
  124. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
  125. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
  126. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
  127. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
  128. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
  129. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
  130. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
  131. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
  132. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
  133. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
  134. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
  135. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
  136. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
  137. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
  138. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
  139. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
  140. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
  141. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
  142. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
  143. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
  144. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
  145. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
  146. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
  147. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
  148. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  149. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
  150. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
  151. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
  152. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
  153. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
  154. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
  155. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
  156. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
  157. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
  158. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
  159. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
  160. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
  161. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
  162. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
  163. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
  164. data/src/core/{channel → lib/channel}/channel_args.c +3 -15
  165. data/src/core/{channel → lib/channel}/channel_args.h +11 -15
  166. data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
  167. data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
  168. data/src/core/lib/channel/channel_stack_builder.c +277 -0
  169. data/src/core/lib/channel/channel_stack_builder.h +161 -0
  170. data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
  171. data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
  172. data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
  173. data/src/core/lib/channel/connected_channel.h +42 -0
  174. data/src/core/{channel → lib/channel}/context.h +3 -3
  175. data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
  176. data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
  177. data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
  178. data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
  179. data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
  180. data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
  181. data/src/core/{compression → lib/compression}/message_compress.c +1 -1
  182. data/src/core/{compression → lib/compression}/message_compress.h +3 -3
  183. data/src/core/{debug → lib/debug}/trace.c +2 -2
  184. data/src/core/{debug → lib/debug}/trace.h +3 -3
  185. data/src/core/{httpcli → lib/http}/format_request.c +8 -8
  186. data/src/core/{httpcli → lib/http}/format_request.h +4 -4
  187. data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
  188. data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
  189. data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
  190. data/src/core/lib/http/parser.c +341 -0
  191. data/src/core/lib/http/parser.h +119 -0
  192. data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
  193. data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
  194. data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
  195. data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
  196. data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
  197. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
  198. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
  199. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
  200. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
  201. data/src/core/lib/iomgr/ev_posix.c +164 -0
  202. data/src/core/lib/iomgr/ev_posix.h +158 -0
  203. data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
  204. data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
  205. data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
  206. data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
  207. data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
  208. data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
  209. data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
  210. data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
  211. data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
  212. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
  213. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
  214. data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
  215. data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
  216. data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
  217. data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
  218. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  219. data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
  220. data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
  221. data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
  222. data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
  223. data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
  224. data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
  225. data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
  226. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
  227. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
  228. data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
  229. data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
  230. data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
  231. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
  232. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
  233. data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
  234. data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
  235. data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
  236. data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
  237. data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
  238. data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
  239. data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
  240. data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
  241. data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
  242. data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
  243. data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
  244. data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
  245. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
  246. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
  247. data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
  248. data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
  249. data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
  250. data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
  251. data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
  252. data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
  254. data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
  256. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
  257. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
  258. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
  259. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
  260. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
  261. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
  262. data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
  263. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
  264. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
  265. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
  266. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
  267. data/src/core/{json → lib/json}/json.c +1 -1
  268. data/src/core/{json → lib/json}/json.h +4 -4
  269. data/src/core/{json → lib/json}/json_common.h +3 -3
  270. data/src/core/{json → lib/json}/json_reader.c +16 -4
  271. data/src/core/{json → lib/json}/json_reader.h +4 -4
  272. data/src/core/{json → lib/json}/json_string.c +4 -4
  273. data/src/core/{json → lib/json}/json_writer.c +1 -1
  274. data/src/core/{json → lib/json}/json_writer.h +4 -4
  275. data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
  276. data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
  277. data/src/core/{profiling → lib/profiling}/timers.h +3 -3
  278. data/src/core/{security → lib/security}/auth_filters.h +4 -4
  279. data/src/core/{security → lib/security}/b64.c +2 -2
  280. data/src/core/{security → lib/security}/b64.h +4 -4
  281. data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
  282. data/src/core/{security → lib/security}/credentials.c +42 -26
  283. data/src/core/{security → lib/security}/credentials.h +11 -10
  284. data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
  285. data/src/core/{security → lib/security}/credentials_posix.c +3 -3
  286. data/src/core/{security → lib/security}/credentials_win32.c +3 -3
  287. data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
  288. data/src/core/{security → lib/security}/handshake.c +4 -4
  289. data/src/core/{security → lib/security}/handshake.h +6 -6
  290. data/src/core/{security → lib/security}/json_token.c +4 -4
  291. data/src/core/{security → lib/security}/json_token.h +4 -4
  292. data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
  293. data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
  294. data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
  295. data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
  296. data/src/core/{security → lib/security}/security_connector.c +53 -21
  297. data/src/core/{security → lib/security}/security_connector.h +8 -8
  298. data/src/core/{security → lib/security}/security_context.c +5 -5
  299. data/src/core/{security → lib/security}/security_context.h +5 -5
  300. data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
  301. data/src/core/{support → lib/support}/alloc.c +5 -3
  302. data/src/core/{support → lib/support}/avl.c +1 -1
  303. data/src/core/lib/support/backoff.c +76 -0
  304. data/src/core/lib/support/backoff.h +68 -0
  305. data/src/core/{support → lib/support}/block_annotate.h +3 -3
  306. data/src/core/{support → lib/support}/cmdline.c +1 -1
  307. data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
  308. data/src/core/{support → lib/support}/cpu_linux.c +2 -2
  309. data/src/core/{support → lib/support}/cpu_posix.c +2 -2
  310. data/src/core/{support → lib/support}/cpu_windows.c +0 -0
  311. data/src/core/{support → lib/support}/env.h +3 -3
  312. data/src/core/{support → lib/support}/env_linux.c +3 -3
  313. data/src/core/{support → lib/support}/env_posix.c +2 -2
  314. data/src/core/{support → lib/support}/env_win32.c +27 -21
  315. data/src/core/{support → lib/support}/histogram.c +1 -1
  316. data/src/core/{support → lib/support}/host_port.c +1 -1
  317. data/src/core/{support → lib/support}/load_file.c +4 -4
  318. data/src/core/{support → lib/support}/load_file.h +4 -4
  319. data/src/core/{support → lib/support}/log.c +33 -0
  320. data/src/core/{support → lib/support}/log_android.c +2 -2
  321. data/src/core/{support → lib/support}/log_linux.c +6 -5
  322. data/src/core/{support → lib/support}/log_posix.c +3 -3
  323. data/src/core/{support → lib/support}/log_win32.c +8 -22
  324. data/src/core/{support → lib/support}/murmur_hash.c +1 -1
  325. data/src/core/{support → lib/support}/murmur_hash.h +3 -3
  326. data/src/core/{support → lib/support}/slice.c +0 -0
  327. data/src/core/{support → lib/support}/slice_buffer.c +0 -0
  328. data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
  329. data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
  330. data/src/core/{support → lib/support}/string.c +1 -1
  331. data/src/core/{support → lib/support}/string.h +4 -4
  332. data/src/core/{support → lib/support}/string_posix.c +1 -1
  333. data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
  334. data/src/core/lib/support/string_win32.c +83 -0
  335. data/src/core/{support → lib/support}/string_win32.h +3 -3
  336. data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
  337. data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
  338. data/src/core/{support → lib/support}/sync.c +2 -2
  339. data/src/core/{support → lib/support}/sync_posix.c +3 -3
  340. data/src/core/{support → lib/support}/sync_win32.c +1 -1
  341. data/src/core/{support → lib/support}/thd.c +0 -0
  342. data/src/core/{support → lib/support}/thd_internal.h +3 -3
  343. data/src/core/{support → lib/support}/thd_posix.c +4 -3
  344. data/src/core/{support → lib/support}/thd_win32.c +1 -1
  345. data/src/core/{support → lib/support}/time.c +2 -2
  346. data/src/core/{support → lib/support}/time_posix.c +12 -6
  347. data/src/core/{support → lib/support}/time_precise.c +0 -0
  348. data/src/core/{support → lib/support}/time_precise.h +3 -3
  349. data/src/core/{support → lib/support}/time_win32.c +7 -7
  350. data/src/core/{support → lib/support}/tls_pthread.c +0 -0
  351. data/src/core/{support → lib/support}/tmpfile.h +4 -4
  352. data/src/core/lib/support/tmpfile_msys.c +73 -0
  353. data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
  354. data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
  355. data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
  356. data/src/core/{surface → lib/surface}/alarm.c +3 -3
  357. data/src/core/{surface → lib/surface}/api_trace.c +1 -1
  358. data/src/core/{surface → lib/surface}/api_trace.h +4 -4
  359. data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
  360. data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
  361. data/src/core/{surface → lib/surface}/call.c +145 -73
  362. data/src/core/{surface → lib/surface}/call.h +14 -7
  363. data/src/core/{surface → lib/surface}/call_details.c +1 -1
  364. data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
  365. data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
  366. data/src/core/{surface → lib/surface}/channel.c +33 -34
  367. data/src/core/{surface → lib/surface}/channel.h +9 -9
  368. data/src/core/lib/surface/channel_init.c +140 -0
  369. data/src/core/lib/surface/channel_init.h +87 -0
  370. data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
  371. data/src/core/lib/surface/channel_stack_type.c +54 -0
  372. data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
  373. data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
  374. data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
  375. data/src/core/{surface → lib/surface}/event_string.c +2 -2
  376. data/src/core/{surface → lib/surface}/event_string.h +3 -3
  377. data/src/core/lib/surface/init.c +217 -0
  378. data/src/core/{surface → lib/surface}/init.h +4 -3
  379. data/src/core/lib/surface/init_secure.c +89 -0
  380. data/src/core/{surface → lib/surface}/lame_client.c +31 -19
  381. data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
  382. data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
  383. data/src/core/{surface → lib/surface}/server.c +208 -183
  384. data/src/core/{surface → lib/surface}/server.h +6 -11
  385. data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
  386. data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
  387. data/src/core/{surface → lib/surface}/version.c +2 -2
  388. data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
  389. data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
  390. data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
  391. data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
  392. data/src/core/{transport → lib/transport}/metadata.c +71 -19
  393. data/src/core/{transport → lib/transport}/metadata.h +11 -4
  394. data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
  395. data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
  396. data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
  397. data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
  398. data/src/core/{transport → lib/transport}/transport.c +25 -5
  399. data/src/core/{transport → lib/transport}/transport.h +41 -16
  400. data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
  401. data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
  402. data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
  403. data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
  404. data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
  405. data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
  406. data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
  407. data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
  408. data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
  409. data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
  410. data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
  411. data/src/ruby/ext/grpc/extconf.rb +14 -20
  412. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
  413. data/src/ruby/ext/grpc/rb_call.c +37 -4
  414. data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
  415. data/src/ruby/ext/grpc/rb_channel.c +2 -3
  416. data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
  417. data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
  418. data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
  419. data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
  420. data/src/ruby/ext/grpc/rb_grpc.c +4 -2
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
  422. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
  423. data/src/ruby/ext/grpc/rb_server.c +2 -3
  424. data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
  425. data/src/ruby/ext/grpc/rb_signal.c +70 -0
  426. data/src/ruby/ext/grpc/rb_signal.h +39 -0
  427. data/src/ruby/lib/grpc.rb +21 -13
  428. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  429. data/src/ruby/lib/grpc/errors.rb +2 -2
  430. data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
  431. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  432. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
  433. data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
  434. data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
  435. data/src/ruby/lib/grpc/generic/service.rb +5 -15
  436. data/src/ruby/lib/grpc/grpc.rb +3 -3
  437. data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
  438. data/src/ruby/lib/grpc/version.rb +2 -2
  439. data/src/ruby/pb/generate_proto_ruby.sh +9 -2
  440. data/src/ruby/pb/grpc/health/checker.rb +1 -1
  441. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
  442. data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
  443. data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
  444. data/src/ruby/pb/test/client.rb +12 -23
  445. data/src/ruby/pb/test/server.rb +1 -1
  446. data/src/ruby/spec/client_server_spec.rb +1 -1
  447. data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
  448. data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
  449. data/src/ruby/spec/generic/service_spec.rb +0 -69
  450. data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
  451. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  452. data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
  453. data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
  454. data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
  455. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
  456. data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
  457. data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
  458. data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
  459. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
  460. data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
  461. data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
  462. data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
  463. data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
  464. data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
  465. data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
  466. data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
  467. data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
  468. data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
  469. data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
  470. data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
  471. data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
  472. data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
  473. data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
  474. data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
  475. data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
  476. data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
  477. data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
  478. data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
  479. data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
  480. data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
  481. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
  482. data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
  483. data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
  484. data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
  485. data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
  486. data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
  487. data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
  488. data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
  489. data/third_party/boringssl/crypto/bio/buffer.c +3 -3
  490. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
  491. data/third_party/boringssl/crypto/bn/bn.c +1 -1
  492. data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
  493. data/third_party/boringssl/crypto/bn/convert.c +9 -4
  494. data/third_party/boringssl/crypto/bn/div.c +0 -20
  495. data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
  496. data/third_party/boringssl/crypto/bn/generic.c +6 -242
  497. data/third_party/boringssl/crypto/bn/internal.h +9 -70
  498. data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
  499. data/third_party/boringssl/crypto/bn/mul.c +6 -26
  500. data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
  501. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  502. data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
  503. data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
  504. data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
  505. data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
  506. data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
  507. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
  508. data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
  509. data/third_party/boringssl/crypto/conf/conf.c +9 -0
  510. data/third_party/boringssl/crypto/cpu-intel.c +1 -1
  511. data/third_party/boringssl/crypto/crypto.c +2 -0
  512. data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
  513. data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
  514. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
  515. data/third_party/boringssl/crypto/dh/check.c +32 -10
  516. data/third_party/boringssl/crypto/dh/dh.c +1 -1
  517. data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
  518. data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
  519. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
  520. data/third_party/boringssl/crypto/ec/ec.c +45 -31
  521. data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
  522. data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
  523. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
  524. data/third_party/boringssl/crypto/ec/internal.h +1 -19
  525. data/third_party/boringssl/crypto/ec/oct.c +12 -0
  526. data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
  527. data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
  528. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
  529. data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
  530. data/third_party/boringssl/crypto/ec/simple.c +0 -76
  531. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
  532. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
  533. data/third_party/boringssl/crypto/evp/evp.c +4 -3
  534. data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
  535. data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
  536. data/third_party/boringssl/crypto/evp/internal.h +28 -27
  537. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
  538. data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
  539. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
  540. data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
  541. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
  542. data/third_party/boringssl/crypto/internal.h +16 -1
  543. data/third_party/boringssl/crypto/mem.c +2 -2
  544. data/third_party/boringssl/crypto/modes/ctr.c +2 -1
  545. data/third_party/boringssl/crypto/modes/gcm.c +5 -3
  546. data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
  547. data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
  548. data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
  549. data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
  550. data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
  551. data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
  552. data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
  553. data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
  554. data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
  555. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
  556. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
  557. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
  558. data/third_party/boringssl/crypto/rand/rand.c +2 -0
  559. data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
  560. data/third_party/boringssl/crypto/rsa/internal.h +1 -9
  561. data/third_party/boringssl/crypto/rsa/padding.c +73 -77
  562. data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
  563. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
  564. data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
  565. data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
  566. data/third_party/boringssl/crypto/thread_win.c +15 -13
  567. data/third_party/boringssl/crypto/time_support.c +0 -6
  568. data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
  569. data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
  570. data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
  571. data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
  572. data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
  573. data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
  574. data/third_party/boringssl/crypto/x509/by_file.c +186 -206
  575. data/third_party/boringssl/crypto/x509/charmap.h +11 -11
  576. data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
  577. data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
  578. data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
  579. data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
  580. data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
  581. data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
  582. data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
  583. data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
  584. data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
  585. data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
  586. data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
  587. data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
  588. data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
  589. data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
  590. data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
  591. data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
  592. data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
  593. data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
  594. data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
  595. data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
  596. data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
  597. data/third_party/boringssl/crypto/x509/x509name.c +280 -275
  598. data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
  599. data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
  600. data/third_party/boringssl/crypto/x509/x509type.c +58 -60
  601. data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
  602. data/third_party/boringssl/crypto/x509/x_all.c +282 -328
  603. data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
  604. data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
  605. data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
  606. data/third_party/boringssl/crypto/x509/x_info.c +30 -27
  607. data/third_party/boringssl/crypto/x509/x_name.c +387 -388
  608. data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
  609. data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
  610. data/third_party/boringssl/crypto/x509/x_req.c +30 -33
  611. data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
  612. data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
  613. data/third_party/boringssl/crypto/x509/x_val.c +2 -2
  614. data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
  615. data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
  616. data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
  617. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
  618. data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
  619. data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
  620. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
  621. data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
  622. data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
  623. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
  624. data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
  625. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
  626. data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
  627. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
  628. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
  629. data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
  630. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
  631. data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
  632. data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
  633. data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
  634. data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
  635. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
  636. data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
  637. data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
  638. data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
  639. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
  640. data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
  641. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
  642. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
  643. data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
  644. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
  645. data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
  646. data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
  647. data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
  648. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
  649. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
  650. data/third_party/boringssl/include/openssl/asn1.h +40 -38
  651. data/third_party/boringssl/include/openssl/base.h +10 -1
  652. data/third_party/boringssl/include/openssl/bio.h +10 -11
  653. data/third_party/boringssl/include/openssl/bn.h +12 -9
  654. data/third_party/boringssl/include/openssl/buf.h +1 -1
  655. data/third_party/boringssl/include/openssl/bytestring.h +29 -0
  656. data/third_party/boringssl/include/openssl/conf.h +25 -0
  657. data/third_party/boringssl/include/openssl/crypto.h +6 -1
  658. data/third_party/boringssl/include/openssl/curve25519.h +6 -3
  659. data/third_party/boringssl/include/openssl/dh.h +7 -3
  660. data/third_party/boringssl/include/openssl/dsa.h +108 -51
  661. data/third_party/boringssl/include/openssl/ec.h +46 -21
  662. data/third_party/boringssl/include/openssl/ec_key.h +78 -42
  663. data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
  664. data/third_party/boringssl/include/openssl/err.h +3 -2
  665. data/third_party/boringssl/include/openssl/evp.h +120 -37
  666. data/third_party/boringssl/include/openssl/mem.h +4 -13
  667. data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
  668. data/third_party/boringssl/include/openssl/pem.h +0 -9
  669. data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
  670. data/third_party/boringssl/include/openssl/rand.h +3 -0
  671. data/third_party/boringssl/include/openssl/rsa.h +42 -42
  672. data/third_party/boringssl/include/openssl/ssl.h +115 -41
  673. data/third_party/boringssl/include/openssl/stack.h +0 -3
  674. data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
  675. data/third_party/boringssl/include/openssl/tls1.h +1 -1
  676. data/third_party/boringssl/include/openssl/x509.h +0 -2
  677. data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
  678. data/third_party/boringssl/ssl/d1_both.c +102 -101
  679. data/third_party/boringssl/ssl/d1_clnt.c +145 -150
  680. data/third_party/boringssl/ssl/d1_lib.c +63 -62
  681. data/third_party/boringssl/ssl/d1_pkt.c +73 -71
  682. data/third_party/boringssl/ssl/d1_srvr.c +116 -125
  683. data/third_party/boringssl/ssl/dtls_record.c +3 -3
  684. data/third_party/boringssl/ssl/internal.h +210 -208
  685. data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
  686. data/third_party/boringssl/ssl/s3_both.c +116 -130
  687. data/third_party/boringssl/ssl/s3_clnt.c +589 -740
  688. data/third_party/boringssl/ssl/s3_enc.c +52 -151
  689. data/third_party/boringssl/ssl/s3_lib.c +70 -76
  690. data/third_party/boringssl/ssl/s3_pkt.c +105 -144
  691. data/third_party/boringssl/ssl/s3_srvr.c +542 -806
  692. data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
  693. data/third_party/boringssl/ssl/ssl_cert.c +2 -2
  694. data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
  695. data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
  696. data/third_party/boringssl/ssl/ssl_lib.c +260 -221
  697. data/third_party/boringssl/ssl/ssl_session.c +17 -17
  698. data/third_party/boringssl/ssl/t1_enc.c +128 -273
  699. data/third_party/boringssl/ssl/t1_lib.c +134 -258
  700. data/third_party/boringssl/ssl/test/test_config.h +2 -0
  701. data/third_party/boringssl/ssl/tls_record.c +52 -15
  702. metadata +385 -359
  703. data/src/core/channel/client_uchannel.c +0 -243
  704. data/src/core/channel/client_uchannel.h +0 -60
  705. data/src/core/channel/connected_channel.h +0 -51
  706. data/src/core/client_config/lb_policies/pick_first.h +0 -43
  707. data/src/core/client_config/resolvers/dns_resolver.h +0 -42
  708. data/src/core/client_config/subchannel_factory.h +0 -66
  709. data/src/core/httpcli/parser.c +0 -211
  710. data/src/core/iomgr/fd_posix.c +0 -451
  711. data/src/core/iomgr/fd_posix.h +0 -192
  712. data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
  713. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
  714. data/src/core/iomgr/pollset_posix.c +0 -633
  715. data/src/core/iomgr/pollset_posix.h +0 -153
  716. data/src/core/iomgr/pollset_set_posix.c +0 -202
  717. data/src/core/iomgr/pollset_set_posix.h +0 -45
  718. data/src/core/surface/init.c +0 -174
  719. data/src/core/surface/init_secure.c +0 -42
  720. data/src/core/surface/server_create.c +0 -48
  721. data/src/core/transport/chttp2/huffsyms.c +0 -297
  722. data/src/ruby/bin/grpc_ruby_interop_client +0 -33
  723. data/src/ruby/bin/grpc_ruby_interop_server +0 -33
  724. data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -1,234 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015-2016, Google Inc.
4
- * All rights reserved.
5
- *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
9
- *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
19
- *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- *
32
- */
33
-
34
- #include <grpc/support/port_platform.h>
35
-
36
- #ifdef GPR_POSIX_SOCKET
37
-
38
- #include "src/core/iomgr/pollset_posix.h"
39
-
40
- #include <errno.h>
41
- #include <poll.h>
42
- #include <stdlib.h>
43
- #include <string.h>
44
-
45
- #include <grpc/support/alloc.h>
46
- #include <grpc/support/log.h>
47
- #include <grpc/support/useful.h>
48
-
49
- #include "src/core/iomgr/fd_posix.h"
50
- #include "src/core/iomgr/iomgr_internal.h"
51
- #include "src/core/iomgr/pollset_posix.h"
52
- #include "src/core/support/block_annotate.h"
53
-
54
- typedef struct {
55
- /* all polled fds */
56
- size_t fd_count;
57
- size_t fd_capacity;
58
- grpc_fd **fds;
59
- /* fds that have been removed from the pollset explicitly */
60
- size_t del_count;
61
- size_t del_capacity;
62
- grpc_fd **dels;
63
- } pollset_hdr;
64
-
65
- static void multipoll_with_poll_pollset_add_fd(grpc_exec_ctx *exec_ctx,
66
- grpc_pollset *pollset,
67
- grpc_fd *fd,
68
- int and_unlock_pollset) {
69
- size_t i;
70
- pollset_hdr *h = pollset->data.ptr;
71
- /* TODO(ctiller): this is O(num_fds^2); maybe switch to a hash set here */
72
- for (i = 0; i < h->fd_count; i++) {
73
- if (h->fds[i] == fd) goto exit;
74
- }
75
- if (h->fd_count == h->fd_capacity) {
76
- h->fd_capacity = GPR_MAX(h->fd_capacity + 8, h->fd_count * 3 / 2);
77
- h->fds = gpr_realloc(h->fds, sizeof(grpc_fd *) * h->fd_capacity);
78
- }
79
- h->fds[h->fd_count++] = fd;
80
- GRPC_FD_REF(fd, "multipoller");
81
- exit:
82
- if (and_unlock_pollset) {
83
- gpr_mu_unlock(&pollset->mu);
84
- }
85
- }
86
-
87
- static void multipoll_with_poll_pollset_maybe_work_and_unlock(
88
- grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker *worker,
89
- gpr_timespec deadline, gpr_timespec now) {
90
- #define POLLOUT_CHECK (POLLOUT | POLLHUP | POLLERR)
91
- #define POLLIN_CHECK (POLLIN | POLLHUP | POLLERR)
92
-
93
- int timeout;
94
- int r;
95
- size_t i, j, fd_count;
96
- nfds_t pfd_count;
97
- pollset_hdr *h;
98
- /* TODO(ctiller): inline some elements to avoid an allocation */
99
- grpc_fd_watcher *watchers;
100
- struct pollfd *pfds;
101
-
102
- h = pollset->data.ptr;
103
- timeout = grpc_poll_deadline_to_millis_timeout(deadline, now);
104
- /* TODO(ctiller): perform just one malloc here if we exceed the inline case */
105
- pfds = gpr_malloc(sizeof(*pfds) * (h->fd_count + 2));
106
- watchers = gpr_malloc(sizeof(*watchers) * (h->fd_count + 2));
107
- fd_count = 0;
108
- pfd_count = 2;
109
- pfds[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd);
110
- pfds[0].events = POLLIN;
111
- pfds[0].revents = 0;
112
- pfds[1].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker->wakeup_fd->fd);
113
- pfds[1].events = POLLIN;
114
- pfds[1].revents = 0;
115
- for (i = 0; i < h->fd_count; i++) {
116
- int remove = grpc_fd_is_orphaned(h->fds[i]);
117
- for (j = 0; !remove && j < h->del_count; j++) {
118
- if (h->fds[i] == h->dels[j]) remove = 1;
119
- }
120
- if (remove) {
121
- GRPC_FD_UNREF(h->fds[i], "multipoller");
122
- } else {
123
- h->fds[fd_count++] = h->fds[i];
124
- watchers[pfd_count].fd = h->fds[i];
125
- GRPC_FD_REF(watchers[pfd_count].fd, "multipoller_start");
126
- pfds[pfd_count].fd = h->fds[i]->fd;
127
- pfds[pfd_count].revents = 0;
128
- pfd_count++;
129
- }
130
- }
131
- for (j = 0; j < h->del_count; j++) {
132
- GRPC_FD_UNREF(h->dels[j], "multipoller_del");
133
- }
134
- h->del_count = 0;
135
- h->fd_count = fd_count;
136
- gpr_mu_unlock(&pollset->mu);
137
-
138
- for (i = 2; i < pfd_count; i++) {
139
- grpc_fd *fd = watchers[i].fd;
140
- pfds[i].events = (short)grpc_fd_begin_poll(fd, pollset, worker, POLLIN,
141
- POLLOUT, &watchers[i]);
142
- GRPC_FD_UNREF(fd, "multipoller_start");
143
- }
144
-
145
- /* TODO(vpai): Consider first doing a 0 timeout poll here to avoid
146
- even going into the blocking annotation if possible */
147
- GRPC_SCHEDULING_START_BLOCKING_REGION;
148
- r = grpc_poll_function(pfds, pfd_count, timeout);
149
- GRPC_SCHEDULING_END_BLOCKING_REGION;
150
-
151
- if (r < 0) {
152
- if (errno != EINTR) {
153
- gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno));
154
- }
155
- for (i = 2; i < pfd_count; i++) {
156
- grpc_fd_end_poll(exec_ctx, &watchers[i], 0, 0);
157
- }
158
- } else if (r == 0) {
159
- for (i = 2; i < pfd_count; i++) {
160
- grpc_fd_end_poll(exec_ctx, &watchers[i], 0, 0);
161
- }
162
- } else {
163
- if (pfds[0].revents & POLLIN_CHECK) {
164
- grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd);
165
- }
166
- if (pfds[1].revents & POLLIN_CHECK) {
167
- grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd);
168
- }
169
- for (i = 2; i < pfd_count; i++) {
170
- if (watchers[i].fd == NULL) {
171
- grpc_fd_end_poll(exec_ctx, &watchers[i], 0, 0);
172
- continue;
173
- }
174
- grpc_fd_end_poll(exec_ctx, &watchers[i], pfds[i].revents & POLLIN_CHECK,
175
- pfds[i].revents & POLLOUT_CHECK);
176
- }
177
- }
178
-
179
- gpr_free(pfds);
180
- gpr_free(watchers);
181
- }
182
-
183
- static void multipoll_with_poll_pollset_finish_shutdown(grpc_pollset *pollset) {
184
- size_t i;
185
- pollset_hdr *h = pollset->data.ptr;
186
- for (i = 0; i < h->fd_count; i++) {
187
- GRPC_FD_UNREF(h->fds[i], "multipoller");
188
- }
189
- for (i = 0; i < h->del_count; i++) {
190
- GRPC_FD_UNREF(h->dels[i], "multipoller_del");
191
- }
192
- h->fd_count = 0;
193
- h->del_count = 0;
194
- }
195
-
196
- static void multipoll_with_poll_pollset_destroy(grpc_pollset *pollset) {
197
- pollset_hdr *h = pollset->data.ptr;
198
- multipoll_with_poll_pollset_finish_shutdown(pollset);
199
- gpr_free(h->fds);
200
- gpr_free(h->dels);
201
- gpr_free(h);
202
- }
203
-
204
- static const grpc_pollset_vtable multipoll_with_poll_pollset = {
205
- multipoll_with_poll_pollset_add_fd,
206
- multipoll_with_poll_pollset_maybe_work_and_unlock,
207
- multipoll_with_poll_pollset_finish_shutdown,
208
- multipoll_with_poll_pollset_destroy};
209
-
210
- void grpc_poll_become_multipoller(grpc_exec_ctx *exec_ctx,
211
- grpc_pollset *pollset, grpc_fd **fds,
212
- size_t nfds) {
213
- size_t i;
214
- pollset_hdr *h = gpr_malloc(sizeof(pollset_hdr));
215
- pollset->vtable = &multipoll_with_poll_pollset;
216
- pollset->data.ptr = h;
217
- h->fd_count = nfds;
218
- h->fd_capacity = nfds;
219
- h->fds = gpr_malloc(nfds * sizeof(grpc_fd *));
220
- h->del_count = 0;
221
- h->del_capacity = 0;
222
- h->dels = NULL;
223
- for (i = 0; i < nfds; i++) {
224
- h->fds[i] = fds[i];
225
- GRPC_FD_REF(fds[i], "multipoller");
226
- }
227
- }
228
-
229
- #endif /* GPR_POSIX_SOCKET */
230
-
231
- #ifdef GPR_POSIX_MULTIPOLL_WITH_POLL
232
- grpc_platform_become_multipoller_type grpc_platform_become_multipoller =
233
- grpc_poll_become_multipoller;
234
- #endif
@@ -1,633 +0,0 @@
1
- /*
2
- *
3
- * Copyright 2015-2016, Google Inc.
4
- * All rights reserved.
5
- *
6
- * Redistribution and use in source and binary forms, with or without
7
- * modification, are permitted provided that the following conditions are
8
- * met:
9
- *
10
- * * Redistributions of source code must retain the above copyright
11
- * notice, this list of conditions and the following disclaimer.
12
- * * Redistributions in binary form must reproduce the above
13
- * copyright notice, this list of conditions and the following disclaimer
14
- * in the documentation and/or other materials provided with the
15
- * distribution.
16
- * * Neither the name of Google Inc. nor the names of its
17
- * contributors may be used to endorse or promote products derived from
18
- * this software without specific prior written permission.
19
- *
20
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
- *
32
- */
33
-
34
- #include <grpc/support/port_platform.h>
35
-
36
- #ifdef GPR_POSIX_SOCKET
37
-
38
- #include "src/core/iomgr/pollset_posix.h"
39
-
40
- #include <errno.h>
41
- #include <stdlib.h>
42
- #include <string.h>
43
- #include <unistd.h>
44
-
45
- #include <grpc/support/alloc.h>
46
- #include <grpc/support/log.h>
47
- #include <grpc/support/thd.h>
48
- #include <grpc/support/tls.h>
49
- #include <grpc/support/useful.h>
50
- #include "src/core/iomgr/fd_posix.h"
51
- #include "src/core/iomgr/iomgr_internal.h"
52
- #include "src/core/iomgr/socket_utils_posix.h"
53
- #include "src/core/profiling/timers.h"
54
- #include "src/core/support/block_annotate.h"
55
-
56
- GPR_TLS_DECL(g_current_thread_poller);
57
- GPR_TLS_DECL(g_current_thread_worker);
58
-
59
- /** Default poll() function - a pointer so that it can be overridden by some
60
- * tests */
61
- grpc_poll_function_type grpc_poll_function = poll;
62
-
63
- /** The alarm system needs to be able to wakeup 'some poller' sometimes
64
- * (specifically when a new alarm needs to be triggered earlier than the next
65
- * alarm 'epoch').
66
- * This wakeup_fd gives us something to alert on when such a case occurs. */
67
- grpc_wakeup_fd grpc_global_wakeup_fd;
68
-
69
- static void remove_worker(grpc_pollset *p, grpc_pollset_worker *worker) {
70
- worker->prev->next = worker->next;
71
- worker->next->prev = worker->prev;
72
- }
73
-
74
- int grpc_pollset_has_workers(grpc_pollset *p) {
75
- return p->root_worker.next != &p->root_worker;
76
- }
77
-
78
- static grpc_pollset_worker *pop_front_worker(grpc_pollset *p) {
79
- if (grpc_pollset_has_workers(p)) {
80
- grpc_pollset_worker *w = p->root_worker.next;
81
- remove_worker(p, w);
82
- return w;
83
- } else {
84
- return NULL;
85
- }
86
- }
87
-
88
- static void push_back_worker(grpc_pollset *p, grpc_pollset_worker *worker) {
89
- worker->next = &p->root_worker;
90
- worker->prev = worker->next->prev;
91
- worker->prev->next = worker->next->prev = worker;
92
- }
93
-
94
- static void push_front_worker(grpc_pollset *p, grpc_pollset_worker *worker) {
95
- worker->prev = &p->root_worker;
96
- worker->next = worker->prev->next;
97
- worker->prev->next = worker->next->prev = worker;
98
- }
99
-
100
- size_t grpc_pollset_size(void) { return sizeof(grpc_pollset); }
101
-
102
- void grpc_pollset_kick_ext(grpc_pollset *p,
103
- grpc_pollset_worker *specific_worker,
104
- uint32_t flags) {
105
- GPR_TIMER_BEGIN("grpc_pollset_kick_ext", 0);
106
-
107
- /* pollset->mu already held */
108
- if (specific_worker != NULL) {
109
- if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) {
110
- GPR_TIMER_BEGIN("grpc_pollset_kick_ext.broadcast", 0);
111
- GPR_ASSERT((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) == 0);
112
- for (specific_worker = p->root_worker.next;
113
- specific_worker != &p->root_worker;
114
- specific_worker = specific_worker->next) {
115
- grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd);
116
- }
117
- p->kicked_without_pollers = 1;
118
- GPR_TIMER_END("grpc_pollset_kick_ext.broadcast", 0);
119
- } else if (gpr_tls_get(&g_current_thread_worker) !=
120
- (intptr_t)specific_worker) {
121
- GPR_TIMER_MARK("different_thread_worker", 0);
122
- if ((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) != 0) {
123
- specific_worker->reevaluate_polling_on_wakeup = 1;
124
- }
125
- specific_worker->kicked_specifically = 1;
126
- grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd);
127
- } else if ((flags & GRPC_POLLSET_CAN_KICK_SELF) != 0) {
128
- GPR_TIMER_MARK("kick_yoself", 0);
129
- if ((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) != 0) {
130
- specific_worker->reevaluate_polling_on_wakeup = 1;
131
- }
132
- specific_worker->kicked_specifically = 1;
133
- grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd);
134
- }
135
- } else if (gpr_tls_get(&g_current_thread_poller) != (intptr_t)p) {
136
- GPR_ASSERT((flags & GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) == 0);
137
- GPR_TIMER_MARK("kick_anonymous", 0);
138
- specific_worker = pop_front_worker(p);
139
- if (specific_worker != NULL) {
140
- if (gpr_tls_get(&g_current_thread_worker) == (intptr_t)specific_worker) {
141
- GPR_TIMER_MARK("kick_anonymous_not_self", 0);
142
- push_back_worker(p, specific_worker);
143
- specific_worker = pop_front_worker(p);
144
- if ((flags & GRPC_POLLSET_CAN_KICK_SELF) == 0 &&
145
- gpr_tls_get(&g_current_thread_worker) ==
146
- (intptr_t)specific_worker) {
147
- push_back_worker(p, specific_worker);
148
- specific_worker = NULL;
149
- }
150
- }
151
- if (specific_worker != NULL) {
152
- GPR_TIMER_MARK("finally_kick", 0);
153
- push_back_worker(p, specific_worker);
154
- grpc_wakeup_fd_wakeup(&specific_worker->wakeup_fd->fd);
155
- }
156
- } else {
157
- GPR_TIMER_MARK("kicked_no_pollers", 0);
158
- p->kicked_without_pollers = 1;
159
- }
160
- }
161
-
162
- GPR_TIMER_END("grpc_pollset_kick_ext", 0);
163
- }
164
-
165
- void grpc_pollset_kick(grpc_pollset *p, grpc_pollset_worker *specific_worker) {
166
- grpc_pollset_kick_ext(p, specific_worker, 0);
167
- }
168
-
169
- /* global state management */
170
-
171
- void grpc_pollset_global_init(void) {
172
- gpr_tls_init(&g_current_thread_poller);
173
- gpr_tls_init(&g_current_thread_worker);
174
- grpc_wakeup_fd_global_init();
175
- grpc_wakeup_fd_init(&grpc_global_wakeup_fd);
176
- }
177
-
178
- void grpc_pollset_global_shutdown(void) {
179
- grpc_wakeup_fd_destroy(&grpc_global_wakeup_fd);
180
- gpr_tls_destroy(&g_current_thread_poller);
181
- gpr_tls_destroy(&g_current_thread_worker);
182
- grpc_wakeup_fd_global_destroy();
183
- }
184
-
185
- void grpc_kick_poller(void) { grpc_wakeup_fd_wakeup(&grpc_global_wakeup_fd); }
186
-
187
- /* main interface */
188
-
189
- static void become_basic_pollset(grpc_pollset *pollset, grpc_fd *fd_or_null);
190
-
191
- void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu) {
192
- gpr_mu_init(&pollset->mu);
193
- *mu = &pollset->mu;
194
- pollset->root_worker.next = pollset->root_worker.prev = &pollset->root_worker;
195
- pollset->in_flight_cbs = 0;
196
- pollset->shutting_down = 0;
197
- pollset->called_shutdown = 0;
198
- pollset->kicked_without_pollers = 0;
199
- pollset->idle_jobs.head = pollset->idle_jobs.tail = NULL;
200
- pollset->local_wakeup_cache = NULL;
201
- pollset->kicked_without_pollers = 0;
202
- become_basic_pollset(pollset, NULL);
203
- }
204
-
205
- void grpc_pollset_destroy(grpc_pollset *pollset) {
206
- GPR_ASSERT(pollset->in_flight_cbs == 0);
207
- GPR_ASSERT(!grpc_pollset_has_workers(pollset));
208
- GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail);
209
- pollset->vtable->destroy(pollset);
210
- while (pollset->local_wakeup_cache) {
211
- grpc_cached_wakeup_fd *next = pollset->local_wakeup_cache->next;
212
- grpc_wakeup_fd_destroy(&pollset->local_wakeup_cache->fd);
213
- gpr_free(pollset->local_wakeup_cache);
214
- pollset->local_wakeup_cache = next;
215
- }
216
- }
217
-
218
- void grpc_pollset_reset(grpc_pollset *pollset) {
219
- GPR_ASSERT(pollset->shutting_down);
220
- GPR_ASSERT(pollset->in_flight_cbs == 0);
221
- GPR_ASSERT(!grpc_pollset_has_workers(pollset));
222
- GPR_ASSERT(pollset->idle_jobs.head == pollset->idle_jobs.tail);
223
- pollset->vtable->destroy(pollset);
224
- pollset->shutting_down = 0;
225
- pollset->called_shutdown = 0;
226
- pollset->kicked_without_pollers = 0;
227
- become_basic_pollset(pollset, NULL);
228
- }
229
-
230
- void grpc_pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
231
- grpc_fd *fd) {
232
- gpr_mu_lock(&pollset->mu);
233
- pollset->vtable->add_fd(exec_ctx, pollset, fd, 1);
234
- /* the following (enabled only in debug) will reacquire and then release
235
- our lock - meaning that if the unlocking flag passed to add_fd above is
236
- not respected, the code will deadlock (in a way that we have a chance of
237
- debugging) */
238
- #ifndef NDEBUG
239
- gpr_mu_lock(&pollset->mu);
240
- gpr_mu_unlock(&pollset->mu);
241
- #endif
242
- }
243
-
244
- static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset) {
245
- GPR_ASSERT(grpc_closure_list_empty(pollset->idle_jobs));
246
- pollset->vtable->finish_shutdown(pollset);
247
- grpc_exec_ctx_enqueue(exec_ctx, pollset->shutdown_done, true, NULL);
248
- }
249
-
250
- void grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
251
- grpc_pollset_worker **worker_hdl, gpr_timespec now,
252
- gpr_timespec deadline) {
253
- grpc_pollset_worker worker;
254
- *worker_hdl = &worker;
255
-
256
- /* pollset->mu already held */
257
- int added_worker = 0;
258
- int locked = 1;
259
- int queued_work = 0;
260
- int keep_polling = 0;
261
- GPR_TIMER_BEGIN("grpc_pollset_work", 0);
262
- /* this must happen before we (potentially) drop pollset->mu */
263
- worker.next = worker.prev = NULL;
264
- worker.reevaluate_polling_on_wakeup = 0;
265
- if (pollset->local_wakeup_cache != NULL) {
266
- worker.wakeup_fd = pollset->local_wakeup_cache;
267
- pollset->local_wakeup_cache = worker.wakeup_fd->next;
268
- } else {
269
- worker.wakeup_fd = gpr_malloc(sizeof(*worker.wakeup_fd));
270
- grpc_wakeup_fd_init(&worker.wakeup_fd->fd);
271
- }
272
- worker.kicked_specifically = 0;
273
- /* If there's work waiting for the pollset to be idle, and the
274
- pollset is idle, then do that work */
275
- if (!grpc_pollset_has_workers(pollset) &&
276
- !grpc_closure_list_empty(pollset->idle_jobs)) {
277
- GPR_TIMER_MARK("grpc_pollset_work.idle_jobs", 0);
278
- grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL);
279
- goto done;
280
- }
281
- /* If we're shutting down then we don't execute any extended work */
282
- if (pollset->shutting_down) {
283
- GPR_TIMER_MARK("grpc_pollset_work.shutting_down", 0);
284
- goto done;
285
- }
286
- /* Give do_promote priority so we don't starve it out */
287
- if (pollset->in_flight_cbs) {
288
- GPR_TIMER_MARK("grpc_pollset_work.in_flight_cbs", 0);
289
- gpr_mu_unlock(&pollset->mu);
290
- locked = 0;
291
- goto done;
292
- }
293
- /* Start polling, and keep doing so while we're being asked to
294
- re-evaluate our pollers (this allows poll() based pollers to
295
- ensure they don't miss wakeups) */
296
- keep_polling = 1;
297
- while (keep_polling) {
298
- keep_polling = 0;
299
- if (!pollset->kicked_without_pollers) {
300
- if (!added_worker) {
301
- push_front_worker(pollset, &worker);
302
- added_worker = 1;
303
- gpr_tls_set(&g_current_thread_worker, (intptr_t)&worker);
304
- }
305
- gpr_tls_set(&g_current_thread_poller, (intptr_t)pollset);
306
- GPR_TIMER_BEGIN("maybe_work_and_unlock", 0);
307
- pollset->vtable->maybe_work_and_unlock(exec_ctx, pollset, &worker,
308
- deadline, now);
309
- GPR_TIMER_END("maybe_work_and_unlock", 0);
310
- locked = 0;
311
- gpr_tls_set(&g_current_thread_poller, 0);
312
- } else {
313
- GPR_TIMER_MARK("grpc_pollset_work.kicked_without_pollers", 0);
314
- pollset->kicked_without_pollers = 0;
315
- }
316
- /* Finished execution - start cleaning up.
317
- Note that we may arrive here from outside the enclosing while() loop.
318
- In that case we won't loop though as we haven't added worker to the
319
- worker list, which means nobody could ask us to re-evaluate polling). */
320
- done:
321
- if (!locked) {
322
- queued_work |= grpc_exec_ctx_flush(exec_ctx);
323
- gpr_mu_lock(&pollset->mu);
324
- locked = 1;
325
- }
326
- /* If we're forced to re-evaluate polling (via grpc_pollset_kick with
327
- GRPC_POLLSET_REEVALUATE_POLLING_ON_WAKEUP) then we land here and force
328
- a loop */
329
- if (worker.reevaluate_polling_on_wakeup) {
330
- worker.reevaluate_polling_on_wakeup = 0;
331
- pollset->kicked_without_pollers = 0;
332
- if (queued_work || worker.kicked_specifically) {
333
- /* If there's queued work on the list, then set the deadline to be
334
- immediate so we get back out of the polling loop quickly */
335
- deadline = gpr_inf_past(GPR_CLOCK_MONOTONIC);
336
- }
337
- keep_polling = 1;
338
- }
339
- }
340
- if (added_worker) {
341
- remove_worker(pollset, &worker);
342
- gpr_tls_set(&g_current_thread_worker, 0);
343
- }
344
- /* release wakeup fd to the local pool */
345
- worker.wakeup_fd->next = pollset->local_wakeup_cache;
346
- pollset->local_wakeup_cache = worker.wakeup_fd;
347
- /* check shutdown conditions */
348
- if (pollset->shutting_down) {
349
- if (grpc_pollset_has_workers(pollset)) {
350
- grpc_pollset_kick(pollset, NULL);
351
- } else if (!pollset->called_shutdown && pollset->in_flight_cbs == 0) {
352
- pollset->called_shutdown = 1;
353
- gpr_mu_unlock(&pollset->mu);
354
- finish_shutdown(exec_ctx, pollset);
355
- grpc_exec_ctx_flush(exec_ctx);
356
- /* Continuing to access pollset here is safe -- it is the caller's
357
- * responsibility to not destroy when it has outstanding calls to
358
- * grpc_pollset_work.
359
- * TODO(dklempner): Can we refactor the shutdown logic to avoid this? */
360
- gpr_mu_lock(&pollset->mu);
361
- } else if (!grpc_closure_list_empty(pollset->idle_jobs)) {
362
- grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL);
363
- gpr_mu_unlock(&pollset->mu);
364
- grpc_exec_ctx_flush(exec_ctx);
365
- gpr_mu_lock(&pollset->mu);
366
- }
367
- }
368
- *worker_hdl = NULL;
369
- GPR_TIMER_END("grpc_pollset_work", 0);
370
- }
371
-
372
- void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
373
- grpc_closure *closure) {
374
- GPR_ASSERT(!pollset->shutting_down);
375
- pollset->shutting_down = 1;
376
- pollset->shutdown_done = closure;
377
- grpc_pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
378
- if (!grpc_pollset_has_workers(pollset)) {
379
- grpc_exec_ctx_enqueue_list(exec_ctx, &pollset->idle_jobs, NULL);
380
- }
381
- if (!pollset->called_shutdown && pollset->in_flight_cbs == 0 &&
382
- !grpc_pollset_has_workers(pollset)) {
383
- pollset->called_shutdown = 1;
384
- finish_shutdown(exec_ctx, pollset);
385
- }
386
- }
387
-
388
- int grpc_poll_deadline_to_millis_timeout(gpr_timespec deadline,
389
- gpr_timespec now) {
390
- gpr_timespec timeout;
391
- static const int64_t max_spin_polling_us = 10;
392
- if (gpr_time_cmp(deadline, gpr_inf_future(deadline.clock_type)) == 0) {
393
- return -1;
394
- }
395
- if (gpr_time_cmp(deadline, gpr_time_add(now, gpr_time_from_micros(
396
- max_spin_polling_us,
397
- GPR_TIMESPAN))) <= 0) {
398
- return 0;
399
- }
400
- timeout = gpr_time_sub(deadline, now);
401
- return gpr_time_to_millis(gpr_time_add(
402
- timeout, gpr_time_from_nanos(GPR_NS_PER_MS - 1, GPR_TIMESPAN)));
403
- }
404
-
405
- /*
406
- * basic_pollset - a vtable that provides polling for zero or one file
407
- * descriptor via poll()
408
- */
409
-
410
- typedef struct grpc_unary_promote_args {
411
- const grpc_pollset_vtable *original_vtable;
412
- grpc_pollset *pollset;
413
- grpc_fd *fd;
414
- grpc_closure promotion_closure;
415
- } grpc_unary_promote_args;
416
-
417
- static void basic_do_promote(grpc_exec_ctx *exec_ctx, void *args,
418
- bool success) {
419
- grpc_unary_promote_args *up_args = args;
420
- const grpc_pollset_vtable *original_vtable = up_args->original_vtable;
421
- grpc_pollset *pollset = up_args->pollset;
422
- grpc_fd *fd = up_args->fd;
423
-
424
- /*
425
- * This is quite tricky. There are a number of cases to keep in mind here:
426
- * 1. fd may have been orphaned
427
- * 2. The pollset may no longer be a unary poller (and we can't let case #1
428
- * leak to other pollset types!)
429
- * 3. pollset's fd (which may have changed) may have been orphaned
430
- * 4. The pollset may be shutting down.
431
- */
432
-
433
- gpr_mu_lock(&pollset->mu);
434
- /* First we need to ensure that nobody is polling concurrently */
435
- GPR_ASSERT(!grpc_pollset_has_workers(pollset));
436
-
437
- gpr_free(up_args);
438
- /* At this point the pollset may no longer be a unary poller. In that case
439
- * we should just call the right add function and be done. */
440
- /* TODO(klempner): If we're not careful this could cause infinite recursion.
441
- * That's not a problem for now because empty_pollset has a trivial poller
442
- * and we don't have any mechanism to unbecome multipoller. */
443
- pollset->in_flight_cbs--;
444
- if (pollset->shutting_down) {
445
- /* We don't care about this pollset anymore. */
446
- if (pollset->in_flight_cbs == 0 && !pollset->called_shutdown) {
447
- pollset->called_shutdown = 1;
448
- finish_shutdown(exec_ctx, pollset);
449
- }
450
- } else if (grpc_fd_is_orphaned(fd)) {
451
- /* Don't try to add it to anything, we'll drop our ref on it below */
452
- } else if (pollset->vtable != original_vtable) {
453
- pollset->vtable->add_fd(exec_ctx, pollset, fd, 0);
454
- } else if (fd != pollset->data.ptr) {
455
- grpc_fd *fds[2];
456
- fds[0] = pollset->data.ptr;
457
- fds[1] = fd;
458
-
459
- if (fds[0] && !grpc_fd_is_orphaned(fds[0])) {
460
- grpc_platform_become_multipoller(exec_ctx, pollset, fds,
461
- GPR_ARRAY_SIZE(fds));
462
- GRPC_FD_UNREF(fds[0], "basicpoll");
463
- } else {
464
- /* old fd is orphaned and we haven't cleaned it up until now, so remain a
465
- * unary poller */
466
- /* Note that it is possible that fds[1] is also orphaned at this point.
467
- * That's okay, we'll correct it at the next add or poll. */
468
- if (fds[0]) GRPC_FD_UNREF(fds[0], "basicpoll");
469
- pollset->data.ptr = fd;
470
- GRPC_FD_REF(fd, "basicpoll");
471
- }
472
- }
473
-
474
- gpr_mu_unlock(&pollset->mu);
475
-
476
- /* Matching ref in basic_pollset_add_fd */
477
- GRPC_FD_UNREF(fd, "basicpoll_add");
478
- }
479
-
480
- static void basic_pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
481
- grpc_fd *fd, int and_unlock_pollset) {
482
- grpc_unary_promote_args *up_args;
483
- GPR_ASSERT(fd);
484
- if (fd == pollset->data.ptr) goto exit;
485
-
486
- if (!grpc_pollset_has_workers(pollset)) {
487
- /* Fast path -- no in flight cbs */
488
- /* TODO(klempner): Comment this out and fix any test failures or establish
489
- * they are due to timing issues */
490
- grpc_fd *fds[2];
491
- fds[0] = pollset->data.ptr;
492
- fds[1] = fd;
493
-
494
- if (fds[0] == NULL) {
495
- pollset->data.ptr = fd;
496
- GRPC_FD_REF(fd, "basicpoll");
497
- } else if (!grpc_fd_is_orphaned(fds[0])) {
498
- grpc_platform_become_multipoller(exec_ctx, pollset, fds,
499
- GPR_ARRAY_SIZE(fds));
500
- GRPC_FD_UNREF(fds[0], "basicpoll");
501
- } else {
502
- /* old fd is orphaned and we haven't cleaned it up until now, so remain a
503
- * unary poller */
504
- GRPC_FD_UNREF(fds[0], "basicpoll");
505
- pollset->data.ptr = fd;
506
- GRPC_FD_REF(fd, "basicpoll");
507
- }
508
- goto exit;
509
- }
510
-
511
- /* Now we need to promote. This needs to happen when we're not polling. Since
512
- * this may be called from poll, the wait needs to happen asynchronously. */
513
- GRPC_FD_REF(fd, "basicpoll_add");
514
- pollset->in_flight_cbs++;
515
- up_args = gpr_malloc(sizeof(*up_args));
516
- up_args->fd = fd;
517
- up_args->original_vtable = pollset->vtable;
518
- up_args->pollset = pollset;
519
- up_args->promotion_closure.cb = basic_do_promote;
520
- up_args->promotion_closure.cb_arg = up_args;
521
-
522
- grpc_closure_list_add(&pollset->idle_jobs, &up_args->promotion_closure, 1);
523
- grpc_pollset_kick(pollset, GRPC_POLLSET_KICK_BROADCAST);
524
-
525
- exit:
526
- if (and_unlock_pollset) {
527
- gpr_mu_unlock(&pollset->mu);
528
- }
529
- }
530
-
531
- static void basic_pollset_maybe_work_and_unlock(grpc_exec_ctx *exec_ctx,
532
- grpc_pollset *pollset,
533
- grpc_pollset_worker *worker,
534
- gpr_timespec deadline,
535
- gpr_timespec now) {
536
- #define POLLOUT_CHECK (POLLOUT | POLLHUP | POLLERR)
537
- #define POLLIN_CHECK (POLLIN | POLLHUP | POLLERR)
538
-
539
- struct pollfd pfd[3];
540
- grpc_fd *fd;
541
- grpc_fd_watcher fd_watcher;
542
- int timeout;
543
- int r;
544
- nfds_t nfds;
545
-
546
- fd = pollset->data.ptr;
547
- if (fd && grpc_fd_is_orphaned(fd)) {
548
- GRPC_FD_UNREF(fd, "basicpoll");
549
- fd = pollset->data.ptr = NULL;
550
- }
551
- timeout = grpc_poll_deadline_to_millis_timeout(deadline, now);
552
- pfd[0].fd = GRPC_WAKEUP_FD_GET_READ_FD(&grpc_global_wakeup_fd);
553
- pfd[0].events = POLLIN;
554
- pfd[0].revents = 0;
555
- pfd[1].fd = GRPC_WAKEUP_FD_GET_READ_FD(&worker->wakeup_fd->fd);
556
- pfd[1].events = POLLIN;
557
- pfd[1].revents = 0;
558
- nfds = 2;
559
- if (fd) {
560
- pfd[2].fd = fd->fd;
561
- pfd[2].revents = 0;
562
- GRPC_FD_REF(fd, "basicpoll_begin");
563
- gpr_mu_unlock(&pollset->mu);
564
- pfd[2].events = (short)grpc_fd_begin_poll(fd, pollset, worker, POLLIN,
565
- POLLOUT, &fd_watcher);
566
- if (pfd[2].events != 0) {
567
- nfds++;
568
- }
569
- } else {
570
- gpr_mu_unlock(&pollset->mu);
571
- }
572
-
573
- /* TODO(vpai): Consider first doing a 0 timeout poll here to avoid
574
- even going into the blocking annotation if possible */
575
- /* poll fd count (argument 2) is shortened by one if we have no events
576
- to poll on - such that it only includes the kicker */
577
- GPR_TIMER_BEGIN("poll", 0);
578
- GRPC_SCHEDULING_START_BLOCKING_REGION;
579
- r = grpc_poll_function(pfd, nfds, timeout);
580
- GRPC_SCHEDULING_END_BLOCKING_REGION;
581
- GPR_TIMER_END("poll", 0);
582
-
583
- if (r < 0) {
584
- if (errno != EINTR) {
585
- gpr_log(GPR_ERROR, "poll() failed: %s", strerror(errno));
586
- }
587
- if (fd) {
588
- grpc_fd_end_poll(exec_ctx, &fd_watcher, 0, 0);
589
- }
590
- } else if (r == 0) {
591
- if (fd) {
592
- grpc_fd_end_poll(exec_ctx, &fd_watcher, 0, 0);
593
- }
594
- } else {
595
- if (pfd[0].revents & POLLIN_CHECK) {
596
- grpc_wakeup_fd_consume_wakeup(&grpc_global_wakeup_fd);
597
- }
598
- if (pfd[1].revents & POLLIN_CHECK) {
599
- grpc_wakeup_fd_consume_wakeup(&worker->wakeup_fd->fd);
600
- }
601
- if (nfds > 2) {
602
- grpc_fd_end_poll(exec_ctx, &fd_watcher, pfd[2].revents & POLLIN_CHECK,
603
- pfd[2].revents & POLLOUT_CHECK);
604
- } else if (fd) {
605
- grpc_fd_end_poll(exec_ctx, &fd_watcher, 0, 0);
606
- }
607
- }
608
-
609
- if (fd) {
610
- GRPC_FD_UNREF(fd, "basicpoll_begin");
611
- }
612
- }
613
-
614
- static void basic_pollset_destroy(grpc_pollset *pollset) {
615
- if (pollset->data.ptr != NULL) {
616
- GRPC_FD_UNREF(pollset->data.ptr, "basicpoll");
617
- pollset->data.ptr = NULL;
618
- }
619
- }
620
-
621
- static const grpc_pollset_vtable basic_pollset = {
622
- basic_pollset_add_fd, basic_pollset_maybe_work_and_unlock,
623
- basic_pollset_destroy, basic_pollset_destroy};
624
-
625
- static void become_basic_pollset(grpc_pollset *pollset, grpc_fd *fd_or_null) {
626
- pollset->vtable = &basic_pollset;
627
- pollset->data.ptr = fd_or_null;
628
- if (fd_or_null != NULL) {
629
- GRPC_FD_REF(fd_or_null, "basicpoll");
630
- }
631
- }
632
-
633
- #endif /* GPR_POSIX_POLLSET */