grpc 1.71.0 → 1.72.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 (597) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +78 -75
  3. data/include/grpc/event_engine/memory_request.h +3 -3
  4. data/include/grpc/impl/channel_arg_names.h +70 -50
  5. data/include/grpc/support/workaround_list.h +1 -4
  6. data/src/core/{lib/transport → call}/call_arena_allocator.cc +1 -1
  7. data/src/core/{lib/transport → call}/call_arena_allocator.h +3 -3
  8. data/src/core/{lib/transport → call}/call_destination.h +4 -4
  9. data/src/core/{lib/transport → call}/call_filters.cc +2 -2
  10. data/src/core/{lib/transport → call}/call_filters.h +25 -6
  11. data/src/core/{lib/channel → call}/call_finalization.h +3 -3
  12. data/src/core/{lib/transport → call}/call_spine.cc +1 -1
  13. data/src/core/{lib/transport → call}/call_spine.h +68 -26
  14. data/src/core/{lib/transport → call}/call_state.cc +1 -1
  15. data/src/core/{lib/transport → call}/call_state.h +3 -3
  16. data/src/core/{lib/surface → call}/client_call.cc +9 -7
  17. data/src/core/{lib/surface → call}/client_call.h +4 -4
  18. data/src/core/{lib/transport → call}/custom_metadata.h +3 -3
  19. data/src/core/{lib/transport → call}/interception_chain.cc +5 -5
  20. data/src/core/{lib/transport → call}/interception_chain.h +7 -7
  21. data/src/core/{lib/transport → call}/message.cc +1 -1
  22. data/src/core/{lib/transport → call}/message.h +7 -3
  23. data/src/core/{lib/transport → call}/metadata.cc +2 -2
  24. data/src/core/{lib/transport → call}/metadata.h +4 -4
  25. data/src/core/{lib/transport → call}/metadata_batch.cc +1 -1
  26. data/src/core/{lib/transport → call}/metadata_batch.h +7 -7
  27. data/src/core/{lib/transport → call}/metadata_compression_traits.h +3 -3
  28. data/src/core/{lib/transport → call}/metadata_info.cc +27 -9
  29. data/src/core/{lib/transport → call}/metadata_info.h +4 -4
  30. data/src/core/{lib/transport → call}/parsed_metadata.cc +1 -1
  31. data/src/core/{lib/transport → call}/parsed_metadata.h +3 -3
  32. data/src/core/call/request_buffer.h +3 -3
  33. data/src/core/call/security_context.cc +125 -0
  34. data/src/core/call/security_context.h +114 -0
  35. data/src/core/{lib/surface → call}/server_call.cc +3 -3
  36. data/src/core/{lib/surface → call}/server_call.h +5 -5
  37. data/src/core/{lib/transport → call}/simple_slice_based_metadata.h +4 -4
  38. data/src/core/{lib/channel → call}/status_util.cc +1 -1
  39. data/src/core/{lib/channel → call}/status_util.h +3 -3
  40. data/src/core/client_channel/client_channel.cc +24 -16
  41. data/src/core/client_channel/client_channel.h +4 -3
  42. data/src/core/client_channel/client_channel_filter.cc +10 -20
  43. data/src/core/client_channel/client_channel_filter.h +1 -1
  44. data/src/core/client_channel/client_channel_internal.h +1 -1
  45. data/src/core/client_channel/config_selector.h +2 -2
  46. data/src/core/client_channel/direct_channel.cc +2 -2
  47. data/src/core/client_channel/dynamic_filters.cc +0 -1
  48. data/src/core/client_channel/dynamic_filters.h +0 -1
  49. data/src/core/client_channel/lb_metadata.h +1 -1
  50. data/src/core/client_channel/load_balanced_call_destination.cc +1 -1
  51. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  52. data/src/core/client_channel/retry_filter_legacy_call_data.cc +43 -41
  53. data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -6
  54. data/src/core/client_channel/retry_interceptor.h +1 -1
  55. data/src/core/client_channel/retry_service_config.cc +1 -1
  56. data/src/core/client_channel/retry_service_config.h +1 -1
  57. data/src/core/client_channel/retry_throttle.cc +30 -34
  58. data/src/core/client_channel/retry_throttle.h +10 -2
  59. data/src/core/client_channel/subchannel.cc +7 -8
  60. data/src/core/client_channel/subchannel.h +1 -2
  61. data/src/core/client_channel/subchannel_stream_client.cc +14 -11
  62. data/src/core/client_channel/subchannel_stream_client.h +2 -2
  63. data/src/core/config/core_configuration.h +2 -2
  64. data/src/core/credentials/call/call_credentials.h +157 -0
  65. data/src/core/{lib/security/credentials → credentials/call}/call_creds_util.cc +4 -4
  66. data/src/core/{lib/security/credentials → credentials/call}/call_creds_util.h +4 -4
  67. data/src/core/{lib/security/credentials/composite/composite_credentials.cc → credentials/call/composite/composite_call_credentials.cc} +4 -57
  68. data/src/core/credentials/call/composite/composite_call_credentials.h +82 -0
  69. data/src/core/{lib/security/credentials → credentials/call}/external/aws_external_account_credentials.cc +2 -2
  70. data/src/core/{lib/security/credentials → credentials/call}/external/aws_external_account_credentials.h +5 -5
  71. data/src/core/{lib/security/credentials → credentials/call}/external/aws_request_signer.cc +1 -1
  72. data/src/core/{lib/security/credentials → credentials/call}/external/aws_request_signer.h +3 -3
  73. data/src/core/{lib/security/credentials → credentials/call}/external/external_account_credentials.cc +6 -6
  74. data/src/core/{lib/security/credentials → credentials/call}/external/external_account_credentials.h +5 -5
  75. data/src/core/{lib/security/credentials → credentials/call}/external/file_external_account_credentials.cc +1 -1
  76. data/src/core/{lib/security/credentials → credentials/call}/external/file_external_account_credentials.h +4 -4
  77. data/src/core/{lib/security/credentials → credentials/call}/external/url_external_account_credentials.cc +3 -2
  78. data/src/core/{lib/security/credentials → credentials/call}/external/url_external_account_credentials.h +4 -4
  79. data/src/core/{lib/security/credentials → credentials/call}/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +3 -2
  80. data/src/core/{lib/security/credentials → credentials/call}/gcp_service_account_identity/gcp_service_account_identity_credentials.h +6 -6
  81. data/src/core/{lib/security/credentials → credentials/call}/iam/iam_credentials.cc +2 -2
  82. data/src/core/{lib/security/credentials → credentials/call}/iam/iam_credentials.h +4 -4
  83. data/src/core/{lib/security/util → credentials/call}/json_util.cc +1 -1
  84. data/src/core/{lib/security/util → credentials/call}/json_util.h +3 -3
  85. data/src/core/{lib/security/credentials → credentials/call}/jwt/json_token.cc +2 -2
  86. data/src/core/{lib/security/credentials → credentials/call}/jwt/json_token.h +3 -3
  87. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_credentials.cc +3 -3
  88. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_credentials.h +5 -5
  89. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_verifier.cc +3 -2
  90. data/src/core/{lib/security/credentials → credentials/call}/jwt/jwt_verifier.h +3 -3
  91. data/src/core/{lib/security/credentials → credentials/call}/oauth2/oauth2_credentials.cc +4 -3
  92. data/src/core/{lib/security/credentials → credentials/call}/oauth2/oauth2_credentials.h +5 -5
  93. data/src/core/{lib/security/credentials → credentials/call}/plugin/plugin_credentials.cc +2 -2
  94. data/src/core/{lib/security/credentials → credentials/call}/plugin/plugin_credentials.h +5 -5
  95. data/src/core/{lib/security/credentials → credentials/call}/token_fetcher/token_fetcher_credentials.cc +1 -1
  96. data/src/core/{lib/security/credentials → credentials/call}/token_fetcher/token_fetcher_credentials.h +5 -5
  97. data/src/core/{lib/security/credentials → credentials/transport}/alts/alts_credentials.cc +4 -4
  98. data/src/core/{lib/security/credentials → credentials/transport}/alts/alts_credentials.h +5 -5
  99. data/src/core/{lib/security/security_connector → credentials/transport}/alts/alts_security_connector.cc +4 -4
  100. data/src/core/{lib/security/security_connector → credentials/transport}/alts/alts_security_connector.h +4 -4
  101. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment.cc +1 -1
  102. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment.h +3 -3
  103. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_linux.cc +1 -1
  104. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_no_op.cc +1 -1
  105. data/src/core/{lib/security/credentials → credentials/transport}/alts/check_gcp_environment_windows.cc +1 -1
  106. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_client_options.cc +1 -1
  107. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_options.cc +1 -1
  108. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_options.h +3 -3
  109. data/src/core/{lib/security/credentials → credentials/transport}/alts/grpc_alts_credentials_server_options.cc +1 -1
  110. data/src/core/{lib/security/credentials → credentials/transport}/channel_creds_registry.h +4 -4
  111. data/src/core/{lib/security/credentials → credentials/transport}/channel_creds_registry_init.cc +21 -17
  112. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +68 -0
  113. data/src/core/{lib/security/credentials/composite/composite_credentials.h → credentials/transport/composite/composite_channel_credentials.h} +6 -51
  114. data/src/core/{lib/security/credentials → credentials/transport}/fake/fake_credentials.cc +4 -26
  115. data/src/core/{lib/security/credentials → credentials/transport}/fake/fake_credentials.h +5 -37
  116. data/src/core/{lib/security/security_connector → credentials/transport}/fake/fake_security_connector.cc +4 -4
  117. data/src/core/{lib/security/security_connector → credentials/transport}/fake/fake_security_connector.h +4 -4
  118. data/src/core/{lib/security/credentials → credentials/transport}/google_default/credentials_generic.cc +2 -2
  119. data/src/core/{lib/security/credentials → credentials/transport}/google_default/google_default_credentials.cc +31 -19
  120. data/src/core/{lib/security/credentials → credentials/transport}/google_default/google_default_credentials.h +5 -5
  121. data/src/core/{lib/security/credentials → credentials/transport}/insecure/insecure_credentials.cc +2 -2
  122. data/src/core/{lib/security/credentials → credentials/transport}/insecure/insecure_credentials.h +5 -5
  123. data/src/core/{lib/security/security_connector → credentials/transport}/insecure/insecure_security_connector.cc +2 -2
  124. data/src/core/{lib/security/security_connector → credentials/transport}/insecure/insecure_security_connector.h +5 -5
  125. data/src/core/{lib/security/credentials → credentials/transport}/local/local_credentials.cc +2 -2
  126. data/src/core/{lib/security/credentials → credentials/transport}/local/local_credentials.h +5 -5
  127. data/src/core/{lib/security/security_connector → credentials/transport}/local/local_security_connector.cc +4 -4
  128. data/src/core/{lib/security/security_connector → credentials/transport}/local/local_security_connector.h +4 -4
  129. data/src/core/{lib/security/security_connector → credentials/transport}/security_connector.cc +2 -2
  130. data/src/core/{lib/security/security_connector → credentials/transport}/security_connector.h +3 -3
  131. data/src/core/{lib/security/credentials → credentials/transport}/ssl/ssl_credentials.cc +2 -2
  132. data/src/core/{lib/security/credentials → credentials/transport}/ssl/ssl_credentials.h +6 -6
  133. data/src/core/{lib/security/security_connector → credentials/transport}/ssl/ssl_security_connector.cc +5 -5
  134. data/src/core/{lib/security/security_connector → credentials/transport}/ssl/ssl_security_connector.h +4 -4
  135. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_factory.h +3 -3
  136. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_registry.cc +1 -1
  137. data/src/core/{lib/security/certificate_provider → credentials/transport/tls}/certificate_provider_registry.h +4 -4
  138. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_distributor.cc +1 -1
  139. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_distributor.h +4 -4
  140. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_match.cc +1 -1
  141. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_provider.cc +2 -2
  142. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_provider.h +5 -5
  143. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_verifier.cc +2 -2
  144. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_certificate_verifier.h +3 -3
  145. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_credentials_options.cc +1 -1
  146. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_credentials_options.h +7 -7
  147. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_crl_provider.cc +1 -1
  148. data/src/core/{lib/security/credentials → credentials/transport}/tls/grpc_tls_crl_provider.h +3 -3
  149. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots.h +3 -3
  150. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_fallback.cc +1 -1
  151. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_supported.cc +2 -2
  152. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_supported.h +3 -3
  153. data/src/core/{lib/security/security_connector → credentials/transport/tls}/load_system_roots_windows.cc +1 -1
  154. data/src/core/{lib/security/security_connector → credentials/transport/tls}/ssl_utils.cc +3 -3
  155. data/src/core/{lib/security/security_connector → credentials/transport/tls}/ssl_utils.h +4 -4
  156. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_credentials.cc +4 -4
  157. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_credentials.h +5 -5
  158. data/src/core/{lib/security/security_connector → credentials/transport}/tls/tls_security_connector.cc +6 -6
  159. data/src/core/{lib/security/security_connector → credentials/transport}/tls/tls_security_connector.h +6 -6
  160. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_utils.cc +1 -1
  161. data/src/core/{lib/security/credentials → credentials/transport}/tls/tls_utils.h +3 -3
  162. data/src/core/{lib/security/credentials/credentials.cc → credentials/transport/transport_credentials.cc} +1 -3
  163. data/src/core/{lib/security/credentials/credentials.h → credentials/transport/transport_credentials.h} +5 -121
  164. data/src/core/{lib/security/credentials → credentials/transport}/xds/xds_credentials.cc +5 -5
  165. data/src/core/{lib/security/credentials → credentials/transport}/xds/xds_credentials.h +6 -6
  166. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -1
  167. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +8 -5
  168. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +2 -2
  169. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +1 -1
  170. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  171. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  172. data/src/core/ext/filters/http/client/http_client_filter.h +1 -1
  173. data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
  174. data/src/core/ext/filters/http/message_compress/compression_filter.cc +1 -1
  175. data/src/core/ext/filters/http/message_compress/compression_filter.h +1 -1
  176. data/src/core/ext/filters/http/server/http_server_filter.cc +1 -1
  177. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  178. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -2
  179. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +1 -1
  180. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +3 -3
  181. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +8 -5
  182. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -1
  183. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.cc +2 -2
  184. data/src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h +1 -3
  185. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +58 -57
  186. data/src/core/ext/transport/chttp2/transport/context_list_entry.h +3 -3
  187. data/src/core/ext/transport/chttp2/transport/frame.cc +89 -68
  188. data/src/core/ext/transport/chttp2/transport/frame.h +37 -1
  189. data/src/core/ext/transport/chttp2/transport/frame_data.cc +2 -0
  190. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -3
  191. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -2
  192. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -2
  193. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +1 -1
  194. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
  195. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -1
  196. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -2
  197. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +10 -8
  198. data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -2
  199. data/src/core/ext/transport/chttp2/transport/http2_status.h +52 -0
  200. data/src/core/ext/transport/chttp2/transport/internal.h +11 -14
  201. data/src/core/ext/transport/chttp2/transport/parsing.cc +36 -23
  202. data/src/core/ext/transport/chttp2/transport/writing.cc +15 -14
  203. data/src/core/ext/transport/inproc/inproc_transport.cc +1 -1
  204. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +1 -1
  205. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +65 -65
  206. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +28 -28
  207. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +14 -14
  208. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +6 -6
  209. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +6 -6
  210. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +4 -4
  211. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +133 -133
  212. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +71 -71
  213. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +26 -26
  214. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +7 -7
  215. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +216 -218
  216. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +66 -66
  217. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +27 -27
  218. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +9 -9
  219. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +326 -328
  220. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +103 -103
  221. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +58 -58
  222. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +14 -14
  223. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +22 -24
  224. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +3 -3
  225. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +29 -29
  226. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +16 -16
  227. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +186 -192
  228. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +54 -54
  229. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +54 -54
  230. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +21 -21
  231. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +59 -61
  232. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +15 -15
  233. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +100 -100
  234. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +34 -34
  235. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +12 -12
  236. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +5 -5
  237. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +118 -118
  238. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +39 -39
  239. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +19 -19
  240. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +9 -9
  241. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +27 -27
  242. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +10 -10
  243. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +12 -14
  244. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +2 -2
  245. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +41 -41
  246. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +16 -16
  247. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +24 -24
  248. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +9 -9
  249. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +139 -139
  250. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +46 -46
  251. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +61 -61
  252. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +20 -20
  253. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +3 -3
  254. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +1 -1
  255. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +6 -6
  256. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +4 -4
  257. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +33 -33
  258. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +14 -14
  259. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +12 -14
  260. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +2 -2
  261. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +52 -54
  262. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +10 -10
  263. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +620 -626
  264. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +215 -215
  265. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +13 -13
  266. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +4 -4
  267. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +3 -3
  268. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +2 -2
  269. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +7 -7
  270. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +3 -3
  271. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +15 -15
  272. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +7 -7
  273. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +7 -7
  274. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +3 -3
  275. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +16 -16
  276. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +10 -10
  277. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +306 -312
  278. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +96 -96
  279. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +61 -61
  280. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +27 -27
  281. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +19 -19
  282. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +6 -6
  283. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +25 -25
  284. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +9 -9
  285. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +34 -34
  286. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +9 -9
  287. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +3 -3
  288. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +2 -2
  289. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +294 -294
  290. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +105 -105
  291. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +3 -3
  292. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +1 -1
  293. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +23 -23
  294. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +8 -8
  295. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +84 -84
  296. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +28 -28
  297. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +87 -87
  298. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +31 -31
  299. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +24 -24
  300. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +5 -5
  301. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +130 -132
  302. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +43 -43
  303. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +6 -6
  304. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +2 -2
  305. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +60 -60
  306. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +26 -26
  307. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +7 -7
  308. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +3 -3
  309. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +6 -6
  310. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +2 -2
  311. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +7 -7
  312. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +3 -3
  313. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +11 -11
  314. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +4 -4
  315. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +85 -89
  316. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +20 -20
  317. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +80 -83
  318. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +27 -27
  319. data/src/core/ext/upb-gen/google/api/http.upb.h +51 -51
  320. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +22 -22
  321. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +327 -301
  322. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +97 -85
  323. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +1 -0
  324. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +9 -11
  325. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +9 -10
  326. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +110 -113
  327. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +25 -25
  328. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +6 -6
  329. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +4 -4
  330. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +21 -22
  331. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +3 -3
  332. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +70 -72
  333. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +17 -17
  334. data/src/core/ext/upb-gen/validate/validate.upb.h +368 -368
  335. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +117 -117
  336. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +9 -10
  337. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +7 -7
  338. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +3 -3
  339. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +12 -12
  340. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +2 -2
  341. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +27 -30
  342. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +7 -7
  343. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +3 -3
  344. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +3 -3
  345. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +1 -1
  346. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +22 -24
  347. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +3 -3
  348. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +98 -87
  349. data/src/core/{lib/security/transport → filter/auth}/auth_filters.h +8 -7
  350. data/src/core/{lib/security/transport → filter/auth}/client_auth_filter.cc +7 -6
  351. data/src/core/{lib/security/transport → filter/auth}/server_auth_filter.cc +5 -4
  352. data/src/core/handshaker/handshaker.cc +0 -8
  353. data/src/core/handshaker/security/security_handshaker.cc +1 -1
  354. data/src/core/handshaker/security/security_handshaker.h +1 -1
  355. data/src/core/lib/channel/channel_args.h +49 -30
  356. data/src/core/lib/channel/channel_stack.h +1 -2
  357. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  358. data/src/core/lib/channel/connected_channel.cc +2 -2
  359. data/src/core/lib/channel/promise_based_filter.h +3 -3
  360. data/src/core/lib/debug/trace_flags.cc +2 -4
  361. data/src/core/lib/debug/trace_flags.h +1 -2
  362. data/src/core/lib/event_engine/default_event_engine_factory.cc +6 -6
  363. data/src/core/lib/event_engine/default_event_engine_factory.h +1 -1
  364. data/src/core/lib/event_engine/extensions/iomgr_compatible.h +39 -0
  365. data/src/core/lib/event_engine/extensions/supports_win_sockets.h +48 -0
  366. data/src/core/lib/event_engine/extensions/tcp_trace.h +1 -1
  367. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +0 -2
  368. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +1 -3
  369. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +26 -0
  370. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +4 -0
  371. data/src/core/lib/event_engine/posix_engine/set_socket_dualstack.cc +64 -0
  372. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +0 -11
  373. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +10 -2
  374. data/src/core/lib/event_engine/shim.cc +9 -16
  375. data/src/core/lib/event_engine/shim.h +11 -0
  376. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +15 -7
  377. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +2 -1
  378. data/src/core/lib/event_engine/windows/win_socket.cc +11 -0
  379. data/src/core/lib/event_engine/windows/win_socket.h +3 -0
  380. data/src/core/lib/event_engine/windows/windows_endpoint.cc +5 -10
  381. data/src/core/lib/event_engine/windows/windows_engine.cc +42 -0
  382. data/src/core/lib/event_engine/windows/windows_engine.h +8 -2
  383. data/src/core/lib/event_engine/windows/windows_listener.cc +5 -6
  384. data/src/core/lib/event_engine/windows/windows_listener.h +9 -4
  385. data/src/core/lib/experiments/experiments.cc +174 -21
  386. data/src/core/lib/experiments/experiments.h +70 -13
  387. data/src/core/lib/iomgr/endpoint_pair_posix.cc +43 -16
  388. data/src/core/lib/iomgr/endpoint_pair_windows.cc +43 -8
  389. data/src/core/lib/iomgr/error.cc +27 -43
  390. data/src/core/lib/iomgr/ev_epoll1_linux.cc +13 -1
  391. data/src/core/lib/iomgr/ev_poll_posix.cc +13 -0
  392. data/src/core/lib/iomgr/polling_entity.cc +2 -7
  393. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  394. data/src/core/lib/iomgr/socket_utils_posix.cc +22 -11
  395. data/src/core/lib/iomgr/socket_utils_posix.h +12 -2
  396. data/src/core/lib/iomgr/tcp_client_cfstream.cc +8 -9
  397. data/src/core/lib/iomgr/tcp_client_posix.cc +11 -15
  398. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  399. data/src/core/lib/iomgr/tcp_posix.cc +58 -31
  400. data/src/core/lib/iomgr/tcp_posix.h +10 -2
  401. data/src/core/lib/iomgr/tcp_server_posix.cc +9 -1
  402. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -4
  403. data/src/core/lib/iomgr/tcp_server_windows.cc +27 -16
  404. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -2
  405. data/src/core/lib/promise/all_ok.h +31 -0
  406. data/src/core/lib/promise/loop.h +8 -5
  407. data/src/core/lib/promise/map.h +65 -2
  408. data/src/core/lib/promise/party.h +5 -1
  409. data/src/core/lib/promise/poll.h +22 -20
  410. data/src/core/lib/promise/promise.h +2 -2
  411. data/src/core/lib/promise/status_flag.h +23 -11
  412. data/src/core/lib/security/authorization/evaluate_args.cc +1 -1
  413. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  414. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  415. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  416. data/src/core/lib/slice/slice.h +6 -0
  417. data/src/core/lib/surface/call.cc +20 -18
  418. data/src/core/lib/surface/call_utils.cc +3 -3
  419. data/src/core/lib/surface/call_utils.h +3 -3
  420. data/src/core/lib/surface/channel.h +2 -2
  421. data/src/core/lib/surface/channel_init.h +2 -2
  422. data/src/core/lib/surface/completion_queue.cc +77 -17
  423. data/src/core/lib/surface/filter_stack_call.cc +40 -27
  424. data/src/core/lib/surface/filter_stack_call.h +1 -1
  425. data/src/core/lib/surface/init.cc +2 -3
  426. data/src/core/lib/surface/lame_client.cc +1 -1
  427. data/src/core/lib/surface/legacy_channel.cc +27 -23
  428. data/src/core/lib/surface/legacy_channel.h +1 -1
  429. data/src/core/lib/surface/version.cc +2 -2
  430. data/src/core/lib/transport/error_utils.cc +65 -11
  431. data/src/core/lib/transport/error_utils.h +2 -2
  432. data/src/core/lib/transport/status_conversion.cc +16 -14
  433. data/src/core/lib/transport/status_conversion.h +5 -4
  434. data/src/core/lib/transport/transport.h +5 -5
  435. data/src/core/lib/transport/transport_op_string.cc +1 -1
  436. data/src/core/load_balancing/delegating_helper.h +1 -1
  437. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +1 -1
  438. data/src/core/load_balancing/grpclb/grpclb.cc +1 -2
  439. data/src/core/load_balancing/pick_first/pick_first.cc +0 -955
  440. data/src/core/load_balancing/rls/rls.cc +31 -37
  441. data/src/core/load_balancing/weighted_target/weighted_target.cc +1 -1
  442. data/src/core/load_balancing/xds/cds.cc +3 -10
  443. data/src/core/load_balancing/xds/xds_cluster_impl.cc +1 -1
  444. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  445. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -2
  446. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +1 -3
  447. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -0
  448. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +1 -1
  449. data/src/core/resolver/xds/xds_dependency_manager.cc +8 -3
  450. data/src/core/resolver/xds/xds_resolver.cc +2 -2
  451. data/src/core/server/server.cc +7 -4
  452. data/src/core/server/server.h +1 -1
  453. data/src/core/server/server_call_tracer_filter.cc +1 -1
  454. data/src/core/server/server_config_selector.h +1 -1
  455. data/src/core/server/server_config_selector_filter.cc +1 -1
  456. data/src/core/server/xds_server_config_fetcher.cc +5 -5
  457. data/src/core/service_config/service_config_channel_arg_filter.cc +1 -1
  458. data/src/core/telemetry/call_tracer.cc +2 -4
  459. data/src/core/telemetry/call_tracer.h +3 -3
  460. data/src/core/telemetry/metrics.cc +30 -12
  461. data/src/core/telemetry/metrics.h +15 -3
  462. data/src/core/telemetry/stats_data.cc +75 -2
  463. data/src/core/telemetry/stats_data.h +46 -4
  464. data/src/core/telemetry/tcp_tracer.h +90 -84
  465. data/src/core/{lib/security/context/security_context.cc → transport/auth_context.cc} +1 -96
  466. data/src/core/{lib/security/context/security_context.h → transport/auth_context.h} +6 -76
  467. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  468. data/src/core/tsi/ssl_transport_security.cc +1 -1
  469. data/src/core/util/check_class_size.h +48 -0
  470. data/src/core/util/gcp_metadata_query.cc +1 -1
  471. data/src/core/util/http_client/httpcli.cc +3 -3
  472. data/src/core/util/http_client/httpcli_security_connector.cc +3 -3
  473. data/src/core/util/load_file.cc +26 -14
  474. data/src/core/util/status_helper.cc +86 -63
  475. data/src/core/util/status_helper.h +9 -26
  476. data/src/core/xds/grpc/certificate_provider_store.cc +1 -1
  477. data/src/core/xds/grpc/certificate_provider_store.h +3 -3
  478. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  479. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
  480. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +10 -7
  481. data/src/core/xds/grpc/xds_certificate_provider.cc +1 -1
  482. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  483. data/src/core/xds/grpc/xds_client_grpc.cc +7 -6
  484. data/src/core/xds/grpc/xds_client_grpc.h +4 -2
  485. data/src/core/xds/grpc/xds_cluster.h +3 -3
  486. data/src/core/xds/grpc/xds_cluster_parser.cc +3 -2
  487. data/src/core/xds/grpc/xds_http_fault_filter.cc +1 -1
  488. data/src/core/xds/grpc/xds_http_filter.h +1 -1
  489. data/src/core/xds/grpc/xds_http_filter_registry.h +1 -1
  490. data/src/core/xds/grpc/xds_route_config.h +1 -1
  491. data/src/core/xds/grpc/xds_route_config_parser.cc +1 -1
  492. data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
  493. data/src/core/xds/grpc/xds_routing.h +1 -1
  494. data/src/core/xds/grpc/xds_server_grpc.cc +60 -48
  495. data/src/core/xds/grpc/xds_server_grpc.h +23 -13
  496. data/src/core/xds/grpc/xds_server_grpc_interface.h +2 -2
  497. data/src/core/xds/grpc/xds_transport_grpc.cc +5 -5
  498. data/src/core/xds/grpc/xds_transport_grpc.h +5 -3
  499. data/src/core/xds/xds_client/lrs_client.cc +6 -5
  500. data/src/core/xds/xds_client/lrs_client.h +7 -7
  501. data/src/core/xds/xds_client/xds_bootstrap.h +16 -1
  502. data/src/core/xds/xds_client/xds_client.cc +25 -23
  503. data/src/core/xds/xds_client/xds_client.h +3 -1
  504. data/src/core/xds/xds_client/xds_resource_type.h +1 -2
  505. data/src/core/xds/xds_client/xds_transport.h +1 -1
  506. data/src/ruby/ext/grpc/extconf.rb +1 -1
  507. data/src/ruby/lib/grpc/version.rb +1 -1
  508. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.cc +0 -2
  509. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_fuchsia.cc +0 -2
  510. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_linux.cc +0 -2
  511. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.cc +0 -2
  512. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_sysreg.cc +0 -2
  513. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_win.cc +0 -2
  514. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.cc +0 -1
  515. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.cc +0 -1
  516. data/third_party/boringssl-with-bazel/src/crypto/crypto.cc +0 -2
  517. data/third_party/boringssl-with-bazel/src/crypto/internal.h +20 -3
  518. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -25
  519. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +3 -7
  520. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +1 -1
  521. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +1 -1
  522. data/third_party/boringssl-with-bazel/src/ssl/internal.h +13 -6
  523. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +2 -1
  524. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  525. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +1 -1
  526. data/third_party/upb/upb/base/internal/log2.h +3 -1
  527. data/third_party/upb/upb/base/string_view.h +10 -0
  528. data/third_party/upb/upb/hash/common.c +5 -1
  529. data/third_party/upb/upb/json/decode.c +2 -2
  530. data/third_party/upb/upb/json/decode.h +0 -1
  531. data/third_party/upb/upb/mem/alloc.h +5 -0
  532. data/third_party/upb/upb/mem/arena.c +296 -142
  533. data/third_party/upb/upb/mem/arena.h +47 -11
  534. data/third_party/upb/upb/mem/arena.hpp +4 -20
  535. data/third_party/upb/upb/mem/internal/arena.h +4 -6
  536. data/third_party/upb/upb/message/accessors.h +41 -0
  537. data/third_party/upb/upb/message/compat.c +11 -14
  538. data/third_party/upb/upb/message/compat.h +4 -3
  539. data/third_party/upb/upb/message/copy.c +35 -30
  540. data/third_party/upb/upb/message/internal/accessors.h +139 -10
  541. data/third_party/upb/upb/message/internal/extension.c +28 -25
  542. data/third_party/upb/upb/message/internal/extension.h +21 -5
  543. data/third_party/upb/upb/message/internal/iterator.c +58 -0
  544. data/third_party/upb/upb/message/internal/iterator.h +29 -0
  545. data/third_party/upb/upb/message/internal/map.h +2 -3
  546. data/third_party/upb/upb/message/internal/map_sorter.h +3 -2
  547. data/third_party/upb/upb/message/internal/message.c +48 -29
  548. data/third_party/upb/upb/message/internal/message.h +154 -24
  549. data/third_party/upb/upb/message/map_sorter.c +20 -8
  550. data/third_party/upb/upb/message/message.c +90 -38
  551. data/third_party/upb/upb/message/message.h +58 -2
  552. data/third_party/upb/upb/message/value.h +9 -0
  553. data/third_party/upb/upb/mini_descriptor/build_enum.c +1 -1
  554. data/third_party/upb/upb/mini_descriptor/decode.c +97 -136
  555. data/third_party/upb/upb/mini_descriptor/decode.h +4 -3
  556. data/third_party/upb/upb/mini_descriptor/internal/encode.hpp +1 -1
  557. data/third_party/upb/upb/mini_table/extension_registry.c +24 -12
  558. data/third_party/upb/upb/mini_table/extension_registry.h +13 -6
  559. data/third_party/upb/upb/mini_table/message.c +21 -13
  560. data/third_party/upb/upb/port/atomic.h +134 -7
  561. data/third_party/upb/upb/port/def.inc +140 -38
  562. data/third_party/upb/upb/port/undef.inc +11 -1
  563. data/third_party/upb/upb/reflection/def.hpp +5 -1
  564. data/third_party/upb/upb/reflection/def_pool.c +10 -3
  565. data/third_party/upb/upb/reflection/descriptor_bootstrap.h +1 -1
  566. data/third_party/upb/upb/reflection/file_def.c +12 -5
  567. data/third_party/upb/upb/reflection/internal/def_builder.c +1 -1
  568. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  569. data/third_party/upb/upb/reflection/message.c +19 -16
  570. data/third_party/upb/upb/reflection/message.h +3 -1
  571. data/third_party/upb/upb/text/encode.c +1 -13
  572. data/third_party/upb/upb/text/internal/encode.c +25 -6
  573. data/third_party/upb/upb/text/internal/encode.h +4 -0
  574. data/third_party/upb/upb/wire/decode.c +60 -45
  575. data/third_party/upb/upb/wire/decode.h +4 -2
  576. data/third_party/upb/upb/wire/encode.c +77 -42
  577. data/third_party/upb/upb/wire/encode.h +2 -0
  578. data/third_party/upb/upb/wire/eps_copy_input_stream.h +18 -20
  579. data/third_party/upb/upb/wire/internal/decoder.h +4 -11
  580. data/third_party/utf8_range/utf8_range.c +15 -275
  581. data/third_party/utf8_range/utf8_range_neon.inc +117 -0
  582. data/third_party/utf8_range/utf8_range_sse.inc +272 -0
  583. data/third_party/zlib/deflate.c +40 -15
  584. data/third_party/zlib/deflate.h +33 -2
  585. data/third_party/zlib/gzguts.h +2 -6
  586. data/third_party/zlib/inflate.c +1 -1
  587. data/third_party/zlib/inftrees.c +3 -3
  588. data/third_party/zlib/inftrees.h +2 -2
  589. data/third_party/zlib/trees.c +18 -4
  590. data/third_party/zlib/zconf.h +1 -9
  591. data/third_party/zlib/zlib.h +12 -12
  592. data/third_party/zlib/zutil.h +4 -25
  593. metadata +155 -145
  594. data/include/grpc/grpc_cronet.h +0 -37
  595. data/src/core/lib/transport/http2_errors.h +0 -43
  596. data/third_party/upb/upb/message/internal/compare_unknown.c +0 -289
  597. data/third_party/upb/upb/message/internal/compare_unknown.h +0 -49
