grpc 1.37.1 → 1.38.0.pre1

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

Potentially problematic release.


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

Files changed (544) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +64 -58
  3. data/include/grpc/event_engine/README.md +38 -0
  4. data/include/grpc/event_engine/channel_args.h +28 -0
  5. data/include/grpc/event_engine/event_engine.h +336 -0
  6. data/include/grpc/event_engine/port.h +39 -0
  7. data/include/grpc/event_engine/slice_allocator.h +81 -0
  8. data/include/grpc/grpc.h +2 -2
  9. data/include/grpc/grpc_security_constants.h +14 -0
  10. data/include/grpc/impl/codegen/grpc_types.h +11 -0
  11. data/include/grpc/impl/codegen/port_platform.h +5 -0
  12. data/include/grpc/module.modulemap +14 -14
  13. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
  14. data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
  15. data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
  16. data/src/core/ext/filters/client_channel/client_channel.h +489 -55
  17. data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  20. data/src/core/ext/filters/client_channel/connector.h +1 -1
  21. data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
  22. data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
  23. data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
  24. data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
  34. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
  35. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
  41. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
  43. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver.h +2 -2
  45. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
  55. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
  56. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
  57. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
  58. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
  59. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
  60. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
  61. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
  62. data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
  63. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  64. data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
  65. data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
  66. data/src/core/ext/filters/client_channel/server_address.cc +1 -1
  67. data/src/core/ext/filters/client_channel/service_config.cc +15 -14
  68. data/src/core/ext/filters/client_channel/service_config.h +7 -6
  69. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
  70. data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
  71. data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
  72. data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
  73. data/src/core/ext/filters/client_channel/subchannel.h +7 -6
  74. data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
  75. data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
  76. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
  77. data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
  78. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  79. data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
  80. data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
  81. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
  82. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
  83. data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
  84. data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
  85. data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
  86. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  87. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  89. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  90. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
  91. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  92. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
  93. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
  94. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  95. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
  96. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
  97. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
  98. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
  99. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
  100. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
  101. data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
  102. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
  103. data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
  104. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
  105. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
  106. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
  107. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
  108. data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
  109. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  110. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
  111. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
  112. data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
  113. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
  114. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
  115. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
  116. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
  117. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
  118. data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
  119. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  120. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
  121. data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
  122. data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
  123. data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
  124. data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
  125. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  126. data/src/core/ext/xds/certificate_provider_store.h +3 -3
  127. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
  128. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
  129. data/src/core/ext/xds/xds_api.cc +101 -93
  130. data/src/core/ext/xds/xds_api.h +6 -6
  131. data/src/core/ext/xds/xds_bootstrap.cc +97 -159
  132. data/src/core/ext/xds/xds_bootstrap.h +19 -24
  133. data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
  134. data/src/core/ext/xds/xds_certificate_provider.h +4 -4
  135. data/src/core/ext/xds/xds_channel_args.h +5 -2
  136. data/src/core/ext/xds/xds_client.cc +310 -178
  137. data/src/core/ext/xds/xds_client.h +41 -27
  138. data/src/core/ext/xds/xds_client_stats.h +3 -2
  139. data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
  140. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
  141. data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
  142. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
  143. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
  144. data/src/core/lib/channel/channel_stack.cc +10 -9
  145. data/src/core/lib/channel/channel_stack.h +10 -9
  146. data/src/core/lib/channel/channel_stack_builder.cc +2 -2
  147. data/src/core/lib/channel/channel_stack_builder.h +1 -1
  148. data/src/core/lib/channel/channelz.cc +21 -13
  149. data/src/core/lib/channel/connected_channel.cc +4 -4
  150. data/src/core/lib/channel/handshaker.cc +7 -6
  151. data/src/core/lib/channel/handshaker.h +5 -5
  152. data/src/core/lib/event_engine/slice_allocator.cc +59 -0
  153. data/src/core/lib/event_engine/sockaddr.cc +38 -0
  154. data/src/core/lib/gprpp/ref_counted.h +28 -14
  155. data/src/core/lib/gprpp/status_helper.cc +407 -0
  156. data/src/core/lib/gprpp/status_helper.h +180 -0
  157. data/src/core/lib/http/httpcli.cc +11 -11
  158. data/src/core/lib/http/httpcli_security_connector.cc +11 -7
  159. data/src/core/lib/http/parser.cc +16 -16
  160. data/src/core/lib/http/parser.h +4 -4
  161. data/src/core/lib/iomgr/buffer_list.cc +7 -9
  162. data/src/core/lib/iomgr/buffer_list.h +4 -5
  163. data/src/core/lib/iomgr/call_combiner.cc +15 -12
  164. data/src/core/lib/iomgr/call_combiner.h +12 -14
  165. data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
  166. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  167. data/src/core/lib/iomgr/closure.h +7 -6
  168. data/src/core/lib/iomgr/combiner.cc +14 -12
  169. data/src/core/lib/iomgr/combiner.h +2 -2
  170. data/src/core/lib/iomgr/endpoint.cc +1 -1
  171. data/src/core/lib/iomgr/endpoint.h +2 -2
  172. data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
  173. data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
  174. data/src/core/lib/iomgr/error.cc +167 -61
  175. data/src/core/lib/iomgr/error.h +217 -106
  176. data/src/core/lib/iomgr/error_cfstream.cc +3 -2
  177. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  178. data/src/core/lib/iomgr/error_internal.h +5 -1
  179. data/src/core/lib/iomgr/ev_apple.cc +5 -5
  180. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  181. data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
  182. data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
  183. data/src/core/lib/iomgr/ev_posix.cc +9 -8
  184. data/src/core/lib/iomgr/ev_posix.h +9 -9
  185. data/src/core/lib/iomgr/exec_ctx.cc +4 -4
  186. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  187. data/src/core/lib/iomgr/executor.cc +8 -8
  188. data/src/core/lib/iomgr/executor.h +2 -2
  189. data/src/core/lib/iomgr/iomgr.cc +1 -1
  190. data/src/core/lib/iomgr/iomgr.h +1 -1
  191. data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
  192. data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
  193. data/src/core/lib/iomgr/iomgr_internal.h +3 -3
  194. data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
  195. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  196. data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
  197. data/src/core/lib/iomgr/load_file.cc +4 -4
  198. data/src/core/lib/iomgr/load_file.h +2 -2
  199. data/src/core/lib/iomgr/lockfree_event.cc +5 -5
  200. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  201. data/src/core/lib/iomgr/pollset.cc +5 -5
  202. data/src/core/lib/iomgr/pollset.h +9 -9
  203. data/src/core/lib/iomgr/pollset_custom.cc +5 -5
  204. data/src/core/lib/iomgr/pollset_windows.cc +5 -5
  205. data/src/core/lib/iomgr/port.h +1 -1
  206. data/src/core/lib/iomgr/python_util.h +1 -1
  207. data/src/core/lib/iomgr/resolve_address.cc +3 -3
  208. data/src/core/lib/iomgr/resolve_address.h +6 -6
  209. data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
  210. data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
  211. data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
  212. data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
  213. data/src/core/lib/iomgr/resource_quota.cc +11 -10
  214. data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
  215. data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
  216. data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
  217. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
  218. data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
  219. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  220. data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
  221. data/src/core/lib/iomgr/tcp_custom.cc +14 -16
  222. data/src/core/lib/iomgr/tcp_custom.h +13 -12
  223. data/src/core/lib/iomgr/tcp_posix.cc +36 -34
  224. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  225. data/src/core/lib/iomgr/tcp_server.h +12 -11
  226. data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
  227. data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
  228. data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
  229. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
  230. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
  231. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  232. data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
  233. data/src/core/lib/iomgr/tcp_uv.cc +25 -23
  234. data/src/core/lib/iomgr/tcp_windows.cc +13 -13
  235. data/src/core/lib/iomgr/tcp_windows.h +2 -2
  236. data/src/core/lib/iomgr/timer_custom.cc +2 -1
  237. data/src/core/lib/iomgr/timer_custom.h +1 -1
  238. data/src/core/lib/iomgr/timer_generic.cc +6 -6
  239. data/src/core/lib/iomgr/udp_server.cc +21 -20
  240. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  241. data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
  242. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
  243. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  244. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
  245. data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
  246. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  247. data/src/core/lib/iomgr/work_serializer.h +17 -1
  248. data/src/core/lib/json/json.h +1 -1
  249. data/src/core/lib/json/json_reader.cc +4 -4
  250. data/src/core/lib/matchers/matchers.cc +39 -39
  251. data/src/core/lib/matchers/matchers.h +28 -28
  252. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  253. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  254. data/src/core/lib/security/credentials/credentials.h +2 -2
  255. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
  256. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
  257. data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
  258. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  259. data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
  260. data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
  261. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
  262. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  263. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
  264. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
  265. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
  266. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  267. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
  268. data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
  269. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  270. data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
  271. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
  272. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  273. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
  274. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
  275. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
  276. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
  277. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
  278. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
  279. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
  280. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
  281. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
  282. data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
  283. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
  284. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
  285. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  286. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
  287. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
  288. data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
  289. data/src/core/lib/security/security_connector/security_connector.h +9 -4
  290. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
  291. data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
  292. data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
  293. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
  294. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
  295. data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
  296. data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
  297. data/src/core/lib/security/transport/security_handshaker.cc +33 -32
  298. data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
  299. data/src/core/lib/security/transport/tsi_error.cc +2 -1
  300. data/src/core/lib/security/transport/tsi_error.h +2 -1
  301. data/src/core/lib/security/util/json_util.cc +2 -2
  302. data/src/core/lib/security/util/json_util.h +1 -1
  303. data/src/core/lib/surface/call.cc +46 -45
  304. data/src/core/lib/surface/call.h +2 -2
  305. data/src/core/lib/surface/channel.cc +6 -6
  306. data/src/core/lib/surface/channel.h +3 -2
  307. data/src/core/lib/surface/channel_ping.cc +1 -1
  308. data/src/core/lib/surface/completion_queue.cc +46 -47
  309. data/src/core/lib/surface/completion_queue.h +2 -1
  310. data/src/core/lib/surface/lame_client.cc +11 -11
  311. data/src/core/lib/surface/lame_client.h +1 -1
  312. data/src/core/lib/surface/server.cc +28 -22
  313. data/src/core/lib/surface/server.h +16 -15
  314. data/src/core/lib/surface/validate_metadata.cc +7 -7
  315. data/src/core/lib/surface/validate_metadata.h +3 -2
  316. data/src/core/lib/surface/version.cc +4 -2
  317. data/src/core/lib/transport/byte_stream.cc +5 -5
  318. data/src/core/lib/transport/byte_stream.h +8 -8
  319. data/src/core/lib/transport/connectivity_state.cc +1 -1
  320. data/src/core/lib/transport/error_utils.cc +19 -8
  321. data/src/core/lib/transport/error_utils.h +11 -5
  322. data/src/core/lib/transport/metadata_batch.cc +37 -37
  323. data/src/core/lib/transport/metadata_batch.h +19 -18
  324. data/src/core/lib/transport/transport.cc +4 -3
  325. data/src/core/lib/transport/transport.h +4 -4
  326. data/src/core/lib/transport/transport_op_string.cc +5 -5
  327. data/src/core/tsi/alts/crypt/gsec.h +4 -0
  328. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
  329. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
  330. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  331. data/src/core/tsi/ssl_transport_security.cc +32 -14
  332. data/src/core/tsi/ssl_transport_security.h +3 -4
  333. data/src/ruby/bin/math_services_pb.rb +1 -1
  334. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  335. data/src/ruby/lib/grpc/version.rb +1 -1
  336. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  337. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  338. data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
  339. data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
  340. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  341. data/third_party/abseil-cpp/absl/base/config.h +37 -9
  342. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
  343. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  344. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  345. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  346. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  347. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  348. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  349. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
  350. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  351. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  352. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  353. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
  354. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  355. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
  356. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
  357. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
  358. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  359. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  360. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
  361. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  362. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  363. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  364. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  365. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  366. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  367. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
  368. data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
  369. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  370. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
  371. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
  372. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  373. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
  374. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  375. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
  376. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
  377. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
  378. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  379. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
  380. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  381. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
  382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
  384. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  385. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  386. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
  387. data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
  388. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
  389. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
  390. data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
  391. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  392. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
  393. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  394. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  395. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  396. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  397. data/third_party/abseil-cpp/absl/status/status.cc +29 -22
  398. data/third_party/abseil-cpp/absl/status/status.h +81 -20
  399. data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
  400. data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
  401. data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
  402. data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
  403. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  404. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
  405. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
  406. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
  407. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  408. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
  409. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
  410. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
  411. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  412. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
  413. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
  414. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
  415. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  416. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  417. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  418. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
  420. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
  421. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  422. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  423. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  424. data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
  425. data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
  426. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  427. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  428. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  429. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  430. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  431. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  432. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
  433. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  434. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  435. data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
  436. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  437. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  438. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  439. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  440. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  441. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
  442. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  443. data/third_party/abseil-cpp/absl/time/time.h +26 -24
  444. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  445. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  446. data/third_party/boringssl-with-bazel/err_data.c +477 -461
  447. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
  448. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
  449. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
  450. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
  451. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
  452. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
  453. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
  454. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  455. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  456. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  457. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  458. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  459. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
  461. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
  462. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  463. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
  464. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  465. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  467. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
  468. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  469. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
  470. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
  471. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  472. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  473. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  474. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  475. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  476. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  477. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
  478. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  479. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
  480. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
  481. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
  482. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
  483. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
  484. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
  485. data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
  486. data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
  487. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
  488. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
  489. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
  490. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  491. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  504. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
  505. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  506. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  507. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
  508. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
  509. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
  510. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
  511. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  512. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  513. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
  514. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  515. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
  516. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  517. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
  518. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
  519. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
  520. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  521. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
  522. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
  523. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
  524. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
  525. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
  526. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
  527. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
  528. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
  529. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
  530. data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
  531. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
  532. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  533. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
  534. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
  535. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
  536. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
  537. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
  538. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  539. metadata +68 -45
  540. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  541. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  542. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  543. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  544. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -67,28 +67,32 @@
