awesome-grpc-that-works 0.12.2 → 0.14.0.dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (724) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/Makefile +5783 -22121
  4. data/include/grpc/byte_buffer.h +2 -83
  5. data/include/grpc/census.h +173 -121
  6. data/include/grpc/compression.h +14 -38
  7. data/include/grpc/grpc.h +85 -434
  8. data/include/grpc/grpc_security.h +76 -46
  9. data/include/grpc/grpc_zookeeper.h +1 -1
  10. data/include/grpc/impl/codegen/alloc.h +74 -0
  11. data/include/grpc/impl/codegen/atm.h +92 -0
  12. data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
  13. data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
  14. data/include/grpc/impl/codegen/atm_win32.h +125 -0
  15. data/include/grpc/impl/codegen/byte_buffer.h +121 -0
  16. data/include/grpc/impl/codegen/compression_types.h +73 -0
  17. data/include/grpc/impl/codegen/connectivity_state.h +59 -0
  18. data/include/grpc/impl/codegen/grpc_types.h +378 -0
  19. data/include/grpc/impl/codegen/log.h +110 -0
  20. data/include/grpc/impl/codegen/port_platform.h +370 -0
  21. data/include/grpc/impl/codegen/propagation_bits.h +67 -0
  22. data/include/grpc/impl/codegen/slice.h +182 -0
  23. data/include/grpc/impl/codegen/slice_buffer.h +105 -0
  24. data/include/grpc/impl/codegen/status.h +163 -0
  25. data/include/grpc/impl/codegen/sync.h +316 -0
  26. data/include/grpc/impl/codegen/sync_generic.h +55 -0
  27. data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
  28. data/include/grpc/impl/codegen/sync_win32.h +49 -0
  29. data/include/grpc/impl/codegen/time.h +130 -0
  30. data/include/grpc/status.h +2 -126
  31. data/include/grpc/support/alloc.h +2 -35
  32. data/include/grpc/support/atm.h +2 -55
  33. data/include/grpc/support/atm_gcc_atomic.h +5 -38
  34. data/include/grpc/support/atm_gcc_sync.h +2 -50
  35. data/include/grpc/support/atm_win32.h +2 -88
  36. data/include/grpc/support/avl.h +10 -9
  37. data/include/grpc/support/cmdline.h +15 -13
  38. data/include/grpc/support/cpu.h +5 -3
  39. data/include/grpc/support/histogram.h +23 -20
  40. data/include/grpc/support/host_port.h +5 -3
  41. data/include/grpc/support/log.h +2 -71
  42. data/include/grpc/support/log_win32.h +2 -2
  43. data/include/grpc/support/port_platform.h +2 -319
  44. data/include/grpc/support/slice.h +2 -145
  45. data/include/grpc/support/slice_buffer.h +2 -65
  46. data/include/grpc/support/string_util.h +3 -3
  47. data/include/grpc/support/subprocess.h +8 -6
  48. data/include/grpc/support/sync.h +2 -278
  49. data/include/grpc/support/sync_generic.h +2 -18
  50. data/include/grpc/support/sync_posix.h +2 -10
  51. data/include/grpc/support/sync_win32.h +2 -12
  52. data/include/grpc/support/thd.h +11 -11
  53. data/include/grpc/support/time.h +2 -91
  54. data/include/grpc/support/tls.h +1 -1
  55. data/include/grpc/support/tls_gcc.h +1 -1
  56. data/include/grpc/support/tls_msvc.h +1 -1
  57. data/include/grpc/support/tls_pthread.h +2 -2
  58. data/include/grpc/support/useful.h +3 -1
  59. data/src/boringssl/err_data.c +1252 -0
  60. data/src/core/census/context.c +471 -8
  61. data/src/core/census/grpc_filter.c +5 -5
  62. data/src/core/census/initialize.c +4 -7
  63. data/src/core/census/mlog.c +600 -0
  64. data/src/core/census/mlog.h +95 -0
  65. data/src/core/census/operation.c +2 -2
  66. data/src/core/census/placeholders.c +109 -0
  67. data/src/core/census/rpc_metric_id.h +6 -6
  68. data/src/core/census/tracing.c +1 -1
  69. data/src/core/channel/channel_args.c +71 -9
  70. data/src/core/channel/channel_args.h +7 -1
  71. data/src/core/channel/channel_stack.c +1 -1
  72. data/src/core/channel/client_channel.c +33 -30
  73. data/src/core/channel/client_uchannel.c +3 -3
  74. data/src/core/channel/compress_filter.c +8 -8
  75. data/src/core/channel/http_client_filter.c +4 -4
  76. data/src/core/channel/http_server_filter.c +11 -11
  77. data/src/core/channel/subchannel_call_holder.c +11 -11
  78. data/src/core/client_config/connector.c +3 -2
  79. data/src/core/client_config/connector.h +2 -2
  80. data/src/core/client_config/lb_policies/load_balancer_api.c +163 -0
  81. data/src/core/client_config/lb_policies/load_balancer_api.h +85 -0
  82. data/src/core/client_config/lb_policies/pick_first.c +57 -40
  83. data/src/core/client_config/lb_policies/round_robin.c +14 -15
  84. data/src/core/client_config/lb_policy.c +3 -3
  85. data/src/core/client_config/lb_policy.h +3 -2
  86. data/src/core/client_config/resolvers/dns_resolver.c +3 -3
  87. data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
  88. data/src/core/client_config/subchannel.c +84 -39
  89. data/src/core/client_config/subchannel.h +15 -6
  90. data/src/core/client_config/subchannel_index.c +261 -0
  91. data/src/core/client_config/subchannel_index.h +77 -0
  92. data/src/core/compression/{algorithm.c → compression_algorithm.c} +3 -3
  93. data/src/core/httpcli/format_request.c +1 -1
  94. data/src/core/httpcli/httpcli.c +18 -16
  95. data/src/core/httpcli/httpcli.h +3 -2
  96. data/src/core/httpcli/httpcli_security_connector.c +9 -10
  97. data/src/core/httpcli/parser.c +7 -7
  98. data/src/core/httpcli/parser.h +1 -1
  99. data/src/core/iomgr/closure.c +7 -7
  100. data/src/core/iomgr/closure.h +6 -5
  101. data/src/core/iomgr/exec_ctx.c +12 -8
  102. data/src/core/iomgr/exec_ctx.h +12 -5
  103. data/src/core/iomgr/executor.c +4 -4
  104. data/src/core/iomgr/executor.h +2 -2
  105. data/src/core/iomgr/fd_posix.c +32 -19
  106. data/src/core/iomgr/fd_posix.h +7 -4
  107. data/src/core/iomgr/iocp_windows.c +7 -9
  108. data/src/core/iomgr/iomgr.c +2 -2
  109. data/src/core/iomgr/pollset.h +9 -10
  110. data/src/core/iomgr/pollset_multipoller_with_epoll.c +71 -5
  111. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +9 -5
  112. data/src/core/iomgr/pollset_posix.c +44 -49
  113. data/src/core/iomgr/pollset_posix.h +14 -8
  114. data/src/core/iomgr/pollset_set.h +3 -9
  115. data/src/core/iomgr/pollset_set_posix.c +23 -3
  116. data/src/core/iomgr/pollset_set_posix.h +2 -18
  117. data/src/core/iomgr/pollset_set_windows.c +3 -3
  118. data/src/core/iomgr/pollset_set_windows.h +2 -2
  119. data/src/core/iomgr/pollset_windows.c +29 -37
  120. data/src/core/iomgr/pollset_windows.h +1 -5
  121. data/src/core/iomgr/resolve_address_posix.c +2 -2
  122. data/src/core/iomgr/resolve_address_windows.c +2 -2
  123. data/src/core/iomgr/sockaddr_utils.c +6 -6
  124. data/src/core/iomgr/sockaddr_win32.h +1 -6
  125. data/src/core/iomgr/tcp_client_posix.c +14 -12
  126. data/src/core/iomgr/tcp_client_windows.c +4 -4
  127. data/src/core/iomgr/tcp_posix.c +18 -10
  128. data/src/core/iomgr/tcp_posix.h +7 -1
  129. data/src/core/iomgr/tcp_server.h +40 -20
  130. data/src/core/iomgr/tcp_server_posix.c +106 -49
  131. data/src/core/iomgr/tcp_server_windows.c +98 -49
  132. data/src/core/iomgr/tcp_windows.c +11 -15
  133. data/src/core/iomgr/timer.c +10 -11
  134. data/src/core/iomgr/timer.h +22 -2
  135. data/src/core/iomgr/timer_heap.c +10 -10
  136. data/src/core/iomgr/timer_heap.h +2 -2
  137. data/src/core/iomgr/udp_server.c +7 -16
  138. data/src/core/iomgr/udp_server.h +2 -9
  139. data/src/core/iomgr/workqueue.h +2 -4
  140. data/src/core/iomgr/workqueue_posix.c +4 -3
  141. data/src/core/iomgr/workqueue_posix.h +3 -1
  142. data/src/core/json/json_reader.c +11 -12
  143. data/src/core/json/json_reader.h +4 -4
  144. data/src/core/json/json_string.c +19 -19
  145. data/src/core/json/json_writer.c +7 -9
  146. data/src/core/profiling/basic_timers.c +1 -1
  147. data/src/core/proto/grpc/lb/v0/load_balancer.pb.c +119 -0
  148. data/src/core/proto/grpc/lb/v0/load_balancer.pb.h +182 -0
  149. data/src/core/security/{base64.c → b64.c} +10 -10
  150. data/src/core/security/{base64.h → b64.h} +1 -1
  151. data/src/core/security/client_auth_filter.c +4 -5
  152. data/src/core/security/credentials.c +17 -10
  153. data/src/core/security/credentials.h +3 -3
  154. data/src/core/security/google_default_credentials.c +27 -22
  155. data/src/core/security/handshake.c +21 -12
  156. data/src/core/security/handshake.h +2 -1
  157. data/src/core/security/json_token.c +14 -8
  158. data/src/core/security/jwt_verifier.c +4 -3
  159. data/src/core/security/secure_endpoint.c +16 -16
  160. data/src/core/security/security_connector.c +131 -81
  161. data/src/core/security/security_connector.h +47 -27
  162. data/src/core/security/security_context.c +8 -3
  163. data/src/core/security/server_auth_filter.c +5 -5
  164. data/src/core/security/server_secure_chttp2.c +36 -37
  165. data/src/core/statistics/census_interface.h +2 -2
  166. data/src/core/statistics/census_rpc_stats.h +3 -3
  167. data/src/core/support/alloc.c +1 -1
  168. data/src/core/support/avl.c +2 -2
  169. data/src/core/support/cpu_posix.c +2 -2
  170. data/src/core/support/env_linux.c +28 -1
  171. data/src/core/support/env_win32.c +15 -7
  172. data/src/core/support/histogram.c +5 -5
  173. data/src/core/support/{file.c → load_file.c} +2 -2
  174. data/src/core/support/{file.h → load_file.h} +4 -12
  175. data/src/core/support/log_posix.c +1 -1
  176. data/src/core/support/log_win32.c +4 -3
  177. data/src/core/support/murmur_hash.c +11 -11
  178. data/src/core/support/murmur_hash.h +1 -1
  179. data/src/core/support/slice.c +11 -11
  180. data/src/core/support/slice_buffer.c +6 -6
  181. data/src/core/support/stack_lockfree.c +20 -10
  182. data/src/core/support/string.c +15 -15
  183. data/src/core/support/string.h +5 -5
  184. data/src/core/support/string_win32.c +5 -5
  185. data/src/core/support/subprocess_windows.c +141 -0
  186. data/src/core/support/sync.c +4 -4
  187. data/src/core/support/sync_posix.c +2 -2
  188. data/src/core/support/sync_win32.c +10 -5
  189. data/src/core/support/time.c +29 -29
  190. data/src/core/support/time_posix.c +15 -6
  191. data/src/core/support/time_precise.c +2 -2
  192. data/src/core/support/time_win32.c +18 -9
  193. data/src/core/support/tls_pthread.c +1 -1
  194. data/src/core/support/tmpfile.h +55 -0
  195. data/src/core/support/{file_posix.c → tmpfile_posix.c} +2 -2
  196. data/src/core/support/{file_win32.c → tmpfile_win32.c} +2 -2
  197. data/src/core/support/wrap_memcpy.c +53 -0
  198. data/src/core/surface/alarm.c +84 -0
  199. data/src/core/surface/byte_buffer_reader.c +1 -1
  200. data/src/core/surface/call.c +175 -116
  201. data/src/core/surface/call.h +2 -2
  202. data/src/core/surface/call_test_only.h +2 -2
  203. data/src/core/surface/channel.c +9 -9
  204. data/src/core/surface/channel.h +1 -1
  205. data/src/core/surface/channel_connectivity.c +3 -3
  206. data/src/core/surface/channel_create.c +4 -4
  207. data/src/core/surface/channel_ping.c +2 -2
  208. data/src/core/surface/completion_queue.c +84 -53
  209. data/src/core/surface/completion_queue.h +1 -1
  210. data/src/core/surface/init.c +11 -5
  211. data/src/core/surface/lame_client.c +2 -3
  212. data/src/core/surface/secure_channel_create.c +9 -10
  213. data/src/core/surface/server.c +30 -30
  214. data/src/core/surface/server_chttp2.c +8 -8
  215. data/src/core/surface/server_create.c +1 -4
  216. data/src/core/surface/validate_metadata.c +4 -4
  217. data/src/core/surface/version.c +2 -2
  218. data/src/core/transport/byte_stream.c +8 -6
  219. data/src/core/transport/byte_stream.h +6 -5
  220. data/src/core/transport/chttp2/bin_encoder.c +29 -29
  221. data/src/core/transport/chttp2/frame_data.c +29 -26
  222. data/src/core/transport/chttp2/frame_data.h +6 -6
  223. data/src/core/transport/chttp2/frame_goaway.c +30 -30
  224. data/src/core/transport/chttp2/frame_goaway.h +6 -6
  225. data/src/core/transport/chttp2/frame_ping.c +6 -6
  226. data/src/core/transport/chttp2/frame_ping.h +5 -5
  227. data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
  228. data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
  229. data/src/core/transport/chttp2/frame_settings.c +30 -30
  230. data/src/core/transport/chttp2/frame_settings.h +13 -13
  231. data/src/core/transport/chttp2/frame_window_update.c +17 -18
  232. data/src/core/transport/chttp2/frame_window_update.h +5 -7
  233. data/src/core/transport/chttp2/hpack_encoder.c +69 -73
  234. data/src/core/transport/chttp2/hpack_encoder.h +16 -16
  235. data/src/core/transport/chttp2/hpack_parser.c +167 -167
  236. data/src/core/transport/chttp2/hpack_parser.h +16 -16
  237. data/src/core/transport/chttp2/hpack_table.c +13 -13
  238. data/src/core/transport/chttp2/hpack_table.h +11 -11
  239. data/src/core/transport/chttp2/internal.h +103 -87
  240. data/src/core/transport/chttp2/parsing.c +25 -25
  241. data/src/core/transport/chttp2/stream_lists.c +38 -1
  242. data/src/core/transport/chttp2/stream_map.c +13 -14
  243. data/src/core/transport/chttp2/stream_map.h +6 -7
  244. data/src/core/transport/chttp2/timeout_encoding.c +19 -16
  245. data/src/core/transport/chttp2/varint.c +8 -9
  246. data/src/core/transport/chttp2/varint.h +7 -8
  247. data/src/core/transport/chttp2/writing.c +25 -22
  248. data/src/core/transport/chttp2_transport.c +147 -100
  249. data/src/core/transport/connectivity_state.c +6 -6
  250. data/src/core/transport/metadata.c +18 -18
  251. data/src/core/transport/metadata.h +5 -5
  252. data/src/core/transport/static_metadata.c +32 -33
  253. data/src/core/transport/static_metadata.h +8 -8
  254. data/src/core/transport/transport.c +6 -5
  255. data/src/core/transport/transport.h +17 -1
  256. data/src/core/tsi/fake_transport_security.c +7 -7
  257. data/src/core/tsi/ssl_transport_security.c +6 -4
  258. data/src/core/{iomgr/timer_internal.h → tsi/ssl_types.h} +19 -25
  259. data/src/ruby/ext/grpc/extconf.rb +52 -14
  260. data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
  261. data/src/ruby/ext/grpc/rb_call.c +7 -3
  262. data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
  263. data/src/ruby/ext/grpc/rb_channel.c +4 -2
  264. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  265. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
  266. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
  267. data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
  268. data/src/ruby/ext/grpc/rb_grpc.c +28 -19
  269. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +562 -0
  270. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +846 -0
  271. data/src/ruby/ext/grpc/rb_loader.c +72 -0
  272. data/src/ruby/ext/grpc/rb_loader.h +40 -0
  273. data/src/ruby/ext/grpc/rb_server.c +3 -1
  274. data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
  275. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  276. data/src/ruby/lib/grpc/errors.rb +2 -2
  277. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  278. data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
  279. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  280. data/src/ruby/lib/grpc/grpc.rb +34 -0
  281. data/src/ruby/lib/grpc/version.rb +1 -1
  282. data/src/ruby/pb/README.md +2 -2
  283. data/src/ruby/pb/generate_proto_ruby.sh +2 -2
  284. data/src/ruby/pb/grpc/health/checker.rb +11 -11
  285. data/src/ruby/pb/grpc/health/v1/health.rb +28 -0
  286. data/src/ruby/pb/grpc/health/{v1alpha → v1}/health_services.rb +4 -4
  287. data/src/ruby/spec/client_server_spec.rb +2 -1
  288. data/src/ruby/spec/pb/health/checker_spec.rb +23 -37
  289. data/third_party/boringssl/crypto/aes/aes.c +1142 -0
  290. data/third_party/boringssl/crypto/aes/internal.h +87 -0
  291. data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
  292. data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
  293. data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
  294. data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
  295. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
  296. data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
  297. data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
  298. data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
  299. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
  300. data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
  301. data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
  302. data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
  303. data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
  304. data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
  305. data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
  306. data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
  307. data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
  308. data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
  309. data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
  310. data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
  311. data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
  312. data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
  313. data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
  314. data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
  315. data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
  316. data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
  317. data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
  318. data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
  319. data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
  320. data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
  321. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
  322. data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
  323. data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
  324. data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
  325. data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
  326. data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
  327. data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
  328. data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
  329. data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
  330. data/third_party/boringssl/crypto/base64/base64.c +478 -0
  331. data/third_party/boringssl/crypto/bio/bio.c +608 -0
  332. data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
  333. data/third_party/boringssl/crypto/bio/buffer.c +496 -0
  334. data/third_party/boringssl/crypto/bio/connect.c +544 -0
  335. data/third_party/boringssl/crypto/bio/fd.c +270 -0
  336. data/third_party/boringssl/crypto/bio/file.c +349 -0
  337. data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
  338. data/third_party/boringssl/crypto/bio/internal.h +108 -0
  339. data/third_party/boringssl/crypto/bio/pair.c +803 -0
  340. data/third_party/boringssl/crypto/bio/printf.c +119 -0
  341. data/third_party/boringssl/crypto/bio/socket.c +195 -0
  342. data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
  343. data/third_party/boringssl/crypto/bn/add.c +377 -0
  344. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
  345. data/third_party/boringssl/crypto/bn/bn.c +341 -0
  346. data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
  347. data/third_party/boringssl/crypto/bn/cmp.c +200 -0
  348. data/third_party/boringssl/crypto/bn/convert.c +597 -0
  349. data/third_party/boringssl/crypto/bn/ctx.c +311 -0
  350. data/third_party/boringssl/crypto/bn/div.c +625 -0
  351. data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
  352. data/third_party/boringssl/crypto/bn/gcd.c +711 -0
  353. data/third_party/boringssl/crypto/bn/generic.c +1019 -0
  354. data/third_party/boringssl/crypto/bn/internal.h +294 -0
  355. data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
  356. data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
  357. data/third_party/boringssl/crypto/bn/mul.c +888 -0
  358. data/third_party/boringssl/crypto/bn/prime.c +845 -0
  359. data/third_party/boringssl/crypto/bn/random.c +326 -0
  360. data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
  361. data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
  362. data/third_party/boringssl/crypto/bn/shift.c +299 -0
  363. data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
  364. data/third_party/boringssl/crypto/buf/buf.c +235 -0
  365. data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
  366. data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
  367. data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
  368. data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
  369. data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
  370. data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
  371. data/third_party/boringssl/crypto/cipher/aead.c +167 -0
  372. data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
  373. data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
  374. data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
  375. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
  376. data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
  377. data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
  378. data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
  379. data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
  380. data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
  381. data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
  382. data/third_party/boringssl/crypto/cipher/internal.h +164 -0
  383. data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
  384. data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
  385. data/third_party/boringssl/crypto/conf/conf.c +778 -0
  386. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  387. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  388. data/third_party/boringssl/crypto/cpu-arm.c +199 -0
  389. data/third_party/boringssl/crypto/cpu-intel.c +261 -0
  390. data/third_party/boringssl/crypto/crypto.c +140 -0
  391. data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
  392. data/third_party/boringssl/crypto/des/des.c +771 -0
  393. data/third_party/boringssl/crypto/des/internal.h +212 -0
  394. data/third_party/boringssl/crypto/dh/check.c +180 -0
  395. data/third_party/boringssl/crypto/dh/dh.c +463 -0
  396. data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
  397. data/third_party/boringssl/crypto/dh/internal.h +80 -0
  398. data/third_party/boringssl/crypto/dh/params.c +301 -0
  399. data/third_party/boringssl/crypto/digest/digest.c +248 -0
  400. data/third_party/boringssl/crypto/digest/digests.c +321 -0
  401. data/third_party/boringssl/crypto/digest/internal.h +112 -0
  402. data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
  403. data/third_party/boringssl/crypto/directory.h +66 -0
  404. data/third_party/boringssl/crypto/directory_posix.c +108 -0
  405. data/third_party/boringssl/crypto/directory_win.c +144 -0
  406. data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
  407. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
  408. data/third_party/boringssl/crypto/dsa/internal.h +78 -0
  409. data/third_party/boringssl/crypto/ec/ec.c +889 -0
  410. data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
  411. data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
  412. data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
  413. data/third_party/boringssl/crypto/ec/internal.h +318 -0
  414. data/third_party/boringssl/crypto/ec/oct.c +416 -0
  415. data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
  416. data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
  417. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
  418. data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
  419. data/third_party/boringssl/crypto/ec/simple.c +1313 -0
  420. data/third_party/boringssl/crypto/ec/util-64.c +183 -0
  421. data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
  422. data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
  423. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
  424. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
  425. data/third_party/boringssl/crypto/engine/engine.c +96 -0
  426. data/third_party/boringssl/crypto/err/err.c +756 -0
  427. data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
  428. data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
  429. data/third_party/boringssl/crypto/evp/evp.c +411 -0
  430. data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
  431. data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
  432. data/third_party/boringssl/crypto/evp/internal.h +278 -0
  433. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
  434. data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
  435. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
  436. data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
  437. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
  438. data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
  439. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  440. data/third_party/boringssl/crypto/ex_data.c +294 -0
  441. data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
  442. data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
  443. data/third_party/boringssl/crypto/internal.h +532 -0
  444. data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
  445. data/third_party/boringssl/crypto/md4/md4.c +225 -0
  446. data/third_party/boringssl/crypto/md5/md5.c +275 -0
  447. data/third_party/boringssl/crypto/mem.c +200 -0
  448. data/third_party/boringssl/crypto/modes/cbc.c +216 -0
  449. data/third_party/boringssl/crypto/modes/cfb.c +231 -0
  450. data/third_party/boringssl/crypto/modes/ctr.c +226 -0
  451. data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
  452. data/third_party/boringssl/crypto/modes/internal.h +370 -0
  453. data/third_party/boringssl/crypto/modes/ofb.c +108 -0
  454. data/third_party/boringssl/crypto/obj/obj.c +664 -0
  455. data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
  456. data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
  457. data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
  458. data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
  459. data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
  460. data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
  461. data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
  462. data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
  463. data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
  464. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  465. data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
  466. data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
  467. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
  468. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
  469. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
  470. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
  471. data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
  472. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
  473. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
  474. data/third_party/boringssl/crypto/rand/internal.h +32 -0
  475. data/third_party/boringssl/crypto/rand/rand.c +239 -0
  476. data/third_party/boringssl/crypto/rand/urandom.c +223 -0
  477. data/third_party/boringssl/crypto/rand/windows.c +56 -0
  478. data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
  479. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  480. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  481. data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
  482. data/third_party/boringssl/crypto/rsa/internal.h +164 -0
  483. data/third_party/boringssl/crypto/rsa/padding.c +711 -0
  484. data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
  485. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
  486. data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
  487. data/third_party/boringssl/crypto/sha/sha1.c +337 -0
  488. data/third_party/boringssl/crypto/sha/sha256.c +327 -0
  489. data/third_party/boringssl/crypto/sha/sha512.c +607 -0
  490. data/third_party/boringssl/crypto/stack/stack.c +386 -0
  491. data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
  492. data/third_party/boringssl/crypto/test/test_util.h +35 -0
  493. data/third_party/boringssl/crypto/thread.c +101 -0
  494. data/third_party/boringssl/crypto/thread_none.c +55 -0
  495. data/third_party/boringssl/crypto/thread_pthread.c +167 -0
  496. data/third_party/boringssl/crypto/thread_win.c +282 -0
  497. data/third_party/boringssl/crypto/time_support.c +212 -0
  498. data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
  499. data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
  500. data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
  501. data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
  502. data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
  503. data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
  504. data/third_party/boringssl/crypto/x509/by_file.c +295 -0
  505. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  506. data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
  507. data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
  508. data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
  509. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  510. data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
  511. data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
  512. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  513. data/third_party/boringssl/crypto/x509/x509.c +152 -0
  514. data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
  515. data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
  516. data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
  517. data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
  518. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  519. data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
  520. data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
  521. data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
  522. data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
  523. data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
  524. data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
  525. data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
  526. data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
  527. data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
  528. data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
  529. data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
  530. data/third_party/boringssl/crypto/x509/x509name.c +381 -0
  531. data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
  532. data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
  533. data/third_party/boringssl/crypto/x509/x509type.c +128 -0
  534. data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
  535. data/third_party/boringssl/crypto/x509/x_all.c +547 -0
  536. data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
  537. data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
  538. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  539. data/third_party/boringssl/crypto/x509/x_info.c +95 -0
  540. data/third_party/boringssl/crypto/x509/x_name.c +538 -0
  541. data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
  542. data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
  543. data/third_party/boringssl/crypto/x509/x_req.c +112 -0
  544. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  545. data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
  546. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  547. data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
  548. data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
  549. data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
  550. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
  551. data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
  552. data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
  553. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
  554. data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
  555. data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
  556. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
  557. data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
  558. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
  559. data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
  560. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
  561. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  562. data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
  563. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
  564. data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
  565. data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
  566. data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
  567. data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
  568. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
  569. data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
  570. data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
  571. data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
  572. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
  573. data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
  574. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
  575. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
  576. data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
  577. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
  578. data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
  579. data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
  580. data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
  581. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
  582. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
  583. data/third_party/boringssl/include/openssl/aead.h +346 -0
  584. data/third_party/boringssl/include/openssl/aes.h +158 -0
  585. data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
  586. data/third_party/boringssl/include/openssl/asn1.h +1168 -0
  587. data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
  588. data/third_party/boringssl/include/openssl/asn1t.h +906 -0
  589. data/third_party/boringssl/include/openssl/base.h +261 -0
  590. data/third_party/boringssl/include/openssl/base64.h +184 -0
  591. data/third_party/boringssl/include/openssl/bio.h +902 -0
  592. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  593. data/third_party/boringssl/include/openssl/bn.h +885 -0
  594. data/third_party/boringssl/include/openssl/buf.h +118 -0
  595. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  596. data/third_party/boringssl/include/openssl/bytestring.h +360 -0
  597. data/third_party/boringssl/include/openssl/cast.h +96 -0
  598. data/third_party/boringssl/include/openssl/chacha.h +37 -0
  599. data/third_party/boringssl/include/openssl/cipher.h +571 -0
  600. data/third_party/boringssl/include/openssl/cmac.h +76 -0
  601. data/third_party/boringssl/include/openssl/conf.h +145 -0
  602. data/third_party/boringssl/include/openssl/cpu.h +184 -0
  603. data/third_party/boringssl/include/openssl/crypto.h +68 -0
  604. data/third_party/boringssl/include/openssl/curve25519.h +88 -0
  605. data/third_party/boringssl/include/openssl/des.h +177 -0
  606. data/third_party/boringssl/include/openssl/dh.h +238 -0
  607. data/third_party/boringssl/include/openssl/digest.h +258 -0
  608. data/third_party/boringssl/include/openssl/dsa.h +343 -0
  609. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  610. data/third_party/boringssl/include/openssl/ec.h +355 -0
  611. data/third_party/boringssl/include/openssl/ec_key.h +280 -0
  612. data/third_party/boringssl/include/openssl/ecdh.h +102 -0
  613. data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
  614. data/third_party/boringssl/include/openssl/engine.h +98 -0
  615. data/third_party/boringssl/include/openssl/err.h +487 -0
  616. data/third_party/boringssl/include/openssl/evp.h +750 -0
  617. data/third_party/boringssl/include/openssl/ex_data.h +213 -0
  618. data/third_party/boringssl/include/openssl/hkdf.h +44 -0
  619. data/third_party/boringssl/include/openssl/hmac.h +160 -0
  620. data/third_party/boringssl/include/openssl/lhash.h +192 -0
  621. data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
  622. data/third_party/boringssl/include/openssl/md4.h +102 -0
  623. data/third_party/boringssl/include/openssl/md5.h +107 -0
  624. data/third_party/boringssl/include/openssl/mem.h +140 -0
  625. data/third_party/boringssl/include/openssl/obj.h +198 -0
  626. data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
  627. data/third_party/boringssl/include/openssl/objects.h +18 -0
  628. data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
  629. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  630. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  631. data/third_party/boringssl/include/openssl/pem.h +521 -0
  632. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  633. data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
  634. data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
  635. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  636. data/third_party/boringssl/include/openssl/pqueue.h +146 -0
  637. data/third_party/boringssl/include/openssl/rand.h +113 -0
  638. data/third_party/boringssl/include/openssl/rc4.h +90 -0
  639. data/third_party/boringssl/include/openssl/rsa.h +637 -0
  640. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  641. data/third_party/boringssl/include/openssl/sha.h +256 -0
  642. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  643. data/third_party/boringssl/include/openssl/ssl.h +4466 -0
  644. data/third_party/boringssl/include/openssl/ssl3.h +441 -0
  645. data/third_party/boringssl/include/openssl/stack.h +298 -0
  646. data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
  647. data/third_party/boringssl/include/openssl/thread.h +173 -0
  648. data/third_party/boringssl/include/openssl/time_support.h +90 -0
  649. data/third_party/boringssl/include/openssl/tls1.h +653 -0
  650. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  651. data/third_party/boringssl/include/openssl/x509.h +1258 -0
  652. data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
  653. data/third_party/boringssl/include/openssl/x509v3.h +798 -0
  654. data/third_party/boringssl/ssl/custom_extensions.c +257 -0
  655. data/third_party/boringssl/ssl/d1_both.c +880 -0
  656. data/third_party/boringssl/ssl/d1_clnt.c +566 -0
  657. data/third_party/boringssl/ssl/d1_lib.c +340 -0
  658. data/third_party/boringssl/ssl/d1_meth.c +130 -0
  659. data/third_party/boringssl/ssl/d1_pkt.c +578 -0
  660. data/third_party/boringssl/ssl/d1_srtp.c +234 -0
  661. data/third_party/boringssl/ssl/d1_srvr.c +485 -0
  662. data/third_party/boringssl/ssl/dtls_record.c +308 -0
  663. data/third_party/boringssl/ssl/internal.h +1276 -0
  664. data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
  665. data/third_party/boringssl/ssl/s3_both.c +571 -0
  666. data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
  667. data/third_party/boringssl/ssl/s3_enc.c +494 -0
  668. data/third_party/boringssl/ssl/s3_lib.c +587 -0
  669. data/third_party/boringssl/ssl/s3_meth.c +166 -0
  670. data/third_party/boringssl/ssl/s3_pkt.c +732 -0
  671. data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
  672. data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
  673. data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
  674. data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
  675. data/third_party/boringssl/ssl/ssl_cert.c +539 -0
  676. data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
  677. data/third_party/boringssl/ssl/ssl_file.c +633 -0
  678. data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
  679. data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
  680. data/third_party/boringssl/ssl/ssl_session.c +764 -0
  681. data/third_party/boringssl/ssl/ssl_stat.c +591 -0
  682. data/third_party/boringssl/ssl/t1_enc.c +708 -0
  683. data/third_party/boringssl/ssl/t1_lib.c +2905 -0
  684. data/third_party/boringssl/ssl/test/async_bio.h +45 -0
  685. data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
  686. data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
  687. data/third_party/boringssl/ssl/test/test_config.h +108 -0
  688. data/third_party/boringssl/ssl/tls_record.c +342 -0
  689. data/third_party/nanopb/pb.h +547 -0
  690. data/third_party/nanopb/pb_common.c +97 -0
  691. data/third_party/nanopb/pb_common.h +42 -0
  692. data/third_party/nanopb/pb_decode.c +1319 -0
  693. data/third_party/nanopb/pb_decode.h +149 -0
  694. data/third_party/nanopb/pb_encode.c +690 -0
  695. data/third_party/nanopb/pb_encode.h +154 -0
  696. data/third_party/zlib/adler32.c +179 -0
  697. data/third_party/zlib/compress.c +80 -0
  698. data/third_party/zlib/crc32.c +425 -0
  699. data/third_party/zlib/crc32.h +441 -0
  700. data/third_party/zlib/deflate.c +1967 -0
  701. data/third_party/zlib/deflate.h +346 -0
  702. data/third_party/zlib/gzclose.c +25 -0
  703. data/third_party/zlib/gzguts.h +209 -0
  704. data/third_party/zlib/gzlib.c +634 -0
  705. data/third_party/zlib/gzread.c +594 -0
  706. data/third_party/zlib/gzwrite.c +577 -0
  707. data/third_party/zlib/infback.c +640 -0
  708. data/third_party/zlib/inffast.c +340 -0
  709. data/third_party/zlib/inffast.h +11 -0
  710. data/third_party/zlib/inffixed.h +94 -0
  711. data/third_party/zlib/inflate.c +1512 -0
  712. data/third_party/zlib/inflate.h +122 -0
  713. data/third_party/zlib/inftrees.c +306 -0
  714. data/third_party/zlib/inftrees.h +62 -0
  715. data/third_party/zlib/trees.c +1226 -0
  716. data/third_party/zlib/trees.h +128 -0
  717. data/third_party/zlib/uncompr.c +59 -0
  718. data/third_party/zlib/zconf.h +511 -0
  719. data/third_party/zlib/zlib.h +1768 -0
  720. data/third_party/zlib/zutil.c +324 -0
  721. data/third_party/zlib/zutil.h +253 -0
  722. metadata +504 -20
  723. data/Rakefile +0 -63
  724. data/src/ruby/pb/grpc/health/v1alpha/health.rb +0 -29
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2015, Google Inc.
3
+ * Copyright 2015-2016, Google Inc.
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -59,7 +59,7 @@ typedef struct call_data {
59
59
  grpc_closure finish_recv;
60
60
  } call_data;