@@ -96,10 +96,11 @@ UPB_API_INLINE upb_MiniTableExtension* upb_MiniTableExtension_BuildEnum(
96
96
  }
97
97
 
98
98
  // Like upb_MiniTable_Build(), but the user provides a buffer of layout data so
99
- // it can be reused from call to call, avoiding repeated realloc()/free().
99
+ // it can be reused from call to call, avoiding repeated
100
+ // upb_grealloc()/upb_gfree().
100
101
  //
101
- // The caller owns `*buf` both before and after the call, and must free() it
102
- // when it is no longer in use. The function will realloc() `*buf` as
102
+ // The caller owns `*buf` both before and after the call, and must upb_gfree()
103
+ // it when it is no longer in use. The function will upb_grealloc() `*buf` as
103
104
  // necessary, updating `*size` accordingly.
104
105
  upb_MiniTable* upb_MiniTable_BuildWithBuf(const char* data, size_t len,
105
106
  upb_MiniTablePlatform platform,
@@ -97,7 +97,7 @@ class MtDataEncoder {
97
97
  if (!end) return false;
98
98
  // C++ does not guarantee that string has doubling growth behavior, but
99
99
  // we need it to avoid O(n^2).
100
- str_.reserve(upb_Log2CeilingSize(str_.size() + (end - buf_)));
100
+ str_.reserve(upb_RoundUpToPowerOfTwo(str_.size() + (end - buf_)));
101
101
  str_.append(buf_, end - buf_);
102
102
  return true;
103
103
  }
@@ -11,6 +11,7 @@
11
11
  #include <stdint.h>
12
12
  #include <string.h>
13
13
 
14
+ #include "upb/hash/common.h"
14
15
  #include "upb/hash/str_table.h"
15
16
  #include "upb/mem/arena.h"
16
17
  #include "upb/mini_table/extension.h"
@@ -39,24 +40,32 @@ upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena) {
39
40
  return r;
40
41
  }
