grpc 1.73.0 → 1.74.0

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 (499) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +38 -17
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +74 -17
  6. data/include/grpc/grpc_posix.h +20 -1
  7. data/include/grpc/impl/channel_arg_names.h +2 -4
  8. data/include/grpc/module.modulemap +1 -0
  9. data/include/grpc/support/json.h +24 -0
  10. data/src/core/call/interception_chain.h +7 -11
  11. data/src/core/channelz/channel_trace.cc +213 -115
  12. data/src/core/channelz/channel_trace.h +380 -86
  13. data/src/core/channelz/channelz.cc +270 -181
  14. data/src/core/channelz/channelz.h +168 -55
  15. data/src/core/channelz/channelz_registry.cc +2 -1
  16. data/src/core/channelz/channelz_registry.h +24 -0
  17. data/src/core/channelz/property_list.cc +357 -0
  18. data/src/core/channelz/property_list.h +202 -0
  19. data/src/core/channelz/ztrace_collector.h +3 -2
  20. data/src/core/client_channel/backup_poller.cc +17 -2
  21. data/src/core/client_channel/client_channel.cc +17 -28
  22. data/src/core/client_channel/client_channel_filter.cc +19 -29
  23. data/src/core/client_channel/config_selector.h +8 -2
  24. data/src/core/client_channel/dynamic_filters.cc +5 -6
  25. data/src/core/client_channel/dynamic_filters.h +1 -1
  26. data/src/core/client_channel/global_subchannel_pool.cc +4 -1
  27. data/src/core/client_channel/retry_filter.cc +21 -27
  28. data/src/core/client_channel/retry_filter.h +10 -7
  29. data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
  30. data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
  31. data/src/core/client_channel/retry_interceptor.cc +30 -44
  32. data/src/core/client_channel/retry_interceptor.h +18 -17
  33. data/src/core/client_channel/retry_throttle.cc +46 -61
  34. data/src/core/client_channel/retry_throttle.h +17 -39
  35. data/src/core/client_channel/subchannel.cc +43 -19
  36. data/src/core/client_channel/subchannel.h +8 -0
  37. data/src/core/config/config_vars.cc +2 -0
  38. data/src/core/config/core_configuration.cc +1 -0
  39. data/src/core/config/core_configuration.h +11 -0
  40. data/src/core/credentials/call/call_creds_registry.h +125 -0
  41. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  42. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
  43. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  44. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  45. data/src/core/credentials/call/jwt_util.cc +70 -0
  46. data/src/core/credentials/call/jwt_util.h +32 -0
  47. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  48. data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
  49. data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
  50. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
  51. data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
  52. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
  53. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
  54. data/src/core/ext/filters/http/client_authority_filter.cc +2 -4
  55. data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
  56. data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
  57. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
  58. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
  59. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +162 -115
  60. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
  61. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  62. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  63. data/src/core/ext/transport/chttp2/transport/flow_control.h +22 -17
  64. data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
  65. data/src/core/ext/transport/chttp2/transport/frame.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
  67. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
  69. data/src/core/ext/transport/chttp2/transport/header_assembler.h +299 -0
  70. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
  71. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
  72. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
  73. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1017 -0
  74. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
  75. data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
  76. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  77. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  78. data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
  79. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +43 -0
  80. data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -0
  81. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
  82. data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
  83. data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
  84. data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
  85. data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
  86. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
  87. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
  88. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
  89. data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -0
  90. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
  91. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
  92. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
  93. data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
  94. data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
  95. data/src/core/ext/transport/chttp2/transport/writing.cc +37 -11
  96. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  97. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  98. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  99. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  100. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  101. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  102. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +984 -0
  103. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -0
  104. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  105. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  106. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  107. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +135 -0
  108. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  109. data/src/core/filter/auth/auth_filters.h +0 -25
  110. data/src/core/filter/auth/client_auth_filter.cc +0 -118
  111. data/src/core/filter/filter_args.h +9 -23
  112. data/src/core/handshaker/handshaker.cc +23 -14
  113. data/src/core/handshaker/handshaker.h +3 -0
  114. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
  115. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -5
  116. data/src/core/handshaker/security/secure_endpoint.cc +70 -25
  117. data/src/core/handshaker/security/security_handshaker.cc +4 -1
  118. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
  119. data/src/core/lib/channel/channel_args.cc +15 -0
  120. data/src/core/lib/channel/channel_args.h +3 -0
  121. data/src/core/lib/channel/channel_stack.cc +22 -23
  122. data/src/core/lib/channel/channel_stack.h +9 -7
  123. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  124. data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
  125. data/src/core/lib/channel/promise_based_filter.h +5 -5
  126. data/src/core/lib/debug/trace_impl.h +0 -1
  127. data/src/core/lib/event_engine/ares_resolver.cc +165 -46
  128. data/src/core/lib/event_engine/ares_resolver.h +48 -2
  129. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
  130. data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
  131. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -6
  132. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  133. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  134. data/src/core/lib/event_engine/event_engine.cc +7 -0
  135. data/src/core/lib/event_engine/extensions/channelz.h +10 -6
  136. data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
  137. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +130 -162
  138. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
  139. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
  140. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
  141. data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
  142. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
  143. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  144. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  145. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +29 -19
  146. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
  147. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  148. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +145 -92
  149. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
  150. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
  151. data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
  152. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
  153. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
  154. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
  155. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
  156. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  157. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  158. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  159. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  160. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  161. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
  162. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +10 -170
  163. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
  164. data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
  165. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
  166. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
  167. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
  168. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
  169. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
  170. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
  171. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  172. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
  173. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  174. data/src/core/lib/event_engine/shim.cc +9 -0
  175. data/src/core/lib/event_engine/shim.h +3 -0
  176. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  177. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  178. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
  179. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
  180. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -0
  181. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
  182. data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
  183. data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
  184. data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
  185. data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
  186. data/src/core/lib/experiments/experiments.cc +45 -93
  187. data/src/core/lib/experiments/experiments.h +21 -51
  188. data/src/core/lib/iomgr/endpoint.cc +4 -3
  189. data/src/core/lib/iomgr/endpoint.h +7 -4
  190. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
  191. data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
  192. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
  193. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
  194. data/src/core/lib/iomgr/tcp_posix.cc +12 -6
  195. data/src/core/lib/iomgr/tcp_windows.cc +3 -2
  196. data/src/core/lib/promise/activity.h +1 -0
  197. data/src/core/lib/promise/arena_promise.h +23 -7
  198. data/src/core/lib/promise/detail/promise_factory.h +10 -0
  199. data/src/core/lib/promise/detail/promise_like.h +118 -11
  200. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  201. data/src/core/lib/promise/detail/seq_state.h +687 -548
  202. data/src/core/lib/promise/if.h +20 -0
  203. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  204. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  205. data/src/core/lib/promise/loop.h +65 -3
  206. data/src/core/lib/promise/map.h +24 -0
  207. data/src/core/lib/promise/match_promise.h +103 -0
  208. data/src/core/lib/promise/mpsc.cc +425 -0
  209. data/src/core/lib/promise/mpsc.h +490 -0
  210. data/src/core/lib/promise/party.cc +50 -1
  211. data/src/core/lib/promise/party.h +66 -1
  212. data/src/core/lib/promise/race.h +31 -0
  213. data/src/core/lib/promise/seq.h +4 -1
  214. data/src/core/lib/promise/status_flag.h +7 -0
  215. data/src/core/lib/promise/try_seq.h +4 -1
  216. data/src/core/lib/promise/wait_set.cc +28 -0
  217. data/src/core/lib/promise/wait_set.h +86 -0
  218. data/src/core/lib/resource_quota/arena.h +19 -0
  219. data/src/core/lib/slice/slice.h +5 -0
  220. data/src/core/lib/surface/channel_create.cc +88 -13
  221. data/src/core/lib/surface/channel_create.h +4 -0
  222. data/src/core/lib/surface/channel_init.cc +164 -47
  223. data/src/core/lib/surface/channel_init.h +64 -1
  224. data/src/core/lib/surface/filter_stack_call.cc +18 -9
  225. data/src/core/lib/surface/init.cc +6 -15
  226. data/src/core/lib/surface/legacy_channel.cc +3 -5
  227. data/src/core/lib/surface/legacy_channel.h +3 -1
  228. data/src/core/lib/surface/version.cc +2 -2
  229. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  230. data/src/core/lib/transport/promise_endpoint.h +307 -0
  231. data/src/core/load_balancing/child_policy_handler.cc +2 -4
  232. data/src/core/load_balancing/delegating_helper.h +2 -3
  233. data/src/core/load_balancing/health_check_client.cc +1 -5
  234. data/src/core/load_balancing/lb_policy.h +1 -3
  235. data/src/core/load_balancing/oob_backend_metric.cc +1 -5
  236. data/src/core/load_balancing/pick_first/pick_first.cc +3 -0
  237. data/src/core/load_balancing/xds/cds.cc +10 -1
  238. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  239. data/src/core/resolver/xds/xds_config.cc +6 -3
  240. data/src/core/resolver/xds/xds_config.h +9 -4
  241. data/src/core/resolver/xds/xds_dependency_manager.cc +21 -6
  242. data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
  243. data/src/core/resolver/xds/xds_resolver.cc +31 -11
  244. data/src/core/server/server.cc +83 -12
  245. data/src/core/server/server.h +21 -2
  246. data/src/core/server/xds_server_config_fetcher.cc +63 -25
  247. data/src/core/service_config/service_config.h +1 -1
  248. data/src/core/service_config/service_config_impl.h +1 -1
  249. data/src/core/telemetry/context_list_entry.cc +38 -0
  250. data/src/core/telemetry/context_list_entry.h +42 -12
  251. data/src/core/telemetry/stats_data.cc +233 -207
  252. data/src/core/telemetry/stats_data.h +250 -153
  253. data/src/core/telemetry/tcp_tracer.h +1 -1
  254. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
  255. data/src/core/tsi/fake_transport_security.cc +17 -0
  256. data/src/core/tsi/ssl_transport_security.cc +2 -0
  257. data/src/core/tsi/transport_security_grpc.cc +8 -0
  258. data/src/core/tsi/transport_security_grpc.h +15 -0
  259. data/src/core/util/backoff.cc +1 -5
  260. data/src/core/util/backoff.h +1 -0
  261. data/src/core/util/down_cast.h +1 -1
  262. data/src/core/util/function_signature.h +15 -1
  263. data/src/core/util/http_client/httpcli.cc +12 -5
  264. data/src/core/util/http_client/httpcli.h +4 -1
  265. data/src/core/util/latent_see.h +8 -5
  266. data/src/core/util/log.cc +4 -0
  267. data/src/core/util/memory_usage.h +268 -0
  268. data/src/core/util/per_cpu.cc +2 -0
  269. data/src/core/util/per_cpu.h +7 -0
  270. data/src/core/util/shared_bit_gen.h +20 -0
  271. data/src/core/util/single_set_ptr.h +2 -2
  272. data/src/core/util/upb_utils.h +42 -0
  273. data/src/core/util/uri.cc +3 -2
  274. data/src/core/util/useful.h +53 -2
  275. data/src/core/util/wait_for_single_owner.cc +31 -0
  276. data/src/core/util/wait_for_single_owner.h +24 -0
  277. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
  278. data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
  279. data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
  280. data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
  281. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  282. data/src/core/xds/grpc/xds_http_filter.h +7 -0
  283. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
  284. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
  285. data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
  286. data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
  287. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  288. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  289. data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
  290. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  291. data/src/core/xds/xds_client/xds_client.cc +26 -5
  292. data/src/ruby/ext/grpc/extconf.rb +2 -0
  293. data/src/ruby/ext/grpc/rb_call.c +1 -8
  294. data/src/ruby/ext/grpc/rb_channel.c +72 -568
  295. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  296. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  297. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  298. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  299. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  300. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  301. data/src/ruby/ext/grpc/rb_server.c +31 -50
  302. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  303. data/src/ruby/lib/grpc/version.rb +1 -1
  304. data/src/ruby/spec/core_spec.rb +22 -0
  305. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  306. data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
  307. data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
  308. data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
  309. data/third_party/abseil-cpp/absl/base/config.h +20 -129
  310. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  311. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  312. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  313. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  314. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  315. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  316. data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
  317. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  318. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  319. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  320. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  321. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  322. data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
  323. data/third_party/abseil-cpp/absl/base/options.h +3 -80
  324. data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
  325. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  326. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  327. data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
  328. data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
  329. data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
  330. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
  331. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
  332. data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
  333. data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
  334. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  335. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  336. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  337. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
  338. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  339. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  340. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  341. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  342. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  343. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  344. data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
  345. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  346. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
  347. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
  348. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  349. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  350. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  351. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  352. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  353. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  354. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  355. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  356. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  357. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  358. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  359. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  360. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  361. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  362. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  363. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  364. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  365. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  366. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  367. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  368. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  369. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
  370. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  371. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  372. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  373. data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
  374. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  375. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
  376. data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
  377. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  378. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  379. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  380. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  381. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  382. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  383. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  384. data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
  385. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
  387. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
  388. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  389. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  390. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  391. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  392. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  393. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
  394. data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
  395. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  396. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  397. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  398. data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
  399. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  400. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
  401. data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
  402. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  403. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  404. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  405. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  406. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  407. data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
  408. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  409. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  410. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  411. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  412. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  413. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  414. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  415. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  416. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  417. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  419. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  420. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  421. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  422. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  423. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  424. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  425. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  426. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  427. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  428. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  429. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  430. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  431. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  432. data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
  433. data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
  434. data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
  435. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  436. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  437. data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
  438. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  439. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  440. data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
  441. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  442. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  443. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
  444. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  445. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  446. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  447. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  448. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  449. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  450. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  451. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  452. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  453. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  454. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  455. data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
  456. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  457. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  458. data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
  459. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  460. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  461. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  462. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  463. data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
  464. data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
  465. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  466. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  467. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  468. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  469. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  470. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  471. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  472. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  473. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  474. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
  475. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  476. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  477. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  478. data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
  479. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  480. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  481. data/third_party/abseil-cpp/absl/time/time.h +20 -15
  482. data/third_party/abseil-cpp/absl/types/optional.h +7 -747
  483. data/third_party/abseil-cpp/absl/types/span.h +13 -11
  484. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  485. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  486. metadata +72 -20
  487. data/src/core/lib/event_engine/forkable.cc +0 -105
  488. data/src/core/lib/event_engine/forkable.h +0 -67
  489. data/src/core/lib/iomgr/python_util.h +0 -46
  490. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  491. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  492. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  493. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  494. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  495. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  496. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  497. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  498. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  499. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
