grpc 1.0.1 → 1.1.2

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 (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -131,7 +131,7 @@ bool grpc_channel_init_create_stack(grpc_exec_ctx *exec_ctx,
131
131
 
132
132
  for (size_t i = 0; i < g_slots[type].num_slots; i++) {
133
133
  const stage_slot *slot = &g_slots[type].slots[i];
134
- if (!slot->fn(builder, slot->arg)) {
134
+ if (!slot->fn(exec_ctx, builder, slot->arg)) {
135
135
  return false;
136
136
  }
137
137
  }
@@ -40,6 +40,10 @@
40
40
 
41
41
  #define GRPC_CHANNEL_INIT_BUILTIN_PRIORITY 10000
42
42
 
43
+ #ifdef __cplusplus
44
+ extern "C" {
45
+ #endif
46
+
43
47
  /// This module provides a way for plugins (and the grpc core library itself)
44
48
  /// to register mutators for channel stacks.
45
49
  /// It also provides a universal entry path to run those mutators to build
@@ -47,7 +51,8 @@
47
51
 
48
52
  /// One stage of mutation: call functions against \a builder to influence the
49
53
  /// finally constructed channel stack
50
- typedef bool (*grpc_channel_init_stage)(grpc_channel_stack_builder *builder,
54
+ typedef bool (*grpc_channel_init_stage)(grpc_exec_ctx *exec_ctx,
55
+ grpc_channel_stack_builder *builder,
51
56
  void *arg);
52
57
 
53
58
  /// Global initialization of the system
@@ -84,4 +89,8 @@ bool grpc_channel_init_create_stack(grpc_exec_ctx *exec_ctx,
84
89
  grpc_channel_stack_builder *builder,
85
90
  grpc_channel_stack_type type);
86
91
 
92
+ #ifdef __cplusplus
93
+ }
94
+ #endif
95
+
87
96
  #endif /* GRPC_CORE_LIB_SURFACE_CHANNEL_INIT_H */
@@ -61,19 +61,20 @@ static void ping_done(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
61
61
 
62
62
  void grpc_channel_ping(grpc_channel *channel, grpc_completion_queue *cq,
63
63
  void *tag, void *reserved) {
64
- grpc_transport_op op;
64
+ GRPC_API_TRACE("grpc_channel_ping(channel=%p, cq=%p, tag=%p, reserved=%p)", 4,
65
+ (channel, cq, tag, reserved));
66
+ grpc_transport_op *op = grpc_make_transport_op(NULL);
65
67
  ping_result *pr = gpr_malloc(sizeof(*pr));
66
68
  grpc_channel_element *top_elem =
67
69
  grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
68
70
  grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
69
71
  GPR_ASSERT(reserved == NULL);
70
- memset(&op, 0, sizeof(op));
71
72
  pr->tag = tag;
72
73
  pr->cq = cq;
73
- grpc_closure_init(&pr->closure, ping_done, pr);
74
- op.send_ping = &pr->closure;
75
- op.bind_pollset = grpc_cq_pollset(cq);
74
+ grpc_closure_init(&pr->closure, ping_done, pr, grpc_schedule_on_exec_ctx);
75
+ op->send_ping = &pr->closure;
76
+ op->bind_pollset = grpc_cq_pollset(cq);
76
77
  grpc_cq_begin_op(cq, tag);
77
- top_elem->filter->start_transport_op(&exec_ctx, top_elem, &op);
78
+ top_elem->filter->start_transport_op(&exec_ctx, top_elem, op);
78
79
  grpc_exec_ctx_finish(&exec_ctx);
79
80
  }
@@ -39,6 +39,7 @@
39
39
  #include <grpc/support/alloc.h>
40
40
  #include <grpc/support/atm.h>
41
41
  #include <grpc/support/log.h>
42
+ #include <grpc/support/string_util.h>
42
43
  #include <grpc/support/time.h>
43
44
 
44
45
  #include "src/core/lib/iomgr/pollset.h"
@@ -50,6 +51,9 @@
50
51
  #include "src/core/lib/surface/event_string.h"
51
52
 
52
53
  int grpc_trace_operation_failures;
54
+ #ifndef NDEBUG
55
+ int grpc_trace_pending_tags;
56
+ #endif
53
57
 
54
58
  typedef struct {
55
59
  grpc_pollset_worker **worker;
@@ -67,6 +71,9 @@ struct grpc_completion_queue {
67
71
  gpr_refcount pending_events;
68
72
  /** Once owning_refs drops to zero, we will destroy the cq */
69
73
  gpr_refcount owning_refs;
74
+ /** counter of how many things have ever been queued on this completion queue
75
+ useful for avoiding locks to check the queue */
76
+ gpr_atm things_queued_ever;
70
77
  /** 0 initially, 1 once we've begun shutting down */
71
78
  int shutdown;
72
79
  int shutdown_called;
@@ -121,15 +128,6 @@ void grpc_cq_global_shutdown(void) {
121
128
  }
122
129
  }
123
130
 
124
- struct grpc_cq_alarm {
125
- grpc_timer alarm;
126
- grpc_cq_completion completion;
127
- /** completion queue where events about this alarm will be posted */
128
- grpc_completion_queue *cq;
129
- /** user supplied tag */
130
- void *tag;
131
- };
132
-
133
131
  grpc_completion_queue *grpc_completion_queue_create(void *reserved) {
134
132
  grpc_completion_queue *cc;
135
133
  GPR_ASSERT(!reserved);
@@ -166,10 +164,12 @@ grpc_completion_queue *grpc_completion_queue_create(void *reserved) {
166
164
  cc->is_server_cq = 0;
167
165
  cc->is_non_listening_server_cq = 0;
168
166
  cc->num_pluckers = 0;
167
+ gpr_atm_no_barrier_store(&cc->things_queued_ever, 0);
169
168
  #ifndef NDEBUG
170
169
  cc->outstanding_tag_count = 0;
171
170
  #endif
172
- grpc_closure_init(&cc->pollset_shutdown_done, on_pollset_shutdown_done, cc);
171
+ grpc_closure_init(&cc->pollset_shutdown_done, on_pollset_shutdown_done, cc,
172
+ grpc_schedule_on_exec_ctx);
173
173
 
174
174
  GPR_TIMER_END("grpc_completion_queue_create", 0);
175
175
 
@@ -276,6 +276,7 @@ void grpc_cq_end_op(grpc_exec_ctx *exec_ctx, grpc_completion_queue *cc,
276
276
  GPR_ASSERT(found);
277
277
  #endif
278
278
  shutdown = gpr_unref(&cc->pending_events);
279
+ gpr_atm_no_barrier_fetch_add(&cc->things_queued_ever, 1);
279
280
  if (!shutdown) {
280
281
  cc->completed_tail->next =
281
282
  ((uintptr_t)storage) | (1u & (uintptr_t)cc->completed_tail->next);
@@ -313,13 +314,68 @@ void grpc_cq_end_op(grpc_exec_ctx *exec_ctx, grpc_completion_queue *cc,
313
314
  GRPC_ERROR_UNREF(error);
314
315
  }
315
316
 
317
+ typedef struct {
318
+ gpr_atm last_seen_things_queued_ever;
319
+ grpc_completion_queue *cq;
320
+ gpr_timespec deadline;
321
+ grpc_cq_completion *stolen_completion;
322
+ void *tag; /* for pluck */
323
+ bool first_loop;
324
+ } cq_is_finished_arg;
325
+
326
+ static bool cq_is_next_finished(grpc_exec_ctx *exec_ctx, void *arg) {
327
+ cq_is_finished_arg *a = arg;
328
+ grpc_completion_queue *cq = a->cq;
329
+ GPR_ASSERT(a->stolen_completion == NULL);
330
+ gpr_atm current_last_seen_things_queued_ever =
331
+ gpr_atm_no_barrier_load(&cq->things_queued_ever);
332
+ if (current_last_seen_things_queued_ever != a->last_seen_things_queued_ever) {
333
+ gpr_mu_lock(cq->mu);
334
+ a->last_seen_things_queued_ever =
335
+ gpr_atm_no_barrier_load(&cq->things_queued_ever);
336
+ if (cq->completed_tail != &cq->completed_head) {
337
+ a->stolen_completion = (grpc_cq_completion *)cq->completed_head.next;
338
+ cq->completed_head.next = a->stolen_completion->next & ~(uintptr_t)1;
339
+ if (a->stolen_completion == cq->completed_tail) {
340
+ cq->completed_tail = &cq->completed_head;
341
+ }
342
+ gpr_mu_unlock(cq->mu);
343
+ return true;
344
+ }
345
+ gpr_mu_unlock(cq->mu);
346
+ }
347
+ return !a->first_loop &&
348
+ gpr_time_cmp(a->deadline, gpr_now(a->deadline.clock_type)) < 0;
349
+ }
350
+
351
+ #ifndef NDEBUG
352
+ static void dump_pending_tags(grpc_completion_queue *cc) {
353
+ if (!grpc_trace_pending_tags) return;
354
+
355
+ gpr_strvec v;
356
+ gpr_strvec_init(&v);
357
+ gpr_strvec_add(&v, gpr_strdup("PENDING TAGS:"));
358
+ gpr_mu_lock(cc->mu);
359
+ for (size_t i = 0; i < cc->outstanding_tag_count; i++) {
360
+ char *s;
361
+ gpr_asprintf(&s, " %p", cc->outstanding_tags[i]);
362
+ gpr_strvec_add(&v, s);
363
+ }
364
+ gpr_mu_unlock(cc->mu);
365
+ char *out = gpr_strvec_flatten(&v, NULL);
366
+ gpr_strvec_destroy(&v);
367
+ gpr_log(GPR_DEBUG, "%s", out);
368
+ gpr_free(out);
369
+ }
370
+ #else
371
+ static void dump_pending_tags(grpc_completion_queue *cc) {}
372
+ #endif
373
+
316
374
  grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
317
375
  gpr_timespec deadline, void *reserved) {
318
376
  grpc_event ret;
319
377
  grpc_pollset_worker *worker = NULL;
320
- int first_loop = 1;
321
378
  gpr_timespec now;
322
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
323
379
 
324
380
  GPR_TIMER_BEGIN("grpc_completion_queue_next", 0);
325
381
 
@@ -333,11 +389,33 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
333
389
  reserved));
334
390
  GPR_ASSERT(!reserved);
335
391
 
392
+ dump_pending_tags(cc);
393
+
336
394
  deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
337
395
 
338
396
  GRPC_CQ_INTERNAL_REF(cc, "next");
339
397
  gpr_mu_lock(cc->mu);
398
+ cq_is_finished_arg is_finished_arg = {
399
+ .last_seen_things_queued_ever =
400
+ gpr_atm_no_barrier_load(&cc->things_queued_ever),
401
+ .cq = cc,
402
+ .deadline = deadline,
403
+ .stolen_completion = NULL,
404
+ .tag = NULL,
405
+ .first_loop = true};
406
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(
407
+ cq_is_next_finished, &is_finished_arg);
340
408
  for (;;) {
409
+ if (is_finished_arg.stolen_completion != NULL) {
410
+ gpr_mu_unlock(cc->mu);
411
+ grpc_cq_completion *c = is_finished_arg.stolen_completion;
412
+ is_finished_arg.stolen_completion = NULL;
413
+ ret.type = GRPC_OP_COMPLETE;
414
+ ret.success = c->next & 1u;
415
+ ret.tag = c->tag;
416
+ c->done(&exec_ctx, c->done_arg, c);
417
+ break;
418
+ }
341
419
  if (cc->completed_tail != &cc->completed_head) {
342
420
  grpc_cq_completion *c = (grpc_cq_completion *)cc->completed_head.next;
343
421
  cc->completed_head.next = c->next & ~(uintptr_t)1;
@@ -358,13 +436,13 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
358
436
  break;
359
437
  }
360
438
  now = gpr_now(GPR_CLOCK_MONOTONIC);
361
- if (!first_loop && gpr_time_cmp(now, deadline) >= 0) {
439
+ if (!is_finished_arg.first_loop && gpr_time_cmp(now, deadline) >= 0) {
362
440
  gpr_mu_unlock(cc->mu);
363
441
  memset(&ret, 0, sizeof(ret));
364
442
  ret.type = GRPC_QUEUE_TIMEOUT;
443
+ dump_pending_tags(cc);
365
444
  break;
366
445
  }
367
- first_loop = 0;
368
446
  /* Check alarms - these are a global resource so we just ping
369
447
  each time through on every pollset.
370
448
  May update deadline to ensure timely wakeups.
@@ -387,13 +465,16 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
387
465
  GRPC_ERROR_UNREF(err);
388
466
  memset(&ret, 0, sizeof(ret));
389
467
  ret.type = GRPC_QUEUE_TIMEOUT;
468
+ dump_pending_tags(cc);
390
469
  break;
391
470
  }
392
471
  }
472
+ is_finished_arg.first_loop = false;
393
473
  }
394
474
  GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret);
395
475
  GRPC_CQ_INTERNAL_UNREF(cc, "next");
396
476
  grpc_exec_ctx_finish(&exec_ctx);
477
+ GPR_ASSERT(is_finished_arg.stolen_completion == NULL);
397
478
 
398
479
  GPR_TIMER_END("grpc_completion_queue_next", 0);
399
480
 
@@ -424,6 +505,37 @@ static void del_plucker(grpc_completion_queue *cc, void *tag,
424
505
  GPR_UNREACHABLE_CODE(return );
425
506
  }
426
507
 
508
+ static bool cq_is_pluck_finished(grpc_exec_ctx *exec_ctx, void *arg) {
509
+ cq_is_finished_arg *a = arg;
510
+ grpc_completion_queue *cq = a->cq;
511
+ GPR_ASSERT(a->stolen_completion == NULL);
512
+ gpr_atm current_last_seen_things_queued_ever =
513
+ gpr_atm_no_barrier_load(&cq->things_queued_ever);
514
+ if (current_last_seen_things_queued_ever != a->last_seen_things_queued_ever) {
515
+ gpr_mu_lock(cq->mu);
516
+ a->last_seen_things_queued_ever =
517
+ gpr_atm_no_barrier_load(&cq->things_queued_ever);
518
+ grpc_cq_completion *c;
519
+ grpc_cq_completion *prev = &cq->completed_head;
520
+ while ((c = (grpc_cq_completion *)(prev->next & ~(uintptr_t)1)) !=
521
+ &cq->completed_head) {
522
+ if (c->tag == a->tag) {
523
+ prev->next = (prev->next & (uintptr_t)1) | (c->next & ~(uintptr_t)1);
524
+ if (c == cq->completed_tail) {
525
+ cq->completed_tail = prev;
526
+ }
527
+ gpr_mu_unlock(cq->mu);
528
+ a->stolen_completion = c;
529
+ return true;
530
+ }
531
+ prev = c;
532
+ }
533
+ gpr_mu_unlock(cq->mu);
534
+ }
535
+ return !a->first_loop &&
536
+ gpr_time_cmp(a->deadline, gpr_now(a->deadline.clock_type)) < 0;
537
+ }
538
+
427
539
  grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
428
540
  gpr_timespec deadline, void *reserved) {
429
541
  grpc_event ret;
@@ -431,8 +543,6 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
431
543
  grpc_cq_completion *prev;
432
544
  grpc_pollset_worker *worker = NULL;
433
545
  gpr_timespec now;
434
- int first_loop = 1;
435
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
436
546
 
437
547
  GPR_TIMER_BEGIN("grpc_completion_queue_pluck", 0);
438
548
 
@@ -448,11 +558,33 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
448
558
  }
449
559
  GPR_ASSERT(!reserved);
450
560
 
561
+ dump_pending_tags(cc);
562
+
451
563
  deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
452
564
 
453
565
  GRPC_CQ_INTERNAL_REF(cc, "pluck");
454
566
  gpr_mu_lock(cc->mu);
567
+ cq_is_finished_arg is_finished_arg = {
568
+ .last_seen_things_queued_ever =
569
+ gpr_atm_no_barrier_load(&cc->things_queued_ever),
570
+ .cq = cc,
571
+ .deadline = deadline,
572
+ .stolen_completion = NULL,
573
+ .tag = tag,
574
+ .first_loop = true};
575
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT_WITH_FINISH_CHECK(
576
+ cq_is_pluck_finished, &is_finished_arg);
455
577
  for (;;) {
578
+ if (is_finished_arg.stolen_completion != NULL) {
579
+ gpr_mu_unlock(cc->mu);
580
+ c = is_finished_arg.stolen_completion;
581
+ is_finished_arg.stolen_completion = NULL;
582
+ ret.type = GRPC_OP_COMPLETE;
583
+ ret.success = c->next & 1u;
584
+ ret.tag = c->tag;
585
+ c->done(&exec_ctx, c->done_arg, c);
586
+ break;
587
+ }
456
588
  prev = &cc->completed_head;
457
589
  while ((c = (grpc_cq_completion *)(prev->next & ~(uintptr_t)1)) !=
458
590
  &cc->completed_head) {
@@ -485,17 +617,18 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
485
617
  memset(&ret, 0, sizeof(ret));
486
618
  /* TODO(ctiller): should we use a different result here */
487
619
  ret.type = GRPC_QUEUE_TIMEOUT;
620
+ dump_pending_tags(cc);
488
621
  break;
489
622
  }
490
623
  now = gpr_now(GPR_CLOCK_MONOTONIC);
491
- if (!first_loop && gpr_time_cmp(now, deadline) >= 0) {
624
+ if (!is_finished_arg.first_loop && gpr_time_cmp(now, deadline) >= 0) {
492
625
  del_plucker(cc, tag, &worker);
493
626
  gpr_mu_unlock(cc->mu);
494
627
  memset(&ret, 0, sizeof(ret));
495
628
  ret.type = GRPC_QUEUE_TIMEOUT;
629
+ dump_pending_tags(cc);
496
630
  break;
497
631
  }
498
- first_loop = 0;
499
632
  /* Check alarms - these are a global resource so we just ping
500
633
  each time through on every pollset.
501
634
  May update deadline to ensure timely wakeups.
@@ -518,15 +651,18 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
518
651
  GRPC_ERROR_UNREF(err);
519
652
  memset(&ret, 0, sizeof(ret));
520
653
  ret.type = GRPC_QUEUE_TIMEOUT;
654
+ dump_pending_tags(cc);
521
655
  break;
522
656
  }
523
657
  }
658
+ is_finished_arg.first_loop = false;
524
659
  del_plucker(cc, tag, &worker);
525
660
  }
526
661
  done:
527
662
  GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret);
528
663
  GRPC_CQ_INTERNAL_UNREF(cc, "pluck");
529
664
  grpc_exec_ctx_finish(&exec_ctx);
665
+ GPR_ASSERT(is_finished_arg.stolen_completion == NULL);
530
666
 
531
667
  GPR_TIMER_END("grpc_completion_queue_pluck", 0);
532
668
 
@@ -44,6 +44,9 @@
44
44
  extern int grpc_cq_pluck_trace;
45
45
  extern int grpc_cq_event_timeout_trace;
46
46
  extern int grpc_trace_operation_failures;
47
+ #ifndef NDEBUG
48
+ extern int grpc_trace_pending_tags;
49
+ #endif
47
50
 
48
51
  typedef struct grpc_cq_completion {
49
52
  /** user supplied tag */
@@ -57,6 +60,8 @@ typedef struct grpc_cq_completion {
57
60
  uintptr_t next;
58
61
  } grpc_cq_completion;
59
62
 
63
+ //#define GRPC_CQ_REF_COUNT_DEBUG
64
+
60
65
  #ifdef GRPC_CQ_REF_COUNT_DEBUG
61
66
  void grpc_cq_internal_ref(grpc_completion_queue *cc, const char *reason,
62
67
  const char *file, int line);
@@ -43,12 +43,17 @@
43
43
  #include "src/core/lib/channel/channel_stack.h"
44
44
  #include "src/core/lib/channel/compress_filter.h"
45
45
  #include "src/core/lib/channel/connected_channel.h"
46
+ #include "src/core/lib/channel/deadline_filter.h"
47
+ #include "src/core/lib/channel/handshaker_registry.h"
46
48
  #include "src/core/lib/channel/http_client_filter.h"
47
49
  #include "src/core/lib/channel/http_server_filter.h"
50
+ #include "src/core/lib/channel/message_size_filter.h"
48
51
  #include "src/core/lib/debug/trace.h"
49
52
  #include "src/core/lib/http/parser.h"
53
+ #include "src/core/lib/iomgr/combiner.h"
50
54
  #include "src/core/lib/iomgr/executor.h"
51
55
  #include "src/core/lib/iomgr/iomgr.h"
56
+ #include "src/core/lib/iomgr/resource_quota.h"
52
57
  #include "src/core/lib/profiling/timers.h"
53
58
  #include "src/core/lib/surface/api_trace.h"
54
59
  #include "src/core/lib/surface/call.h"
@@ -76,17 +81,20 @@ static void do_basic_init(void) {
76
81
  g_initializations = 0;
77
82
  }
78
83
 
79
- static bool append_filter(grpc_channel_stack_builder *builder, void *arg) {
84
+ static bool append_filter(grpc_exec_ctx *exec_ctx,
85
+ grpc_channel_stack_builder *builder, void *arg) {
80
86
  return grpc_channel_stack_builder_append_filter(
81
87
  builder, (const grpc_channel_filter *)arg, NULL, NULL);
82
88
  }
83
89
 
84
- static bool prepend_filter(grpc_channel_stack_builder *builder, void *arg) {
90
+ static bool prepend_filter(grpc_exec_ctx *exec_ctx,
91
+ grpc_channel_stack_builder *builder, void *arg) {
85
92
  return grpc_channel_stack_builder_prepend_filter(
86
93
  builder, (const grpc_channel_filter *)arg, NULL, NULL);
87
94
  }
88
95
 
89
- static bool maybe_add_http_filter(grpc_channel_stack_builder *builder,
96
+ static bool maybe_add_http_filter(grpc_exec_ctx *exec_ctx,
97
+ grpc_channel_stack_builder *builder,
90
98
  void *arg) {
91
99
  grpc_transport *t = grpc_channel_stack_builder_get_transport(builder);
92
100
  if (t && strstr(t->vtable->name, "http")) {
@@ -97,6 +105,21 @@ static bool maybe_add_http_filter(grpc_channel_stack_builder *builder,
97
105
  }
98
106
 
99
107
  static void register_builtin_channel_init() {
108
+ grpc_channel_init_register_stage(
109
+ GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
110
+ prepend_filter, (void *)&grpc_client_deadline_filter);
111
+ grpc_channel_init_register_stage(
112
+ GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY, prepend_filter,
113
+ (void *)&grpc_server_deadline_filter);
114
+ grpc_channel_init_register_stage(
115
+ GRPC_CLIENT_SUBCHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
116
+ prepend_filter, (void *)&grpc_message_size_filter);
117
+ grpc_channel_init_register_stage(
118
+ GRPC_CLIENT_DIRECT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
119
+ prepend_filter, (void *)&grpc_message_size_filter);
120
+ grpc_channel_init_register_stage(
121
+ GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY, prepend_filter,
122
+ (void *)&grpc_message_size_filter);
100
123
  grpc_channel_init_register_stage(
101
124
  GRPC_CLIENT_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY, prepend_filter,
102
125
  (void *)&grpc_compress_filter);
@@ -165,17 +188,25 @@ void grpc_init(void) {
165
188
  grpc_register_tracer("http1", &grpc_http1_trace);
166
189
  grpc_register_tracer("compression", &grpc_compression_trace);
167
190
  grpc_register_tracer("queue_pluck", &grpc_cq_pluck_trace);
191
+ grpc_register_tracer("combiner", &grpc_combiner_trace);
192
+ grpc_register_tracer("server_channel", &grpc_server_channel_trace);
168
193
  // Default pluck trace to 1
169
194
  grpc_cq_pluck_trace = 1;
170
195
  grpc_register_tracer("queue_timeout", &grpc_cq_event_timeout_trace);
171
196
  // Default timeout trace to 1
172
197
  grpc_cq_event_timeout_trace = 1;
173
198
  grpc_register_tracer("op_failure", &grpc_trace_operation_failures);
199
+ grpc_register_tracer("resource_quota", &grpc_resource_quota_trace);
200
+ #ifndef NDEBUG
201
+ grpc_register_tracer("pending_tags", &grpc_trace_pending_tags);
202
+ #endif
174
203
  grpc_security_pre_init();
175
204
  grpc_iomgr_init();
176
205
  grpc_executor_init();
177
206
  gpr_timers_global_init();
178
207
  grpc_cq_global_init();
208
+ grpc_handshaker_factory_registry_init();
209
+ grpc_security_init();
179
210
  for (i = 0; i < g_number_of_plugins; i++) {
180
211
  if (g_all_of_the_plugins[i].init != NULL) {
181
212
  g_all_of_the_plugins[i].init();
@@ -196,11 +227,12 @@ void grpc_init(void) {
196
227
  void grpc_shutdown(void) {
197
228
  int i;
198
229
  GRPC_API_TRACE("grpc_shutdown(void)", 0, ());
230
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
199
231
  gpr_mu_lock(&g_init_mu);
200
232
  if (--g_initializations == 0) {
201
- grpc_executor_shutdown();
233
+ grpc_executor_shutdown(&exec_ctx);
202
234
  grpc_cq_global_shutdown();
203
- grpc_iomgr_shutdown();
235
+ grpc_iomgr_shutdown(&exec_ctx);
204
236
  gpr_timers_global_destroy();
205
237
  grpc_tracer_shutdown();
206
238
  for (i = g_number_of_plugins; i >= 0; i--) {
@@ -208,9 +240,11 @@ void grpc_shutdown(void) {
208
240
  g_all_of_the_plugins[i].destroy();
209
241
  }
210
242
  }
211
- grpc_mdctx_global_shutdown();
243
+ grpc_mdctx_global_shutdown(&exec_ctx);
244
+ grpc_handshaker_factory_registry_shutdown(&exec_ctx);
212
245
  }
213
246
  gpr_mu_unlock(&g_init_mu);
247
+ grpc_exec_ctx_finish(&exec_ctx);
214
248
  }
215
249
 
216
250
  int grpc_is_initialized(void) {