41
42
 
42
- UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
43
- const upb_MiniTableExtension* e) {
43
+ UPB_API upb_ExtensionRegistryStatus upb_ExtensionRegistry_Add(
44
+ upb_ExtensionRegistry* r, const upb_MiniTableExtension* e) {
44
45
  char buf[EXTREG_KEY_SIZE];
45
46
  extreg_key(buf, e->UPB_PRIVATE(extendee), upb_MiniTableExtension_Number(e));
46
- if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, NULL)) return false;
47
- return upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
48
- upb_value_constptr(e), r->arena);
47
+
48
+ if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, NULL)) {
49
+ return kUpb_ExtensionRegistryStatus_DuplicateEntry;
50
+ }
51
+
52
+ if (!upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
53
+ upb_value_constptr(e), r->arena)) {
54
+ return kUpb_ExtensionRegistryStatus_OutOfMemory;
55
+ }
56
+ return kUpb_ExtensionRegistryStatus_Ok;
49
57
  }
50
58
 
51
- bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
52
- const upb_MiniTableExtension** e,
53
- size_t count) {
59
+ upb_ExtensionRegistryStatus upb_ExtensionRegistry_AddArray(
60
+ upb_ExtensionRegistry* r, const upb_MiniTableExtension** e, size_t count) {
54
61
  const upb_MiniTableExtension** start = e;
55
62
  const upb_MiniTableExtension** end = UPB_PTRADD(e, count);
63
+ upb_ExtensionRegistryStatus status = kUpb_ExtensionRegistryStatus_Ok;
56
64
  for (; e < end; e++) {
57
- if (!upb_ExtensionRegistry_Add(r, *e)) goto failure;
65
+ status = upb_ExtensionRegistry_Add(r, *e);
66
+ if (status != kUpb_ExtensionRegistryStatus_Ok) goto failure;
58
67
  }
59
- return true;
68
+ return kUpb_ExtensionRegistryStatus_Ok;
60
69
 
61
70
  failure:
62
71
  // Back out the entries previously added.
@@ -67,7 +76,8 @@ failure:
67
76
  upb_MiniTableExtension_Number(ext));
68
77
  upb_strtable_remove2(&r->exts, buf, EXTREG_KEY_SIZE, NULL);
69
78
  }