67
67
  #undef ABSL_HAVE_RAW_IO
68
68
  #endif
69
69
 
70
+ namespace absl {
71
+ ABSL_NAMESPACE_BEGIN
72
+ namespace raw_logging_internal {
73
+ namespace {
74
+
70
75
  // TODO(gfalcon): We want raw-logging to work on as many platforms as possible.
71
- // Explicitly #error out when not ABSL_LOW_LEVEL_WRITE_SUPPORTED, except for a
72
- // selected set of platforms for which we expect not to be able to raw log.
76
+ // Explicitly `#error` out when not `ABSL_LOW_LEVEL_WRITE_SUPPORTED`, except for
77
+ // a selected set of platforms for which we expect not to be able to raw log.
73
78
 
74
- ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES static absl::base_internal::AtomicHook<
75
- absl::raw_logging_internal::LogPrefixHook>
76
- log_prefix_hook;
77
- ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES static absl::base_internal::AtomicHook<
78
- absl::raw_logging_internal::AbortHook>
79
- abort_hook;
79
+ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
80
+ absl::base_internal::AtomicHook<LogPrefixHook>
81
+ log_prefix_hook;
82
+ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES
83
+ absl::base_internal::AtomicHook<AbortHook>
84
+ abort_hook;
80
85
 
81
86
  #ifdef ABSL_LOW_LEVEL_WRITE_SUPPORTED
82
- static const char kTruncated[] = " ... (message truncated)\n";
87
+ constexpr char kTruncated[] = " ... (message truncated)\n";
83
88
 
84
89
  // sprintf the format to the buffer, adjusting *buf and *size to reflect the
85
90
  // consumed bytes, and return whether the message fit without truncation. If
86
91
  // truncation occurred, if possible leave room in the buffer for the message
87
92
  // kTruncated[].
88
- inline static bool VADoRawLog(char** buf, int* size, const char* format,
89
- va_list ap) ABSL_PRINTF_ATTRIBUTE(3, 0);
90
- inline static bool VADoRawLog(char** buf, int* size,
91
- const char* format, va_list ap) {
93
+ bool VADoRawLog(char** buf, int* size, const char* format, va_list ap)
94
+ ABSL_PRINTF_ATTRIBUTE(3, 0);
95
+ bool VADoRawLog(char** buf, int* size, const char* format, va_list ap) {
92
96
  int n = vsnprintf(*buf, *size, format, ap);
93
97
  bool result = true;
94
98
  if (n < 0 || n > *size) {
@@ -96,7 +100,7 @@ inline static bool VADoRawLog(char** buf, int* size,
96
100
  if (static_cast<size_t>(*size) > sizeof(kTruncated)) {
97
101
  n = *size - sizeof(kTruncated); // room for truncation message
98
102
  } else {
99
- n = 0; // no room for truncation message
103
+ n = 0; // no room for truncation message
100
104
  }
101
105
  }
102
106
  *size -= n;
@@ -105,9 +109,7 @@ inline static bool VADoRawLog(char** buf, int* size,
105
109
  }
106
110
  #endif // ABSL_LOW_LEVEL_WRITE_SUPPORTED
107
111
 
108
- static constexpr int kLogBufSize = 3000;
109
-
110
- namespace {
112
+ constexpr int kLogBufSize = 3000;
111
113
 
112
114
  // CAVEAT: vsnprintf called from *DoRawLog below has some (exotic) code paths
113
115
  // that invoke malloc() and getenv() that might acquire some locks.
@@ -166,7 +168,7 @@ void RawLogVA(absl::LogSeverity severity, const char* file, int line,
166
168
  } else {
167
169
  DoRawLog(&buf, &size, "%s", kTruncated);
168
170
  }
169
- absl::raw_logging_internal::SafeWriteToStderr(buffer, strlen(buffer));
171
+ SafeWriteToStderr(buffer, strlen(buffer));
170
172
  }
171
173
  #else
172
174
  static_cast<void>(format);
@@ -181,11 +183,18 @@ void RawLogVA(absl::LogSeverity severity, const char* file, int line,
181
183
  }
182
184
  }
183
185
 
186
+ // Non-formatting version of RawLog().
187
+ //
188
+ // TODO(gfalcon): When string_view no longer depends on base, change this
189
+ // interface to take its message as a string_view instead.
190
+ void DefaultInternalLog(absl::LogSeverity severity, const char* file, int line,
191
+ const std::string& message) {
192
+ RawLog(severity, file, line, "%.*s", static_cast<int>(message.size()),
193
+ message.data());
194
+ }
195
+
184
196
  } // namespace
185
197
 
186
- namespace absl {
187
- ABSL_NAMESPACE_BEGIN
188
- namespace raw_logging_internal {
189
198
  void SafeWriteToStderr(const char *s, size_t len) {
190
199
  #if defined(ABSL_HAVE_SYSCALL_WRITE)
191
200
  syscall(SYS_write, STDERR_FILENO, s, len);
@@ -200,8 +209,6 @@ void SafeWriteToStderr(const char *s, size_t len) {
200
209
  #endif
201
210
  }
202
211
 
203
- void RawLog(absl::LogSeverity severity, const char* file, int line,
204
- const char* format, ...) ABSL_PRINTF_ATTRIBUTE(4, 5);
205
212
  void RawLog(absl::LogSeverity severity, const char* file, int line,
206
213
  const char* format, ...) {
207
214
  va_list ap;
@@ -210,15 +217,6 @@ void RawLog(absl::LogSeverity severity, const char* file, int line,
210
217
  va_end(ap);
211
218
  }
212
219
 
213
- // Non-formatting version of RawLog().
214
- //
215
- // TODO(gfalcon): When string_view no longer depends on base, change this
216
- // interface to take its message as a string_view instead.
217
- static void DefaultInternalLog(absl::LogSeverity severity, const char* file,
218
- int line, const std::string& message) {
219
- RawLog(severity, file, line, "%s", message.c_str());
220
- }
221
-
222
220
  bool RawLoggingFullySupported() {
223
221
  #ifdef ABSL_LOW_LEVEL_WRITE_SUPPORTED
224
222
  return true;
@@ -231,6 +229,10 @@ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES ABSL_DLL
231
229
  absl::base_internal::AtomicHook<InternalLogFunction>
232
230
  internal_log_function(DefaultInternalLog);
233
231
 
232
+ void RegisterLogPrefixHook(LogPrefixHook func) { log_prefix_hook.Store(func); }
233
+
234
+ void RegisterAbortHook(AbortHook func) { abort_hook.Store(func); }
235
+
234
236
  void RegisterInternalLogFunction(InternalLogFunction func) {
235
237
  internal_log_function.Store(func);
236
238
  }
@@ -72,12 +72,14 @@
72
72
  //
73
73
  // The API is a subset of the above: each macro only takes two arguments. Use
74
74
  // StrCat if you need to build a richer message.
75
- #define ABSL_INTERNAL_LOG(severity, message) \
76
- do { \
77
- constexpr const char* absl_raw_logging_internal_filename = __FILE__; \
78
- ::absl::raw_logging_internal::internal_log_function( \
79
- ABSL_RAW_LOGGING_INTERNAL_##severity, \
80
- absl_raw_logging_internal_filename, __LINE__, message); \
75
+ #define ABSL_INTERNAL_LOG(severity, message) \
76
+ do { \
77
+ constexpr const char* absl_raw_logging_internal_filename = __FILE__; \
78
+ ::absl::raw_logging_internal::internal_log_function( \
79
+ ABSL_RAW_LOGGING_INTERNAL_##severity, \
80
+ absl_raw_logging_internal_filename, __LINE__, message); \
81
+ if (ABSL_RAW_LOGGING_INTERNAL_##severity == ::absl::LogSeverity::kFatal) \
82
+ ABSL_INTERNAL_UNREACHABLE; \
81
83
  } while (0)
82
84
 
83
85
  #define ABSL_INTERNAL_CHECK(condition, message) \
@@ -176,6 +178,14 @@ ABSL_INTERNAL_ATOMIC_HOOK_ATTRIBUTES ABSL_DLL extern base_internal::AtomicHook<
176
178
  InternalLogFunction>
177
179
  internal_log_function;
178
180
 
181
+ // Registers hooks of the above types. Only a single hook of each type may be
182
+ // registered. It is an error to call these functions multiple times with
183
+ // different input arguments.
184
+ //
185
+ // These functions are safe to call at any point during initialization; they do
186
+ // not block or malloc, and are async-signal safe.
187
+ void RegisterLogPrefixHook(LogPrefixHook func);
188
+ void RegisterAbortHook(AbortHook func);
179
189
  void RegisterInternalLogFunction(InternalLogFunction func);
180
190
 
181
191
  } // namespace raw_logging_internal
@@ -125,8 +125,9 @@ void SpinLock::SlowLock() {
125
125
  // it as having a sleeper.
126
126
  if ((lock_value & kWaitTimeMask) == 0) {
127
127
  // Here, just "mark" that the thread is going to sleep. Don't store the
128
- // lock wait time in the lock as that will cause the current lock
129
- // owner to think it experienced contention.
128
+ // lock wait time in the lock -- the lock word stores the amount of time
129
+ // that the current holder waited before acquiring the lock, not the wait
130
+ // time of any thread currently waiting to acquire it.
130
131
  if (lockword_.compare_exchange_strong(
131
132
  lock_value, lock_value | kSpinLockSleeper,
132
133
  std::memory_order_relaxed, std::memory_order_relaxed)) {
@@ -140,6 +141,14 @@ void SpinLock::SlowLock() {
140
141
  // this thread obtains the lock.
141
142
  lock_value = TryLockInternal(lock_value, wait_cycles);
142
143
  continue; // Skip the delay at the end of the loop.
144
+ } else if ((lock_value & kWaitTimeMask) == 0) {
145
+ // The lock is still held, without a waiter being marked, but something
146
+ // else about the lock word changed, causing our CAS to fail. For
147
+ // example, a new lock holder may have acquired the lock with
148
+ // kSpinLockDisabledScheduling set, whereas the previous holder had not
149
+ // set that flag. In this case, attempt again to mark ourselves as a
150
+ // waiter.
151
+ continue;
143
152
  }
144
153
  }
145
154
 
@@ -15,11 +15,8 @@
15
15
  //
16
16
 
17
17
  // Most users requiring mutual exclusion should use Mutex.
18
- // SpinLock is provided for use in three situations:
18
+ // SpinLock is provided for use in two situations:
19
19
  // - for use in code that Mutex itself depends on
20
- // - to get a faster fast-path release under low contention (without an
21
- // atomic read-modify-write) In return, SpinLock has worse behaviour under
22
- // contention, which is why Mutex is preferred in most situations.
23
20
  // - for async signal safety (see below)
24
21
 
25
22
  // SpinLock is async signal safe. If a spinlock is used within a signal
@@ -140,8 +137,20 @@ class ABSL_LOCKABLE SpinLock {
140
137
  //
141
138
  // bit[0] encodes whether a lock is being held.
142
139
  // bit[1] encodes whether a lock uses cooperative scheduling.
143
- // bit[2] encodes whether a lock disables scheduling.
140
+ // bit[2] encodes whether the current lock holder disabled scheduling when
141
+ // acquiring the lock. Only set when kSpinLockHeld is also set.
144
142
  // bit[3:31] encodes time a lock spent on waiting as a 29-bit unsigned int.
143
+ // This is set by the lock holder to indicate how long it waited on
144
+ // the lock before eventually acquiring it. The number of cycles is
145
+ // encoded as a 29-bit unsigned int, or in the case that the current
146
+ // holder did not wait but another waiter is queued, the LSB
147
+ // (kSpinLockSleeper) is set. The implementation does not explicitly
148
+ // track the number of queued waiters beyond this. It must always be
149
+ // assumed that waiters may exist if the current holder was required to
150
+ // queue.
151
+ //
152
+ // Invariant: if the lock is not held, the value is either 0 or
153
+ // kSpinLockCooperative.
145
154
  static constexpr uint32_t kSpinLockHeld = 1;
146
155
  static constexpr uint32_t kSpinLockCooperative = 2;
147
156
  static constexpr uint32_t kSpinLockDisabledScheduling = 4;
@@ -20,7 +20,7 @@
20
20
 
21
21
  extern "C" {
22
22
 
23
- ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
23
+ ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
24
24
  std::atomic<uint32_t>* /* lock_word */, uint32_t /* value */,
25
25
  int /* loop */, absl::base_internal::SchedulingMode /* mode */) {
26
26
  // In Akaros, one must take care not to call anything that could cause a
@@ -29,7 +29,7 @@ ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
29
29
  // arbitrary code.
30
30
  }
31
31
 
32
- ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockWake(
32
+ ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
33
33
  std::atomic<uint32_t>* /* lock_word */, bool /* all */) {}
34
34
 
35
35
  } // extern "C"
@@ -56,7 +56,7 @@ static_assert(sizeof(std::atomic<uint32_t>) == sizeof(int),
56
56
 
57
57
  extern "C" {
58
58
 
59
- ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
59
+ ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
60
60
  std::atomic<uint32_t> *w, uint32_t value, int loop,
61
61
  absl::base_internal::SchedulingMode) {
62
62
  absl::base_internal::ErrnoSaver errno_saver;
@@ -66,8 +66,8 @@ ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
66
66
  syscall(SYS_futex, w, FUTEX_WAIT | FUTEX_PRIVATE_FLAG, value, &tm);
67
67
  }
68
68
 
69
- ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockWake(std::atomic<uint32_t> *w,
70
- bool all) {
69
+ ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
70
+ std::atomic<uint32_t> *w, bool all) {
71
71
  syscall(SYS_futex, w, FUTEX_WAKE | FUTEX_PRIVATE_FLAG, all ? INT_MAX : 1, 0);
72
72
  }
73
73
 
@@ -25,7 +25,7 @@
25
25
 
26
26
  extern "C" {
27
27
 
28
- ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
28
+ ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
29
29
  std::atomic<uint32_t>* /* lock_word */, uint32_t /* value */, int loop,
30
30
  absl::base_internal::SchedulingMode /* mode */) {
31
31
  absl::base_internal::ErrnoSaver errno_saver;
@@ -40,7 +40,7 @@ ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockDelay(
40
40
  }
41
41
  }
42
42
 
43
- ABSL_ATTRIBUTE_WEAK void AbslInternalSpinLockWake(
43
+ ABSL_ATTRIBUTE_WEAK void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
44
44
  std::atomic<uint32_t>* /* lock_word */, bool /* all */) {}
45
45
 
46
46
  } // extern "C"
@@ -43,18 +43,16 @@ uint32_t SpinLockWait(std::atomic<uint32_t> *w, int n,
43
43
  const SpinLockWaitTransition trans[],
44
44
  SchedulingMode scheduling_mode);
45
45
 
46
- // If possible, wake some thread that has called SpinLockDelay(w, ...). If
47
- // "all" is true, wake all such threads. This call is a hint, and on some
48
- // systems it may be a no-op; threads calling SpinLockDelay() will always wake
49
- // eventually even if SpinLockWake() is never called.
46
+ // If possible, wake some thread that has called SpinLockDelay(w, ...). If `all`
47
+ // is true, wake all such threads. On some systems, this may be a no-op; on
48
+ // those systems, threads calling SpinLockDelay() will always wake eventually
49
+ // even if SpinLockWake() is never called.
50
50
  void SpinLockWake(std::atomic<uint32_t> *w, bool all);
51
51
 
52
52
  // Wait for an appropriate spin delay on iteration "loop" of a
53
53
  // spin loop on location *w, whose previously observed value was "value".
54
54
  // SpinLockDelay() may do nothing, may yield the CPU, may sleep a clock tick,
55
- // or may wait for a delay that can be truncated by a call to SpinLockWake(w).
56
- // In all cases, it must return in bounded time even if SpinLockWake() is not
57
- // called.
55
+ // or may wait for a call to SpinLockWake(w).
58
56
  void SpinLockDelay(std::atomic<uint32_t> *w, uint32_t value, int loop,
59
57
  base_internal::SchedulingMode scheduling_mode);
60
58
 
@@ -73,21 +71,23 @@ ABSL_NAMESPACE_END
73
71
  // By changing our extension points to be extern "C", we dodge this
74
72
  // check.
75
73
  extern "C" {
76
- void AbslInternalSpinLockWake(std::atomic<uint32_t> *w, bool all);
77
- void AbslInternalSpinLockDelay(
74
+ void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(std::atomic<uint32_t> *w,
75
+ bool all);
76
+ void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
78
77
  std::atomic<uint32_t> *w, uint32_t value, int loop,
79
78
  absl::base_internal::SchedulingMode scheduling_mode);
80
79
  }
81
80
 
82
81
  inline void absl::base_internal::SpinLockWake(std::atomic<uint32_t> *w,
83
82
  bool all) {
84
- AbslInternalSpinLockWake(w, all);
83
+ ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(w, all);
85
84
  }
86
85
 
87
86
  inline void absl::base_internal::SpinLockDelay(
88
87
  std::atomic<uint32_t> *w, uint32_t value, int loop,
89
88
  absl::base_internal::SchedulingMode scheduling_mode) {
90
- AbslInternalSpinLockDelay(w, value, loop, scheduling_mode);
89
+ ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)
90
+ (w, value, loop, scheduling_mode);
91
91
  }
92
92
 
93
93
  #endif // ABSL_BASE_INTERNAL_SPINLOCK_WAIT_H_
@@ -20,9 +20,9 @@
20
20
 
21
21
  extern "C" {
22
22
 
23
- void AbslInternalSpinLockDelay(std::atomic<uint32_t>* /* lock_word */,
24
- uint32_t /* value */, int loop,
25
- absl::base_internal::SchedulingMode /* mode */) {
23
+ void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockDelay)(
24
+ std::atomic<uint32_t>* /* lock_word */, uint32_t /* value */, int loop,
25
+ absl::base_internal::SchedulingMode /* mode */) {
26
26
  if (loop == 0) {
27
27
  } else if (loop == 1) {
28
28
  Sleep(0);
@@ -31,7 +31,7 @@ void AbslInternalSpinLockDelay(std::atomic<uint32_t>* /* lock_word */,
31
31
  }
32
32
  }
33
33
 
34
- void AbslInternalSpinLockWake(std::atomic<uint32_t>* /* lock_word */,
35
- bool /* all */) {}
34
+ void ABSL_INTERNAL_C_SYMBOL(AbslInternalSpinLockWake)(
35
+ std::atomic<uint32_t>* /* lock_word */, bool /* all */) {}
36
36
 
37
37
  } // extern "C"
@@ -426,7 +426,7 @@ pid_t GetTID() {
426
426
  // userspace construct) to avoid unnecessary system calls. Without this caching,
427
427
  // it can take roughly 98ns, while it takes roughly 1ns with this caching.
428
428
  pid_t GetCachedTID() {
429
- #if ABSL_HAVE_THREAD_LOCAL
429
+ #ifdef ABSL_HAVE_THREAD_LOCAL
430
430
  static thread_local pid_t thread_id = GetTID();
431
431
  return thread_id;
432
432
  #else
@@ -23,6 +23,7 @@
23
23
  #include <cassert>
24
24
  #include <memory>
25
25
 
26
+ #include "absl/base/attributes.h"
26
27
  #include "absl/base/call_once.h"
27
28
  #include "absl/base/internal/raw_logging.h"
28
29
  #include "absl/base/internal/spinlock.h"
@@ -53,9 +54,11 @@ void AllocateThreadIdentityKey(ThreadIdentityReclaimerFunction reclaimer) {
53
54
  // exist within a process (via dlopen() or similar), references to
54
55
  // thread_identity_ptr from each instance of the code will refer to
55
56
  // *different* instances of this ptr.
56
- #ifdef __GNUC__
57
+ // Apple platforms have the visibility attribute, but issue a compile warning
58
+ // that protected visibility is unsupported.
59
+ #if ABSL_HAVE_ATTRIBUTE(visibility) && !defined(__APPLE__)
57
60
  __attribute__((visibility("protected")))
58
- #endif // __GNUC__
61
+ #endif // ABSL_HAVE_ATTRIBUTE(visibility) && !defined(__APPLE__)
59
62
  #if ABSL_PER_THREAD_TLS
60
63
  // Prefer __thread to thread_local as benchmarks indicate it is a bit faster.
61
64
  ABSL_PER_THREAD_TLS_KEYWORD ThreadIdentity* thread_identity_ptr = nullptr;
@@ -32,6 +32,7 @@
32
32
 
33
33
  #include "absl/base/config.h"
34
34
  #include "absl/base/internal/per_thread_tls.h"
35
+ #include "absl/base/optimization.h"
35
36
 
36
37
  namespace absl {
37
38
  ABSL_NAMESPACE_BEGIN
@@ -69,30 +70,28 @@ struct PerThreadSynch {
69
70
  // is using this PerThreadSynch as a terminator. Its
70
71
  // skip field must not be filled in because the loop
71
72
  // might then skip over the terminator.
72
-
73
- // The wait parameters of the current wait. waitp is null if the
74
- // thread is not waiting. Transitions from null to non-null must
75
- // occur before the enqueue commit point (state = kQueued in
76
- // Enqueue() and CondVarEnqueue()). Transitions from non-null to
77
- // null must occur after the wait is finished (state = kAvailable in
78
- // Mutex::Block() and CondVar::WaitCommon()). This field may be
79
- // changed only by the thread that describes this PerThreadSynch. A
80
- // special case is Fer(), which calls Enqueue() on another thread,
81
- // but with an identical SynchWaitParams pointer, thus leaving the
82
- // pointer unchanged.
83
- SynchWaitParams *waitp;
84
-
85
- bool suppress_fatal_errors; // If true, try to proceed even in the face of
86
- // broken invariants. This is used within fatal
87
- // signal handlers to improve the chances of
88
- // debug logging information being output
89
- // successfully.
90
-
91
- intptr_t readers; // Number of readers in mutex.
92
- int priority; // Priority of thread (updated every so often).
93
-
94
- // When priority will next be read (cycles).
95
- int64_t next_priority_read_cycles;
73
+ bool wake; // This thread is to be woken from a Mutex.
74
+ // If "x" is on a waiter list for a mutex, "x->cond_waiter" is true iff the
75
+ // waiter is waiting on the mutex as part of a CV Wait or Mutex Await.
76
+ //
77
+ // The value of "x->cond_waiter" is meaningless if "x" is not on a
78
+ // Mutex waiter list.
79
+ bool cond_waiter;
80
+ bool maybe_unlocking; // Valid at head of Mutex waiter queue;
81
+ // true if UnlockSlow could be searching
82
+ // for a waiter to wake. Used for an optimization
83
+ // in Enqueue(). true is always a valid value.
84
+ // Can be reset to false when the unlocker or any
85
+ // writer releases the lock, or a reader fully
86
+ // releases the lock. It may not be set to false
87
+ // by a reader that decrements the count to
88
+ // non-zero. protected by mutex spinlock
89
+ bool suppress_fatal_errors; // If true, try to proceed even in the face
90
+ // of broken invariants. This is used within
91
+ // fatal signal handlers to improve the
92
+ // chances of debug logging information being
93
+ // output successfully.
94
+ int priority; // Priority of thread (updated every so often).
96
95
 
97
96
  // State values:
98
97
  // kAvailable: This PerThreadSynch is available.
@@ -111,30 +110,30 @@ struct PerThreadSynch {
111
110
  };
112
111
  std::atomic<State> state;
113
112
 
114
- bool maybe_unlocking; // Valid at head of Mutex waiter queue;
115
- // true if UnlockSlow could be searching
116
- // for a waiter to wake. Used for an optimization
117
- // in Enqueue(). true is always a valid value.
118
- // Can be reset to false when the unlocker or any
119
- // writer releases the lock, or a reader fully releases
120
- // the lock. It may not be set to false by a reader
121
- // that decrements the count to non-zero.
122
- // protected by mutex spinlock
113
+ // The wait parameters of the current wait. waitp is null if the
114
+ // thread is not waiting. Transitions from null to non-null must
115
+ // occur before the enqueue commit point (state = kQueued in
116
+ // Enqueue() and CondVarEnqueue()). Transitions from non-null to
117
+ // null must occur after the wait is finished (state = kAvailable in
118
+ // Mutex::Block() and CondVar::WaitCommon()). This field may be
119
+ // changed only by the thread that describes this PerThreadSynch. A
120
+ // special case is Fer(), which calls Enqueue() on another thread,
121
+ // but with an identical SynchWaitParams pointer, thus leaving the
122
+ // pointer unchanged.
123
+ SynchWaitParams* waitp;
123
124
 
124
- bool wake; // This thread is to be woken from a Mutex.
125
+ intptr_t readers; // Number of readers in mutex.
125
126
 
126
- // If "x" is on a waiter list for a mutex, "x->cond_waiter" is true iff the
127
- // waiter is waiting on the mutex as part of a CV Wait or Mutex Await.
128
- //
129
- // The value of "x->cond_waiter" is meaningless if "x" is not on a
130
- // Mutex waiter list.
131
- bool cond_waiter;
127
+ // When priority will next be read (cycles).
128
+ int64_t next_priority_read_cycles;
132
129
 
133
130
  // Locks held; used during deadlock detection.
134
131
  // Allocated in Synch_GetAllLocks() and freed in ReclaimThreadIdentity().
135
132
  SynchLocksHeld *all_locks;
136
133
  };
137
134
 
135
+ // The instances of this class are allocated in NewThreadIdentity() with an
136
+ // alignment of PerThreadSynch::kAlignment.
138
137
  struct ThreadIdentity {
139
138
  // Must be the first member. The Mutex implementation requires that
140
139
  // the PerThreadSynch object associated with each thread is
@@ -144,7 +143,7 @@ struct ThreadIdentity {
144
143
 
145
144
  // Private: Reserved for absl::synchronization_internal::Waiter.
146
145
  struct WaiterState {
147
- char data[128];
146
+ alignas(void*) char data[128];
148
147
  } waiter_state;
149
148
 
150
149
  // Used by PerThreadSem::{Get,Set}ThreadBlockedCounter().
@@ -212,7 +211,9 @@ void ClearCurrentThreadIdentity();
212
211
  #define ABSL_THREAD_IDENTITY_MODE ABSL_FORCE_THREAD_IDENTITY_MODE
213
212
  #elif defined(_WIN32) && !defined(__MINGW32__)
214
213
  #define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_CPP11
215
- #elif ABSL_PER_THREAD_TLS && defined(__GOOGLE_GRTE_VERSION__) && \
214
+ #elif defined(__APPLE__) && defined(ABSL_HAVE_THREAD_LOCAL)
215
+ #define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_CPP11
216
+ #elif ABSL_PER_THREAD_TLS && defined(__GOOGLE_GRTE_VERSION__) && \
216
217
  (__GOOGLE_GRTE_VERSION__ >= 20140228L)
217
218
  // Support for async-safe TLS was specifically added in GRTEv4. It's not
218
219
  // present in the upstream eglibc.