@@ -23,17 +23,23 @@
23
23
  #endif
24
24
 
25
25
  #include <algorithm>
26
+ #include <cassert>
26
27
  #include <cerrno>
27
28
  #include <cstdint>
28
29
  #include <cstdlib>
29
30
  #include <cstring>
31
+ #include <string>
32
+ #include <vector>
30
33
 
34
+ #include "absl/base/config.h"
31
35
  #include "absl/base/dynamic_annotations.h"
32
36
  #include "absl/base/internal/raw_logging.h"
33
37
  #include "absl/strings/ascii.h"
34
38
  #include "absl/strings/escaping.h"
35
39
  #include "absl/strings/string_view.h"
36
40
  #include "absl/strings/strip.h"
41
+ #include "absl/types/optional.h"
42
+ #include "absl/types/span.h"
37
43
 
38
44
  #if defined(__native_client__)
39
45
 
@@ -167,24 +173,27 @@ bool ReadSeedMaterialFromDevURandom(absl::Span<uint32_t> values) {
167
173
  size_t buffer_size = sizeof(uint32_t) * values.size();
168
174
 
169
175
  int dev_urandom = open(kEntropyFile, O_RDONLY);
170
- bool success = (-1 != dev_urandom);
171
- if (!success) {
176
+ if (dev_urandom < 0) {
177
+ ABSL_RAW_LOG(ERROR, "Failed to open /dev/urandom.");
172
178
  return false;
173
179
  }
174
180
 
175
- while (success && buffer_size > 0) {
181
+ while (buffer_size > 0) {
176
182
  ssize_t bytes_read = read(dev_urandom, buffer, buffer_size);
177
183
  int read_error = errno;
178
- success = (bytes_read > 0);
179
- if (success) {
180
- buffer += bytes_read;
181
- buffer_size -= static_cast<size_t>(bytes_read);
182
- } else if (bytes_read == -1 && read_error == EINTR) {
183
- success = true; // Need to try again.
184
+ if (bytes_read == -1 && read_error == EINTR) {
185
+ // Interrupted, try again.
186
+ continue;
187
+ } else if (bytes_read <= 0) {
188
+ // EOF, or error.
189
+ break;
184
190
  }
191
+ buffer += bytes_read;
192
+ buffer_size -= static_cast<size_t>(bytes_read);
185
193
  }
194
+
186
195
  close(dev_urandom);
187
- return success;
196
+ return buffer_size == 0;
188
197
  }
189
198
 
190
199
  bool ReadSeedMaterialFromOSEntropyImpl(absl::Span<uint32_t> values) {
@@ -251,8 +260,7 @@ absl::optional<uint32_t> GetSaltMaterial() {
251
260
  static const auto salt_material = []() -> absl::optional<uint32_t> {
252
261
  uint32_t salt_value = 0;
253
262
 
254
- if (random_internal::ReadSeedMaterialFromOSEntropy(
255
- MakeSpan(&salt_value, 1))) {
263
+ if (ReadSeedMaterialFromOSEntropy(absl::MakeSpan(&salt_value, 1))) {
256
264
  return salt_value;
257
265
  }
258
266
 
@@ -21,7 +21,7 @@
21
21
  #include <string>
22
22
  #include <vector>
23
23
 
24
- #include "absl/base/attributes.h"
24
+ #include "absl/base/config.h"
25
25
  #include "absl/random/internal/fast_uniform_bits.h"
26
26
  #include "absl/types/optional.h"
27
27
  #include "absl/types/span.h"
@@ -54,7 +54,7 @@ static_assert(kEntropyBlocksNeeded > 0,
54
54
  // to the C++ Standard "Seed Sequence" concept [rand.req.seedseq].
55
55
  //
56
56
  // If values.data() == nullptr, the behavior is undefined.
57
- ABSL_MUST_USE_RESULT
57
+ [[nodiscard]]
58
58
  bool ReadSeedMaterialFromOSEntropy(absl::Span<uint32_t> values);
59
59
 
60
60
  // Attempts to fill a span of uint32_t-values using variates generated by an
@@ -65,8 +65,8 @@ bool ReadSeedMaterialFromOSEntropy(absl::Span<uint32_t> values);
65
65
  //
66
66
  // If urbg == nullptr or values.data() == nullptr, the behavior is undefined.
67
67
  template <typename URBG>
68
- ABSL_MUST_USE_RESULT bool ReadSeedMaterialFromURBG(
69
- URBG* urbg, absl::Span<uint32_t> values) {
68
+ [[nodiscard]] bool ReadSeedMaterialFromURBG(URBG* urbg,
69
+ absl::Span<uint32_t> values) {
70
70
  random_internal::FastUniformBits<uint32_t> distr;
71
71
 
72
72
  assert(urbg != nullptr && values.data() != nullptr);
@@ -94,7 +94,7 @@ void MixIntoSeedMaterial(absl::Span<const uint32_t> sequence,
94
94
  //
95
95
  // Salt is obtained only once and stored in static variable.
96
96
  //
97
- // May return empty value if optaining the salt was not possible.
97
+ // May return empty value if obtaining the salt was not possible.
98
98
  absl::optional<uint32_t> GetSaltMaterial();
99
99
 
100
100
  } // namespace random_internal
@@ -31,12 +31,13 @@
31
31
  #ifndef ABSL_RANDOM_RANDOM_H_
32
32
  #define ABSL_RANDOM_RANDOM_H_
33
33
 
34
+ #include <cstdint>
34
35
  #include <random>
35
36
 
37
+ #include "absl/base/config.h"
36
38
  #include "absl/random/distributions.h" // IWYU pragma: export
37
- #include "absl/random/internal/nonsecure_base.h" // IWYU pragma: export
38
- #include "absl/random/internal/pcg_engine.h" // IWYU pragma: export
39
- #include "absl/random/internal/pool_urbg.h"
39
+ #include "absl/random/internal/nonsecure_base.h"
40
+ #include "absl/random/internal/pcg_engine.h"
40
41
  #include "absl/random/internal/randen_engine.h"
41
42
  #include "absl/random/seed_sequences.h" // IWYU pragma: export
42
43
 
@@ -94,31 +95,46 @@ ABSL_NAMESPACE_BEGIN
94
95
  // types on modern x86, ARM, and PPC architectures.
95
96
  //
96
97
  // This type is thread-compatible, but not thread-safe.
97
-
98
- // ---------------------------------------------------------------------------
99
- // absl::BitGen member functions
100
- // ---------------------------------------------------------------------------
101
-
102
- // absl::BitGen::operator()()
103
- //
104
- // Calls the BitGen, returning a generated value.
105
-
106
- // absl::BitGen::min()
107
- //
108
- // Returns the smallest possible value from this bit generator.
109
-
110
- // absl::BitGen::max()
111
- //
112
- // Returns the largest possible value from this bit generator.
113
-
114
- // absl::BitGen::discard(num)
115
- //
116
- // Advances the internal state of this bit generator by `num` times, and
117
- // discards the intermediate results.
118
- // ---------------------------------------------------------------------------
119
-
120
- using BitGen = random_internal::NonsecureURBGBase<
121
- random_internal::randen_engine<uint64_t>>;
98
+ class BitGen : private random_internal::NonsecureURBGBase<
99
+ random_internal::randen_engine<uint64_t>> {
100
+ using Base = random_internal::NonsecureURBGBase<
101
+ random_internal::randen_engine<uint64_t>>;
102
+
103
+ public:
104
+ using result_type = typename Base::result_type;
105
+
106
+ // BitGen()
107
+ // BitGen(SeedSequence seed_seq)
108
+ //
109
+ // Copy disallowed.
110
+ // Move allowed.
111
+ using Base::Base;
112
+ using Base::operator=;
113
+
114
+ // BitGen::min()
115
+ //
116
+ // Returns the smallest possible value from this bit generator.
117
+ using Base::min;
118
+
119
+ // BitGen::max()
120
+ //
121
+ // Returns the largest possible value from this bit generator.
122
+ using Base::max;
123
+
124
+ // BitGen::discard(num)
125
+ //
126
+ // Advances the internal state of this bit generator by `num` times, and
127
+ // discards the intermediate results.
128
+ using Base::discard;
129
+
130
+ // BitGen::operator()()
131
+ //
132
+ // Invoke the URBG, returning a generated value.
133
+ using Base::operator();
134
+
135
+ using Base::operator==;
136
+ using Base::operator!=;
137
+ };
122
138
 
123
139
  // -----------------------------------------------------------------------------
124
140
  // absl::InsecureBitGen
@@ -156,32 +172,51 @@ using BitGen = random_internal::NonsecureURBGBase<
156
172
  // `absl::InsecureBitGen` is not cryptographically secure.
157
173
  //
158
174
  // Prefer `absl::BitGen` over `absl::InsecureBitGen` as the general type is
159
- // often fast enough for the vast majority of applications.
160
-
161
- using InsecureBitGen =
162
- random_internal::NonsecureURBGBase<random_internal::pcg64_2018_engine>;
163
-
164
- // ---------------------------------------------------------------------------
165
- // absl::InsecureBitGen member functions
166
- // ---------------------------------------------------------------------------
167
-
168
- // absl::InsecureBitGen::operator()()
169
- //
170
- // Calls the InsecureBitGen, returning a generated value.
171
-
172
- // absl::InsecureBitGen::min()
175
+ // often fast enough for the vast majority of applications. However, it is
176
+ // reasonable to use `absl::InsecureBitGen` in tests or when using a URBG
177
+ // in small isolated tasks such as in `std::shuffle`.
173
178
  //
174
- // Returns the smallest possible value from this bit generator.
175
-
176
- // absl::InsecureBitGen::max()
177
- //
178
- // Returns the largest possible value from this bit generator.
179
-
180
- // absl::InsecureBitGen::discard(num)
181
- //
182
- // Advances the internal state of this bit generator by `num` times, and
183
- // discards the intermediate results.
184
- // ---------------------------------------------------------------------------
179
+ // This type is thread-compatible, but not thread-safe.
180
+ class InsecureBitGen : private random_internal::NonsecureURBGBase<
181
+ random_internal::pcg64_2018_engine> {
182
+ using Base =
183
+ random_internal::NonsecureURBGBase<random_internal::pcg64_2018_engine>;
184
+
185
+ public:
186
+ using result_type = typename Base::result_type;
187
+
188
+ // InsecureBitGen()
189
+ // InsecureBitGen(SeedSequence seed_seq)
190
+ //
191
+ // Copy disallowed.
192
+ // Move allowed.
193
+ using Base::Base;
194
+ using Base::operator=;
195
+
196
+ // InsecureBitGen::min()
197
+ //
198
+ // Returns the smallest possible value from this bit generator.
199
+ using Base::min;
200
+
201
+ // InsecureBitGen::max()
202
+ //
203
+ // Returns the largest possible value from this bit generator.
204
+ using Base::max;
205
+
206
+ // InsecureBitGen::discard(num)
207
+ //
208
+ // Advances the internal state of this bit generator by `num` times, and
209
+ // discards the intermediate results.
210
+ using Base::discard;
211
+
212
+ // InsecureBitGen::operator()()
213
+ //
214
+ // Invoke the URBG, returning a generated value.
215
+ using Base::operator();
216
+
217
+ using Base::operator==;
218
+ using Base::operator!=;
219
+ };
185
220
 
186
221
  ABSL_NAMESPACE_END
187
222
  } // namespace absl
@@ -14,14 +14,18 @@
14
14
 
15
15
  #include "absl/random/seed_sequences.h"
16
16
 
17
- #include "absl/random/internal/pool_urbg.h"
17
+ #include <iterator>
18
+
19
+ #include "absl/base/config.h"
20
+ #include "absl/random/internal/entropy_pool.h"
18
21
 
19
22
  namespace absl {
20
23
  ABSL_NAMESPACE_BEGIN
21
24
 
22
25
  SeedSeq MakeSeedSeq() {
23
26
  SeedSeq::result_type seed_material[8];
24
- random_internal::RandenPool<uint32_t>::Fill(absl::MakeSpan(seed_material));
27
+ random_internal::GetEntropyFromRandenPool(&seed_material[0],
28
+ sizeof(seed_material[0]) * 8);
25
29
  return SeedSeq(std::begin(seed_material), std::end(seed_material));
26
30
  }
27
31
 
@@ -189,7 +189,7 @@ bool StatusRep::operator==(const StatusRep& other) const {
189
189
  return true;
190
190
  }
191
191
 
192
- absl::Nonnull<StatusRep*> StatusRep::CloneAndUnref() const {
192
+ StatusRep* absl_nonnull StatusRep::CloneAndUnref() const {
193
193
  // Optimization: no need to create a clone if we already have a refcount of 1.
194
194
  if (ref_.load(std::memory_order_acquire) == 1) {
195
195
  // All StatusRep instances are heap allocated and mutable, therefore this
@@ -235,9 +235,8 @@ absl::StatusCode MapToLocalCode(int value) {
235
235
  }
236
236
  }
237
237
 
238
- absl::Nonnull<const char*> MakeCheckFailString(
239
- absl::Nonnull<const absl::Status*> status,
240
- absl::Nonnull<const char*> prefix) {
238
+ const char* absl_nonnull MakeCheckFailString(
239
+ const absl::Status* absl_nonnull status, const char* absl_nonnull prefix) {
241
240
  // There's no need to free this string since the process is crashing.
242
241
  return absl::IgnoreLeak(
243
242
  new std::string(absl::StrCat(
@@ -100,7 +100,7 @@ class StatusRep {
100
100
  // Returns an equivalent heap allocated StatusRep with refcount 1.
101
101
  //
102
102
  // `this` is not safe to be used after calling as it may have been deleted.
103
- absl::Nonnull<StatusRep*> CloneAndUnref() const;
103
+ StatusRep* absl_nonnull CloneAndUnref() const;
104
104
 
105
105
  private:
106
106
  mutable std::atomic<int32_t> ref_;
@@ -120,9 +120,8 @@ absl::StatusCode MapToLocalCode(int value);
120
120
  //
121
121
  // This is an internal implementation detail for Abseil logging.
122
122
  ABSL_ATTRIBUTE_PURE_FUNCTION
123
- absl::Nonnull<const char*> MakeCheckFailString(
124
- absl::Nonnull<const absl::Status*> status,
125
- absl::Nonnull<const char*> prefix);
123
+ const char* absl_nonnull MakeCheckFailString(
124
+ const absl::Status* absl_nonnull status, const char* absl_nonnull prefix);
126
125
 
127
126
  } // namespace status_internal
128
127
 
@@ -39,7 +39,8 @@ template <typename T, typename U, typename = void>
39
39
  struct HasConversionOperatorToStatusOr : std::false_type {};
40
40
 
41
41
  template <typename T, typename U>
42
- void test(char (*)[sizeof(std::declval<U>().operator absl::StatusOr<T>())]);
42
+ void test(char (*absl_nullable)[sizeof(
43
+ std::declval<U>().operator absl::StatusOr<T>())]);
43
44
 
44
45
  template <typename T, typename U>
45
46
  struct HasConversionOperatorToStatusOr<T, U, decltype(test<T, U>(0))>
@@ -185,7 +186,7 @@ using IsStatusOrAssignmentValid = absl::conjunction<
185
186
  class Helper {
186
187
  public:
187
188
  // Move type-agnostic error handling to the .cc.
188
- static void HandleInvalidStatusCtorArg(absl::Nonnull<Status*>);
189
+ static void HandleInvalidStatusCtorArg(Status* absl_nonnull);
189
190
  [[noreturn]] static void Crash(const absl::Status& status);
190
191
  };
191
192
 
@@ -194,7 +195,7 @@ class Helper {
194
195
  // This abstraction is here mostly for the gcc performance fix.
195
196
  template <typename T, typename... Args>
196
197
  ABSL_ATTRIBUTE_NONNULL(1)
197
- void PlacementNew(absl::Nonnull<void*> p, Args&&... args) {
198
+ void PlacementNew(void* absl_nonnull p, Args&&... args) {
198
199
  new (p) T(std::forward<Args>(args)...);
199
200
  }
200
201
 
@@ -91,16 +91,12 @@ std::ostream& operator<<(std::ostream& os, StatusCode code) {
91
91
  return os << StatusCodeToString(code);
92
92
  }
93
93
 
94
- absl::Nonnull<const std::string*> Status::EmptyString() {
94
+ const std::string* absl_nonnull Status::EmptyString() {
95
95
  static const absl::NoDestructor<std::string> kEmpty;
96
96
  return kEmpty.get();
97
97
  }
98
98
 
99
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
100
- constexpr const char Status::kMovedFromString[];
101
- #endif
102
-
103
- absl::Nonnull<const std::string*> Status::MovedFromString() {
99
+ const std::string* absl_nonnull Status::MovedFromString() {
104
100
  static const absl::NoDestructor<std::string> kMovedFrom(kMovedFromString);
105
101
  return kMovedFrom.get();
106
102
  }
@@ -112,7 +108,7 @@ Status::Status(absl::StatusCode code, absl::string_view msg)
112
108
  }
113
109
  }
114
110
 
115
- absl::Nonnull<status_internal::StatusRep*> Status::PrepareToModify(
111
+ status_internal::StatusRep* absl_nonnull Status::PrepareToModify(
116
112
  uintptr_t rep) {
117
113
  if (IsInlined(rep)) {
118
114
  return new status_internal::StatusRep(InlinedRepToCode(rep),
@@ -410,7 +406,7 @@ Status ErrnoToStatus(int error_number, absl::string_view message) {
410
406
  MessageForErrnoToStatus(error_number, message));
411
407
  }
412
408
 
413
- absl::Nonnull<const char*> StatusMessageAsCStr(const Status& status) {
409
+ const char* absl_nonnull StatusMessageAsCStr(const Status& status) {
414
410
  // As an internal implementation detail, we guarantee that if status.message()
415
411
  // is non-empty, then the resulting string_view is null terminated.
416
412
  auto sv_message = status.message();
@@ -623,15 +623,15 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
623
623
 
624
624
  // REQUIRES: !ok()
625
625
  // Ensures rep is not inlined or shared with any other Status.
626
- static absl::Nonnull<status_internal::StatusRep*> PrepareToModify(
626
+ static status_internal::StatusRep* absl_nonnull PrepareToModify(
627
627
  uintptr_t rep);
628
628
 
629
629
  // MSVC 14.0 limitation requires the const.
630
630
  static constexpr const char kMovedFromString[] =
631
631
  "Status accessed after move.";
632
632
 
633
- static absl::Nonnull<const std::string*> EmptyString();
634
- static absl::Nonnull<const std::string*> MovedFromString();
633
+ static const std::string* absl_nonnull EmptyString();
634
+ static const std::string* absl_nonnull MovedFromString();
635
635
 
636
636
  // Returns whether rep contains an inlined representation.
637
637
  // See rep_ for details.
@@ -649,8 +649,8 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
649
649
 
650
650
  // Converts between StatusRep* and the external uintptr_t representation used
651
651
  // by rep_. See rep_ for details.
652
- static uintptr_t PointerToRep(absl::Nonnull<status_internal::StatusRep*> r);
653
- static absl::Nonnull<const status_internal::StatusRep*> RepToPointer(
652
+ static uintptr_t PointerToRep(status_internal::StatusRep* absl_nonnull r);
653
+ static const status_internal::StatusRep* absl_nonnull RepToPointer(
654
654
  uintptr_t r);
655
655
 
656
656
  static std::string ToStringSlow(uintptr_t rep, StatusToStringMode mode);
@@ -902,14 +902,14 @@ constexpr uintptr_t Status::MovedFromRep() {
902
902
  return CodeToInlinedRep(absl::StatusCode::kInternal) | 2;
903
903
  }
904
904
 
905
- inline absl::Nonnull<const status_internal::StatusRep*> Status::RepToPointer(
905
+ inline const status_internal::StatusRep* absl_nonnull Status::RepToPointer(
906
906
  uintptr_t rep) {
907
907
  assert(!IsInlined(rep));
908
908
  return reinterpret_cast<const status_internal::StatusRep*>(rep);
909
909
  }
910
910
 
911
911
  inline uintptr_t Status::PointerToRep(
912
- absl::Nonnull<status_internal::StatusRep*> rep) {
912
+ status_internal::StatusRep* absl_nonnull rep) {
913
913
  return reinterpret_cast<uintptr_t>(rep);
914
914
  }
915
915
 
@@ -934,7 +934,7 @@ inline Status CancelledError() { return Status(absl::StatusCode::kCancelled); }
934
934
  // If the status's message is empty, the empty string is returned.
935
935
  //
936
936
  // StatusMessageAsCStr exists for C support. Use `status.message()` in C++.
937
- absl::Nonnull<const char*> StatusMessageAsCStr(
937
+ const char* absl_nonnull StatusMessageAsCStr(
938
938
  const Status& status ABSL_ATTRIBUTE_LIFETIME_BOUND);
939
939
 
940
940
  ABSL_NAMESPACE_END
@@ -35,8 +35,8 @@ namespace status_internal {
35
35
  // NOTE: This is an internal API and the design is subject to change in the
36
36
  // future in a non-backward-compatible way. Since it's only meant for debugging
37
37
  // purpose, you should not rely on it in any critical logic.
38
- using StatusPayloadPrinter = absl::Nullable<absl::optional<std::string> (*)(
39
- absl::string_view, const absl::Cord&)>;
38
+ using StatusPayloadPrinter = absl::optional<std::string> (*absl_nullable)(
39
+ absl::string_view, const absl::Cord&);
40
40
 
41
41
  // Sets the global payload printer. Only one printer should be set per process.
42
42
  // If multiple printers are set, it's undefined which one will be used.
@@ -55,7 +55,7 @@ BadStatusOrAccess& BadStatusOrAccess::operator=(BadStatusOrAccess&& other) {
55
55
  BadStatusOrAccess::BadStatusOrAccess(BadStatusOrAccess&& other)
56
56
  : status_(std::move(other.status_)) {}
57
57
 
58
- absl::Nonnull<const char*> BadStatusOrAccess::what() const noexcept {
58
+ const char* absl_nonnull BadStatusOrAccess::what() const noexcept {
59
59
  InitWhat();
60
60
  return what_.c_str();
61
61
  }
@@ -70,7 +70,7 @@ void BadStatusOrAccess::InitWhat() const {
70
70
 
71
71
  namespace internal_statusor {
72
72
 
73
- void Helper::HandleInvalidStatusCtorArg(absl::Nonnull<absl::Status*> status) {
73
+ void Helper::HandleInvalidStatusCtorArg(absl::Status* absl_nonnull status) {
74
74
  const char* kMessage =
75
75
  "An OK status is not a valid constructor argument to StatusOr<T>";
76
76
  #ifdef NDEBUG
@@ -93,7 +93,7 @@ class BadStatusOrAccess : public std::exception {
93
93
  //
94
94
  // The pointer of this string is guaranteed to be valid until any non-const
95
95
  // function is invoked on the exception object.
96
- absl::Nonnull<const char*> what() const noexcept override;
96
+ const char* absl_nonnull what() const noexcept override;
97
97
 
98
98
  // BadStatusOrAccess::status()
99
99
  //
@@ -464,7 +464,7 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
464
464
  // Returns a reference to the current `absl::Status` contained within the
465
465
  // `absl::StatusOr<T>`. If `absl::StatusOr<T>` contains a `T`, then this
466
466
  // function returns `absl::OkStatus()`.
467
- const Status& status() const&;
467
+ ABSL_MUST_USE_RESULT const Status& status() const&;
468
468
  Status status() &&;
469
469
 
470
470
  // StatusOr<T>::value()
@@ -520,8 +520,8 @@ class StatusOr : private internal_statusor::StatusOrData<T>,
520
520
  // REQUIRES: `this->ok() == true`, otherwise the behavior is undefined.
521
521
  //
522
522
  // Use `this->ok()` to verify that there is a current value.
523
- const T* operator->() const ABSL_ATTRIBUTE_LIFETIME_BOUND;
524
- T* operator->() ABSL_ATTRIBUTE_LIFETIME_BOUND;
523
+ const T* absl_nonnull operator->() const ABSL_ATTRIBUTE_LIFETIME_BOUND;
524
+ T* absl_nonnull operator->() ABSL_ATTRIBUTE_LIFETIME_BOUND;
525
525
 
526
526
  // StatusOr<T>::value_or()
527
527
  //
@@ -756,13 +756,13 @@ T&& StatusOr<T>::operator*() && {
756
756
  }
757
757
 
758
758
  template <typename T>
759
- absl::Nonnull<const T*> StatusOr<T>::operator->() const {
759
+ const T* absl_nonnull StatusOr<T>::operator->() const {
760
760
  this->EnsureOk();
761
761
  return &this->data_;
762
762
  }
763
763
 
764
764
  template <typename T>
765
- absl::Nonnull<T*> StatusOr<T>::operator->() {
765
+ T* absl_nonnull StatusOr<T>::operator->() {
766
766
  this->EnsureOk();
767
767
  return &this->data_;
768
768
  }
@@ -183,8 +183,8 @@ constexpr bool AsciiInAZRangeNaive(unsigned char c) {
183
183
  }
184
184
 
185
185
  template <bool ToUpper, bool Naive>
186
- constexpr void AsciiStrCaseFoldImpl(absl::Nonnull<char*> dst,
187
- absl::Nullable<const char*> src,
186
+ constexpr void AsciiStrCaseFoldImpl(char* absl_nonnull dst,
187
+ const char* absl_nullable src,
188
188
  size_t size) {
189
189
  // The upper- and lowercase versions of ASCII characters differ by only 1 bit.
190
190
  // When we need to flip the case, we can xor with this bit to achieve the
@@ -211,18 +211,18 @@ constexpr void AsciiStrCaseFoldImpl(absl::Nonnull<char*> dst,
211
211
  // strings it's not important).
212
212
  // `src` may be null iff `size` is zero.
213
213
  template <bool ToUpper>
214
- constexpr void AsciiStrCaseFold(absl::Nonnull<char*> dst,
215
- absl::Nullable<const char*> src, size_t size) {
214
+ constexpr void AsciiStrCaseFold(char* absl_nonnull dst,
215
+ const char* absl_nullable src, size_t size) {
216
216
  size < 16 ? AsciiStrCaseFoldImpl<ToUpper, /*Naive=*/true>(dst, src, size)
217
217
  : AsciiStrCaseFoldImpl<ToUpper, /*Naive=*/false>(dst, src, size);
218
218
  }
219
219
 
220
- void AsciiStrToLower(absl::Nonnull<char*> dst, absl::Nullable<const char*> src,
220
+ void AsciiStrToLower(char* absl_nonnull dst, const char* absl_nullable src,
221
221
  size_t n) {
222
222
  return AsciiStrCaseFold<false>(dst, src, n);
223
223
  }
224
224
 
225
- void AsciiStrToUpper(absl::Nonnull<char*> dst, absl::Nullable<const char*> src,
225
+ void AsciiStrToUpper(char* absl_nonnull dst, const char* absl_nullable src,
226
226
  size_t n) {
227
227
  return AsciiStrCaseFold<true>(dst, src, n);
228
228
  }
@@ -253,17 +253,17 @@ static_assert(ValidateAsciiCasefold() == 0, "error in case conversion");
253
253
 
254
254
  } // namespace ascii_internal
255
255
 
256
- void AsciiStrToLower(absl::Nonnull<std::string*> s) {
256
+ void AsciiStrToLower(std::string* absl_nonnull s) {
257
257
  char* p = &(*s)[0];
258
258
  return ascii_internal::AsciiStrCaseFold<false>(p, p, s->size());
259
259
  }
260
260
 
261
- void AsciiStrToUpper(absl::Nonnull<std::string*> s) {
261
+ void AsciiStrToUpper(std::string* absl_nonnull s) {
262
262
  char* p = &(*s)[0];
263
263
  return ascii_internal::AsciiStrCaseFold<true>(p, p, s->size());
264
264
  }
265
265
 
266
- void RemoveExtraAsciiWhitespace(absl::Nonnull<std::string*> str) {
266
+ void RemoveExtraAsciiWhitespace(std::string* absl_nonnull str) {
267
267
  auto stripped = StripAsciiWhitespace(*str);
268
268
 
269
269
  if (stripped.empty()) {