70
- return false;
79
+ UPB_ASSERT(status != kUpb_ExtensionRegistryStatus_Ok);
80
+ return status;
71
81
  }
72
82
 
73
83
  #ifdef UPB_LINKARR_DECLARE
@@ -80,7 +90,9 @@ bool upb_ExtensionRegistry_AddAllLinkedExtensions(upb_ExtensionRegistry* r) {
80
90
  for (const upb_MiniTableExtension* p = start; p < stop; p++) {
81
91
  // Windows can introduce zero padding, so we have to skip zeroes.
82
92
  if (upb_MiniTableExtension_Number(p) != 0) {
83
- if (!upb_ExtensionRegistry_Add(r, p)) return false;
93
+ if (upb_ExtensionRegistry_Add(r, p) != kUpb_ExtensionRegistryStatus_Ok) {
94
+ return false;
95
+ }
84
96
  }
85
97
  }
86
98
  return true;
@@ -8,6 +8,9 @@
8
8
  #ifndef UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
9
9
  #define UPB_MINI_TABLE_EXTENSION_REGISTRY_H_
10
10
 
11
+ #include <stddef.h>
12
+ #include <stdint.h>
13
+
11
14
  #include "upb/mem/arena.h"
12
15
  #include "upb/mini_table/extension.h"
13
16
  #include "upb/mini_table/message.h"
@@ -55,21 +58,25 @@ extern "C" {
55
58
 
56
59
  typedef struct upb_ExtensionRegistry upb_ExtensionRegistry;
57
60
 
61
+ typedef enum {
62
+ kUpb_ExtensionRegistryStatus_Ok = 0,
63
+ kUpb_ExtensionRegistryStatus_DuplicateEntry = 1,
64
+ kUpb_ExtensionRegistryStatus_OutOfMemory = 2,
65
+ } upb_ExtensionRegistryStatus;
66
+
58
67
  // Creates a upb_ExtensionRegistry in the given arena.
59
68
  // The arena must outlive any use of the extreg.
60
69
  UPB_API upb_ExtensionRegistry* upb_ExtensionRegistry_New(upb_Arena* arena);
61
70
 
62
- UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
63
- const upb_MiniTableExtension* e);
71
+ UPB_API upb_ExtensionRegistryStatus upb_ExtensionRegistry_Add(
72
+ upb_ExtensionRegistry* r, const upb_MiniTableExtension* e);
64
73
 
65
74
  // Adds the given extension info for the array |e| of size |count| into the
66
75
  // registry. If there are any errors, the entire array is backed out.
67
76
  // The extensions must outlive the registry.
68
77
  // Possible errors include OOM or an extension number that already exists.
69
- // TODO: There is currently no way to know the exact reason for failure.
70
- bool upb_ExtensionRegistry_AddArray(upb_ExtensionRegistry* r,
71
- const upb_MiniTableExtension** e,
72
- size_t count);
78
+ upb_ExtensionRegistryStatus upb_ExtensionRegistry_AddArray(
79
+ upb_ExtensionRegistry* r, const upb_MiniTableExtension** e, size_t count);
73
80
 
74
81
  #ifdef UPB_LINKARR_DECLARE
75
82
 
@@ -7,7 +7,6 @@
7
7
 
8
8
  #include "upb/mini_table/message.h"
9
9
 
10
- #include <inttypes.h>
11
10
  #include <stddef.h>
12
11
  #include <stdint.h>
13
12
 
@@ -27,21 +26,30 @@ const upb_MiniTableField* upb_MiniTable_FindFieldByNumber(
27
26
  }
28
27
 
29
28
  // Slow case: binary search
30
- int lo = m->UPB_PRIVATE(dense_below);
31
- int hi = m->UPB_PRIVATE(field_count) - 1;
32
- while (lo <= hi) {
33
- int mid = (lo + hi) / 2;
34
- uint32_t num = m->UPB_PRIVATE(fields)[mid].UPB_PRIVATE(number);
35
- if (num < number) {
36
- lo = mid + 1;
37
- continue;
29
+ uint32_t lo = m->UPB_PRIVATE(dense_below);
30
+ int32_t hi = m->UPB_PRIVATE(field_count) - 1;
31
+ const upb_MiniTableField* base = m->UPB_PRIVATE(fields);
32
+ while (hi >= (int32_t)lo) {
33
+ uint32_t mid = (hi + lo) / 2;
34
+ uint32_t num = base[mid].UPB_ONLYBITS(number);
35
+ // These comparison operations allow, on ARM machines, to fuse all these
36
+ // branches into one comparison followed by two CSELs to set the lo/hi
37
+ // values, followed by a BNE to continue or terminate the loop. Since binary
38
+ // search branches are generally unpredictable (50/50 in each direction),
39
+ // this is a good deal. We use signed for the high, as this decrement may
40
+ // underflow if mid is 0.
41
+ int32_t hi_mid = mid - 1;
42
+ uint32_t lo_mid = mid + 1;
43
+ if (num == number) {
44
+ return &base[mid];
38
45
  }
39
- if (num > number) {
40
- hi = mid - 1;
41
- continue;
46
+ if (UPB_UNPREDICTABLE(num < number)) {
47
+ lo = lo_mid;
48
+ } else {
49
+ hi = hi_mid;
42
50
  }
43
- return &m->UPB_PRIVATE(fields)[mid];
44
51
  }
52
+
45
53
  return NULL;
46
54
  }
47
55
 
@@ -21,10 +21,6 @@
21
21
  #define upb_Atomic_Load(addr, order) atomic_load_explicit(addr, order)
22
22
  #define upb_Atomic_Store(addr, val, order) \
23
23
  atomic_store_explicit(addr, val, order)
24
- #define upb_Atomic_Add(addr, val, order) \
25
- atomic_fetch_add_explicit(addr, val, order)
26
- #define upb_Atomic_Sub(addr, val, order) \
27
- atomic_fetch_sub_explicit(addr, val, order)
28
24
  #define upb_Atomic_Exchange(addr, val, order) \
29
25
  atomic_exchange_explicit(addr, val, order)
30
26
  #define upb_Atomic_CompareExchangeStrong(addr, expected, desired, \
@@ -36,15 +32,146 @@
36
32
  atomic_compare_exchange_weak_explicit(addr, expected, desired, \
37
33
  success_order, failure_order)
38
34
 
39
- #else // !UPB_USE_C11_ATOMICS
35
+ #elif defined(UPB_USE_MSC_ATOMICS)
36
+ #include <intrin.h>
37
+ #include <stdbool.h>
38
+ #include <stdint.h>
39
+
40
+ #define upb_Atomic_Init(addr, val) (*(addr) = val)
41
+
42
+ #if defined(_WIN64)
43
+ // MSVC, without C11 atomics, does not have any way in pure C to force
44
+ // load-acquire store-release behavior, so we hack it with exchanges.
45
+ #pragma intrinsic(_InterlockedExchange64)
46
+ #define upb_Atomic_Store(addr, val, order) \
47
+ (void)_InterlockedExchange64((uint64_t volatile *)addr, (uint64_t)val)
48
+
49
+ #pragma intrinsic(_InterlockedCompareExchange64)
50
+ static uintptr_t upb_Atomic_LoadMsc(uint64_t volatile *addr) {
51
+ // Compare exchange with an unlikely value reduces the risk of a spurious
52
+ // (but harmless) store
53
+ return _InterlockedCompareExchange64(addr, 0xDEADC0DEBAADF00D,
54
+ 0xDEADC0DEBAADF00D);
55
+ }
56
+ // If _Generic is available, use it to avoid emitting a "'uintptr_t' differs in
57
+ // levels of indirection from 'void *'" or -Wint-conversion compiler warning.
58
+ #if __STDC_VERSION__ >= 201112L
59
+ #define upb_Atomic_Load(addr, order) \
60
+ _Generic(addr, \
61
+ UPB_ATOMIC(uintptr_t) *: upb_Atomic_LoadMsc( \
62
+ (uint64_t volatile *)(addr)), \
63
+ default: (void *)upb_Atomic_LoadMsc((uint64_t volatile *)(addr)))
64
+
65
+ #define upb_Atomic_Exchange(addr, val, order) \
66
+ _Generic(addr, \
67
+ UPB_ATOMIC(uintptr_t) *: _InterlockedExchange64( \
68
+ (uint64_t volatile *)(addr), (uint64_t)val), \
69
+ default: (void *)_InterlockedExchange64((uint64_t volatile *)addr, \
70
+ (uint64_t)val))
71
+ #else
72
+ // Compare exchange with an unlikely value reduces the risk of a spurious
73
+ // (but harmless) store
74
+ #define upb_Atomic_Load(addr, order) \
75
+ (void *)upb_Atomic_LoadMsc((uint64_t volatile *)(addr))
76
+
77
+ #define upb_Atomic_Exchange(addr, val, order) \
78
+ (void *)_InterlockedExchange64((uint64_t volatile *)addr, (uint64_t)val)
79
+ #endif
80
+
81
+ #pragma intrinsic(_InterlockedCompareExchange64)
82
+ static bool upb_Atomic_CompareExchangeMscP(uint64_t volatile *addr,
83
+ uint64_t *expected,
84
+ uint64_t desired) {
85
+ uint64_t expect_val = *expected;
86
+ uint64_t actual_val =
87
+ _InterlockedCompareExchange64(addr, desired, expect_val);
88
+ if (expect_val != actual_val) {
89
+ *expected = actual_val;
90
+ return false;
91
+ }
92
+ return true;
93
+ }
94
+
95
+ #define upb_Atomic_CompareExchangeStrong(addr, expected, desired, \
96
+ success_order, failure_order) \
97
+ upb_Atomic_CompareExchangeMscP((uint64_t volatile *)addr, \
98
+ (uint64_t *)expected, (uint64_t)desired)
99
+
100
+ #define upb_Atomic_CompareExchangeWeak(addr, expected, desired, success_order, \
101
+ failure_order) \
102
+ upb_Atomic_CompareExchangeMscP((uint64_t volatile *)addr, \
103
+ (uint64_t *)expected, (uint64_t)desired)
104
+
105
+ #else // 32 bit pointers
106
+ #pragma intrinsic(_InterlockedExchange)
107
+ #define upb_Atomic_Store(addr, val, order) \
108
+ (void)_InterlockedExchange((uint32_t volatile *)addr, (uint32_t)val)
109
+
110
+ #pragma intrinsic(_InterlockedCompareExchange)
111
+ static uintptr_t upb_Atomic_LoadMsc(uint32_t volatile *addr) {
112
+ // Compare exchange with an unlikely value reduces the risk of a spurious
113
+ // (but harmless) store
114
+ return _InterlockedCompareExchange(addr, 0xDEADC0DE, 0xDEADC0DE);
115
+ }
116
+ // If _Generic is available, use it to avoid emitting 'uintptr_t' differs in
117
+ // levels of indirection from 'void *'
118
+ #if __STDC_VERSION__ >= 201112L
119
+ #define upb_Atomic_Load(addr, order) \
120
+ _Generic(addr, \
121
+ UPB_ATOMIC(uintptr_t) *: upb_Atomic_LoadMsc( \
122
+ (uint32_t volatile *)(addr)), \
123
+ default: (void *)upb_Atomic_LoadMsc((uint32_t volatile *)(addr)))
124
+
125
+ #define upb_Atomic_Exchange(addr, val, order) \
126
+ _Generic(addr, \
127
+ UPB_ATOMIC(uintptr_t) *: _InterlockedExchange( \
128
+ (uint32_t volatile *)(addr), (uint32_t)val), \
129
+ default: (void *)_InterlockedExchange64((uint32_t volatile *)addr, \
130
+ (uint32_t)val))
131
+ #else
132
+ #define upb_Atomic_Load(addr, order) \
133
+ (void *)upb_Atomic_LoadMsc((uint32_t volatile *)(addr))
134
+
135
+ #define upb_Atomic_Exchange(addr, val, order) \
136
+ (void *)_InterlockedExchange((uint32_t volatile *)addr, (uint32_t)val)
137
+ #endif
138
+
139
+ #pragma intrinsic(_InterlockedCompareExchange)
140
+ static bool upb_Atomic_CompareExchangeMscP(uint32_t volatile *addr,
141
+ uint32_t *expected,
142
+ uint32_t desired) {
143
+ uint32_t expect_val = *expected;
144
+ uint32_t actual_val = _InterlockedCompareExchange(addr, desired, expect_val);
145
+ if (expect_val != actual_val) {
146
+ *expected = actual_val;
147
+ return false;
148
+ }
149
+ return true;
150
+ }
151
+
152
+ #define upb_Atomic_CompareExchangeStrong(addr, expected, desired, \
153
+ success_order, failure_order) \
154
+ upb_Atomic_CompareExchangeMscP((uint32_t volatile *)addr, \
155
+ (uint32_t *)expected, (uint32_t)desired)
156
+
157
+ #define upb_Atomic_CompareExchangeWeak(addr, expected, desired, success_order, \
158
+ failure_order) \
159
+ upb_Atomic_CompareExchangeMscP((uint32_t volatile *)addr, \
160
+ (uint32_t *)expected, (uint32_t)desired)
161
+ #endif
162
+
163
+ #else // No atomics
164
+
165
+ #if !defined(UPB_SUPPRESS_MISSING_ATOMICS)
166
+ // NOLINTNEXTLINE
167
+ #error Your compiler does not support atomic instructions, which UPB uses. If you do not use UPB on multiple threads, you can suppress this error by defining UPB_SUPPRESS_MISSING_ATOMICS.
168
+ #endif
40
169
 