61
61
 
62
- typedef struct channel_data { gpr_uint8 unused; } channel_data;
62
+ typedef struct channel_data { uint8_t unused; } channel_data;
63
63
 
64
64
  static void extract_and_annotate_method_tag(grpc_metadata_batch *md,
65
65
  call_data *calld,
@@ -91,7 +91,7 @@ static void client_start_transport_op(grpc_exec_ctx *exec_ctx,
91
91
  }
92
92
 
93
93
  static void server_on_done_recv(grpc_exec_ctx *exec_ctx, void *ptr,
94
- int success) {
94
+ bool success) {
95
95
  grpc_call_element *elem = ptr;
96
96
  call_data *calld = elem->call_data;
97
97
  channel_data *chand = elem->channel_data;
@@ -107,8 +107,8 @@ static void server_mutate_op(grpc_call_element *elem,
107
107
  if (op->recv_initial_metadata) {
108
108
  /* substitute our callback for the op callback */
109
109
  calld->recv_initial_metadata = op->recv_initial_metadata;
110
- calld->on_done_recv = op->on_complete;
111
- op->on_complete = &calld->finish_recv;
110
+ calld->on_done_recv = op->recv_initial_metadata_ready;
111
+ op->recv_initial_metadata_ready = &calld->finish_recv;
112
112
  }
113
113
  }
114
114
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  *
3
- * Copyright 2015, Google Inc.
3
+ * Copyright 2015-2016, Google Inc.
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -37,14 +37,11 @@ static int features_enabled = CENSUS_FEATURE_NONE;
37
37
 
38
38
  int census_initialize(int features) {
39
39
  if (features_enabled != CENSUS_FEATURE_NONE) {
40
+ // Must have been a previous call to census_initialize; return error
40
41
  return 1;
41
42
  }
42
- if (features != CENSUS_FEATURE_NONE) {
43
- return 1;
44
- } else {
45
- features_enabled = features;
46
- return 0;
47
- }
43
+ features_enabled = features;
44
+ return 0;
48
45
  }
49
46
 
50
47
  void census_shutdown(void) { features_enabled = CENSUS_FEATURE_NONE; }
@@ -0,0 +1,600 @@
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
+ // Implements an efficient in-memory log, optimized for multiple writers and
35
+ // a single reader. Available log space is divided up in blocks of
36
+ // CENSUS_LOG_2_MAX_RECORD_SIZE bytes. A block can be in one of the following
37
+ // three data structures:
38
+ // - Free blocks (free_block_list)
39
+ // - Blocks with unread data (dirty_block_list)
40
+ // - Blocks currently attached to cores (core_local_blocks[])
41
+ //
42
+ // census_log_start_write() moves a block from core_local_blocks[] to the end of
43
+ // dirty_block_list when block:
44
+ // - is out-of-space OR
45
+ // - has an incomplete record (an incomplete record occurs when a thread calls
46
+ // census_log_start_write() and is context-switched before calling
47
+ // census_log_end_write()
48
+ // So, blocks in dirty_block_list are ordered, from oldest to newest, by the
49
+ // time when block is detached from the core.
50
+ //
51
+ // census_log_read_next() first iterates over dirty_block_list and then
52
+ // core_local_blocks[]. It moves completely read blocks from dirty_block_list
53
+ // to free_block_list. Blocks in core_local_blocks[] are not freed, even when
54
+ // completely read.
55
+ //
56
+ // If the log is configured to discard old records and free_block_list is empty,
57
+ // census_log_start_write() iterates over dirty_block_list to allocate a
58
+ // new block. It moves the oldest available block (no pending read/write) to
59
+ // core_local_blocks[].
60
+ //
61
+ // core_local_block_struct is used to implement a map from core id to the block
62
+ // associated with that core. This mapping is advisory. It is possible that the
63
+ // block returned by this mapping is no longer associated with that core. This
64
+ // mapping is updated, lazily, by census_log_start_write().
65
+ //
66
+ // Locking in block struct:
67
+ //
68
+ // Exclusive g_log.lock must be held before calling any functions operating on
69
+ // block structs except census_log_start_write() and census_log_end_write().
70
+ //
71
+ // Writes to a block are serialized via writer_lock. census_log_start_write()
72
+ // acquires this lock and census_log_end_write() releases it. On failure to
73
+ // acquire the lock, writer allocates a new block for the current core and
74
+ // updates core_local_block accordingly.
75
+ //
76
+ // Simultaneous read and write access is allowed. Readers can safely read up to
77
+ // committed bytes (bytes_committed).
78
+ //
79
+ // reader_lock protects the block, currently being read, from getting recycled.
80
+ // start_read() acquires reader_lock and end_read() releases the lock.
81
+ //
82
+ // Read/write access to a block is disabled via try_disable_access(). It returns
83
+ // with both writer_lock and reader_lock held. These locks are subsequently
84
+ // released by enable_access() to enable access to the block.
85
+ //
86
+ // A note on naming: Most function/struct names are prepended by cl_
87
+ // (shorthand for census_log). Further, functions that manipulate structures
88
+ // include the name of the structure, which will be passed as the first
89
+ // argument. E.g. cl_block_initialize() will initialize a cl_block.
90
+
91
+ #include "src/core/census/mlog.h"
92
+ #include <grpc/support/alloc.h>
93
+ #include <grpc/support/atm.h>
94
+ #include <grpc/support/cpu.h>
95
+ #include <grpc/support/log.h>
96
+ #include <grpc/support/sync.h>
97
+ #include <grpc/support/useful.h>
98
+ #include <stdbool.h>
99
+ #include <string.h>
100
+
101
+ // End of platform specific code
102
+
103
+ typedef struct census_log_block_list_struct {
104
+ struct census_log_block_list_struct* next;
105
+ struct census_log_block_list_struct* prev;
106
+ struct census_log_block* block;
107
+ } cl_block_list_struct;
108
+
109
+ typedef struct census_log_block {
110
+ // Pointer to underlying buffer.
111
+ char* buffer;
112
+ gpr_atm writer_lock;
113
+ gpr_atm reader_lock;
114
+ // Keeps completely written bytes. Declared atomic because accessed
115
+ // simultaneously by reader and writer.
116
+ gpr_atm bytes_committed;
117
+ // Bytes already read.
118
+ size_t bytes_read;
119
+ // Links for list.
120
+ cl_block_list_struct link;
121
+ // We want this structure to be cacheline aligned. We assume the following
122
+ // sizes for the various parts on 32/64bit systems:
123
+ // type 32b size 64b size
124
+ // char* 4 8
125
+ // 3x gpr_atm 12 24
126
+ // size_t 4 8
127
+ // cl_block_list_struct 12 24
128
+ // TOTAL 32 64
129
+ //
130
+ // Depending on the size of our cacheline and the architecture, we
131
+ // selectively add char buffering to this structure. The size is checked
132
+ // via assert in census_log_initialize().
133
+ #if defined(GPR_ARCH_64)
134
+ #define CL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 64)
135
+ #else
136
+ #if defined(GPR_ARCH_32)
137
+ #define CL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 32)
138
+ #else
139
+ #error "Unknown architecture"
140
+ #endif
141
+ #endif
142
+ #if CL_BLOCK_PAD_SIZE > 0
143
+ char padding[CL_BLOCK_PAD_SIZE];
144
+ #endif
145
+ } cl_block;
146
+
147
+ // A list of cl_blocks, doubly-linked through cl_block::link.
148
+ typedef struct census_log_block_list {
149
+ int32_t count; // Number of items in list.
150
+ cl_block_list_struct ht; // head/tail of linked list.
151
+ } cl_block_list;
152
+
153
+ // Cacheline aligned block pointers to avoid false sharing. Block pointer must
154
+ // be initialized via set_block(), before calling other functions
155
+ typedef struct census_log_core_local_block {
156
+ gpr_atm block;
157
+ // Ensure cachline alignment: we assume sizeof(gpr_atm) == 4 or 8
158
+ #if defined(GPR_ARCH_64)
159
+ #define CL_CORE_LOCAL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 8)
160
+ #else
161
+ #if defined(GPR_ARCH_32)
162
+ #define CL_CORE_LOCAL_BLOCK_PAD_SIZE (GPR_CACHELINE_SIZE - 4)
163
+ #else
164
+ #error "Unknown architecture"
165
+ #endif
166
+ #endif
167
+ #if CL_CORE_LOCAL_BLOCK_PAD_SIZE > 0
168
+ char padding[CL_CORE_LOCAL_BLOCK_PAD_SIZE];
169
+ #endif
170
+ } cl_core_local_block;
171
+
172
+ struct census_log {
173
+ int discard_old_records;
174
+ // Number of cores (aka hardware-contexts)
175
+ unsigned num_cores;
176
+ // number of CENSUS_LOG_2_MAX_RECORD_SIZE blocks in log
177
+ uint32_t num_blocks;
178
+ cl_block* blocks; // Block metadata.
179
+ cl_core_local_block* core_local_blocks; // Keeps core to block mappings.
180
+ gpr_mu lock;
181
+ int initialized; // has log been initialized?
182
+ // Keeps the state of the reader iterator. A value of 0 indicates that
183
+ // iterator has reached the end. census_log_init_reader() resets the value
184
+ // to num_core to restart iteration.
185
+ uint32_t read_iterator_state;
186
+ // Points to the block being read. If non-NULL, the block is locked for
187
+ // reading(block_being_read_->reader_lock is held).
188
+ cl_block* block_being_read;
189
+ char* buffer;
190
+ cl_block_list free_block_list;
191
+ cl_block_list dirty_block_list;
192
+ gpr_atm out_of_space_count;
193
+ };
194
+
195
+ // Single internal log.
196
+ static struct census_log g_log;
197
+
198
+ // Functions that operate on an atomic memory location used as a lock.
199
+
200
+ // Returns non-zero if lock is acquired.
201
+ static int cl_try_lock(gpr_atm* lock) { return gpr_atm_acq_cas(lock, 0, 1); }
202
+
203
+ static void cl_unlock(gpr_atm* lock) { gpr_atm_rel_store(lock, 0); }
204
+
205
+ // Functions that operate on cl_core_local_block's.
206
+
207
+ static void cl_core_local_block_set_block(cl_core_local_block* clb,
208
+ cl_block* block) {
209
+ gpr_atm_rel_store(&clb->block, (gpr_atm)block);
210
+ }
211
+
212
+ static cl_block* cl_core_local_block_get_block(cl_core_local_block* clb) {
213
+ return (cl_block*)gpr_atm_acq_load(&clb->block);
214
+ }
215
+
216
+ // Functions that operate on cl_block_list_struct's.
217
+
218
+ static void cl_block_list_struct_initialize(cl_block_list_struct* bls,
219
+ cl_block* block) {
220
+ bls->next = bls->prev = bls;
221
+ bls->block = block;
222
+ }
223
+
224
+ // Functions that operate on cl_block_list's.
225
+
226
+ static void cl_block_list_initialize(cl_block_list* list) {
227
+ list->count = 0;
228
+ cl_block_list_struct_initialize(&list->ht, NULL);
229
+ }
230
+
231
+ // Returns head of *this, or NULL if empty.
232
+ static cl_block* cl_block_list_head(cl_block_list* list) {
233
+ return list->ht.next->block;
234
+ }
235
+
236
+ // Insert element *e after *pos.
237
+ static void cl_block_list_insert(cl_block_list* list, cl_block_list_struct* pos,
238
+ cl_block_list_struct* e) {
239
+ list->count++;
240
+ e->next = pos->next;
241
+ e->prev = pos;
242
+ e->next->prev = e;
243
+ e->prev->next = e;
244
+ }
245
+
246
+ // Insert block at the head of the list
247
+ static void cl_block_list_insert_at_head(cl_block_list* list, cl_block* block) {
248
+ cl_block_list_insert(list, &list->ht, &block->link);
249
+ }
250
+
251
+ // Insert block at the tail of the list.
252
+ static void cl_block_list_insert_at_tail(cl_block_list* list, cl_block* block) {
253
+ cl_block_list_insert(list, list->ht.prev, &block->link);
254
+ }
255
+
256
+ // Removes block *b. Requires *b be in the list.
257
+ static void cl_block_list_remove(cl_block_list* list, cl_block* b) {
258
+ list->count--;
259
+ b->link.next->prev = b->link.prev;
260
+ b->link.prev->next = b->link.next;
261
+ }
262
+
263
+ // Functions that operate on cl_block's
264
+
265
+ static void cl_block_initialize(cl_block* block, char* buffer) {
266
+ block->buffer = buffer;
267
+ gpr_atm_rel_store(&block->writer_lock, 0);
268
+ gpr_atm_rel_store(&block->reader_lock, 0);
269
+ gpr_atm_rel_store(&block->bytes_committed, 0);
270
+ block->bytes_read = 0;
271
+ cl_block_list_struct_initialize(&block->link, block);
272
+ }
273
+
274
+ // Guards against exposing partially written buffer to the reader.
275
+ static void cl_block_set_bytes_committed(cl_block* block,
276
+ size_t bytes_committed) {
277
+ gpr_atm_rel_store(&block->bytes_committed, (gpr_atm)bytes_committed);
278
+ }
279
+
280
+ static size_t cl_block_get_bytes_committed(cl_block* block) {
281
+ return (size_t)gpr_atm_acq_load(&block->bytes_committed);
282
+ }
283
+
284
+ // Tries to disable future read/write access to this block. Succeeds if:
285
+ // - no in-progress write AND
286
+ // - no in-progress read AND
287
+ // - 'discard_data' set to true OR no unread data
288
+ // On success, clears the block state and returns with writer_lock_ and
289
+ // reader_lock_ held. These locks are released by a subsequent
290
+ // cl_block_access_enable() call.
291
+ static bool cl_block_try_disable_access(cl_block* block, int discard_data) {
292
+ if (!cl_try_lock(&block->writer_lock)) {
293
+ return false;
294
+ }
295
+ if (!cl_try_lock(&block->reader_lock)) {
296
+ cl_unlock(&block->writer_lock);
297
+ return false;
298
+ }
299
+ if (!discard_data &&
300
+ (block->bytes_read != cl_block_get_bytes_committed(block))) {
301
+ cl_unlock(&block->reader_lock);
302
+ cl_unlock(&block->writer_lock);
303
+ return false;
304
+ }
305
+ cl_block_set_bytes_committed(block, 0);
306
+ block->bytes_read = 0;
307
+ return true;
308
+ }
309
+
310
+ static void cl_block_enable_access(cl_block* block) {
311
+ cl_unlock(&block->reader_lock);
312
+ cl_unlock(&block->writer_lock);
313
+ }
314
+
315
+ // Returns with writer_lock held.
316
+ static void* cl_block_start_write(cl_block* block, size_t size) {
317
+ if (!cl_try_lock(&block->writer_lock)) {
318
+ return NULL;
319
+ }
320
+ size_t bytes_committed = cl_block_get_bytes_committed(block);
321
+ if (bytes_committed + size > CENSUS_LOG_MAX_RECORD_SIZE) {
322
+ cl_unlock(&block->writer_lock);
323
+ return NULL;
324
+ }
325
+ return block->buffer + bytes_committed;
326
+ }
327
+
328
+ // Releases writer_lock and increments committed bytes by 'bytes_written'.
329
+ // 'bytes_written' must be <= 'size' specified in the corresponding
330
+ // StartWrite() call. This function is thread-safe.
331
+ static void cl_block_end_write(cl_block* block, size_t bytes_written) {
332
+ cl_block_set_bytes_committed(
333
+ block, cl_block_get_bytes_committed(block) + bytes_written);
334
+ cl_unlock(&block->writer_lock);
335
+ }
336
+
337
+ // Returns a pointer to the first unread byte in buffer. The number of bytes
338
+ // available are returned in 'bytes_available'. Acquires reader lock that is
339
+ // released by a subsequent cl_block_end_read() call. Returns NULL if:
340
+ // - read in progress
341
+ // - no data available
342
+ static void* cl_block_start_read(cl_block* block, size_t* bytes_available) {
343
+ if (!cl_try_lock(&block->reader_lock)) {
344
+ return NULL;
345
+ }
346
+ // bytes_committed may change from under us. Use bytes_available to update
347
+ // bytes_read below.
348
+ size_t bytes_committed = cl_block_get_bytes_committed(block);
349
+ GPR_ASSERT(bytes_committed >= block->bytes_read);
350
+ *bytes_available = bytes_committed - block->bytes_read;
351
+ if (*bytes_available == 0) {
352
+ cl_unlock(&block->reader_lock);
353
+ return NULL;
354
+ }
355
+ void* record = block->buffer + block->bytes_read;
356
+ block->bytes_read += *bytes_available;
357
+ return record;
358
+ }
359
+
360
+ static void cl_block_end_read(cl_block* block) {
361
+ cl_unlock(&block->reader_lock);
362
+ }
363
+
364
+ // Internal functions operating on g_log
365
+
366
+ // Allocates a new free block (or recycles an available dirty block if log is
367
+ // configured to discard old records). Returns NULL if out-of-space.
368
+ static cl_block* cl_allocate_block(void) {
369
+ cl_block* block = cl_block_list_head(&g_log.free_block_list);
370
+ if (block != NULL) {
371
+ cl_block_list_remove(&g_log.free_block_list, block);
372
+ return block;
373
+ }
374
+ if (!g_log.discard_old_records) {
375
+ // No free block and log is configured to keep old records.
376
+ return NULL;
377
+ }
378
+ // Recycle dirty block. Start from the oldest.
379
+ for (block = cl_block_list_head(&g_log.dirty_block_list); block != NULL;
380
+ block = block->link.next->block) {
381
+ if (cl_block_try_disable_access(block, 1 /* discard data */)) {
382
+ cl_block_list_remove(&g_log.dirty_block_list, block);
383
+ return block;
384
+ }
385
+ }
386
+ return NULL;
387
+ }
388
+
389
+ // Allocates a new block and updates core id => block mapping. 'old_block'
390
+ // points to the block that the caller thinks is attached to
391
+ // 'core_id'. 'old_block' may be NULL. Returns true if:
392
+ // - allocated a new block OR
393
+ // - 'core_id' => 'old_block' mapping changed (another thread allocated a
394
+ // block before lock was acquired).
395
+ static bool cl_allocate_core_local_block(uint32_t core_id,
396
+ cl_block* old_block) {
397
+ // Now that we have the lock, check if core-local mapping has changed.
398
+ cl_core_local_block* core_local_block = &g_log.core_local_blocks[core_id];
399
+ cl_block* block = cl_core_local_block_get_block(core_local_block);
400
+ if ((block != NULL) && (block != old_block)) {
401
+ return true;
402
+ }
403
+ if (block != NULL) {
404
+ cl_core_local_block_set_block(core_local_block, NULL);
405
+ cl_block_list_insert_at_tail(&g_log.dirty_block_list, block);
406
+ }
407
+ block = cl_allocate_block();
408
+ if (block == NULL) {
409
+ return false;
410
+ }
411
+ cl_core_local_block_set_block(core_local_block, block);
412
+ cl_block_enable_access(block);
413
+ return true;
414
+ }
415
+
416
+ static cl_block* cl_get_block(void* record) {
417
+ uintptr_t p = (uintptr_t)((char*)record - g_log.buffer);
418
+ uintptr_t index = p >> CENSUS_LOG_2_MAX_RECORD_SIZE;
419
+ return &g_log.blocks[index];
420
+ }
421
+
422
+ // Gets the next block to read and tries to free 'prev' block (if not NULL).
423
+ // Returns NULL if reached the end.
424
+ static cl_block* cl_next_block_to_read(cl_block* prev) {
425
+ cl_block* block = NULL;
426
+ if (g_log.read_iterator_state == g_log.num_cores) {
427
+ // We are traversing dirty list; find the next dirty block.
428
+ if (prev != NULL) {
429
+ // Try to free the previous block if there is no unread data. This
430
+ // block
431
+ // may have unread data if previously incomplete record completed
432
+ // between
433
+ // read_next() calls.
434
+ block = prev->link.next->block;
435
+ if (cl_block_try_disable_access(prev, 0 /* do not discard data */)) {
436
+ cl_block_list_remove(&g_log.dirty_block_list, prev);
437
+ cl_block_list_insert_at_head(&g_log.free_block_list, prev);
438
+ }
439
+ } else {
440
+ block = cl_block_list_head(&g_log.dirty_block_list);
441
+ }
442
+ if (block != NULL) {
443
+ return block;
444
+ }
445
+ // We are done with the dirty list; moving on to core-local blocks.
446
+ }
447
+ while (g_log.read_iterator_state > 0) {
448
+ g_log.read_iterator_state--;
449
+ block = cl_core_local_block_get_block(
450
+ &g_log.core_local_blocks[g_log.read_iterator_state]);
451
+ if (block != NULL) {
452
+ return block;
453
+ }
454
+ }
455
+ return NULL;
456
+ }
457
+
458
+ #define CL_LOG_2_MB 20 // 2^20 = 1MB
459
+
460
+ // External functions: primary stats_log interface
461
+ void census_log_initialize(size_t size_in_mb, int discard_old_records) {
462
+ // Check cacheline alignment.
463
+ GPR_ASSERT(sizeof(cl_block) % GPR_CACHELINE_SIZE == 0);
464
+ GPR_ASSERT(sizeof(cl_core_local_block) % GPR_CACHELINE_SIZE == 0);
465
+ GPR_ASSERT(!g_log.initialized);
466
+ g_log.discard_old_records = discard_old_records;
467
+ g_log.num_cores = gpr_cpu_num_cores();
468
+ // Ensure that we will not get any overflow in calaculating num_blocks
469
+ GPR_ASSERT(CL_LOG_2_MB >= CENSUS_LOG_2_MAX_RECORD_SIZE);
470
+ GPR_ASSERT(size_in_mb < 1000);
471
+ // Ensure at least 2x as many blocks as there are cores.
472
+ g_log.num_blocks =
473
+ (uint32_t)GPR_MAX(2 * g_log.num_cores, (size_in_mb << CL_LOG_2_MB) >>
474
+ CENSUS_LOG_2_MAX_RECORD_SIZE);
475
+ gpr_mu_init(&g_log.lock);
476
+ g_log.read_iterator_state = 0;
477
+ g_log.block_being_read = NULL;
478
+ g_log.core_local_blocks = (cl_core_local_block*)gpr_malloc_aligned(
479
+ g_log.num_cores * sizeof(cl_core_local_block), GPR_CACHELINE_SIZE_LOG);
480
+ memset(g_log.core_local_blocks, 0,
481
+ g_log.num_cores * sizeof(cl_core_local_block));
482
+ g_log.blocks = (cl_block*)gpr_malloc_aligned(
483
+ g_log.num_blocks * sizeof(cl_block), GPR_CACHELINE_SIZE_LOG);
484
+ memset(g_log.blocks, 0, g_log.num_blocks * sizeof(cl_block));
485
+ g_log.buffer = gpr_malloc(g_log.num_blocks * CENSUS_LOG_MAX_RECORD_SIZE);
486
+ memset(g_log.buffer, 0, g_log.num_blocks * CENSUS_LOG_MAX_RECORD_SIZE);
487
+ cl_block_list_initialize(&g_log.free_block_list);
488
+ cl_block_list_initialize(&g_log.dirty_block_list);
489
+ for (uint32_t i = 0; i < g_log.num_blocks; ++i) {
490
+ cl_block* block = g_log.blocks + i;
491
+ cl_block_initialize(block, g_log.buffer + (CENSUS_LOG_MAX_RECORD_SIZE * i));
492
+ cl_block_try_disable_access(block, 1 /* discard data */);
493
+ cl_block_list_insert_at_tail(&g_log.free_block_list, block);
494
+ }
495
+ gpr_atm_rel_store(&g_log.out_of_space_count, 0);
496
+ g_log.initialized = 1;
497
+ }
498
+
499
+ void census_log_shutdown(void) {
500
+ GPR_ASSERT(g_log.initialized);
501
+ gpr_mu_destroy(&g_log.lock);
502
+ gpr_free_aligned(g_log.core_local_blocks);
503
+ g_log.core_local_blocks = NULL;
504
+ gpr_free_aligned(g_log.blocks);
505
+ g_log.blocks = NULL;
506
+ gpr_free(g_log.buffer);
507
+ g_log.buffer = NULL;
508
+ g_log.initialized = 0;
509
+ }
510
+
511
+ void* census_log_start_write(size_t size) {
512
+ // Used to bound number of times block allocation is attempted.
513
+ GPR_ASSERT(size > 0);
514
+ GPR_ASSERT(g_log.initialized);
515
+ if (size > CENSUS_LOG_MAX_RECORD_SIZE) {
516
+ return NULL;
517
+ }
518
+ uint32_t attempts_remaining = g_log.num_blocks;
519
+ uint32_t core_id = gpr_cpu_current_cpu();
520
+ do {
521
+ void* record = NULL;
522
+ cl_block* block =
523
+ cl_core_local_block_get_block(&g_log.core_local_blocks[core_id]);
524
+ if (block && (record = cl_block_start_write(block, size))) {
525
+ return record;
526
+ }
527
+ // Need to allocate a new block. We are here if:
528
+ // - No block associated with the core OR
529
+ // - Write in-progress on the block OR
530
+ // - block is out of space
531
+ gpr_mu_lock(&g_log.lock);
532
+ bool allocated = cl_allocate_core_local_block(core_id, block);
533
+ gpr_mu_unlock(&g_log.lock);
534
+ if (!allocated) {
535
+ gpr_atm_no_barrier_fetch_add(&g_log.out_of_space_count, 1);
536
+ return NULL;
537
+ }
538
+ } while (attempts_remaining--);
539
+ // Give up.
540
+ gpr_atm_no_barrier_fetch_add(&g_log.out_of_space_count, 1);
541
+ return NULL;
542
+ }
543
+
544
+ void census_log_end_write(void* record, size_t bytes_written) {
545
+ GPR_ASSERT(g_log.initialized);
546
+ cl_block_end_write(cl_get_block(record), bytes_written);
547
+ }
548
+
549
+ void census_log_init_reader(void) {
550
+ GPR_ASSERT(g_log.initialized);
551
+ gpr_mu_lock(&g_log.lock);
552
+ // If a block is locked for reading unlock it.
553
+ if (g_log.block_being_read != NULL) {
554
+ cl_block_end_read(g_log.block_being_read);
555
+ g_log.block_being_read = NULL;
556
+ }
557
+ g_log.read_iterator_state = g_log.num_cores;
558
+ gpr_mu_unlock(&g_log.lock);
559
+ }
560
+
561
+ const void* census_log_read_next(size_t* bytes_available) {
562
+ GPR_ASSERT(g_log.initialized);
563
+ gpr_mu_lock(&g_log.lock);
564
+ if (g_log.block_being_read != NULL) {
565
+ cl_block_end_read(g_log.block_being_read);
566
+ }
567
+ do {
568
+ g_log.block_being_read = cl_next_block_to_read(g_log.block_being_read);
569
+ if (g_log.block_being_read != NULL) {
570
+ void* record =
571
+ cl_block_start_read(g_log.block_being_read, bytes_available);
572
+ if (record != NULL) {
573
+ gpr_mu_unlock(&g_log.lock);
574
+ return record;
575
+ }
576
+ }
577
+ } while (g_log.block_being_read != NULL);
578
+ gpr_mu_unlock(&g_log.lock);
579
+ return NULL;
580
+ }
581
+
582
+ size_t census_log_remaining_space(void) {
583
+ GPR_ASSERT(g_log.initialized);
584
+ size_t space = 0;
585
+ gpr_mu_lock(&g_log.lock);
586
+ if (g_log.discard_old_records) {
587
+ // Remaining space is not meaningful; just return the entire log space.
588
+ space = g_log.num_blocks << CENSUS_LOG_2_MAX_RECORD_SIZE;
589
+ } else {
590
+ GPR_ASSERT(g_log.free_block_list.count >= 0);
591
+ space = (size_t)g_log.free_block_list.count * CENSUS_LOG_MAX_RECORD_SIZE;
592
+ }
593
+ gpr_mu_unlock(&g_log.lock);
594
+ return space;
595
+ }
596
+
597
+ int64_t census_log_out_of_space_count(void) {
598
+ GPR_ASSERT(g_log.initialized);
599
+ return gpr_atm_acq_load(&g_log.out_of_space_count);
600
+ }