41
170
  #include <string.h>
42
171
 
43
172
  #define upb_Atomic_Init(addr, val) (*addr = val)
44
173
  #define upb_Atomic_Load(addr, order) (*addr)
45
174
  #define upb_Atomic_Store(addr, val, order) (*(addr) = val)
46
- #define upb_Atomic_Add(addr, val, order) (*(addr) += val)
47
- #define upb_Atomic_Sub(addr, val, order) (*(addr) -= val)
48
175
 
49
176
  UPB_INLINE void* _upb_NonAtomic_Exchange(void* addr, void* value) {
50
177
  void* old;
@@ -28,9 +28,9 @@
28
28
  */
29
29
 
30
30
  #if !((defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \
31
- (defined(__cplusplus) && __cplusplus >= 201402L) || \
31
+ (defined(__cplusplus) && __cplusplus >= 201703L) || \
32
32
  (defined(_MSC_VER) && _MSC_VER >= 1900))
33
- #error upb requires C99 or C++14 or MSVC >= 2015.
33
+ #error upb requires C99 or C++17 or MSVC >= 2015.
34
34
  #endif
35
35
 
36
36
  // Portable check for GCC minimum version:
@@ -62,7 +62,14 @@ Error, UINTPTR_MAX is undefined
62
62
  /* If we always read/write as a consistent type to each address, this shouldn't
63
63
  * violate aliasing.
64
64
  */
65
- #define UPB_PTR_AT(msg, ofs, type) ((type*)((char*)(msg) + (ofs)))
65
+ #define UPB_PTR_AT(msg, ofs, type) ((type *)((char *)(msg) + (ofs)))
66
+
67
+ // A flexible array member may have lower alignment requirements than the struct
68
+ // overall - in that case, it can overlap with the trailing padding of the rest
69
+ // of the struct, and a naive sizeof(base) + sizeof(flex) * count calculation
70
+ // will not take into account that overlap, and allocate more than is required.
71
+ #define UPB_SIZEOF_FLEX(type, member, count) \
72
+ UPB_MAX(sizeof(type), offsetof(type, member[count]))
66
73
 
67
74
  #define UPB_MAPTYPE_STRING 0
68
75
 
@@ -76,12 +83,19 @@ Error, UINTPTR_MAX is undefined
76
83
  // UPB_INLINE: inline if possible, emit standalone code if required.
77
84
  #ifdef __cplusplus
78
85
  #define UPB_INLINE inline
79
- #elif defined (__GNUC__) || defined(__clang__)
86
+ #elif defined(__GNUC__) || defined(__clang__)
80
87
  #define UPB_INLINE static __inline__
81
88
  #else
82
89
  #define UPB_INLINE static
83
90
  #endif
84
91
 
92
+ // UPB_INLINE_IF_NOT_GCC: because gcc can be very noisy at times.
93
+ #if defined(__GNUC__) && !defined(__clang__)
94
+ #define UPB_INLINE_IF_NOT_GCC static
95
+ #else
96
+ #define UPB_INLINE_IF_NOT_GCC UPB_INLINE
97
+ #endif
98
+
85
99
  #ifdef UPB_BUILD_API
86
100
  #define UPB_API UPB_EXPORT
87
101
  #define UPB_API_INLINE UPB_EXPORT
@@ -103,7 +117,13 @@ Error, UINTPTR_MAX is undefined
103
117
  #ifdef __clang__
104
118
  #define UPB_ALIGN_OF(type) _Alignof(type)
105
119
  #else
106
- #define UPB_ALIGN_OF(type) offsetof (struct { char c; type member; }, member)
120
+ #define UPB_ALIGN_OF(type) \
121
+ offsetof( \
122
+ struct { \
123
+ char c; \
124
+ type member; \
125
+ }, \
126
+ member)
107
127
  #endif
108
128
 
109
129
  #ifdef _MSC_VER
@@ -114,7 +134,7 @@ Error, UINTPTR_MAX is undefined
114
134
  #endif
115
135
 
116
136
  // Hints to the compiler about likely/unlikely branches.
117
- #if defined (__GNUC__) || defined(__clang__)
137
+ #if defined(__GNUC__) || defined(__clang__)
118
138
  #define UPB_LIKELY(x) __builtin_expect((bool)(x), 1)
119
139
  #define UPB_UNLIKELY(x) __builtin_expect((bool)(x), 0)
120
140
  #else
@@ -122,18 +142,30 @@ Error, UINTPTR_MAX is undefined
122
142
  #define UPB_UNLIKELY(x) (x)
123
143
  #endif
124
144
 
145
+ #ifdef __has_builtin
146
+ #if __has_builtin(__builtin_expect_with_probability)
147
+ #define UPB_UNPREDICTABLE(x) \
148
+ __builtin_expect_with_probability((bool)(x), 1, 0.5)
149
+ #else
150
+ #define UPB_UNPREDICTABLE(x) (x)
151
+ #endif
152
+ #else
153
+ #define UPB_UNPREDICTABLE(x) (x)
154
+ #endif
155
+
125
156
  // Macros for function attributes on compilers that support them.
126
- #ifdef __GNUC__
157
+ #if defined(__GNUC__) || defined(__clang__)
127
158
  #define UPB_FORCEINLINE __inline__ __attribute__((always_inline)) static
128
159
  #define UPB_NOINLINE __attribute__((noinline))
129
160
  #define UPB_NORETURN __attribute__((__noreturn__))
130
- #define UPB_PRINTF(str, first_vararg) __attribute__((format (printf, str, first_vararg)))
161
+ #define UPB_PRINTF(str, first_vararg) \
162
+ __attribute__((format(printf, str, first_vararg)))
131
163
  #elif defined(_MSC_VER)
132
164
  #define UPB_NOINLINE
133
165
  #define UPB_FORCEINLINE static
134
166
  #define UPB_NORETURN __declspec(noreturn)
135
167
  #define UPB_PRINTF(str, first_vararg)
136
- #else /* !defined(__GNUC__) */
168
+ #else /* !defined(__GNUC__) */
137
169
  #define UPB_FORCEINLINE static
138
170
  #define UPB_NOINLINE
139
171
  #define UPB_NORETURN
@@ -148,11 +180,15 @@ Error, UINTPTR_MAX is undefined
148
180
  // UPB_ASSUME(): in release mode, we tell the compiler to assume this is true.
149
181
  #ifdef NDEBUG
150
182
  #ifdef __GNUC__
151
- #define UPB_ASSUME(expr) if (!(expr)) __builtin_unreachable()
183
+ #define UPB_ASSUME(expr) \
184
+ if (!(expr)) __builtin_unreachable()
152
185
  #elif defined _MSC_VER
153
- #define UPB_ASSUME(expr) if (!(expr)) __assume(0)
186
+ #define UPB_ASSUME(expr) \
187
+ if (!(expr)) __assume(0)
154
188
  #else
155
- #define UPB_ASSUME(expr) do {} while (false && (expr))
189
+ #define UPB_ASSUME(expr) \
190
+ do { \
191
+ } while (false && (expr))
156
192
  #endif
157
193
  #else
158
194
  #define UPB_ASSUME(expr) assert(expr)
@@ -161,13 +197,19 @@ Error, UINTPTR_MAX is undefined
161
197
  /* UPB_ASSERT(): in release mode, we use the expression without letting it be
162
198
  * evaluated. This prevents "unused variable" warnings. */
163
199
  #ifdef NDEBUG
164
- #define UPB_ASSERT(expr) do {} while (false && (expr))
200
+ #define UPB_ASSERT(expr) \
201
+ do { \
202
+ } while (false && (expr))
165
203
  #else
166
204
  #define UPB_ASSERT(expr) assert(expr)
167
205
  #endif
168
206
 
169
207
  #if defined(__GNUC__) || defined(__clang__)
170
- #define UPB_UNREACHABLE() do { assert(0); __builtin_unreachable(); } while(0)
208
+ #define UPB_UNREACHABLE() \
209
+ do { \
210
+ assert(0); \
211
+ __builtin_unreachable(); \
212
+ } while (0)
171
213
  #elif defined(_MSC_VER)
172
214
  #define UPB_UNREACHABLE() \
173
215
  do { \
@@ -175,13 +217,26 @@ Error, UINTPTR_MAX is undefined
175
217
  __assume(0); \
176
218
  } while (0)
177
219
  #else
178
- #define UPB_UNREACHABLE() do { assert(0); } while(0)
220
+ #define UPB_UNREACHABLE() \
221
+ do { \
222
+ assert(0); \
223
+ } while (0)
179
224
  #endif
180
225
 
181
- /* UPB_SETJMP() / UPB_LONGJMP(): avoid setting/restoring signal mask. */
182
- #ifdef __APPLE__
183
- #define UPB_SETJMP(buf) _setjmp(buf)
184
- #define UPB_LONGJMP(buf, val) _longjmp(buf, val)
226
+ #ifdef __ANDROID__
227
+ #define UPB_DEFAULT_MAX_BLOCK_SIZE 8192
228
+ #else
229
+ #define UPB_DEFAULT_MAX_BLOCK_SIZE 32768
230
+ #endif
231
+
232
+ /* UPB_SETJMP() / UPB_LONGJMP() */
233
+ // Android uses a custom libc that does not implement all of posix, but it has
234
+ // had sigsetjmp/siglongjmp forever on arm and since API 12 on x86. Apple has
235
+ // sigsetjmp, but does not define the posix feature test macro.
236
+ #if defined(__APPLE__) || defined(_POSIX_C_SOURCE) || defined(__ANDROID__)
237
+ // avoid setting/restoring signal mask, which involves costly syscalls
238
+ #define UPB_SETJMP(buf) sigsetjmp(buf, 0)
239
+ #define UPB_LONGJMP(buf, val) siglongjmp(buf, val)
185
240
  #elif defined(WASM_WAMR)
186
241
  #define UPB_SETJMP(buf) 0
187
242
  #define UPB_LONGJMP(buf, val) abort()
@@ -190,9 +245,23 @@ Error, UINTPTR_MAX is undefined
190
245
  #define UPB_LONGJMP(buf, val) longjmp(buf, val)
191
246
  #endif
192
247
 
193
- #ifdef __GNUC__
248
+ #if ((__STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_ATOMICS__))
194
249
  #define UPB_USE_C11_ATOMICS
250
+ #elif defined(__has_extension)
251
+ #if __has_extension(c_atomic)
252
+ #define UPB_USE_C11_ATOMICS
253
+ #endif
254
+ #elif defined(__GNUC__)
255
+ // GCC supported atomics as an extension before it supported __has_extension
256
+ #define UPB_USE_C11_ATOMICS
257
+ #elif defined(_MSC_VER)
258
+ #define UPB_USE_MSC_ATOMICS
259
+ #endif
260
+
261
+ #if defined(UPB_USE_C11_ATOMICS)
195
262
  #define UPB_ATOMIC(T) _Atomic(T)
263
+ #elif defined(UPB_USE_MSC_ATOMICS)
264
+ #define UPB_ATOMIC(T) volatile T
196
265
  #else
197
266
  #define UPB_ATOMIC(T) T
198
267
  #endif
@@ -280,7 +349,7 @@ Error, UINTPTR_MAX is undefined
280
349
  */
281
350
 
282
351
  /* Due to preprocessor limitations, the conditional logic for setting
283
- * UPN_CLANG_ASAN below cannot be consolidated into a portable one-liner.
352
+ * UPB_CLANG_ASAN below cannot be consolidated into a portable one-liner.
284
353
  * See https://gcc.gnu.org/onlinedocs/cpp/_005f_005fhas_005fattribute.html.
285
354
  */
286
355
  #if defined(__has_feature)
@@ -289,8 +358,14 @@ Error, UINTPTR_MAX is undefined
289
358
  #else
290
359
  #define UPB_CLANG_ASAN 0
291
360
  #endif
361
+ #if __has_feature(thread_sanitizer)
362
+ #define UPB_CLANG_TSAN 1
363
+ #else
364
+ #define UPB_CLANG_TSAN 0
365
+ #endif
292
366
  #else
293
367
  #define UPB_CLANG_ASAN 0
368
+ #define UPB_CLANG_TSAN 0
294
369
  #endif
295
370
 
296
371
  #if defined(__SANITIZE_ADDRESS__) || UPB_CLANG_ASAN
@@ -299,10 +374,10 @@ Error, UINTPTR_MAX is undefined
299
374
  #ifdef __cplusplus
300
375
  extern "C" {
301
376
  #endif
302
- void __asan_poison_memory_region(void const volatile *addr, size_t size);
303
- void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
377
+ void __asan_poison_memory_region(void const volatile *addr, size_t size);
378
+ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
304
379
  #ifdef __cplusplus
305
- } /* extern "C" */
380
+ } /* extern "C" */
306
381
  #endif
307
382
  #define UPB_POISON_MEMORY_REGION(addr, size) \
308
383
  __asan_poison_memory_region((addr), (size))
@@ -311,10 +386,38 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
311
386
  #else
312
387
  #define UPB_ASAN 0
313
388
  #define UPB_ASAN_GUARD_SIZE 0
314
- #define UPB_POISON_MEMORY_REGION(addr, size) \
315
- ((void)(addr), (void)(size))
316
- #define UPB_UNPOISON_MEMORY_REGION(addr, size) \
317
- ((void)(addr), (void)(size))
389
+ #define UPB_POISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size))
390
+ #define UPB_UNPOISON_MEMORY_REGION(addr, size) ((void)(addr), (void)(size))
391
+ #endif
392
+
393
+ #if defined(__SANITIZE_THREAD__) || UPB_CLANG_TSAN
394
+ #define UPB_TSAN_PUBLISHED_MEMBER uintptr_t upb_tsan_safely_published;
395
+ #define UPB_TSAN_INIT_PUBLISHED(ptr) (ptr)->upb_tsan_safely_published = 0x5AFE
396
+ #define UPB_TSAN_CHECK_PUBLISHED(ptr) \
397
+ UPB_ASSERT((ptr)->upb_tsan_safely_published == 0x5AFE)
398
+ #define UPB_TSAN_PUBLISH 1
399
+ #define UPB_TSAN_CHECK_READ(member) \
400
+ __asm__ volatile("" ::"r"(*(char *)&(member)))
401
+ #define UPB_TSAN_CHECK_WRITE(member) \
402
+ do { \
403
+ char *write_upb_tsan_detect_race_ptr = (char *)&(member); \
404
+ char write_upb_tsan_detect_race = *write_upb_tsan_detect_race_ptr; \
405
+ __asm__ volatile("" : "+r"(write_upb_tsan_detect_race)); \
406
+ *write_upb_tsan_detect_race_ptr = write_upb_tsan_detect_race; \
407
+ } while (false)
408
+ #else
409
+ #define UPB_TSAN_PUBLISHED_MEMBER
410
+ #define UPB_TSAN_INIT_PUBLISHED(ptr)
411
+ #define UPB_TSAN_CHECK_PUBLISHED(ptr) \
412
+ do { \
413
+ } while (false && (ptr))
414
+ #define UPB_TSAN_PUBLISH 0
415
+ #define UPB_TSAN_CHECK_READ(member) \
416
+ do { \
417
+ } while (false && (member))
418
+ #define UPB_TSAN_CHECK_WRITE(member) \
419
+ do { \
420
+ } while (false && (member))
318
421
  #endif
319
422
 
320
423
  /* Disable proto2 arena behavior (TEMPORARY) **********************************/
@@ -380,8 +483,9 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
380
483
 
381
484
  #if defined(__ELF__) || defined(__wasm__)
382
485
 
383
- #define UPB_LINKARR_APPEND(name) \
384
- __attribute__((retain, used, section("linkarr_" #name)))
486
+ #define UPB_LINKARR_APPEND(name) \
487
+ __attribute__((retain, used, section("linkarr_" #name), \
488
+ no_sanitize("address")))
385
489
  #define UPB_LINKARR_DECLARE(name, type) \
386
490
  extern type const __start_linkarr_##name; \
387
491
  extern type const __stop_linkarr_##name; \
@@ -392,8 +496,9 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
392
496
  #elif defined(__MACH__)
393
497
 
394
498
  /* As described in: https://stackoverflow.com/a/22366882 */
395
- #define UPB_LINKARR_APPEND(name) \
396
- __attribute__((retain, used, section("__DATA,__la_" #name)))
499
+ #define UPB_LINKARR_APPEND(name) \
500
+ __attribute__((retain, used, section("__DATA,__la_" #name), \
501
+ no_sanitize("address")))
397
502
  #define UPB_LINKARR_DECLARE(name, type) \
398
503
  extern type const __start_linkarr_##name __asm( \
399
504
  "section$start$__DATA$__la_" #name); \
@@ -413,8 +518,9 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
413
518
 
414
519
  // Usage of __attribute__ here probably means this is Clang-specific, and would
415
520
  // not work on MSVC.
416
- #define UPB_LINKARR_APPEND(name) \
417
- __declspec(allocate("la_" #name "$j")) __attribute__((retain, used))
521
+ #define UPB_LINKARR_APPEND(name) \
522
+ __declspec(allocate("la_" #name "$j")) \
523
+ __attribute__((retain, used, no_sanitize("address")))
418
524
  #define UPB_LINKARR_DECLARE(name, type) \
419
525
  __declspec(allocate("la_" #name "$a")) type __start_linkarr_##name; \
420
526
  __declspec(allocate("la_" #name "$z")) type __stop_linkarr_##name; \
@@ -435,8 +541,4 @@ void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
435
541
  // user code can be updated before upgrading versions of protobuf.
436
542
  #ifdef UPB_FUTURE_BREAKING_CHANGES
437
543
 
438
- // Properly enforce closed enums in python.
439
- // Owner: mkruskal@
440
- #define UPB_FUTURE_PYTHON_CLOSED_ENUM_ENFORCEMENT 1
441
-
442
544
  #endif