aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--.pylintrc36
-rw-r--r--BUILD8
-rw-r--r--CMakeLists.txt461
-rw-r--r--Makefile587
-rw-r--r--bazel/cc_grpc_library.bzl26
-rw-r--r--bazel/generate_cc.bzl17
-rw-r--r--bazel/grpc_build_system.bzl5
-rw-r--r--binding.gyp24
-rw-r--r--build.yaml217
-rw-r--r--config.m44
-rw-r--r--doc/PROTOCOL-WEB.md2
-rw-r--r--doc/combiner-explainer.md158
-rw-r--r--doc/g_stands_for.md1
-rw-r--r--doc/status_ordering.md16
-rw-r--r--examples/csharp/helloworld-from-cli/global.json5
-rw-r--r--gRPC-Core.podspec10
-rw-r--r--gRPC-ProtoRPC.podspec2
-rw-r--r--gRPC-RxLibrary.podspec2
-rw-r--r--gRPC.podspec2
-rw-r--r--grpc.def1
-rwxr-xr-xgrpc.gemspec6
-rw-r--r--include/grpc++/impl/channel_argument_option.h52
-rw-r--r--include/grpc++/server_builder.h8
-rw-r--r--include/grpc++/support/channel_arguments.h2
-rw-r--r--include/grpc/impl/codegen/sync.h8
-rw-r--r--include/grpc/support/sync.h4
-rw-r--r--package.json2
-rw-r--r--package.xml10
-rw-r--r--requirements.txt2
-rw-r--r--setup.py2
-rw-r--r--src/compiler/cpp_generator.cc4
-rw-r--r--src/compiler/python_generator.cc22
-rw-r--r--src/compiler/python_generator.h3
-rw-r--r--src/core/ext/census/grpc_filter.c4
-rw-r--r--src/core/ext/client_channel/client_channel.c173
-rw-r--r--src/core/ext/client_channel/client_channel_plugin.c2
-rw-r--r--src/core/ext/client_channel/http_proxy.c10
-rw-r--r--src/core/ext/client_channel/parse_address.c31
-rw-r--r--src/core/ext/client_channel/proxy_mapper_registry.c12
-rw-r--r--src/core/ext/client_channel/resolver_registry.c22
-rw-r--r--src/core/ext/client_channel/resolver_registry.h5
-rw-r--r--src/core/ext/client_channel/subchannel.c60
-rw-r--r--src/core/ext/client_channel/subchannel.h21
-rw-r--r--src/core/ext/client_channel/uri_parser.c37
-rw-r--r--src/core/ext/client_channel/uri_parser.h4
-rw-r--r--src/core/ext/lb_policy/grpclb/grpclb.c2
-rw-r--r--src/core/ext/load_reporting/load_reporting_filter.c2
-rw-r--r--src/core/ext/transport/chttp2/client/chttp2_connector.c2
-rw-r--r--src/core/ext/transport/chttp2/client/insecure/channel_create.c3
-rw-r--r--src/core/ext/transport/chttp2/client/secure/secure_channel_create.c7
-rw-r--r--src/core/ext/transport/chttp2/transport/chttp2_transport.c41
-rw-r--r--src/core/ext/transport/chttp2/transport/frame_ping.c2
-rw-r--r--src/core/ext/transport/chttp2/transport/hpack_parser.c17
-rw-r--r--src/core/ext/transport/chttp2/transport/incoming_metadata.c65
-rw-r--r--src/core/ext/transport/chttp2/transport/incoming_metadata.h18
-rw-r--r--src/core/ext/transport/chttp2/transport/internal.h2
-rw-r--r--src/core/ext/transport/chttp2/transport/parsing.c60
-rw-r--r--src/core/ext/transport/cronet/transport/cronet_transport.c176
-rw-r--r--src/core/lib/channel/channel_stack.c36
-rw-r--r--src/core/lib/channel/channel_stack.h23
-rw-r--r--src/core/lib/channel/compress_filter.c2
-rw-r--r--src/core/lib/channel/connected_channel.c6
-rw-r--r--src/core/lib/channel/deadline_filter.c2
-rw-r--r--src/core/lib/channel/http_client_filter.c2
-rw-r--r--src/core/lib/channel/http_server_filter.c2
-rw-r--r--src/core/lib/channel/message_size_filter.c2
-rw-r--r--src/core/lib/iomgr/error.c460
-rw-r--r--src/core/lib/iomgr/error.h11
-rw-r--r--src/core/lib/iomgr/error_internal.h39
-rw-r--r--src/core/lib/iomgr/pollset_uv.c22
-rw-r--r--src/core/lib/iomgr/port.h4
-rw-r--r--src/core/lib/iomgr/resolve_address_uv.c52
-rw-r--r--src/core/lib/iomgr/sockaddr_utils.c12
-rw-r--r--src/core/lib/iomgr/tcp_client_uv.c1
-rw-r--r--src/core/lib/iomgr/tcp_server_posix.c431
-rw-r--r--src/core/lib/iomgr/tcp_server_utils_posix.h134
-rw-r--r--src/core/lib/iomgr/tcp_server_utils_posix_common.c220
-rw-r--r--src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c195
-rw-r--r--src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c49
-rw-r--r--src/core/lib/iomgr/udp_server.c22
-rw-r--r--src/core/lib/iomgr/udp_server.h12
-rw-r--r--src/core/lib/iomgr/wakeup_fd_posix.h2
-rw-r--r--src/core/lib/security/transport/client_auth_filter.c2
-rw-r--r--src/core/lib/security/transport/server_auth_filter.c2
-rw-r--r--src/core/lib/support/arena.c98
-rw-r--r--src/core/lib/support/arena.h54
-rw-r--r--src/core/lib/support/sync.c12
-rw-r--r--src/core/lib/surface/call.c144
-rw-r--r--src/core/lib/surface/channel.c32
-rw-r--r--src/core/lib/surface/channel.h3
-rw-r--r--src/core/lib/surface/lame_client.c4
-rw-r--r--src/core/lib/surface/server.c2
-rw-r--r--src/core/lib/surface/version.c2
-rw-r--r--src/core/lib/transport/error_utils.c22
-rw-r--r--src/core/lib/transport/transport.c47
-rw-r--r--src/core/lib/transport/transport.h12
-rw-r--r--src/core/lib/transport/transport_impl.h5
-rw-r--r--src/core/lib/tsi/test_creds/BUILD2
-rw-r--r--src/cpp/common/channel_arguments.cc14
-rw-r--r--src/cpp/common/channel_filter.h3
-rw-r--r--src/cpp/common/version_cc.cc2
-rw-r--r--src/cpp/server/channel_argument_option.cc78
-rw-r--r--src/cpp/server/server_builder.cc8
-rw-r--r--src/cpp/server/server_cc.cc2
-rw-r--r--src/csharp/Grpc.Auth/Grpc.Auth.csproj26
-rw-r--r--src/csharp/Grpc.Auth/packages.config10
-rw-r--r--src/csharp/Grpc.Auth/project.json6
-rw-r--r--src/csharp/Grpc.Core.Testing/project.json4
-rw-r--r--src/csharp/Grpc.Core.Tests/AuthContextTest.cs86
-rw-r--r--src/csharp/Grpc.Core.Tests/AuthPropertyTest.cs82
-rw-r--r--src/csharp/Grpc.Core.Tests/ClientServerTest.cs12
-rw-r--r--src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj19
-rw-r--r--src/csharp/Grpc.Core.Tests/TestResult.xml41
-rw-r--r--src/csharp/Grpc.Core.Tests/packages.config7
-rw-r--r--src/csharp/Grpc.Core.Tests/project.json8
-rw-r--r--src/csharp/Grpc.Core/AuthContext.cs128
-rw-r--r--src/csharp/Grpc.Core/AuthProperty.cs126
-rw-r--r--src/csharp/Grpc.Core/Grpc.Core.csproj4
-rw-r--r--src/csharp/Grpc.Core/Internal/AuthContextSafeHandle.cs119
-rw-r--r--src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs10
-rw-r--r--src/csharp/Grpc.Core/Internal/CallSafeHandle.cs8
-rw-r--r--src/csharp/Grpc.Core/Internal/MarshalUtils.cs90
-rw-r--r--src/csharp/Grpc.Core/Internal/NativeMethods.cs18
-rw-r--r--src/csharp/Grpc.Core/Metadata.cs13
-rw-r--r--src/csharp/Grpc.Core/ServerCallContext.cs23
-rw-r--r--src/csharp/Grpc.Core/VersionInfo.cs4
-rw-r--r--src/csharp/Grpc.Core/project.json2
-rw-r--r--src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj12
-rw-r--r--src/csharp/Grpc.Examples.Tests/packages.config6
-rw-r--r--src/csharp/Grpc.Examples.Tests/project.json4
-rw-r--r--src/csharp/Grpc.Examples/Grpc.Examples.csproj14
-rw-r--r--src/csharp/Grpc.Examples/packages.config4
-rw-r--r--src/csharp/Grpc.Examples/project.json9
-rw-r--r--src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj10
-rw-r--r--src/csharp/Grpc.HealthCheck.Tests/packages.config6
-rw-r--r--src/csharp/Grpc.HealthCheck.Tests/project.json4
-rw-r--r--src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj6
-rw-r--r--src/csharp/Grpc.HealthCheck/packages.config2
-rw-r--r--src/csharp/Grpc.HealthCheck/project.json13
-rw-r--r--src/csharp/Grpc.IntegrationTesting.Client/Grpc.IntegrationTesting.Client.csproj28
-rw-r--r--src/csharp/Grpc.IntegrationTesting.Client/packages.config10
-rw-r--r--src/csharp/Grpc.IntegrationTesting.QpsWorker/packages.config3
-rw-r--r--src/csharp/Grpc.IntegrationTesting.Server/Grpc.IntegrationTesting.Server.csproj28
-rw-r--r--src/csharp/Grpc.IntegrationTesting.Server/packages.config10
-rw-r--r--src/csharp/Grpc.IntegrationTesting.StressClient/packages.config3
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Control.cs497
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Empty.cs12
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj52
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Messages.cs128
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Metrics.cs4
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Payloads.cs4
-rw-r--r--src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs38
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Stats.cs26
-rw-r--r--src/csharp/Grpc.IntegrationTesting/packages.config22
-rw-r--r--src/csharp/Grpc.IntegrationTesting/project.json15
-rw-r--r--src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj16
-rw-r--r--src/csharp/Grpc.Reflection.Tests/packages.config6
-rw-r--r--src/csharp/Grpc.Reflection.Tests/project.json4
-rw-r--r--src/csharp/Grpc.Reflection/Grpc.Reflection.csproj6
-rw-r--r--src/csharp/Grpc.Reflection/Reflection.cs98
-rw-r--r--src/csharp/Grpc.Reflection/packages.config2
-rw-r--r--src/csharp/Grpc.Reflection/project.json13
-rwxr-xr-xsrc/csharp/build_packages_dotnetcli.bat2
-rwxr-xr-xsrc/csharp/build_packages_dotnetcli.sh4
-rw-r--r--src/csharp/ext/grpc_csharp_ext.c25
-rw-r--r--src/csharp/global.json5
-rw-r--r--src/csharp/tests.json3
-rw-r--r--src/node/health_check/package.json4
-rw-r--r--src/node/src/server.js2
-rw-r--r--src/node/tools/package.json2
-rw-r--r--src/objective-c/!ProtoCompiler-gRPCPlugin.podspec2
-rw-r--r--src/objective-c/GRPCClient/private/version.h2
-rw-r--r--src/objective-c/tests/InteropTests.m9
-rw-r--r--src/objective-c/tests/InteropTestsLocalCleartext.m6
-rw-r--r--src/objective-c/tests/InteropTestsLocalSSL.m6
-rw-r--r--src/objective-c/tests/InteropTestsRemote.m6
-rw-r--r--src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m8
-rw-r--r--src/php/composer.json2
-rw-r--r--src/php/tests/qps/client.php166
-rw-r--r--src/php/tests/qps/composer.json11
-rw-r--r--src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Control.php127
-rw-r--r--src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php69
-rw-r--r--src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Payloads.php37
-rw-r--r--src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/ProxyService.php34
-rw-r--r--src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Services.php45
-rw-r--r--src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Stats.php44
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/BenchmarkServiceClient.php78
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/BoolValue.php62
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ByteBufferParams.php65
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ChannelArg.php84
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ClientArgs.php63
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ClientConfig.php407
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ClientStats.php164
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ClientStatus.php44
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ClientType.php34
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ClosedLoopParams.php28
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ComplexProtoParams.php28
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/CoreRequest.php23
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/CoreResponse.php56
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/EchoStatus.php70
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/HistogramData.php153
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/HistogramParams.php93
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/LoadParams.php63
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/Mark.php60
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/Payload.php96
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/PayloadConfig.php80
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/PayloadType.php26
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/PoissonParams.php61
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ProxyClientServiceClient.php72
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ProxyStat.php44
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ReconnectInfo.php71
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ReconnectParams.php49
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/RequestResultCount.php65
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ResponseParameters.php138
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/RpcType.php21
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/Scenario.php291
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResult.php312
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResultSummary.php430
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/Scenarios.php48
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/SecurityParams.php69
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ServerArgs.php63
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ServerConfig.php305
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ServerStats.php191
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ServerStatus.php110
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/ServerType.php33
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/SimpleProtoParams.php65
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/SimpleRequest.php306
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/SimpleResponse.php129
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallRequest.php102
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallResponse.php60
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallRequest.php171
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallResponse.php60
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/Void.php23
-rw-r--r--src/php/tests/qps/generated_code/Grpc/Testing/WorkerServiceClient.php111
-rw-r--r--src/proto/grpc/testing/proxy-service.proto (renamed from src/csharp/Grpc.Core.Tests/NUnitVersionTest.cs)55
-rw-r--r--src/python/grpcio/grpc/__init__.py26
-rw-r--r--src/python/grpcio/grpc/_auth.py24
-rw-r--r--src/python/grpcio/grpc/_channel.py27
-rw-r--r--src/python/grpcio/grpc/_common.py12
-rw-r--r--src/python/grpcio/grpc/_plugin_wrapping.py6
-rw-r--r--src/python/grpcio/grpc/_server.py22
-rw-r--r--src/python/grpcio/grpc/beta/_client_adaptations.py7
-rw-r--r--src/python/grpcio/grpc/beta/_connectivity_channel.py159
-rw-r--r--src/python/grpcio/grpc/beta/_server_adaptations.py22
-rw-r--r--src/python/grpcio/grpc/beta/implementations.py11
-rw-r--r--src/python/grpcio/grpc/framework/foundation/logging_pool.py2
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/base/base.py25
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/face/face.py2
-rw-r--r--src/python/grpcio/grpc_core_dependencies.py4
-rw-r--r--src/python/grpcio/grpc_version.py2
-rw-r--r--src/python/grpcio_health_checking/grpc_health/v1/health.py3
-rw-r--r--src/python/grpcio_health_checking/grpc_version.py2
-rw-r--r--src/python/grpcio_health_checking/setup.py2
-rw-r--r--src/python/grpcio_reflection/grpc_version.py2
-rw-r--r--src/python/grpcio_reflection/setup.py2
-rw-r--r--src/python/grpcio_tests/grpc_version.py2
-rw-r--r--src/python/grpcio_tests/setup.py2
-rw-r--r--src/python/grpcio_tests/tests/health_check/_health_servicer_test.py5
-rw-r--r--src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py8
-rw-r--r--src/python/grpcio_tests/tests/interop/_secure_intraop_test.py8
-rw-r--r--src/python/grpcio_tests/tests/interop/methods.py4
-rw-r--r--src/python/grpcio_tests/tests/interop/server.py5
-rw-r--r--src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py9
-rw-r--r--src/python/grpcio_tests/tests/qps/qps_worker.py4
-rw-r--r--src/python/grpcio_tests/tests/qps/worker_server.py8
-rw-r--r--src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py7
-rw-r--r--src/python/grpcio_tests/tests/stress/client.py4
-rw-r--r--src/ruby/ext/grpc/extconf.rb5
-rw-r--r--src/ruby/ext/grpc/rb_grpc_imports.generated.c2
-rw-r--r--src/ruby/ext/grpc/rb_grpc_imports.generated.h3
-rw-r--r--src/ruby/lib/grpc/version.rb2
-rwxr-xr-xsrc/ruby/qps/proxy-worker.rb160
-rw-r--r--src/ruby/qps/src/proto/grpc/testing/proxy-service_pb.rb17
-rw-r--r--src/ruby/qps/src/proto/grpc/testing/proxy-service_services_pb.rb55
-rw-r--r--src/ruby/tools/version.rb2
-rw-r--r--templates/binding.gyp.template20
-rw-r--r--templates/src/csharp/Grpc.Auth/project.json.template2
-rw-r--r--templates/src/csharp/Grpc.Core.Tests/project.json.template8
-rw-r--r--templates/src/csharp/Grpc.Examples.Tests/project.json.template4
-rw-r--r--templates/src/csharp/Grpc.Examples/project.json.template9
-rw-r--r--templates/src/csharp/Grpc.HealthCheck.Tests/project.json.template4
-rw-r--r--templates/src/csharp/Grpc.HealthCheck/project.json.template9
-rw-r--r--templates/src/csharp/Grpc.IntegrationTesting/project.json.template15
-rw-r--r--templates/src/csharp/Grpc.Reflection.Tests/project.json.template4
-rw-r--r--templates/src/csharp/Grpc.Reflection/project.json.template9
-rw-r--r--templates/tools/dockerfile/apt_get_pyenv.include3
-rw-r--r--templates/tools/dockerfile/csharp_dotnetcli_deps.include8
-rw-r--r--templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template2
-rw-r--r--templates/tools/dockerfile/python_deps.include2
-rw-r--r--templates/tools/dockerfile/test/bazel/Dockerfile.template48
-rw-r--r--test/core/census/BUILD2
-rw-r--r--test/core/channel/BUILD2
-rw-r--r--test/core/channel/channel_stack_test.c16
-rw-r--r--test/core/client_channel/parse_address_test.c116
-rw-r--r--test/core/client_channel/resolvers/dns_resolver_connectivity_test.c2
-rw-r--r--test/core/client_channel/resolvers/dns_resolver_test.c4
-rw-r--r--test/core/client_channel/resolvers/sockaddr_resolver_test.c4
-rw-r--r--test/core/client_channel/uri_fuzzer_test.c5
-rw-r--r--test/core/client_channel/uri_parser_test.c23
-rw-r--r--test/core/compression/BUILD2
-rw-r--r--test/core/end2end/BUILD4
-rw-r--r--test/core/end2end/end2end_tests.h7
-rw-r--r--test/core/end2end/fixtures/h2_http_proxy.c2
-rw-r--r--test/core/end2end/fixtures/http_proxy_fixture.c (renamed from test/core/end2end/fixtures/http_proxy.c)2
-rw-r--r--test/core/end2end/fixtures/http_proxy_fixture.h (renamed from test/core/end2end/fixtures/http_proxy.h)0
-rw-r--r--test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6520142139752448bin0 -> 384 bytes
-rw-r--r--test/core/end2end/tests/filter_call_init_fails.c2
-rw-r--r--test/core/end2end/tests/filter_causes_close.c2
-rw-r--r--test/core/end2end/tests/filter_latency.c4
-rw-r--r--test/core/end2end/tests/network_status_change.c4
-rw-r--r--test/core/end2end/tests/resource_quota_server.c4
-rw-r--r--test/core/end2end/tests/streaming_error_response.c3
-rw-r--r--test/core/fling/fling_stream_test.c81
-rw-r--r--test/core/handshake/BUILD2
-rw-r--r--test/core/iomgr/error_test.c219
-rw-r--r--test/core/iomgr/sockaddr_utils_test.c16
-rw-r--r--test/core/iomgr/tcp_client_uv_test.c7
-rw-r--r--test/core/iomgr/tcp_server_posix_test.c33
-rw-r--r--test/core/iomgr/tcp_server_uv_test.c4
-rw-r--r--test/core/iomgr/udp_server_test.c8
-rw-r--r--test/core/memory_usage/client.c24
-rw-r--r--test/core/security/BUILD2
-rw-r--r--test/core/security/ssl_server_fuzzer.c14
-rw-r--r--test/core/slice/percent_encoding_test.c1
-rw-r--r--test/core/support/BUILD2
-rw-r--r--test/core/support/arena_test.c139
-rw-r--r--test/core/support/cpu_test.c7
-rw-r--r--test/core/surface/BUILD2
-rw-r--r--test/core/transport/BUILD7
-rw-r--r--test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112bin0 -> 172032 bytes
-rw-r--r--test/core/transport/stream_owned_slice_test.c58
-rw-r--r--test/core/util/memory_counters.c48
-rw-r--r--test/core/util/port_server_client.c9
-rw-r--r--test/core/util/trickle_endpoint.c5
-rw-r--r--test/cpp/codegen/compiler_test_golden2
-rw-r--r--test/cpp/common/channel_arguments_test.cc7
-rw-r--r--test/cpp/interop/http2_client.cc2
-rw-r--r--test/cpp/interop/http2_client.h2
-rw-r--r--test/cpp/interop/interop_client.cc4
-rw-r--r--test/cpp/interop/interop_client.h2
-rw-r--r--test/cpp/interop/interop_server.cc4
-rw-r--r--test/cpp/interop/reconnect_interop_client.cc4
-rw-r--r--test/cpp/interop/reconnect_interop_server.cc4
-rw-r--r--test/cpp/microbenchmarks/bm_arena.cc76
-rw-r--r--test/cpp/microbenchmarks/bm_call_create.cc133
-rw-r--r--test/cpp/microbenchmarks/bm_chttp2_hpack.cc14
-rw-r--r--test/cpp/microbenchmarks/bm_closure.cc114
-rw-r--r--test/cpp/microbenchmarks/bm_cq.cc23
-rw-r--r--test/cpp/microbenchmarks/bm_error.cc64
-rw-r--r--test/cpp/microbenchmarks/bm_fullstack.cc1079
-rw-r--r--test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc276
-rw-r--r--test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc197
-rw-r--r--test/cpp/microbenchmarks/bm_fullstack_trickle.cc219
-rw-r--r--test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc205
-rw-r--r--test/cpp/microbenchmarks/bm_metadata.cc62
-rw-r--r--test/cpp/microbenchmarks/bm_pollset.cc254
-rw-r--r--test/cpp/microbenchmarks/fullstack_context_mutators.h158
-rw-r--r--test/cpp/microbenchmarks/fullstack_fixtures.h244
-rw-r--r--test/cpp/microbenchmarks/helpers.cc65
-rw-r--r--test/cpp/microbenchmarks/helpers.h93
-rw-r--r--test/cpp/qps/client.h2
-rw-r--r--test/cpp/qps/client_async.cc4
-rw-r--r--test/cpp/qps/client_sync.cc15
-rw-r--r--test/cpp/qps/driver.h2
-rw-r--r--test/cpp/qps/histogram.h2
-rw-r--r--test/cpp/qps/qps_json_driver.cc1
-rw-r--r--test/cpp/qps/server.h4
-rw-r--r--test/cpp/qps/server_async.cc19
-rw-r--r--test/cpp/qps/server_sync.cc4
-rw-r--r--test/cpp/server/server_builder_test.cc96
-rw-r--r--test/http2_test/http2_server_health_check.py49
-rw-r--r--test/http2_test/http2_test_server.py21
m---------third_party/protobuf0
-rw-r--r--tools/buildgen/plugins/make_fuzzer_tests.py2
-rwxr-xr-xtools/distrib/python/bazel_deps.sh10
-rw-r--r--tools/distrib/python/grpcio_tools/grpc_tools/protobuf_generated_well_known_types_embed.cc343
-rw-r--r--tools/distrib/python/grpcio_tools/grpc_version.py2
-rw-r--r--tools/distrib/python/grpcio_tools/protoc_lib_deps.py2
-rw-r--r--tools/distrib/python/grpcio_tools/setup.py25
-rwxr-xr-xtools/distrib/yapf_code.sh59
-rw-r--r--tools/dockerfile/grpc_artifact_linux_x64/Dockerfile2
-rw-r--r--tools/dockerfile/grpc_artifact_linux_x86/Dockerfile2
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile2
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile10
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_cxx/Dockerfile2
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_go/Dockerfile2
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile4
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_java/Dockerfile2
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_node/Dockerfile2
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_python/Dockerfile2
-rw-r--r--tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile2
-rwxr-xr-xtools/dockerfile/push_testing_images.sh2
-rw-r--r--tools/dockerfile/stress_test/grpc_interop_stress_csharp/Dockerfile2
-rw-r--r--tools/dockerfile/stress_test/grpc_interop_stress_cxx/Dockerfile2
-rw-r--r--tools/dockerfile/stress_test/grpc_interop_stress_go/Dockerfile2
-rw-r--r--tools/dockerfile/stress_test/grpc_interop_stress_java/Dockerfile2
-rw-r--r--tools/dockerfile/stress_test/grpc_interop_stress_node/Dockerfile2
-rw-r--r--tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile2
-rw-r--r--tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile2
-rw-r--r--tools/dockerfile/stress_test/grpc_interop_stress_ruby/Dockerfile2
-rw-r--r--tools/dockerfile/test/csharp_coreclr_x64/Dockerfile10
-rw-r--r--tools/dockerfile/test/csharp_jessie_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/cxx_jessie_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/cxx_jessie_x86/Dockerfile2
-rw-r--r--tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/cxx_wheezy_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/fuzzer/Dockerfile2
-rw-r--r--tools/dockerfile/test/multilang_jessie_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/node_jessie_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/php7_jessie_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/php_jessie_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/python_jessie_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/python_pyenv_x64/Dockerfile5
-rw-r--r--tools/dockerfile/test/ruby_jessie_x64/Dockerfile2
-rw-r--r--tools/dockerfile/test/sanity/Dockerfile2
-rw-r--r--tools/doxygen/Doxyfile.c++5
-rw-r--r--tools/doxygen/Doxyfile.c++.internal6
-rw-r--r--tools/doxygen/Doxyfile.core2
-rw-r--r--tools/doxygen/Doxyfile.core.internal8
-rw-r--r--tools/fuzzer/options/api_fuzzer.options3
-rw-r--r--tools/fuzzer/options/client_fuzzer.options3
-rw-r--r--tools/fuzzer/options/fuzzer.options2
-rw-r--r--tools/fuzzer/options/fuzzer_response.options2
-rw-r--r--tools/fuzzer/options/fuzzer_serverlist.options2
-rw-r--r--tools/fuzzer/options/hpack_parser_fuzzer_test.options3
-rw-r--r--tools/fuzzer/options/percent_decode_fuzzer.options2
-rw-r--r--tools/fuzzer/options/percent_encode_fuzzer.options2
-rw-r--r--tools/fuzzer/options/request_fuzzer.options3
-rw-r--r--tools/fuzzer/options/response_fuzzer.options3
-rw-r--r--tools/fuzzer/options/server_fuzzer.options3
-rw-r--r--tools/fuzzer/options/ssl_server_fuzzer.options2
-rw-r--r--tools/fuzzer/options/uri_fuzzer_test.options2
-rwxr-xr-xtools/gcp/utils/gcr_upload.py119
-rw-r--r--tools/internal_ci/linux/grpc_master.cfg2
-rwxr-xr-xtools/internal_ci/linux/grpc_master.sh2
-rw-r--r--tools/internal_ci/linux/grpc_master_sanitizers.cfg39
-rwxr-xr-x[-rw-r--r--]tools/internal_ci/linux/grpc_master_sanitizers.sh (renamed from tools/dockerfile/bazel/Dockerfile)30
-rw-r--r--tools/internal_ci/linux/grpc_portability.cfg39
-rwxr-xr-xtools/internal_ci/linux/grpc_portability.sh40
-rw-r--r--tools/internal_ci/linux/grpc_portability_build_only.cfg2
-rwxr-xr-x[-rw-r--r--]tools/internal_ci/linux/grpc_portability_build_only.sh3
-rw-r--r--tools/internal_ci/linux/grpc_pull_request_sanity.cfg2
-rw-r--r--tools/internal_ci/windows/grpc_master.cfg2
-rw-r--r--tools/internal_ci/windows/grpc_portability_master.bat43
-rw-r--r--tools/internal_ci/windows/grpc_portability_master.cfg39
-rwxr-xr-xtools/jenkins/run_full_performance_released.sh73
-rwxr-xr-xtools/profiling/latency_profile/run_latency_profile.sh5
-rwxr-xr-xtools/profiling/microbenchmarks/bm2bq.py156
-rwxr-xr-xtools/profiling/microbenchmarks/bm_diff.py118
-rw-r--r--tools/profiling/microbenchmarks/bm_json.py184
-rw-r--r--tools/run_tests/artifacts/artifact_targets.py2
-rw-r--r--tools/run_tests/artifacts/distribtest_targets.py2
-rw-r--r--tools/run_tests/artifacts/package_targets.py2
-rw-r--r--tools/run_tests/generated/configs.json2
-rw-r--r--tools/run_tests/generated/sources_and_headers.json249
-rw-r--r--tools/run_tests/generated/tests.json5707
-rw-r--r--tools/run_tests/helper_scripts/pre_build_csharp.bat12
-rwxr-xr-xtools/run_tests/helper_scripts/pre_build_csharp.sh12
-rwxr-xr-xtools/run_tests/performance/bq_upload_result.py10
-rw-r--r--tools/run_tests/performance/scenario_config.py32
-rwxr-xr-xtools/run_tests/python_utils/antagonist.py2
-rwxr-xr-xtools/run_tests/python_utils/dockerjob.py20
-rw-r--r--tools/run_tests/python_utils/filter_pull_request_tests.py7
-rwxr-xr-xtools/run_tests/python_utils/jobset.py6
-rwxr-xr-xtools/run_tests/python_utils/port_server.py2
-rw-r--r--tools/run_tests/python_utils/report_utils.py3
-rwxr-xr-xtools/run_tests/run_build_statistics.py6
-rwxr-xr-xtools/run_tests/run_interop_tests.py190
-rwxr-xr-xtools/run_tests/run_microbenchmark.py81
-rwxr-xr-xtools/run_tests/run_performance_tests.py13
-rwxr-xr-xtools/run_tests/run_stress_tests.py16
-rwxr-xr-xtools/run_tests/run_tests.py10
-rwxr-xr-xtools/run_tests/run_tests_matrix.py23
-rwxr-xr-xtools/run_tests/sanity/check_sources_and_headers.py4
-rwxr-xr-xtools/run_tests/sanity/check_submodules.sh2
-rwxr-xr-xtools/run_tests/sanity/check_test_filtering.py4
-rwxr-xr-xtools/run_tests/sanity/check_version.py18
-rwxr-xr-xtools/run_tests/sanity/core_banned_functions.py12
-rwxr-xr-xtools/run_tests/start_port_server.py4
-rwxr-xr-xtools/run_tests/stress_test/print_summary.py2
-rwxr-xr-xtools/run_tests/stress_test/run_on_gke.py60
-rwxr-xr-xtools/run_tests/task_runner.py2
-rw-r--r--tools/tsan_suppressions.txt4
-rw-r--r--tools/ubsan_suppressions.txt7
-rw-r--r--vsprojects/buildtests_c.sln106
-rw-r--r--vsprojects/vcxproj/gpr/gpr.vcxproj3
-rw-r--r--vsprojects/vcxproj/gpr/gpr.vcxproj.filters6
-rw-r--r--vsprojects/vcxproj/grpc++/grpc++.vcxproj3
-rw-r--r--vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters6
-rw-r--r--vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj3
-rw-r--r--vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters6
-rw-r--r--vsprojects/vcxproj/grpc/grpc.vcxproj7
-rw-r--r--vsprojects/vcxproj/grpc/grpc.vcxproj.filters12
-rw-r--r--vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj11
-rw-r--r--vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters16
-rw-r--r--vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj4
-rw-r--r--vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters4
-rw-r--r--vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj7
-rw-r--r--vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters12
-rw-r--r--vsprojects/vcxproj/test/arena_test/arena_test.vcxproj193
-rw-r--r--vsprojects/vcxproj/test/arena_test/arena_test.vcxproj.filters21
-rw-r--r--vsprojects/vcxproj/test/error_test/error_test.vcxproj199
-rw-r--r--vsprojects/vcxproj/test/error_test/error_test.vcxproj.filters21
-rw-r--r--vsprojects/vcxproj/test/grpc_benchmark/grpc_benchmark.vcxproj206
-rw-r--r--vsprojects/vcxproj/test/grpc_benchmark/grpc_benchmark.vcxproj.filters32
-rw-r--r--vsprojects/vcxproj/test/parse_address_test/parse_address_test.vcxproj199
-rw-r--r--vsprojects/vcxproj/test/parse_address_test/parse_address_test.vcxproj.filters21
-rw-r--r--vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj223
-rw-r--r--vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj.filters39
-rw-r--r--vsprojects/vcxproj/test/stream_owned_slice_test/stream_owned_slice_test.vcxproj199
-rw-r--r--vsprojects/vcxproj/test/stream_owned_slice_test/stream_owned_slice_test.vcxproj.filters21
513 files changed, 22906 insertions, 4528 deletions
diff --git a/.gitignore b/.gitignore
index 56e4b6d4b4..da2082c088 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,7 @@ objs
# Python items
cython_debug/
python_build/
-python_format_venv/
+yapf_virtual_environment/
python_pylint_venv/
.coverage*
.eggs
diff --git a/.pylintrc b/.pylintrc
index da2081b87e..4102747906 100644
--- a/.pylintrc
+++ b/.pylintrc
@@ -1,34 +1,40 @@
+[VARIABLES]
+# TODO(https://github.com/PyCQA/pylint/issues/1345): How does the inspection
+# not include "unused_" and "ignored_" by default?
+dummy-variables-rgx=^ignored_|^unused_
+
+[DESIGN]
+# NOTE(nathaniel): Not particularly attached to this value; it just seems to
+# be what works for us at the moment (excepting the dead-code-walking Beta
+# API).
+max-args=6
+
+[MISCELLANEOUS]
+# NOTE(nathaniel): We are big fans of "TODO(<issue link>): " and
+# "NOTE(<username or issue link>): ". We do not allow "TODO:",
+# "TODO(<username>):", "FIXME:", or anything else.
+notes=FIXME,XXX
+
[MESSAGES CONTROL]
#TODO: Enable missing-docstring
#TODO: Enable too-few-public-methods
-#TODO: Enable too-many-arguments
#TODO: Enable no-init
#TODO: Enable duplicate-code
#TODO: Enable invalid-name
-#TODO: Enable suppressed-message
#TODO: Enable locally-disabled
#TODO: Enable protected-access
#TODO: Enable no-name-in-module
-#TODO: Enable unused-argument
-#TODO: Enable fixme
#TODO: Enable wrong-import-order
-#TODO: Enable no-value-for-parameter
-#TODO: Enable cyclic-import
-#TODO: Enable unused-variable
-#TODO: Enable redefined-outer-name
-#TODO: Enable unused-import
+# TODO(https://github.com/PyCQA/pylint/issues/59#issuecomment-283774279):
+# enable cyclic-import after a 1.7-or-later pylint release that recognizes our
+# disable=cyclic-import suppressions.
#TODO: Enable too-many-instance-attributes
-#TODO: Enable broad-except
-#TODO: Enable too-many-locals
#TODO: Enable too-many-lines
#TODO: Enable redefined-variable-type
#TODO: Enable next-method-called
#TODO: Enable import-error
#TODO: Enable useless-else-on-loop
-#TODO: Enable too-many-return-statements
#TODO: Enable too-many-nested-blocks
-#TODO: Enable super-init-not-called
-#TODO: Enable no-self-use
-disable=missing-docstring,too-few-public-methods,too-many-arguments,no-init,duplicate-code,invalid-name,suppressed-message,locally-disabled,protected-access,no-name-in-module,unused-argument,fixme,wrong-import-order,no-value-for-parameter,cyclic-import,unused-variable,redefined-outer-name,unused-import,too-many-instance-attributes,broad-except,too-many-locals,too-many-lines,redefined-variable-type,next-method-called,import-error,useless-else-on-loop,too-many-return-statements,too-many-nested-blocks,super-init-not-called,no-self-use
+disable=missing-docstring,too-few-public-methods,no-init,duplicate-code,invalid-name,locally-disabled,protected-access,no-name-in-module,wrong-import-order,cyclic-import,too-many-instance-attributes,too-many-lines,redefined-variable-type,next-method-called,import-error,useless-else-on-loop,too-many-nested-blocks
diff --git a/BUILD b/BUILD
index ca0a1c5607..693d95e17e 100644
--- a/BUILD
+++ b/BUILD
@@ -308,6 +308,7 @@ grpc_cc_library(
srcs = [
"src/core/lib/profiling/basic_timers.c",
"src/core/lib/profiling/stap_timers.c",
+ "src/core/lib/support/arena.c",
"src/core/lib/support/alloc.c",
"src/core/lib/support/avl.c",
"src/core/lib/support/backoff.c",
@@ -352,6 +353,7 @@ grpc_cc_library(
"src/core/lib/support/wrap_memcpy.c",
],
hdrs = [
+ "src/core/lib/support/arena.h",
"src/core/lib/profiling/timers.h",
"src/core/lib/support/backoff.h",
"src/core/lib/support/block_annotate.h",
@@ -481,6 +483,9 @@ grpc_cc_library(
"src/core/lib/iomgr/tcp_client_windows.c",
"src/core/lib/iomgr/tcp_posix.c",
"src/core/lib/iomgr/tcp_server_posix.c",
+ "src/core/lib/iomgr/tcp_server_utils_posix_common.c",
+ "src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c",
+ "src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c",
"src/core/lib/iomgr/tcp_server_uv.c",
"src/core/lib/iomgr/tcp_server_windows.c",
"src/core/lib/iomgr/tcp_uv.c",
@@ -599,6 +604,7 @@ grpc_cc_library(
"src/core/lib/iomgr/tcp_client_posix.h",
"src/core/lib/iomgr/tcp_posix.h",
"src/core/lib/iomgr/tcp_server.h",
+ "src/core/lib/iomgr/tcp_server_utils_posix.h",
"src/core/lib/iomgr/tcp_uv.h",
"src/core/lib/iomgr/tcp_windows.h",
"src/core/lib/iomgr/time_averaged_stats.h",
@@ -1132,6 +1138,7 @@ grpc_cc_library(
"src/cpp/common/rpc_method.cc",
"src/cpp/common/version_cc.cc",
"src/cpp/server/async_generic_service.cc",
+ "src/cpp/server/channel_argument_option.cc",
"src/cpp/server/create_default_thread_pool.cc",
"src/cpp/server/dynamic_thread_pool.cc",
"src/cpp/server/health/default_health_check_service.cc",
@@ -1173,6 +1180,7 @@ grpc_cc_library(
"include/grpc++/grpc++.h",
"include/grpc++/health_check_service_interface.h",
"include/grpc++/impl/call.h",
+ "include/grpc++/impl/channel_argument_option.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/codegen/core_codegen.h",
"include/grpc++/impl/grpc_library.h",
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5694bd195e..851aeb8401 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -42,7 +42,7 @@
cmake_minimum_required(VERSION 2.8)
set(PACKAGE_NAME "grpc")
-set(PACKAGE_VERSION "1.2.0-dev")
+set(PACKAGE_VERSION "1.3.0-dev")
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
set(PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}")
set(PACKAGE_BUGREPORT "https://github.com/grpc/grpc/issues/")
@@ -332,6 +332,7 @@ add_dependencies(buildtests_c alarm_test)
add_dependencies(buildtests_c algorithm_test)
add_dependencies(buildtests_c alloc_test)
add_dependencies(buildtests_c alpn_test)
+add_dependencies(buildtests_c arena_test)
add_dependencies(buildtests_c bad_server_response_test)
add_dependencies(buildtests_c bdp_estimator_test)
add_dependencies(buildtests_c bin_decoder_test)
@@ -353,6 +354,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_c dualstack_socket_test)
endif()
add_dependencies(buildtests_c endpoint_pair_test)
+add_dependencies(buildtests_c error_test)
if(_gRPC_PLATFORM_LINUX)
add_dependencies(buildtests_c ev_epoll_linux_test)
endif()
@@ -440,6 +442,7 @@ add_dependencies(buildtests_c mlog_test)
add_dependencies(buildtests_c multiple_server_queues_test)
add_dependencies(buildtests_c murmur_hash_test)
add_dependencies(buildtests_c no_server_test)
+add_dependencies(buildtests_c parse_address_test)
add_dependencies(buildtests_c percent_encoding_test)
if(_gRPC_PLATFORM_LINUX)
add_dependencies(buildtests_c pollset_set_test)
@@ -464,6 +467,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_c socket_utils_test)
endif()
add_dependencies(buildtests_c status_conversion_test)
+add_dependencies(buildtests_c stream_owned_slice_test)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_c tcp_client_posix_test)
endif()
@@ -571,6 +575,9 @@ add_dependencies(buildtests_cxx alarm_cpp_test)
add_dependencies(buildtests_cxx async_end2end_test)
add_dependencies(buildtests_cxx auth_property_iterator_test)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+add_dependencies(buildtests_cxx bm_arena)
+endif()
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx bm_call_create)
endif()
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
@@ -586,11 +593,23 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx bm_error)
endif()
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
-add_dependencies(buildtests_cxx bm_fullstack)
+add_dependencies(buildtests_cxx bm_fullstack_streaming_ping_pong)
+endif()
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+add_dependencies(buildtests_cxx bm_fullstack_streaming_pump)
+endif()
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+add_dependencies(buildtests_cxx bm_fullstack_trickle)
+endif()
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+add_dependencies(buildtests_cxx bm_fullstack_unary_ping_pong)
endif()
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx bm_metadata)
endif()
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+add_dependencies(buildtests_cxx bm_pollset)
+endif()
add_dependencies(buildtests_cxx channel_arguments_test)
add_dependencies(buildtests_cxx channel_filter_test)
add_dependencies(buildtests_cxx cli_call_test)
@@ -651,6 +670,7 @@ if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx secure_sync_unary_ping_pong_test)
endif()
add_dependencies(buildtests_cxx server_builder_plugin_test)
+add_dependencies(buildtests_cxx server_builder_test)
add_dependencies(buildtests_cxx server_context_test_spouse_test)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_dependencies(buildtests_cxx server_crash_test)
@@ -677,6 +697,7 @@ add_library(gpr
src/core/lib/profiling/basic_timers.c
src/core/lib/profiling/stap_timers.c
src/core/lib/support/alloc.c
+ src/core/lib/support/arena.c
src/core/lib/support/avl.c
src/core/lib/support/backoff.c
src/core/lib/support/cmdline.c
@@ -901,6 +922,9 @@ add_library(grpc
src/core/lib/iomgr/tcp_client_windows.c
src/core/lib/iomgr/tcp_posix.c
src/core/lib/iomgr/tcp_server_posix.c
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c
src/core/lib/iomgr/tcp_server_uv.c
src/core/lib/iomgr/tcp_server_windows.c
src/core/lib/iomgr/tcp_uv.c
@@ -1210,6 +1234,9 @@ add_library(grpc_cronet
src/core/lib/iomgr/tcp_client_windows.c
src/core/lib/iomgr/tcp_posix.c
src/core/lib/iomgr/tcp_server_posix.c
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c
src/core/lib/iomgr/tcp_server_uv.c
src/core/lib/iomgr/tcp_server_windows.c
src/core/lib/iomgr/tcp_uv.c
@@ -1438,7 +1465,7 @@ add_library(grpc_test_util
test/core/security/oauth2_utils.c
test/core/end2end/cq_verifier.c
test/core/end2end/fake_resolver.c
- test/core/end2end/fixtures/http_proxy.c
+ test/core/end2end/fixtures/http_proxy_fixture.c
test/core/end2end/fixtures/proxy.c
test/core/iomgr/endpoint_tests.c
test/core/util/debugger_macros.c
@@ -1510,6 +1537,9 @@ add_library(grpc_test_util
src/core/lib/iomgr/tcp_client_windows.c
src/core/lib/iomgr/tcp_posix.c
src/core/lib/iomgr/tcp_server_posix.c
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c
src/core/lib/iomgr/tcp_server_uv.c
src/core/lib/iomgr/tcp_server_windows.c
src/core/lib/iomgr/tcp_uv.c
@@ -1645,7 +1675,7 @@ if (gRPC_BUILD_TESTS)
add_library(grpc_test_util_unsecure
test/core/end2end/cq_verifier.c
test/core/end2end/fake_resolver.c
- test/core/end2end/fixtures/http_proxy.c
+ test/core/end2end/fixtures/http_proxy_fixture.c
test/core/end2end/fixtures/proxy.c
test/core/iomgr/endpoint_tests.c
test/core/util/debugger_macros.c
@@ -1756,6 +1786,9 @@ add_library(grpc_unsecure
src/core/lib/iomgr/tcp_client_windows.c
src/core/lib/iomgr/tcp_posix.c
src/core/lib/iomgr/tcp_server_posix.c
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c
src/core/lib/iomgr/tcp_server_uv.c
src/core/lib/iomgr/tcp_server_windows.c
src/core/lib/iomgr/tcp_uv.c
@@ -2074,6 +2107,7 @@ add_library(grpc++
src/cpp/common/rpc_method.cc
src/cpp/common/version_cc.cc
src/cpp/server/async_generic_service.cc
+ src/cpp/server/channel_argument_option.cc
src/cpp/server/create_default_thread_pool.cc
src/cpp/server/dynamic_thread_pool.cc
src/cpp/server/health/default_health_check_service.cc
@@ -2139,6 +2173,7 @@ foreach(_hdr
include/grpc++/grpc++.h
include/grpc++/health_check_service_interface.h
include/grpc++/impl/call.h
+ include/grpc++/impl/channel_argument_option.h
include/grpc++/impl/client_unary_call.h
include/grpc++/impl/codegen/core_codegen.h
include/grpc++/impl/grpc_library.h
@@ -2260,6 +2295,7 @@ add_library(grpc++_cronet
src/cpp/common/rpc_method.cc
src/cpp/common/version_cc.cc
src/cpp/server/async_generic_service.cc
+ src/cpp/server/channel_argument_option.cc
src/cpp/server/create_default_thread_pool.cc
src/cpp/server/dynamic_thread_pool.cc
src/cpp/server/health/default_health_check_service.cc
@@ -2360,6 +2396,9 @@ add_library(grpc++_cronet
src/core/lib/iomgr/tcp_client_windows.c
src/core/lib/iomgr/tcp_posix.c
src/core/lib/iomgr/tcp_server_posix.c
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c
src/core/lib/iomgr/tcp_server_uv.c
src/core/lib/iomgr/tcp_server_windows.c
src/core/lib/iomgr/tcp_uv.c
@@ -2509,6 +2548,7 @@ foreach(_hdr
include/grpc++/grpc++.h
include/grpc++/health_check_service_interface.h
include/grpc++/impl/call.h
+ include/grpc++/impl/channel_argument_option.h
include/grpc++/impl/client_unary_call.h
include/grpc++/impl/codegen/core_codegen.h
include/grpc++/impl/grpc_library.h
@@ -2931,6 +2971,7 @@ add_library(grpc++_unsecure
src/cpp/common/rpc_method.cc
src/cpp/common/version_cc.cc
src/cpp/server/async_generic_service.cc
+ src/cpp/server/channel_argument_option.cc
src/cpp/server/create_default_thread_pool.cc
src/cpp/server/dynamic_thread_pool.cc
src/cpp/server/health/default_health_check_service.cc
@@ -2996,6 +3037,7 @@ foreach(_hdr
include/grpc++/grpc++.h
include/grpc++/health_check_service_interface.h
include/grpc++/impl/call.h
+ include/grpc++/impl/channel_argument_option.h
include/grpc++/impl/client_unary_call.h
include/grpc++/impl/codegen/core_codegen.h
include/grpc++/impl/grpc_library.h
@@ -3096,6 +3138,50 @@ endif()
if (gRPC_BUILD_TESTS)
+add_library(grpc_benchmark
+ test/cpp/microbenchmarks/helpers.cc
+)
+
+if(WIN32 AND MSVC)
+ set_target_properties(grpc_benchmark PROPERTIES COMPILE_PDB_NAME "grpc_benchmark"
+ COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+ )
+ if (gRPC_INSTALL)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/grpc_benchmark.pdb
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} OPTIONAL
+ )
+ endif()
+endif()
+
+
+target_include_directories(grpc_benchmark
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${ZLIB_INCLUDE_DIR}
+ PRIVATE ${BENCHMARK}/include
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+ PRIVATE third_party/googletest/include
+ PRIVATE third_party/googletest
+ PRIVATE ${_gRPC_PROTO_GENS_DIR}
+)
+
+target_link_libraries(grpc_benchmark
+ ${_gRPC_PROTOBUF_LIBRARIES}
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ benchmark
+ grpc++
+ grpc_test_util
+ grpc
+ ${_gRPC_GFLAGS_LIBRARIES}
+)
+
+
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+
add_library(grpc_cli_libs
test/cpp/util/cli_call.cc
test/cpp/util/cli_credentials.cc
@@ -4049,6 +4135,31 @@ target_link_libraries(alpn_test
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
+add_executable(arena_test
+ test/core/support/arena_test.c
+)
+
+
+target_include_directories(arena_test
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+)
+
+target_link_libraries(arena_test
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ gpr_test_util
+ gpr
+)
+
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+
add_executable(bad_server_response_test
test/core/end2end/bad_server_response_test.c
)
@@ -4560,6 +4671,33 @@ target_link_libraries(endpoint_pair_test
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
+
+add_executable(error_test
+ test/core/iomgr/error_test.c
+)
+
+
+target_include_directories(error_test
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+)
+
+target_link_libraries(error_test
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_test_util
+ grpc
+ gpr_test_util
+ gpr
+)
+
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX)
add_executable(ev_epoll_linux_test
@@ -6439,6 +6577,33 @@ target_link_libraries(no_server_test
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
+add_executable(parse_address_test
+ test/core/client_channel/parse_address_test.c
+)
+
+
+target_include_directories(parse_address_test
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+)
+
+target_link_libraries(parse_address_test
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_test_util
+ grpc
+ gpr_test_util
+ gpr
+)
+
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+
add_executable(percent_encoding_test
test/core/slice/percent_encoding_test.c
)
@@ -6931,6 +7096,33 @@ target_link_libraries(status_conversion_test
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
+
+add_executable(stream_owned_slice_test
+ test/core/transport/stream_owned_slice_test.c
+)
+
+
+target_include_directories(stream_owned_slice_test
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+)
+
+target_link_libraries(stream_owned_slice_test
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_test_util
+ grpc
+ gpr_test_util
+ gpr
+)
+
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
add_executable(tcp_client_posix_test
@@ -7482,6 +7674,45 @@ endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+add_executable(bm_arena
+ test/cpp/microbenchmarks/bm_arena.cc
+ third_party/googletest/src/gtest-all.cc
+)
+
+
+target_include_directories(bm_arena
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+ PRIVATE third_party/googletest/include
+ PRIVATE third_party/googletest
+ PRIVATE ${_gRPC_PROTO_GENS_DIR}
+)
+
+target_link_libraries(bm_arena
+ ${_gRPC_PROTOBUF_LIBRARIES}
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
+ benchmark
+ grpc++_test_util
+ grpc_test_util
+ grpc++
+ grpc
+ gpr_test_util
+ gpr
+ ${_gRPC_GFLAGS_LIBRARIES}
+)
+
+endif()
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+
add_executable(bm_call_create
test/cpp/microbenchmarks/bm_call_create.cc
third_party/googletest/src/gtest-all.cc
@@ -7505,6 +7736,7 @@ target_include_directories(bm_call_create
target_link_libraries(bm_call_create
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
benchmark
grpc++_test_util
grpc_test_util
@@ -7543,6 +7775,7 @@ target_include_directories(bm_chttp2_hpack
target_link_libraries(bm_chttp2_hpack
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
benchmark
grpc++_test_util
grpc_test_util
@@ -7581,6 +7814,7 @@ target_include_directories(bm_closure
target_link_libraries(bm_closure
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
benchmark
grpc++_test_util
grpc_test_util
@@ -7619,6 +7853,7 @@ target_include_directories(bm_cq
target_link_libraries(bm_cq
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
benchmark
grpc++_test_util
grpc_test_util
@@ -7657,6 +7892,7 @@ target_include_directories(bm_error
target_link_libraries(bm_error
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
benchmark
grpc++_test_util
grpc_test_util
@@ -7672,13 +7908,13 @@ endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
-add_executable(bm_fullstack
- test/cpp/microbenchmarks/bm_fullstack.cc
+add_executable(bm_fullstack_streaming_ping_pong
+ test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc
third_party/googletest/src/gtest-all.cc
)
-target_include_directories(bm_fullstack
+target_include_directories(bm_fullstack_streaming_ping_pong
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${BORINGSSL_ROOT_DIR}/include
@@ -7692,9 +7928,127 @@ target_include_directories(bm_fullstack
PRIVATE ${_gRPC_PROTO_GENS_DIR}
)
-target_link_libraries(bm_fullstack
+target_link_libraries(bm_fullstack_streaming_ping_pong
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
+ benchmark
+ grpc++_test_util
+ grpc_test_util
+ grpc++
+ grpc
+ gpr_test_util
+ gpr
+ ${_gRPC_GFLAGS_LIBRARIES}
+)
+
+endif()
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+
+add_executable(bm_fullstack_streaming_pump
+ test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc
+ third_party/googletest/src/gtest-all.cc
+)
+
+
+target_include_directories(bm_fullstack_streaming_pump
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+ PRIVATE third_party/googletest/include
+ PRIVATE third_party/googletest
+ PRIVATE ${_gRPC_PROTO_GENS_DIR}
+)
+
+target_link_libraries(bm_fullstack_streaming_pump
+ ${_gRPC_PROTOBUF_LIBRARIES}
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
+ benchmark
+ grpc++_test_util
+ grpc_test_util
+ grpc++
+ grpc
+ gpr_test_util
+ gpr
+ ${_gRPC_GFLAGS_LIBRARIES}
+)
+
+endif()
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+
+add_executable(bm_fullstack_trickle
+ test/cpp/microbenchmarks/bm_fullstack_trickle.cc
+ third_party/googletest/src/gtest-all.cc
+)
+
+
+target_include_directories(bm_fullstack_trickle
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+ PRIVATE third_party/googletest/include
+ PRIVATE third_party/googletest
+ PRIVATE ${_gRPC_PROTO_GENS_DIR}
+)
+
+target_link_libraries(bm_fullstack_trickle
+ ${_gRPC_PROTOBUF_LIBRARIES}
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
+ benchmark
+ grpc++_test_util
+ grpc_test_util
+ grpc++
+ grpc
+ gpr_test_util
+ gpr
+ ${_gRPC_GFLAGS_LIBRARIES}
+)
+
+endif()
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+
+add_executable(bm_fullstack_unary_ping_pong
+ test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc
+ third_party/googletest/src/gtest-all.cc
+)
+
+
+target_include_directories(bm_fullstack_unary_ping_pong
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+ PRIVATE third_party/googletest/include
+ PRIVATE third_party/googletest
+ PRIVATE ${_gRPC_PROTO_GENS_DIR}
+)
+
+target_link_libraries(bm_fullstack_unary_ping_pong
+ ${_gRPC_PROTOBUF_LIBRARIES}
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
benchmark
grpc++_test_util
grpc_test_util
@@ -7733,8 +8087,50 @@ target_include_directories(bm_metadata
target_link_libraries(bm_metadata
${_gRPC_PROTOBUF_LIBRARIES}
${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
+ benchmark
+ grpc++_test_util
+ grpc_test_util
+ grpc++
+ grpc
+ gpr_test_util
+ gpr
+ ${_gRPC_GFLAGS_LIBRARIES}
+)
+
+endif()
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX)
+
+add_executable(bm_pollset
+ test/cpp/microbenchmarks/bm_pollset.cc
+ third_party/googletest/src/gtest-all.cc
+)
+
+
+target_include_directories(bm_pollset
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+ PRIVATE third_party/googletest/include
+ PRIVATE third_party/googletest
+ PRIVATE ${_gRPC_PROTO_GENS_DIR}
+)
+
+target_link_libraries(bm_pollset
+ ${_gRPC_PROTOBUF_LIBRARIES}
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc_benchmark
benchmark
+ grpc++_test_util
grpc_test_util
+ grpc++
grpc
gpr_test_util
gpr
@@ -9606,6 +10002,55 @@ target_link_libraries(server_builder_plugin_test
endif (gRPC_BUILD_TESTS)
if (gRPC_BUILD_TESTS)
+add_executable(server_builder_test
+ ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.cc
+ ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.cc
+ ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.pb.h
+ ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo_messages.grpc.pb.h
+ ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.cc
+ ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.cc
+ ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.pb.h
+ ${_gRPC_PROTO_GENS_DIR}/src/proto/grpc/testing/echo.grpc.pb.h
+ test/cpp/server/server_builder_test.cc
+ third_party/googletest/src/gtest-all.cc
+)
+
+protobuf_generate_grpc_cpp(
+ src/proto/grpc/testing/echo_messages.proto
+)
+protobuf_generate_grpc_cpp(
+ src/proto/grpc/testing/echo.proto
+)
+
+target_include_directories(server_builder_test
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
+ PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
+ PRIVATE ${BORINGSSL_ROOT_DIR}/include
+ PRIVATE ${PROTOBUF_ROOT_DIR}/src
+ PRIVATE ${BENCHMARK_ROOT_DIR}/include
+ PRIVATE ${ZLIB_ROOT_DIR}
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/zlib
+ PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/third_party/gflags/include
+ PRIVATE third_party/googletest/include
+ PRIVATE third_party/googletest
+ PRIVATE ${_gRPC_PROTO_GENS_DIR}
+)
+
+target_link_libraries(server_builder_test
+ ${_gRPC_PROTOBUF_LIBRARIES}
+ ${_gRPC_ALLTARGETS_LIBRARIES}
+ grpc++_test_util
+ grpc_test_util
+ gpr_test_util
+ grpc++
+ grpc
+ gpr
+ ${_gRPC_GFLAGS_LIBRARIES}
+)
+
+endif (gRPC_BUILD_TESTS)
+if (gRPC_BUILD_TESTS)
+
add_executable(server_context_test_spouse_test
test/cpp/test/server_context_test_spouse_test.cc
third_party/googletest/src/gtest-all.cc
diff --git a/Makefile b/Makefile
index c16b4ff8ea..d2104e973c 100644
--- a/Makefile
+++ b/Makefile
@@ -189,7 +189,7 @@ CC_ubsan = clang
CXX_ubsan = clang++
LD_ubsan = clang
LDXX_ubsan = clang++
-CPPFLAGS_ubsan = -O0 -fsanitize-coverage=edge -fsanitize=undefined,unsigned-integer-overflow -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs
+CPPFLAGS_ubsan = -O0 -fsanitize-coverage=edge -fsanitize=undefined -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs
LDFLAGS_ubsan = -fsanitize=undefined,unsigned-integer-overflow
DEFINES_ubsan = NDEBUG
@@ -412,8 +412,8 @@ Q = @
endif
CORE_VERSION = 3.0.0-dev
-CPP_VERSION = 1.2.0-dev
-CSHARP_VERSION = 1.2.0-dev
+CPP_VERSION = 1.3.0-dev
+CSHARP_VERSION = 1.3.0-dev
CPPFLAGS_NO_ARCH += $(addprefix -I, $(INCLUDES)) $(addprefix -D, $(DEFINES))
CPPFLAGS += $(CPPFLAGS_NO_ARCH) $(ARCH_FLAGS)
@@ -906,6 +906,7 @@ algorithm_test: $(BINDIR)/$(CONFIG)/algorithm_test
alloc_test: $(BINDIR)/$(CONFIG)/alloc_test
alpn_test: $(BINDIR)/$(CONFIG)/alpn_test
api_fuzzer: $(BINDIR)/$(CONFIG)/api_fuzzer
+arena_test: $(BINDIR)/$(CONFIG)/arena_test
bad_server_response_test: $(BINDIR)/$(CONFIG)/bad_server_response_test
bdp_estimator_test: $(BINDIR)/$(CONFIG)/bdp_estimator_test
bin_decoder_test: $(BINDIR)/$(CONFIG)/bin_decoder_test
@@ -926,6 +927,7 @@ dns_resolver_connectivity_test: $(BINDIR)/$(CONFIG)/dns_resolver_connectivity_te
dns_resolver_test: $(BINDIR)/$(CONFIG)/dns_resolver_test
dualstack_socket_test: $(BINDIR)/$(CONFIG)/dualstack_socket_test
endpoint_pair_test: $(BINDIR)/$(CONFIG)/endpoint_pair_test
+error_test: $(BINDIR)/$(CONFIG)/error_test
ev_epoll_linux_test: $(BINDIR)/$(CONFIG)/ev_epoll_linux_test
fd_conservation_posix_test: $(BINDIR)/$(CONFIG)/fd_conservation_posix_test
fd_posix_test: $(BINDIR)/$(CONFIG)/fd_posix_test
@@ -1002,6 +1004,7 @@ murmur_hash_test: $(BINDIR)/$(CONFIG)/murmur_hash_test
nanopb_fuzzer_response_test: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_response_test
nanopb_fuzzer_serverlist_test: $(BINDIR)/$(CONFIG)/nanopb_fuzzer_serverlist_test
no_server_test: $(BINDIR)/$(CONFIG)/no_server_test
+parse_address_test: $(BINDIR)/$(CONFIG)/parse_address_test
percent_decode_fuzzer: $(BINDIR)/$(CONFIG)/percent_decode_fuzzer
percent_encode_fuzzer: $(BINDIR)/$(CONFIG)/percent_encode_fuzzer
percent_encoding_test: $(BINDIR)/$(CONFIG)/percent_encoding_test
@@ -1024,6 +1027,7 @@ sockaddr_utils_test: $(BINDIR)/$(CONFIG)/sockaddr_utils_test
socket_utils_test: $(BINDIR)/$(CONFIG)/socket_utils_test
ssl_server_fuzzer: $(BINDIR)/$(CONFIG)/ssl_server_fuzzer
status_conversion_test: $(BINDIR)/$(CONFIG)/status_conversion_test
+stream_owned_slice_test: $(BINDIR)/$(CONFIG)/stream_owned_slice_test
tcp_client_posix_test: $(BINDIR)/$(CONFIG)/tcp_client_posix_test
tcp_client_uv_test: $(BINDIR)/$(CONFIG)/tcp_client_uv_test
tcp_posix_test: $(BINDIR)/$(CONFIG)/tcp_posix_test
@@ -1044,13 +1048,18 @@ wakeup_fd_cv_test: $(BINDIR)/$(CONFIG)/wakeup_fd_cv_test
alarm_cpp_test: $(BINDIR)/$(CONFIG)/alarm_cpp_test
async_end2end_test: $(BINDIR)/$(CONFIG)/async_end2end_test
auth_property_iterator_test: $(BINDIR)/$(CONFIG)/auth_property_iterator_test
+bm_arena: $(BINDIR)/$(CONFIG)/bm_arena
bm_call_create: $(BINDIR)/$(CONFIG)/bm_call_create
bm_chttp2_hpack: $(BINDIR)/$(CONFIG)/bm_chttp2_hpack
bm_closure: $(BINDIR)/$(CONFIG)/bm_closure
bm_cq: $(BINDIR)/$(CONFIG)/bm_cq
bm_error: $(BINDIR)/$(CONFIG)/bm_error
-bm_fullstack: $(BINDIR)/$(CONFIG)/bm_fullstack
+bm_fullstack_streaming_ping_pong: $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong
+bm_fullstack_streaming_pump: $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump
+bm_fullstack_trickle: $(BINDIR)/$(CONFIG)/bm_fullstack_trickle
+bm_fullstack_unary_ping_pong: $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong
bm_metadata: $(BINDIR)/$(CONFIG)/bm_metadata
+bm_pollset: $(BINDIR)/$(CONFIG)/bm_pollset
channel_arguments_test: $(BINDIR)/$(CONFIG)/channel_arguments_test
channel_filter_test: $(BINDIR)/$(CONFIG)/channel_filter_test
cli_call_test: $(BINDIR)/$(CONFIG)/cli_call_test
@@ -1100,6 +1109,7 @@ round_robin_end2end_test: $(BINDIR)/$(CONFIG)/round_robin_end2end_test
secure_auth_context_test: $(BINDIR)/$(CONFIG)/secure_auth_context_test
secure_sync_unary_ping_pong_test: $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test
server_builder_plugin_test: $(BINDIR)/$(CONFIG)/server_builder_plugin_test
+server_builder_test: $(BINDIR)/$(CONFIG)/server_builder_test
server_context_test_spouse_test: $(BINDIR)/$(CONFIG)/server_context_test_spouse_test
server_crash_test: $(BINDIR)/$(CONFIG)/server_crash_test
server_crash_test_client: $(BINDIR)/$(CONFIG)/server_crash_test_client
@@ -1278,6 +1288,7 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/algorithm_test \
$(BINDIR)/$(CONFIG)/alloc_test \
$(BINDIR)/$(CONFIG)/alpn_test \
+ $(BINDIR)/$(CONFIG)/arena_test \
$(BINDIR)/$(CONFIG)/bad_server_response_test \
$(BINDIR)/$(CONFIG)/bdp_estimator_test \
$(BINDIR)/$(CONFIG)/bin_decoder_test \
@@ -1297,6 +1308,7 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/dns_resolver_test \
$(BINDIR)/$(CONFIG)/dualstack_socket_test \
$(BINDIR)/$(CONFIG)/endpoint_pair_test \
+ $(BINDIR)/$(CONFIG)/error_test \
$(BINDIR)/$(CONFIG)/ev_epoll_linux_test \
$(BINDIR)/$(CONFIG)/fd_conservation_posix_test \
$(BINDIR)/$(CONFIG)/fd_posix_test \
@@ -1360,6 +1372,7 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/multiple_server_queues_test \
$(BINDIR)/$(CONFIG)/murmur_hash_test \
$(BINDIR)/$(CONFIG)/no_server_test \
+ $(BINDIR)/$(CONFIG)/parse_address_test \
$(BINDIR)/$(CONFIG)/percent_encoding_test \
$(BINDIR)/$(CONFIG)/pollset_set_test \
$(BINDIR)/$(CONFIG)/resolve_address_posix_test \
@@ -1378,6 +1391,7 @@ buildtests_c: privatelibs_c \
$(BINDIR)/$(CONFIG)/sockaddr_utils_test \
$(BINDIR)/$(CONFIG)/socket_utils_test \
$(BINDIR)/$(CONFIG)/status_conversion_test \
+ $(BINDIR)/$(CONFIG)/stream_owned_slice_test \
$(BINDIR)/$(CONFIG)/tcp_client_posix_test \
$(BINDIR)/$(CONFIG)/tcp_client_uv_test \
$(BINDIR)/$(CONFIG)/tcp_posix_test \
@@ -1458,13 +1472,18 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/alarm_cpp_test \
$(BINDIR)/$(CONFIG)/async_end2end_test \
$(BINDIR)/$(CONFIG)/auth_property_iterator_test \
+ $(BINDIR)/$(CONFIG)/bm_arena \
$(BINDIR)/$(CONFIG)/bm_call_create \
$(BINDIR)/$(CONFIG)/bm_chttp2_hpack \
$(BINDIR)/$(CONFIG)/bm_closure \
$(BINDIR)/$(CONFIG)/bm_cq \
$(BINDIR)/$(CONFIG)/bm_error \
- $(BINDIR)/$(CONFIG)/bm_fullstack \
+ $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong \
+ $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump \
+ $(BINDIR)/$(CONFIG)/bm_fullstack_trickle \
+ $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong \
$(BINDIR)/$(CONFIG)/bm_metadata \
+ $(BINDIR)/$(CONFIG)/bm_pollset \
$(BINDIR)/$(CONFIG)/channel_arguments_test \
$(BINDIR)/$(CONFIG)/channel_filter_test \
$(BINDIR)/$(CONFIG)/cli_call_test \
@@ -1507,6 +1526,7 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/secure_auth_context_test \
$(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test \
$(BINDIR)/$(CONFIG)/server_builder_plugin_test \
+ $(BINDIR)/$(CONFIG)/server_builder_test \
$(BINDIR)/$(CONFIG)/server_context_test_spouse_test \
$(BINDIR)/$(CONFIG)/server_crash_test \
$(BINDIR)/$(CONFIG)/server_crash_test_client \
@@ -1569,13 +1589,18 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/alarm_cpp_test \
$(BINDIR)/$(CONFIG)/async_end2end_test \
$(BINDIR)/$(CONFIG)/auth_property_iterator_test \
+ $(BINDIR)/$(CONFIG)/bm_arena \
$(BINDIR)/$(CONFIG)/bm_call_create \
$(BINDIR)/$(CONFIG)/bm_chttp2_hpack \
$(BINDIR)/$(CONFIG)/bm_closure \
$(BINDIR)/$(CONFIG)/bm_cq \
$(BINDIR)/$(CONFIG)/bm_error \
- $(BINDIR)/$(CONFIG)/bm_fullstack \
+ $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong \
+ $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump \
+ $(BINDIR)/$(CONFIG)/bm_fullstack_trickle \
+ $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong \
$(BINDIR)/$(CONFIG)/bm_metadata \
+ $(BINDIR)/$(CONFIG)/bm_pollset \
$(BINDIR)/$(CONFIG)/channel_arguments_test \
$(BINDIR)/$(CONFIG)/channel_filter_test \
$(BINDIR)/$(CONFIG)/cli_call_test \
@@ -1618,6 +1643,7 @@ buildtests_cxx: privatelibs_cxx \
$(BINDIR)/$(CONFIG)/secure_auth_context_test \
$(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test \
$(BINDIR)/$(CONFIG)/server_builder_plugin_test \
+ $(BINDIR)/$(CONFIG)/server_builder_test \
$(BINDIR)/$(CONFIG)/server_context_test_spouse_test \
$(BINDIR)/$(CONFIG)/server_crash_test \
$(BINDIR)/$(CONFIG)/server_crash_test_client \
@@ -1645,6 +1671,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/alloc_test || ( echo test alloc_test failed ; exit 1 )
$(E) "[RUN] Testing alpn_test"
$(Q) $(BINDIR)/$(CONFIG)/alpn_test || ( echo test alpn_test failed ; exit 1 )
+ $(E) "[RUN] Testing arena_test"
+ $(Q) $(BINDIR)/$(CONFIG)/arena_test || ( echo test arena_test failed ; exit 1 )
$(E) "[RUN] Testing bad_server_response_test"
$(Q) $(BINDIR)/$(CONFIG)/bad_server_response_test || ( echo test bad_server_response_test failed ; exit 1 )
$(E) "[RUN] Testing bdp_estimator_test"
@@ -1683,6 +1711,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/dualstack_socket_test || ( echo test dualstack_socket_test failed ; exit 1 )
$(E) "[RUN] Testing endpoint_pair_test"
$(Q) $(BINDIR)/$(CONFIG)/endpoint_pair_test || ( echo test endpoint_pair_test failed ; exit 1 )
+ $(E) "[RUN] Testing error_test"
+ $(Q) $(BINDIR)/$(CONFIG)/error_test || ( echo test error_test failed ; exit 1 )
$(E) "[RUN] Testing ev_epoll_linux_test"
$(Q) $(BINDIR)/$(CONFIG)/ev_epoll_linux_test || ( echo test ev_epoll_linux_test failed ; exit 1 )
$(E) "[RUN] Testing fd_conservation_posix_test"
@@ -1793,6 +1823,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/murmur_hash_test || ( echo test murmur_hash_test failed ; exit 1 )
$(E) "[RUN] Testing no_server_test"
$(Q) $(BINDIR)/$(CONFIG)/no_server_test || ( echo test no_server_test failed ; exit 1 )
+ $(E) "[RUN] Testing parse_address_test"
+ $(Q) $(BINDIR)/$(CONFIG)/parse_address_test || ( echo test parse_address_test failed ; exit 1 )
$(E) "[RUN] Testing percent_encoding_test"
$(Q) $(BINDIR)/$(CONFIG)/percent_encoding_test || ( echo test percent_encoding_test failed ; exit 1 )
$(E) "[RUN] Testing pollset_set_test"
@@ -1829,6 +1861,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/socket_utils_test || ( echo test socket_utils_test failed ; exit 1 )
$(E) "[RUN] Testing status_conversion_test"
$(Q) $(BINDIR)/$(CONFIG)/status_conversion_test || ( echo test status_conversion_test failed ; exit 1 )
+ $(E) "[RUN] Testing stream_owned_slice_test"
+ $(Q) $(BINDIR)/$(CONFIG)/stream_owned_slice_test || ( echo test stream_owned_slice_test failed ; exit 1 )
$(E) "[RUN] Testing tcp_client_posix_test"
$(Q) $(BINDIR)/$(CONFIG)/tcp_client_posix_test || ( echo test tcp_client_posix_test failed ; exit 1 )
$(E) "[RUN] Testing tcp_client_uv_test"
@@ -1899,6 +1933,8 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/async_end2end_test || ( echo test async_end2end_test failed ; exit 1 )
$(E) "[RUN] Testing auth_property_iterator_test"
$(Q) $(BINDIR)/$(CONFIG)/auth_property_iterator_test || ( echo test auth_property_iterator_test failed ; exit 1 )
+ $(E) "[RUN] Testing bm_arena"
+ $(Q) $(BINDIR)/$(CONFIG)/bm_arena || ( echo test bm_arena failed ; exit 1 )
$(E) "[RUN] Testing bm_call_create"
$(Q) $(BINDIR)/$(CONFIG)/bm_call_create || ( echo test bm_call_create failed ; exit 1 )
$(E) "[RUN] Testing bm_chttp2_hpack"
@@ -1909,10 +1945,18 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/bm_cq || ( echo test bm_cq failed ; exit 1 )
$(E) "[RUN] Testing bm_error"
$(Q) $(BINDIR)/$(CONFIG)/bm_error || ( echo test bm_error failed ; exit 1 )
- $(E) "[RUN] Testing bm_fullstack"
- $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack || ( echo test bm_fullstack failed ; exit 1 )
+ $(E) "[RUN] Testing bm_fullstack_streaming_ping_pong"
+ $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong || ( echo test bm_fullstack_streaming_ping_pong failed ; exit 1 )
+ $(E) "[RUN] Testing bm_fullstack_streaming_pump"
+ $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump || ( echo test bm_fullstack_streaming_pump failed ; exit 1 )
+ $(E) "[RUN] Testing bm_fullstack_trickle"
+ $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack_trickle || ( echo test bm_fullstack_trickle failed ; exit 1 )
+ $(E) "[RUN] Testing bm_fullstack_unary_ping_pong"
+ $(Q) $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong || ( echo test bm_fullstack_unary_ping_pong failed ; exit 1 )
$(E) "[RUN] Testing bm_metadata"
$(Q) $(BINDIR)/$(CONFIG)/bm_metadata || ( echo test bm_metadata failed ; exit 1 )
+ $(E) "[RUN] Testing bm_pollset"
+ $(Q) $(BINDIR)/$(CONFIG)/bm_pollset || ( echo test bm_pollset failed ; exit 1 )
$(E) "[RUN] Testing channel_arguments_test"
$(Q) $(BINDIR)/$(CONFIG)/channel_arguments_test || ( echo test channel_arguments_test failed ; exit 1 )
$(E) "[RUN] Testing channel_filter_test"
@@ -1971,6 +2015,8 @@ test_cxx: buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/secure_sync_unary_ping_pong_test || ( echo test secure_sync_unary_ping_pong_test failed ; exit 1 )
$(E) "[RUN] Testing server_builder_plugin_test"
$(Q) $(BINDIR)/$(CONFIG)/server_builder_plugin_test || ( echo test server_builder_plugin_test failed ; exit 1 )
+ $(E) "[RUN] Testing server_builder_test"
+ $(Q) $(BINDIR)/$(CONFIG)/server_builder_test || ( echo test server_builder_test failed ; exit 1 )
$(E) "[RUN] Testing server_context_test_spouse_test"
$(Q) $(BINDIR)/$(CONFIG)/server_context_test_spouse_test || ( echo test server_context_test_spouse_test failed ; exit 1 )
$(E) "[RUN] Testing server_crash_test"
@@ -2562,6 +2608,7 @@ LIBGPR_SRC = \
src/core/lib/profiling/basic_timers.c \
src/core/lib/profiling/stap_timers.c \
src/core/lib/support/alloc.c \
+ src/core/lib/support/arena.c \
src/core/lib/support/avl.c \
src/core/lib/support/backoff.c \
src/core/lib/support/cmdline.c \
@@ -2767,6 +2814,9 @@ LIBGRPC_SRC = \
src/core/lib/iomgr/tcp_client_windows.c \
src/core/lib/iomgr/tcp_posix.c \
src/core/lib/iomgr/tcp_server_posix.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c \
src/core/lib/iomgr/tcp_server_uv.c \
src/core/lib/iomgr/tcp_server_windows.c \
src/core/lib/iomgr/tcp_uv.c \
@@ -3079,6 +3129,9 @@ LIBGRPC_CRONET_SRC = \
src/core/lib/iomgr/tcp_client_windows.c \
src/core/lib/iomgr/tcp_posix.c \
src/core/lib/iomgr/tcp_server_posix.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c \
src/core/lib/iomgr/tcp_server_uv.c \
src/core/lib/iomgr/tcp_server_windows.c \
src/core/lib/iomgr/tcp_uv.c \
@@ -3310,7 +3363,7 @@ LIBGRPC_TEST_UTIL_SRC = \
test/core/security/oauth2_utils.c \
test/core/end2end/cq_verifier.c \
test/core/end2end/fake_resolver.c \
- test/core/end2end/fixtures/http_proxy.c \
+ test/core/end2end/fixtures/http_proxy_fixture.c \
test/core/end2end/fixtures/proxy.c \
test/core/iomgr/endpoint_tests.c \
test/core/util/debugger_macros.c \
@@ -3382,6 +3435,9 @@ LIBGRPC_TEST_UTIL_SRC = \
src/core/lib/iomgr/tcp_client_windows.c \
src/core/lib/iomgr/tcp_posix.c \
src/core/lib/iomgr/tcp_server_posix.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c \
src/core/lib/iomgr/tcp_server_uv.c \
src/core/lib/iomgr/tcp_server_windows.c \
src/core/lib/iomgr/tcp_uv.c \
@@ -3510,7 +3566,7 @@ endif
LIBGRPC_TEST_UTIL_UNSECURE_SRC = \
test/core/end2end/cq_verifier.c \
test/core/end2end/fake_resolver.c \
- test/core/end2end/fixtures/http_proxy.c \
+ test/core/end2end/fixtures/http_proxy_fixture.c \
test/core/end2end/fixtures/proxy.c \
test/core/iomgr/endpoint_tests.c \
test/core/util/debugger_macros.c \
@@ -3608,6 +3664,9 @@ LIBGRPC_UNSECURE_SRC = \
src/core/lib/iomgr/tcp_client_windows.c \
src/core/lib/iomgr/tcp_posix.c \
src/core/lib/iomgr/tcp_server_posix.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c \
src/core/lib/iomgr/tcp_server_uv.c \
src/core/lib/iomgr/tcp_server_windows.c \
src/core/lib/iomgr/tcp_uv.c \
@@ -3915,6 +3974,7 @@ LIBGRPC++_SRC = \
src/cpp/common/rpc_method.cc \
src/cpp/common/version_cc.cc \
src/cpp/server/async_generic_service.cc \
+ src/cpp/server/channel_argument_option.cc \
src/cpp/server/create_default_thread_pool.cc \
src/cpp/server/dynamic_thread_pool.cc \
src/cpp/server/health/default_health_check_service.cc \
@@ -3947,6 +4007,7 @@ PUBLIC_HEADERS_CXX += \
include/grpc++/grpc++.h \
include/grpc++/health_check_service_interface.h \
include/grpc++/impl/call.h \
+ include/grpc++/impl/channel_argument_option.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/codegen/core_codegen.h \
include/grpc++/impl/grpc_library.h \
@@ -4114,6 +4175,7 @@ LIBGRPC++_CRONET_SRC = \
src/cpp/common/rpc_method.cc \
src/cpp/common/version_cc.cc \
src/cpp/server/async_generic_service.cc \
+ src/cpp/server/channel_argument_option.cc \
src/cpp/server/create_default_thread_pool.cc \
src/cpp/server/dynamic_thread_pool.cc \
src/cpp/server/health/default_health_check_service.cc \
@@ -4214,6 +4276,9 @@ LIBGRPC++_CRONET_SRC = \
src/core/lib/iomgr/tcp_client_windows.c \
src/core/lib/iomgr/tcp_posix.c \
src/core/lib/iomgr/tcp_server_posix.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c \
src/core/lib/iomgr/tcp_server_uv.c \
src/core/lib/iomgr/tcp_server_windows.c \
src/core/lib/iomgr/tcp_uv.c \
@@ -4329,6 +4394,7 @@ PUBLIC_HEADERS_CXX += \
include/grpc++/grpc++.h \
include/grpc++/health_check_service_interface.h \
include/grpc++/impl/call.h \
+ include/grpc++/impl/channel_argument_option.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/codegen/core_codegen.h \
include/grpc++/impl/grpc_library.h \
@@ -4797,6 +4863,7 @@ LIBGRPC++_UNSECURE_SRC = \
src/cpp/common/rpc_method.cc \
src/cpp/common/version_cc.cc \
src/cpp/server/async_generic_service.cc \
+ src/cpp/server/channel_argument_option.cc \
src/cpp/server/create_default_thread_pool.cc \
src/cpp/server/dynamic_thread_pool.cc \
src/cpp/server/health/default_health_check_service.cc \
@@ -4829,6 +4896,7 @@ PUBLIC_HEADERS_CXX += \
include/grpc++/grpc++.h \
include/grpc++/health_check_service_interface.h \
include/grpc++/impl/call.h \
+ include/grpc++/impl/channel_argument_option.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/codegen/core_codegen.h \
include/grpc++/impl/grpc_library.h \
@@ -4960,6 +5028,55 @@ ifneq ($(NO_DEPS),true)
endif
+LIBGRPC_BENCHMARK_SRC = \
+ test/cpp/microbenchmarks/helpers.cc \
+
+PUBLIC_HEADERS_CXX += \
+
+LIBGRPC_BENCHMARK_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC_BENCHMARK_SRC))))
+
+
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure libraries if you don't have OpenSSL.
+
+$(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a: openssl_dep_error
+
+
+else
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay.
+
+$(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a: protobuf_dep_error
+
+
+else
+
+$(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBGRPC_BENCHMARK_OBJS)
+ $(E) "[AR] Creating $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) rm -f $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a
+ $(Q) $(AR) $(AROPTS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBGRPC_BENCHMARK_OBJS)
+ifeq ($(SYSTEM),Darwin)
+ $(Q) ranlib -no_warning_for_no_symbols $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a
+endif
+
+
+
+
+endif
+
+endif
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(LIBGRPC_BENCHMARK_OBJS:.o=.dep)
+endif
+endif
+
+
LIBGRPC_CLI_LIBS_SRC = \
test/cpp/util/cli_call.cc \
test/cpp/util/cli_credentials.cc \
@@ -8007,6 +8124,38 @@ endif
endif
+ARENA_TEST_SRC = \
+ test/core/support/arena_test.c \
+
+ARENA_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ARENA_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/arena_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/arena_test: $(ARENA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(ARENA_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/arena_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/support/arena_test.o: $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_arena_test: $(ARENA_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(ARENA_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
BAD_SERVER_RESPONSE_TEST_SRC = \
test/core/end2end/bad_server_response_test.c \
@@ -8647,6 +8796,38 @@ endif
endif
+ERROR_TEST_SRC = \
+ test/core/iomgr/error_test.c \
+
+ERROR_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(ERROR_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/error_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/error_test: $(ERROR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(ERROR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/error_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/iomgr/error_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_error_test: $(ERROR_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(ERROR_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
EV_EPOLL_LINUX_TEST_SRC = \
test/core/iomgr/ev_epoll_linux_test.c \
@@ -11079,6 +11260,38 @@ endif
endif
+PARSE_ADDRESS_TEST_SRC = \
+ test/core/client_channel/parse_address_test.c \
+
+PARSE_ADDRESS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PARSE_ADDRESS_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/parse_address_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/parse_address_test: $(PARSE_ADDRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(PARSE_ADDRESS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/parse_address_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/client_channel/parse_address_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_parse_address_test: $(PARSE_ADDRESS_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(PARSE_ADDRESS_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
PERCENT_DECODE_FUZZER_SRC = \
test/core/slice/percent_decode_fuzzer.c \
@@ -11783,6 +11996,38 @@ endif
endif
+STREAM_OWNED_SLICE_TEST_SRC = \
+ test/core/transport/stream_owned_slice_test.c \
+
+STREAM_OWNED_SLICE_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(STREAM_OWNED_SLICE_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/stream_owned_slice_test: openssl_dep_error
+
+else
+
+
+
+$(BINDIR)/$(CONFIG)/stream_owned_slice_test: $(STREAM_OWNED_SLICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(STREAM_OWNED_SLICE_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/stream_owned_slice_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/transport/stream_owned_slice_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_stream_owned_slice_test: $(STREAM_OWNED_SLICE_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(STREAM_OWNED_SLICE_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
TCP_CLIENT_POSIX_TEST_SRC = \
test/core/iomgr/tcp_client_posix_test.c \
@@ -12456,6 +12701,49 @@ endif
endif
+BM_ARENA_SRC = \
+ test/cpp/microbenchmarks/bm_arena.cc \
+
+BM_ARENA_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_ARENA_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/bm_arena: openssl_dep_error
+
+else
+
+
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/bm_arena: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/bm_arena: $(PROTOBUF_DEP) $(BM_ARENA_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_ARENA_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_arena
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_arena.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_bm_arena: $(BM_ARENA_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(BM_ARENA_OBJS:.o=.dep)
+endif
+endif
+
+
BM_CALL_CREATE_SRC = \
test/cpp/microbenchmarks/bm_call_create.cc \
@@ -12479,16 +12767,16 @@ $(BINDIR)/$(CONFIG)/bm_call_create: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/bm_call_create: $(PROTOBUF_DEP) $(BM_CALL_CREATE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/bm_call_create: $(PROTOBUF_DEP) $(BM_CALL_CREATE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(BM_CALL_CREATE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_call_create
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_CALL_CREATE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_call_create
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_call_create.o: $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_call_create.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_bm_call_create: $(BM_CALL_CREATE_OBJS:.o=.dep)
@@ -12522,16 +12810,16 @@ $(BINDIR)/$(CONFIG)/bm_chttp2_hpack: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/bm_chttp2_hpack: $(PROTOBUF_DEP) $(BM_CHTTP2_HPACK_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/bm_chttp2_hpack: $(PROTOBUF_DEP) $(BM_CHTTP2_HPACK_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(BM_CHTTP2_HPACK_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_chttp2_hpack
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_CHTTP2_HPACK_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_chttp2_hpack
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_chttp2_hpack.o: $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_chttp2_hpack.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_bm_chttp2_hpack: $(BM_CHTTP2_HPACK_OBJS:.o=.dep)
@@ -12565,16 +12853,16 @@ $(BINDIR)/$(CONFIG)/bm_closure: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/bm_closure: $(PROTOBUF_DEP) $(BM_CLOSURE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/bm_closure: $(PROTOBUF_DEP) $(BM_CLOSURE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(BM_CLOSURE_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_closure
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_CLOSURE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_closure
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_closure.o: $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_closure.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_bm_closure: $(BM_CLOSURE_OBJS:.o=.dep)
@@ -12608,16 +12896,16 @@ $(BINDIR)/$(CONFIG)/bm_cq: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/bm_cq: $(PROTOBUF_DEP) $(BM_CQ_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/bm_cq: $(PROTOBUF_DEP) $(BM_CQ_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(BM_CQ_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_cq
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_CQ_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_cq
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_cq.o: $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_cq.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_bm_cq: $(BM_CQ_OBJS:.o=.dep)
@@ -12651,16 +12939,16 @@ $(BINDIR)/$(CONFIG)/bm_error: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/bm_error: $(PROTOBUF_DEP) $(BM_ERROR_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/bm_error: $(PROTOBUF_DEP) $(BM_ERROR_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(BM_ERROR_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_error
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_ERROR_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_error
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_error.o: $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_error.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_bm_error: $(BM_ERROR_OBJS:.o=.dep)
@@ -12671,15 +12959,15 @@ endif
endif
-BM_FULLSTACK_SRC = \
- test/cpp/microbenchmarks/bm_fullstack.cc \
+BM_FULLSTACK_STREAMING_PING_PONG_SRC = \
+ test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc \
-BM_FULLSTACK_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_SRC))))
+BM_FULLSTACK_STREAMING_PING_PONG_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_STREAMING_PING_PONG_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
-$(BINDIR)/$(CONFIG)/bm_fullstack: openssl_dep_error
+$(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong: openssl_dep_error
else
@@ -12690,26 +12978,155 @@ ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
-$(BINDIR)/$(CONFIG)/bm_fullstack: protobuf_dep_error
+$(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/bm_fullstack: $(PROTOBUF_DEP) $(BM_FULLSTACK_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong: $(PROTOBUF_DEP) $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_ping_pong
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack.o: $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
-deps_bm_fullstack: $(BM_FULLSTACK_OBJS:.o=.dep)
+deps_bm_fullstack_streaming_ping_pong: $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
--include $(BM_FULLSTACK_OBJS:.o=.dep)
+-include $(BM_FULLSTACK_STREAMING_PING_PONG_OBJS:.o=.dep)
+endif
+endif
+
+
+BM_FULLSTACK_STREAMING_PUMP_SRC = \
+ test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc \
+
+BM_FULLSTACK_STREAMING_PUMP_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_STREAMING_PUMP_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump: openssl_dep_error
+
+else
+
+
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump: $(PROTOBUF_DEP) $(BM_FULLSTACK_STREAMING_PUMP_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_STREAMING_PUMP_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack_streaming_pump
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack_streaming_pump.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_bm_fullstack_streaming_pump: $(BM_FULLSTACK_STREAMING_PUMP_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(BM_FULLSTACK_STREAMING_PUMP_OBJS:.o=.dep)
+endif
+endif
+
+
+BM_FULLSTACK_TRICKLE_SRC = \
+ test/cpp/microbenchmarks/bm_fullstack_trickle.cc \
+
+BM_FULLSTACK_TRICKLE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_TRICKLE_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_trickle: openssl_dep_error
+
+else
+
+
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_trickle: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_trickle: $(PROTOBUF_DEP) $(BM_FULLSTACK_TRICKLE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_TRICKLE_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack_trickle
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack_trickle.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_bm_fullstack_trickle: $(BM_FULLSTACK_TRICKLE_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(BM_FULLSTACK_TRICKLE_OBJS:.o=.dep)
+endif
+endif
+
+
+BM_FULLSTACK_UNARY_PING_PONG_SRC = \
+ test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc \
+
+BM_FULLSTACK_UNARY_PING_PONG_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_FULLSTACK_UNARY_PING_PONG_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong: openssl_dep_error
+
+else
+
+
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong: $(PROTOBUF_DEP) $(BM_FULLSTACK_UNARY_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_FULLSTACK_UNARY_PING_PONG_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_fullstack_unary_ping_pong
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_bm_fullstack_unary_ping_pong: $(BM_FULLSTACK_UNARY_PING_PONG_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(BM_FULLSTACK_UNARY_PING_PONG_OBJS:.o=.dep)
endif
endif
@@ -12737,16 +13154,16 @@ $(BINDIR)/$(CONFIG)/bm_metadata: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/bm_metadata: $(PROTOBUF_DEP) $(BM_METADATA_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/bm_metadata: $(PROTOBUF_DEP) $(BM_METADATA_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(BM_METADATA_OBJS) $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_metadata
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_METADATA_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_metadata
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_metadata.o: $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_metadata.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_bm_metadata: $(BM_METADATA_OBJS:.o=.dep)
@@ -12757,6 +13174,49 @@ endif
endif
+BM_POLLSET_SRC = \
+ test/cpp/microbenchmarks/bm_pollset.cc \
+
+BM_POLLSET_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_POLLSET_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/bm_pollset: openssl_dep_error
+
+else
+
+
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/bm_pollset: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/bm_pollset: $(PROTOBUF_DEP) $(BM_POLLSET_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LDXX) $(LDFLAGS) $(BM_POLLSET_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/bm_pollset
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_pollset.o: $(LIBDIR)/$(CONFIG)/libgrpc_benchmark.a $(LIBDIR)/$(CONFIG)/libbenchmark.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_bm_pollset: $(BM_POLLSET_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(BM_POLLSET_OBJS:.o=.dep)
+endif
+endif
+
+
CHANNEL_ARGUMENTS_TEST_SRC = \
test/cpp/common/channel_arguments_test.cc \
@@ -14823,6 +15283,56 @@ endif
endif
+SERVER_BUILDER_TEST_SRC = \
+ $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc \
+ $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc \
+ test/cpp/server/server_builder_test.cc \
+
+SERVER_BUILDER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SERVER_BUILDER_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/server_builder_test: openssl_dep_error
+
+else
+
+
+
+
+ifeq ($(NO_PROTOBUF),true)
+
+# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
+
+$(BINDIR)/$(CONFIG)/server_builder_test: protobuf_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/server_builder_test: $(PROTOBUF_DEP) $(SERVER_BUILDER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LDXX) $(LDFLAGS) $(SERVER_BUILDER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/server_builder_test
+
+endif
+
+endif
+
+$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo_messages.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+$(OBJDIR)/$(CONFIG)/src/proto/grpc/testing/echo.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+$(OBJDIR)/$(CONFIG)/test/cpp/server/server_builder_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+
+deps_server_builder_test: $(SERVER_BUILDER_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(SERVER_BUILDER_TEST_OBJS:.o=.dep)
+endif
+endif
+$(OBJDIR)/$(CONFIG)/test/cpp/server/server_builder_test.o: $(GENDIR)/src/proto/grpc/testing/echo_messages.pb.cc $(GENDIR)/src/proto/grpc/testing/echo_messages.grpc.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.pb.cc $(GENDIR)/src/proto/grpc/testing/echo.grpc.pb.cc
+
+
SERVER_CONTEXT_TEST_SPOUSE_TEST_SRC = \
test/cpp/test/server_context_test_spouse_test.cc \
@@ -18188,6 +18698,7 @@ test/cpp/interop/interop_client.cc: $(OPENSSL_DEP)
test/cpp/interop/interop_server.cc: $(OPENSSL_DEP)
test/cpp/interop/interop_server_bootstrap.cc: $(OPENSSL_DEP)
test/cpp/interop/server_helper.cc: $(OPENSSL_DEP)
+test/cpp/microbenchmarks/helpers.cc: $(OPENSSL_DEP)
test/cpp/qps/client_async.cc: $(OPENSSL_DEP)
test/cpp/qps/client_sync.cc: $(OPENSSL_DEP)
test/cpp/qps/driver.cc: $(OPENSSL_DEP)
diff --git a/bazel/cc_grpc_library.bzl b/bazel/cc_grpc_library.bzl
index 9020eacb74..ab1add476e 100644
--- a/bazel/cc_grpc_library.bzl
+++ b/bazel/cc_grpc_library.bzl
@@ -2,7 +2,7 @@
load("//:bazel/generate_cc.bzl", "generate_cc")
-def cc_grpc_library(name, srcs, deps, proto_only, **kwargs):
+def cc_grpc_library(name, srcs, deps, proto_only, well_known_protos, use_external = False, **kwargs):
"""Generates C++ grpc classes from a .proto file.
Assumes the generated classes will be used in cc_api_version = 2.
@@ -12,6 +12,11 @@ def cc_grpc_library(name, srcs, deps, proto_only, **kwargs):
srcs: a single proto_library, which wraps the .proto files with services.
deps: a list of C++ proto_library (or cc_proto_library) which provides
the compiled code of any message that the services depend on.
+ well_known_protos: The target from protobuf library that exports well
+ known protos. Currently it will only work if the value is
+ "@submodule_protobuf//:well_known_protos"
+ use_external: When True the grpc deps are prefixed with //external. This
+ allows grpc to be used as a dependency in other bazel projects.
**kwargs: rest of arguments, e.g., compatible_with and visibility.
"""
if len(srcs) > 1:
@@ -33,22 +38,37 @@ def cc_grpc_library(name, srcs, deps, proto_only, **kwargs):
generate_cc(
name = codegen_target,
srcs = [proto_target],
+ well_known_protos = well_known_protos,
**kwargs
)
if not proto_only:
+ if use_external:
+ # when this file is used by non-grpc projects
+ plugin = "//external:grpc_cpp_plugin"
+ else:
+ plugin = "//:grpc_cpp_plugin"
+
generate_cc(
name = codegen_grpc_target,
srcs = [proto_target],
- plugin = "//:grpc_cpp_plugin",
+ plugin = plugin,
+ well_known_protos = well_known_protos,
**kwargs
)
+ if use_external:
+ # when this file is used by non-grpc projects
+ grpc_deps = ["//external:grpc++", "//external:grpc++_codegen_proto",
+ "//external:protobuf"]
+ else:
+ grpc_deps = ["//:grpc++", "//:grpc++_codegen_proto", "//external:protobuf"]
+
native.cc_library(
name = name,
srcs = [":" + codegen_grpc_target, ":" + codegen_target],
hdrs = [":" + codegen_grpc_target, ":" + codegen_target],
- deps = deps + ["//:grpc++", "//:grpc++_codegen_proto", "//external:protobuf"],
+ deps = deps + grpc_deps,
**kwargs
)
else:
diff --git a/bazel/generate_cc.bzl b/bazel/generate_cc.bzl
index d49cbe8d72..f3961f0a41 100644
--- a/bazel/generate_cc.bzl
+++ b/bazel/generate_cc.bzl
@@ -31,8 +31,20 @@ def generate_cc_impl(ctx):
arguments += ["-I{0}={0}".format(include.path) for include in includes]
arguments += [proto.path for proto in protos]
+ # create a list of well known proto files if the argument is non-None
+ well_known_proto_files = []
+ if ctx.attr.well_known_protos:
+ f = ctx.attr.well_known_protos.files.to_list()[0].dirname
+ if f != "external/submodule_protobuf/src/google/protobuf":
+ print("Error: Only @submodule_protobuf//:well_known_protos is supported")
+ else:
+ # f points to "external/submodule_protobuf/src/google/protobuf"
+ # add -I argument to protoc so it knows where to look for the proto files.
+ arguments += ["-I{0}".format(f + "/../..")]
+ well_known_proto_files = [f for f in ctx.attr.well_known_protos.files]
+
ctx.action(
- inputs = protos + includes + additional_input,
+ inputs = protos + includes + additional_input + well_known_proto_files,
outputs = out_files,
executable = ctx.executable._protoc,
arguments = arguments,
@@ -56,6 +68,9 @@ generate_cc = rule(
mandatory = False,
allow_empty = True,
),
+ "well_known_protos" : attr.label(
+ mandatory = False,
+ ),
"_protoc": attr.label(
default = Label("//external:protocol_compiler"),
executable = True,
diff --git a/bazel/grpc_build_system.bzl b/bazel/grpc_build_system.bzl
index daf8b78527..8b524bd0e5 100644
--- a/bazel/grpc_build_system.bzl
+++ b/bazel/grpc_build_system.bzl
@@ -58,11 +58,14 @@ def grpc_proto_plugin(name, srcs = [], deps = []):
load("//:bazel/cc_grpc_library.bzl", "cc_grpc_library")
-def grpc_proto_library(name, srcs = [], deps = [], well_known_deps = [], has_services = True):
+def grpc_proto_library(name, srcs = [], deps = [], well_known_protos = None,
+ has_services = True, use_external = False):
cc_grpc_library(
name = name,
srcs = srcs,
deps = deps,
+ well_known_protos = well_known_protos,
proto_only = not has_services,
+ use_external = use_external,
)
diff --git a/binding.gyp b/binding.gyp
index 6fbe59bd6e..f79374a446 100644
--- a/binding.gyp
+++ b/binding.gyp
@@ -43,7 +43,11 @@
# out. It can be re-enabled for one build by setting the npm config
# variable grpc_uv to true, and it can be re-enabled permanently by
# setting it to true here.
- 'grpc_uv%': 'false'
+ 'grpc_uv%': 'false',
+ # Some Node installations use the system installation of OpenSSL, and on
+ # some systems, the system OpenSSL still does not have ALPN support. This
+ # will let users recompile gRPC to work without ALPN.
+ 'grpc_alpn%': 'true'
},
'target_defaults': {
'include_dirs': [
@@ -73,10 +77,16 @@
'OPENSSL_NO_ASM'
]
}, {
- # As of the beginning of 2017, we only support versions of Node with
- # embedded versions of OpenSSL that support ALPN
- 'defines': [
- 'TSI_OPENSSL_ALPN_SUPPORT=1'
+ 'conditions': [
+ ['grpc_alpn=="true"', {
+ 'defines': [
+ 'TSI_OPENSSL_ALPN_SUPPORT=1'
+ ],
+ }, {
+ 'defines': [
+ 'TSI_OPENSSL_ALPN_SUPPORT=0'
+ ],
+ }]
],
'include_dirs': [
'<(node_root_dir)/deps/openssl/openssl/include',
@@ -534,6 +544,7 @@
'src/core/lib/profiling/basic_timers.c',
'src/core/lib/profiling/stap_timers.c',
'src/core/lib/support/alloc.c',
+ 'src/core/lib/support/arena.c',
'src/core/lib/support/avl.c',
'src/core/lib/support/backoff.c',
'src/core/lib/support/cmdline.c',
@@ -657,6 +668,9 @@
'src/core/lib/iomgr/tcp_client_windows.c',
'src/core/lib/iomgr/tcp_posix.c',
'src/core/lib/iomgr/tcp_server_posix.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_common.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c',
'src/core/lib/iomgr/tcp_server_uv.c',
'src/core/lib/iomgr/tcp_server_windows.c',
'src/core/lib/iomgr/tcp_uv.c',
diff --git a/build.yaml b/build.yaml
index f59640f8ab..80c9849ca4 100644
--- a/build.yaml
+++ b/build.yaml
@@ -13,8 +13,8 @@ settings:
'#09': Per-language overrides are possible with (eg) ruby_version tag here
'#10': See the expand_version.py for all the quirks here
core_version: 3.0.0-dev
- g_stands_for: green
- version: 1.2.0-dev
+ g_stands_for: gentle
+ version: 1.3.0-dev
filegroups:
- name: census
public_headers:
@@ -85,6 +85,7 @@ filegroups:
- include/grpc/support/useful.h
headers:
- src/core/lib/profiling/timers.h
+ - src/core/lib/support/arena.h
- src/core/lib/support/backoff.h
- src/core/lib/support/block_annotate.h
- src/core/lib/support/env.h
@@ -101,6 +102,7 @@ filegroups:
- src/core/lib/profiling/basic_timers.c
- src/core/lib/profiling/stap_timers.c
- src/core/lib/support/alloc.c
+ - src/core/lib/support/arena.c
- src/core/lib/support/avl.c
- src/core/lib/support/backoff.c
- src/core/lib/support/cmdline.c
@@ -228,6 +230,7 @@ filegroups:
- src/core/lib/iomgr/tcp_client_posix.h
- src/core/lib/iomgr/tcp_posix.h
- src/core/lib/iomgr/tcp_server.h
+ - src/core/lib/iomgr/tcp_server_utils_posix.h
- src/core/lib/iomgr/tcp_uv.h
- src/core/lib/iomgr/tcp_windows.h
- src/core/lib/iomgr/time_averaged_stats.h
@@ -337,6 +340,9 @@ filegroups:
- src/core/lib/iomgr/tcp_client_windows.c
- src/core/lib/iomgr/tcp_posix.c
- src/core/lib/iomgr/tcp_server_posix.c
+ - src/core/lib/iomgr/tcp_server_utils_posix_common.c
+ - src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c
+ - src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c
- src/core/lib/iomgr/tcp_server_uv.c
- src/core/lib/iomgr/tcp_server_windows.c
- src/core/lib/iomgr/tcp_uv.c
@@ -586,7 +592,7 @@ filegroups:
headers:
- test/core/end2end/cq_verifier.h
- test/core/end2end/fake_resolver.h
- - test/core/end2end/fixtures/http_proxy.h
+ - test/core/end2end/fixtures/http_proxy_fixture.h
- test/core/end2end/fixtures/proxy.h
- test/core/iomgr/endpoint_tests.h
- test/core/util/debugger_macros.h
@@ -602,7 +608,7 @@ filegroups:
src:
- test/core/end2end/cq_verifier.c
- test/core/end2end/fake_resolver.c
- - test/core/end2end/fixtures/http_proxy.c
+ - test/core/end2end/fixtures/http_proxy_fixture.c
- test/core/end2end/fixtures/proxy.c
- test/core/iomgr/endpoint_tests.c
- test/core/util/debugger_macros.c
@@ -774,6 +780,7 @@ filegroups:
- include/grpc++/grpc++.h
- include/grpc++/health_check_service_interface.h
- include/grpc++/impl/call.h
+ - include/grpc++/impl/channel_argument_option.h
- include/grpc++/impl/client_unary_call.h
- include/grpc++/impl/codegen/core_codegen.h
- include/grpc++/impl/grpc_library.h
@@ -830,6 +837,7 @@ filegroups:
- src/cpp/common/rpc_method.cc
- src/cpp/common/version_cc.cc
- src/cpp/server/async_generic_service.cc
+ - src/cpp/server/channel_argument_option.cc
- src/cpp/server/create_default_thread_pool.cc
- src/cpp/server/dynamic_thread_pool.cc
- src/cpp/server/health/default_health_check_service.cc
@@ -1214,6 +1222,20 @@ libs:
- grpc++_codegen_base_src
secure: false
vs_project_guid: '{6EE56155-DF7C-4F6E-BFC4-F6F776BEB211}'
+- name: grpc_benchmark
+ build: test
+ language: c++
+ headers:
+ - test/cpp/microbenchmarks/fullstack_context_mutators.h
+ - test/cpp/microbenchmarks/fullstack_fixtures.h
+ - test/cpp/microbenchmarks/helpers.h
+ src:
+ - test/cpp/microbenchmarks/helpers.cc
+ deps:
+ - benchmark
+ - grpc++
+ - grpc_test_util
+ - grpc
- name: grpc_cli_libs
build: private
language: c++
@@ -1467,6 +1489,14 @@ targets:
- test/core/end2end/fuzzers/api_fuzzer_corpus
dict: test/core/end2end/fuzzers/api_fuzzer.dictionary
maxlen: 2048
+- name: arena_test
+ build: test
+ language: c
+ src:
+ - test/core/support/arena_test.c
+ deps:
+ - gpr_test_util
+ - gpr
- name: bad_server_response_test
build: test
language: c
@@ -1686,6 +1716,17 @@ targets:
- gpr
exclude_iomgrs:
- uv
+- name: error_test
+ cpu_cost: 30
+ build: test
+ language: c
+ src:
+ - test/core/iomgr/error_test.c
+ deps:
+ - grpc_test_util
+ - grpc
+ - gpr_test_util
+ - gpr
- name: ev_epoll_linux_test
build: test
language: c
@@ -2492,6 +2533,16 @@ targets:
- grpc
- gpr_test_util
- gpr
+- name: parse_address_test
+ build: test
+ language: c
+ src:
+ - test/core/client_channel/parse_address_test.c
+ deps:
+ - grpc_test_util
+ - grpc
+ - gpr_test_util
+ - gpr
- name: percent_decode_fuzzer
build: fuzzer
language: c
@@ -2552,6 +2603,8 @@ targets:
- grpc
- gpr_test_util
- gpr
+ exclude_iomgrs:
+ - uv
platforms:
- mac
- linux
@@ -2748,6 +2801,16 @@ targets:
- grpc
- gpr_test_util
- gpr
+- name: stream_owned_slice_test
+ build: test
+ language: c
+ src:
+ - test/core/transport/stream_owned_slice_test.c
+ deps:
+ - grpc_test_util
+ - grpc
+ - gpr_test_util
+ - gpr
- name: tcp_client_posix_test
cpu_cost: 0.5
build: test
@@ -3005,12 +3068,33 @@ targets:
- grpc
- gpr_test_util
- gpr
+- name: bm_arena
+ build: test
+ language: c++
+ src:
+ - test/cpp/microbenchmarks/bm_arena.cc
+ deps:
+ - grpc_benchmark
+ - benchmark
+ - grpc++_test_util
+ - grpc_test_util
+ - grpc++
+ - grpc
+ - gpr_test_util
+ - gpr
+ args:
+ - --benchmark_min_time=0
+ platforms:
+ - mac
+ - linux
+ - posix
- name: bm_call_create
build: test
language: c++
src:
- test/cpp/microbenchmarks/bm_call_create.cc
deps:
+ - grpc_benchmark
- benchmark
- grpc++_test_util
- grpc_test_util
@@ -3030,6 +3114,7 @@ targets:
src:
- test/cpp/microbenchmarks/bm_chttp2_hpack.cc
deps:
+ - grpc_benchmark
- benchmark
- grpc++_test_util
- grpc_test_util
@@ -3049,6 +3134,7 @@ targets:
src:
- test/cpp/microbenchmarks/bm_closure.cc
deps:
+ - grpc_benchmark
- benchmark
- grpc++_test_util
- grpc_test_util
@@ -3068,6 +3154,7 @@ targets:
src:
- test/cpp/microbenchmarks/bm_cq.cc
deps:
+ - grpc_benchmark
- benchmark
- grpc++_test_util
- grpc_test_util
@@ -3087,6 +3174,51 @@ targets:
src:
- test/cpp/microbenchmarks/bm_error.cc
deps:
+ - grpc_benchmark
+ - benchmark
+ - grpc++_test_util
+ - grpc_test_util
+ - grpc++
+ - grpc
+ - gpr_test_util
+ - gpr
+ args:
+ - --benchmark_min_time=0
+ platforms:
+ - mac
+ - linux
+ - posix
+- name: bm_fullstack_streaming_ping_pong
+ build: test
+ language: c++
+ src:
+ - test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc
+ deps:
+ - grpc_benchmark
+ - benchmark
+ - grpc++_test_util
+ - grpc_test_util
+ - grpc++
+ - grpc
+ - gpr_test_util
+ - gpr
+ args:
+ - --benchmark_min_time=0
+ excluded_poll_engines:
+ - poll
+ - poll-cv
+ platforms:
+ - mac
+ - linux
+ - posix
+ timeout_seconds: 1200
+- name: bm_fullstack_streaming_pump
+ build: test
+ language: c++
+ src:
+ - test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc
+ deps:
+ - grpc_benchmark
- benchmark
- grpc++_test_util
- grpc_test_util
@@ -3096,16 +3228,45 @@ targets:
- gpr
args:
- --benchmark_min_time=0
+ excluded_poll_engines:
+ - poll
+ - poll-cv
platforms:
- mac
- linux
- posix
-- name: bm_fullstack
+ timeout_seconds: 1200
+- name: bm_fullstack_trickle
build: test
language: c++
src:
- - test/cpp/microbenchmarks/bm_fullstack.cc
+ - test/cpp/microbenchmarks/bm_fullstack_trickle.cc
deps:
+ - grpc_benchmark
+ - benchmark
+ - grpc++_test_util
+ - grpc_test_util
+ - grpc++
+ - grpc
+ - gpr_test_util
+ - gpr
+ args:
+ - --benchmark_min_time=0
+ excluded_poll_engines:
+ - poll
+ - poll-cv
+ platforms:
+ - mac
+ - linux
+ - posix
+ timeout_seconds: 1200
+- name: bm_fullstack_unary_ping_pong
+ build: test
+ language: c++
+ src:
+ - test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc
+ deps:
+ - grpc_benchmark
- benchmark
- grpc++_test_util
- grpc_test_util
@@ -3129,8 +3290,31 @@ targets:
src:
- test/cpp/microbenchmarks/bm_metadata.cc
deps:
+ - grpc_benchmark
+ - benchmark
+ - grpc++_test_util
+ - grpc_test_util
+ - grpc++
+ - grpc
+ - gpr_test_util
+ - gpr
+ args:
+ - --benchmark_min_time=0
+ platforms:
+ - mac
+ - linux
+ - posix
+- name: bm_pollset
+ build: test
+ language: c++
+ src:
+ - test/cpp/microbenchmarks/bm_pollset.cc
+ deps:
+ - grpc_benchmark
- benchmark
+ - grpc++_test_util
- grpc_test_util
+ - grpc++
- grpc
- gpr_test_util
- gpr
@@ -3808,6 +3992,21 @@ targets:
- grpc
- gpr_test_util
- gpr
+- name: server_builder_test
+ gtest: true
+ build: test
+ language: c++
+ src:
+ - src/proto/grpc/testing/echo_messages.proto
+ - src/proto/grpc/testing/echo.proto
+ - test/cpp/server/server_builder_test.cc
+ deps:
+ - grpc++_test_util
+ - grpc_test_util
+ - gpr_test_util
+ - grpc++
+ - grpc
+ - gpr
- name: server_context_test_spouse_test
gtest: true
build: test
@@ -4090,8 +4289,8 @@ configs:
TSAN_OPTIONS: suppressions=tools/tsan_suppressions.txt:halt_on_error=1:second_deadlock_stack=1
ubsan:
CC: clang
- CPPFLAGS: -O0 -fsanitize-coverage=edge -fsanitize=undefined,unsigned-integer-overflow
- -fno-omit-frame-pointer -Wno-unused-command-line-argument -Wvarargs
+ CPPFLAGS: -O0 -fsanitize-coverage=edge -fsanitize=undefined -fno-omit-frame-pointer
+ -Wno-unused-command-line-argument -Wvarargs
CXX: clang++
DEFINES: NDEBUG
LD: clang
@@ -4099,7 +4298,7 @@ configs:
LDXX: clang++
compile_the_world: true
test_environ:
- UBSAN_OPTIONS: halt_on_error=1:print_stacktrace=1
+ UBSAN_OPTIONS: halt_on_error=1:print_stacktrace=1:suppressions=tools/ubsan_suppressions.txt
defaults:
benchmark:
CPPFLAGS: -Ithird_party/benchmark/include -DHAVE_POSIX_REGEX
diff --git a/config.m4 b/config.m4
index 90536e503e..3194b26669 100644
--- a/config.m4
+++ b/config.m4
@@ -39,6 +39,7 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/profiling/basic_timers.c \
src/core/lib/profiling/stap_timers.c \
src/core/lib/support/alloc.c \
+ src/core/lib/support/arena.c \
src/core/lib/support/avl.c \
src/core/lib/support/backoff.c \
src/core/lib/support/cmdline.c \
@@ -140,6 +141,9 @@ if test "$PHP_GRPC" != "no"; then
src/core/lib/iomgr/tcp_client_windows.c \
src/core/lib/iomgr/tcp_posix.c \
src/core/lib/iomgr/tcp_server_posix.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_common.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c \
+ src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c \
src/core/lib/iomgr/tcp_server_uv.c \
src/core/lib/iomgr/tcp_server_windows.c \
src/core/lib/iomgr/tcp_uv.c \
diff --git a/doc/PROTOCOL-WEB.md b/doc/PROTOCOL-WEB.md
index 0b54e0f34f..5f01af3627 100644
--- a/doc/PROTOCOL-WEB.md
+++ b/doc/PROTOCOL-WEB.md
@@ -94,8 +94,6 @@ the response stream needs to be text encoded e.g. when XHR is used or due
to security policies with XHR
* Accept: application/grpc-web-text
2. The default text encoding is base64
- * Text encoding may be specified with Content-Type or Accept headers as
- * application/grpc-web-text-base64
* Note that “Content-Transfer-Encoding: base64” should not be used.
Due to in-stream base64 padding when delimiting messages, the entire
response body is not necessarily a valid base64-encoded entity
diff --git a/doc/combiner-explainer.md b/doc/combiner-explainer.md
new file mode 100644
index 0000000000..9e9d077273
--- /dev/null
+++ b/doc/combiner-explainer.md
@@ -0,0 +1,158 @@
+# Combiner Explanation
+## Talk by ctiller, notes by vjpai
+
+Typical way of doing critical section
+
+```
+mu.lock()
+do_stuff()
+mu.unlock()
+```
+
+An alternative way of doing it is
+
+```
+class combiner {
+ run(f) {
+ mu.lock()
+ f()
+ mu.unlock()
+ }
+ mutex mu;
+}
+
+combiner.run(do_stuff)
+```
+
+If you have two threads calling combiner, there will be some kind of
+queuing in place. It's called `combiner` because you can pass in more
+than one do_stuff at once and they will run under a common `mu`.
+
+The implementation described above has the issue that you're blocking a thread
+for a period of time, and this is considered harmful because it's an application thread that you're blocking.
+
+Instead, get a new property:
+* Keep things running in serial execution
+* Don't ever sleep the thread
+* But maybe allow things to end up running on a different thread from where they were started
+* This means that `do_stuff` doesn't necessarily run to completion when `combiner.run` is invoked
+
+```
+class combiner {
+ mpscq q; // multi-producer single-consumer queue can be made non-blocking
+ state s; // is it empty or executing
+
+ run(f) {
+ if (q.push(f)) {
+ // q.push returns true if it's the first thing
+ while (q.pop(&f)) { // modulo some extra work to avoid races
+ f();
+ }
+ }
+ }
+}
+```
+
+The basic idea is that the first one to push onto the combiner
+executes the work and then keeps executing functions from the queue
+until the combiner is drained.
+
+Our combiner does some additional work, with the motivation of write-batching.
+
+We have a second tier of `run` called `run_finally`. Anything queued
+onto `run_finally` runs after we have drained the queue. That means
+that there is essentially a finally-queue. This is not guaranteed to
+be final, but it's best-effort. In the process of running the finally
+item, we might put something onto the main combiner queue and so we'll
+need to re-enter.
+
+`chttp2` runs all ops in the run state except if it sees a write it puts that into a finally. That way anything else that gets put into the combiner can add to that write.
+
+```
+class combiner {
+ mpscq q; // multi-producer single-consumer queue can be made non-blocking
+ state s; // is it empty or executing
+ queue finally; // you can only do run_finally when you are already running something from the combiner
+
+ run(f) {
+ if (q.push(f)) {
+ // q.push returns true if it's the first thing
+ loop:
+ while (q.pop(&f)) { // modulo some extra work to avoid races
+ f();
+ }
+ while (finally.pop(&f)) {
+ f();
+ }
+ goto loop;
+ }
+ }
+}
+```
+
+So that explains how combiners work in general. In gRPC, there is
+`start_batch(..., tag)` and then work only gets activated by somebody
+calling `cq::next` which returns a tag. This gives an API-level
+guarantee that there will be a thread doing polling to actually make
+work happen. However, some operations are not covered by a poller
+thread, such as cancellation that doesn't have a completion. Other
+callbacks that don't have a completion are the internal work that gets
+done before the batch gets completed. We need a condition called
+`covered_by_poller` that means that the item will definitely need some
+thread at some point to call `cq::next` . This includes those
+callbacks that directly cause a completion but also those that are
+indirectly required before getting a completion. If we can't tell for
+sure for a specific path, we have to assumed it is not covered by
+poller.
+
+The above combiner has the problem that it keeps draining for a
+potentially infinite amount of time and that can lead to a huge tail
+latency for some operations. So we can tweak it by returning to the application
+if we know that it is valid to do so:
+
+```
+while (q.pop(&f)) {
+ f();
+ if (control_can_be_returned && some_still_queued_thing_is_covered_by_poller) {
+ offload_combiner_work_to_some_other_thread();
+ }
+}
+```
+
+`offload` is more than `break`; it does `break` but also causes some
+other thread that is currently waiting on a poll to break out of its
+poll. This is done by setting up a per-polling-island work-queue
+(distributor) wakeup FD. The work-queue is the converse of the combiner; it
+tries to spray events onto as many threads as possible to get as much concurrency as possible.
+
+So `offload` really does:
+
+```
+ workqueue.run(continue_from_while_loop);
+ break;
+```
+
+This needs us to add another class variable for a `workqueue`
+(which is really conceptually a distributor).
+
+```
+workqueue::run(f) {
+ q.push(f)
+ eventfd.wakeup()
+}
+
+workqueue::readable() {
+ eventfd.consume();
+ q.pop(&f);
+ f();
+ if (!q.empty()) {
+ eventfd.wakeup(); // spray across as many threads as are waiting on this workqueue
+ }
+}
+```
+
+In principle, `run_finally` could get starved, but this hasn't
+happened in practice. If we were concerned about this, we could put a
+limit on how many things come off the regular `q` before the `finally`
+queue gets processed.
+
diff --git a/doc/g_stands_for.md b/doc/g_stands_for.md
index 53a1fdf193..d2fc7a50f9 100644
--- a/doc/g_stands_for.md
+++ b/doc/g_stands_for.md
@@ -7,3 +7,4 @@ future), and the corresponding version numbers that used them:
- 1.0 'g' stands for 'gRPC'
- 1.1 'g' stands for 'good'
- 1.2 'g' stands for 'green'
+- 1.3 'g' stands for 'gentle'
diff --git a/doc/status_ordering.md b/doc/status_ordering.md
new file mode 100644
index 0000000000..fccfa863a3
--- /dev/null
+++ b/doc/status_ordering.md
@@ -0,0 +1,16 @@
+Ordering Status and Reads in the gRPC API
+-----------------------------------------
+
+Rules for implementors:
+1. Reads and Writes Must not succeed after Status has been delivered.
+2. OK Status is only delivered after all buffered messages are read.
+3. Reads May continue to succeed after a failing write.
+ However, once a write fails, all subsequent writes Must fail,
+ and similarly, once a read fails, all subsequent reads Must fail.
+4. When an error status is known to the library, if the user asks for status,
+ the library Should discard messages received in the library but not delivered
+ to the user and then deliver the status. If the user does not ask for status
+ but continues reading, the library Should deliver buffered messages before
+ delivering status. The library MAY choose to implement the stricter version
+ where errors cause all buffered messages to be dropped, but this is not a
+ requirement.
diff --git a/examples/csharp/helloworld-from-cli/global.json b/examples/csharp/helloworld-from-cli/global.json
new file mode 100644
index 0000000000..32ff399ef9
--- /dev/null
+++ b/examples/csharp/helloworld-from-cli/global.json
@@ -0,0 +1,5 @@
+{
+ "sdk": {
+ "version": "1.0.0-preview2-003121"
+ }
+} \ No newline at end of file
diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec
index 909ea5af96..2444ffa57a 100644
--- a/gRPC-Core.podspec
+++ b/gRPC-Core.podspec
@@ -37,7 +37,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-Core'
- version = '1.2.0-dev'
+ version = '1.3.0-dev'
s.version = version
s.summary = 'Core cross-platform gRPC library, written in C'
s.homepage = 'http://www.grpc.io'
@@ -196,6 +196,7 @@ Pod::Spec.new do |s|
# To save you from scrolling, this is the last part of the podspec.
ss.source_files = 'src/core/lib/profiling/timers.h',
+ 'src/core/lib/support/arena.h',
'src/core/lib/support/backoff.h',
'src/core/lib/support/block_annotate.h',
'src/core/lib/support/env.h',
@@ -211,6 +212,7 @@ Pod::Spec.new do |s|
'src/core/lib/profiling/basic_timers.c',
'src/core/lib/profiling/stap_timers.c',
'src/core/lib/support/alloc.c',
+ 'src/core/lib/support/arena.c',
'src/core/lib/support/avl.c',
'src/core/lib/support/backoff.c',
'src/core/lib/support/cmdline.c',
@@ -309,6 +311,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/tcp_client_posix.h',
'src/core/lib/iomgr/tcp_posix.h',
'src/core/lib/iomgr/tcp_server.h',
+ 'src/core/lib/iomgr/tcp_server_utils_posix.h',
'src/core/lib/iomgr/tcp_uv.h',
'src/core/lib/iomgr/tcp_windows.h',
'src/core/lib/iomgr/time_averaged_stats.h',
@@ -508,6 +511,9 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/tcp_client_windows.c',
'src/core/lib/iomgr/tcp_posix.c',
'src/core/lib/iomgr/tcp_server_posix.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_common.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c',
'src/core/lib/iomgr/tcp_server_uv.c',
'src/core/lib/iomgr/tcp_server_windows.c',
'src/core/lib/iomgr/tcp_uv.c',
@@ -675,6 +681,7 @@ Pod::Spec.new do |s|
'src/core/plugin_registry/grpc_plugin_registry.c'
ss.private_header_files = 'src/core/lib/profiling/timers.h',
+ 'src/core/lib/support/arena.h',
'src/core/lib/support/backoff.h',
'src/core/lib/support/block_annotate.h',
'src/core/lib/support/env.h',
@@ -744,6 +751,7 @@ Pod::Spec.new do |s|
'src/core/lib/iomgr/tcp_client_posix.h',
'src/core/lib/iomgr/tcp_posix.h',
'src/core/lib/iomgr/tcp_server.h',
+ 'src/core/lib/iomgr/tcp_server_utils_posix.h',
'src/core/lib/iomgr/tcp_uv.h',
'src/core/lib/iomgr/tcp_windows.h',
'src/core/lib/iomgr/time_averaged_stats.h',
diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec
index 33ad74d2df..6ca9fcd342 100644
--- a/gRPC-ProtoRPC.podspec
+++ b/gRPC-ProtoRPC.podspec
@@ -36,7 +36,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-ProtoRPC'
- version = '1.2.0-dev'
+ version = '1.3.0-dev'
s.version = version
s.summary = 'RPC library for Protocol Buffers, based on gRPC'
s.homepage = 'http://www.grpc.io'
diff --git a/gRPC-RxLibrary.podspec b/gRPC-RxLibrary.podspec
index 35eb5587c8..51b52c0c44 100644
--- a/gRPC-RxLibrary.podspec
+++ b/gRPC-RxLibrary.podspec
@@ -36,7 +36,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC-RxLibrary'
- version = '1.2.0-dev'
+ version = '1.3.0-dev'
s.version = version
s.summary = 'Reactive Extensions library for iOS/OSX.'
s.homepage = 'http://www.grpc.io'
diff --git a/gRPC.podspec b/gRPC.podspec
index 6ba0c01d39..83a86803eb 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -35,7 +35,7 @@
Pod::Spec.new do |s|
s.name = 'gRPC'
- version = '1.2.0-dev'
+ version = '1.3.0-dev'
s.version = version
s.summary = 'gRPC client library for iOS/OSX'
s.homepage = 'http://www.grpc.io'
diff --git a/grpc.def b/grpc.def
index c660d361b1..30d60b0d06 100644
--- a/grpc.def
+++ b/grpc.def
@@ -258,6 +258,7 @@ EXPORTS
gpr_ref_non_zero
gpr_refn
gpr_unref
+ gpr_ref_is_unique
gpr_stats_init
gpr_stats_inc
gpr_stats_read
diff --git a/grpc.gemspec b/grpc.gemspec
index 8d5b7b2ab1..81e8733052 100755
--- a/grpc.gemspec
+++ b/grpc.gemspec
@@ -82,6 +82,7 @@ Gem::Specification.new do |s|
s.files += %w( include/grpc/impl/codegen/sync_posix.h )
s.files += %w( include/grpc/impl/codegen/sync_windows.h )
s.files += %w( src/core/lib/profiling/timers.h )
+ s.files += %w( src/core/lib/support/arena.h )
s.files += %w( src/core/lib/support/backoff.h )
s.files += %w( src/core/lib/support/block_annotate.h )
s.files += %w( src/core/lib/support/env.h )
@@ -97,6 +98,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/profiling/basic_timers.c )
s.files += %w( src/core/lib/profiling/stap_timers.c )
s.files += %w( src/core/lib/support/alloc.c )
+ s.files += %w( src/core/lib/support/arena.c )
s.files += %w( src/core/lib/support/avl.c )
s.files += %w( src/core/lib/support/backoff.c )
s.files += %w( src/core/lib/support/cmdline.c )
@@ -226,6 +228,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/tcp_client_posix.h )
s.files += %w( src/core/lib/iomgr/tcp_posix.h )
s.files += %w( src/core/lib/iomgr/tcp_server.h )
+ s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix.h )
s.files += %w( src/core/lib/iomgr/tcp_uv.h )
s.files += %w( src/core/lib/iomgr/tcp_windows.h )
s.files += %w( src/core/lib/iomgr/time_averaged_stats.h )
@@ -425,6 +428,9 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/iomgr/tcp_client_windows.c )
s.files += %w( src/core/lib/iomgr/tcp_posix.c )
s.files += %w( src/core/lib/iomgr/tcp_server_posix.c )
+ s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_common.c )
+ s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c )
+ s.files += %w( src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c )
s.files += %w( src/core/lib/iomgr/tcp_server_uv.c )
s.files += %w( src/core/lib/iomgr/tcp_server_windows.c )
s.files += %w( src/core/lib/iomgr/tcp_uv.c )
diff --git a/include/grpc++/impl/channel_argument_option.h b/include/grpc++/impl/channel_argument_option.h
new file mode 100644
index 0000000000..057acc2ceb
--- /dev/null
+++ b/include/grpc++/impl/channel_argument_option.h
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H
+#define GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H
+
+#include <map>
+#include <memory>
+
+#include <grpc++/impl/server_builder_option.h>
+#include <grpc++/support/channel_arguments.h>
+
+namespace grpc {
+
+std::unique_ptr<ServerBuilderOption> MakeChannelArgumentOption(
+ const grpc::string &name, const grpc::string &value);
+std::unique_ptr<ServerBuilderOption> MakeChannelArgumentOption(
+ const grpc::string &name, int value);
+
+} // namespace grpc
+
+#endif // GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H
diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h
index 2ac2f0a1ef..d707100a52 100644
--- a/include/grpc++/server_builder.h
+++ b/include/grpc++/server_builder.h
@@ -39,6 +39,7 @@
#include <memory>
#include <vector>
+#include <grpc++/impl/channel_argument_option.h>
#include <grpc++/impl/server_builder_option.h>
#include <grpc++/impl/server_builder_plugin.h>
#include <grpc++/support/config.h>
@@ -130,6 +131,13 @@ class ServerBuilder {
/// Only useful if this is a Synchronous server.
ServerBuilder& SetSyncServerOption(SyncServerOption option, int value);
+ /// Add a channel argument (an escape hatch to tuning core library parameters
+ /// directly)
+ template <class T>
+ ServerBuilder& AddChannelArgument(const grpc::string& arg, const T& value) {
+ return SetOption(MakeChannelArgumentOption(arg, value));
+ }
+
/// Tries to bind \a server to the given \a addr.
///
/// It can be invoked multiple times.
diff --git a/include/grpc++/support/channel_arguments.h b/include/grpc++/support/channel_arguments.h
index efdf7772ad..80a3bfda3d 100644
--- a/include/grpc++/support/channel_arguments.h
+++ b/include/grpc++/support/channel_arguments.h
@@ -54,7 +54,7 @@ class ResourceQuota;
class ChannelArguments {
public:
ChannelArguments();
- ~ChannelArguments() {}
+ ~ChannelArguments();
ChannelArguments(const ChannelArguments& other);
ChannelArguments& operator=(ChannelArguments other) {
diff --git a/include/grpc/impl/codegen/sync.h b/include/grpc/impl/codegen/sync.h
index 96aec0c2c0..6a8e8a644f 100644
--- a/include/grpc/impl/codegen/sync.h
+++ b/include/grpc/impl/codegen/sync.h
@@ -52,6 +52,10 @@
provides no memory barriers.
*/
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* Platform-specific type declarations of gpr_mu and gpr_cv. */
#include <grpc/impl/codegen/port_platform.h>
#include <grpc/impl/codegen/sync_generic.h>
@@ -64,4 +68,8 @@
#error Unable to determine platform for sync
#endif
+#ifdef __cplusplus
+}
+#endif
+
#endif /* GRPC_IMPL_CODEGEN_SYNC_H */
diff --git a/include/grpc/support/sync.h b/include/grpc/support/sync.h
index a7bbb38c27..5cfeecb601 100644
--- a/include/grpc/support/sync.h
+++ b/include/grpc/support/sync.h
@@ -164,6 +164,10 @@ GPRAPI void gpr_refn(gpr_refcount *r, int n);
zero. . Requires *r initialized. */
GPRAPI int gpr_unref(gpr_refcount *r);
+/* Return non-zero iff the reference count of *r is one, and thus is owned
+ by exactly one object. */
+GPRAPI int gpr_ref_is_unique(gpr_refcount *r);
+
/* --- Stats counters ---
These calls act on the integral type gpr_stats_counter. It requires no
diff --git a/package.json b/package.json
index d729f3d837..8c0854b1d2 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "grpc",
- "version": "1.2.0-dev",
+ "version": "1.3.0-dev",
"author": "Google Inc.",
"description": "gRPC Library for Node",
"homepage": "http://www.grpc.io/",
diff --git a/package.xml b/package.xml
index e16161d7a2..c66706cfde 100644
--- a/package.xml
+++ b/package.xml
@@ -13,8 +13,8 @@
<date>2017-03-01</date>
<time>16:06:07</time>
<version>
- <release>1.2.0dev</release>
- <api>1.2.0dev</api>
+ <release>1.3.0dev</release>
+ <api>1.3.0dev</api>
</version>
<stability>
<release>beta</release>
@@ -91,6 +91,7 @@
<file baseinstalldir="/" name="include/grpc/impl/codegen/sync_posix.h" role="src" />
<file baseinstalldir="/" name="include/grpc/impl/codegen/sync_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/profiling/timers.h" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/support/arena.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/backoff.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/block_annotate.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/env.h" role="src" />
@@ -106,6 +107,7 @@
<file baseinstalldir="/" name="src/core/lib/profiling/basic_timers.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/profiling/stap_timers.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/alloc.c" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/support/arena.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/avl.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/backoff.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/support/cmdline.c" role="src" />
@@ -235,6 +237,7 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server.h" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.h" role="src" />
@@ -434,6 +437,9 @@
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_posix.c" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_common.c" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c" role="src" />
+ <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_uv.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_windows.c" role="src" />
<file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.c" role="src" />
diff --git a/requirements.txt b/requirements.txt
index bf87de07f8..12969958ae 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,6 +3,6 @@ coverage>=4.0
cython>=0.23
enum34>=1.0.4
futures>=2.2.0
-protobuf>=3.0.0
+protobuf>=3.2.0
six>=1.10
wheel>=0.29
diff --git a/setup.py b/setup.py
index 06a32a38ea..4d71848bff 100644
--- a/setup.py
+++ b/setup.py
@@ -208,7 +208,7 @@ INSTALL_REQUIRES = (
'six>=1.5.2',
# TODO(atash): eventually split the grpcio package into a metapackage
# depending on protobuf and the runtime component (independent of protobuf)
- 'protobuf>=3.0.0',
+ 'protobuf>=3.2.0',
)
if not PY3:
diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc
index e481aaf811..2908b639f3 100644
--- a/src/compiler/cpp_generator.cc
+++ b/src/compiler/cpp_generator.cc
@@ -102,7 +102,7 @@ grpc::string GetHeaderPrologue(File *file, const Parameters & /*params*/) {
vars["filename_base"] = file->filename_without_ext();
vars["message_header_ext"] = file->message_header_ext();
- printer->Print(vars, "// Generated by the gRPC protobuf plugin.\n");
+ printer->Print(vars, "// Generated by the gRPC C++ plugin.\n");
printer->Print(vars,
"// If you make any local change, they will be lost.\n");
printer->Print(vars, "// source: $filename$\n");
@@ -1010,7 +1010,7 @@ grpc::string GetSourcePrologue(File *file, const Parameters & /*params*/) {
vars["message_header_ext"] = file->message_header_ext();
vars["service_header_ext"] = file->service_header_ext();
- printer->Print(vars, "// Generated by the gRPC protobuf plugin.\n");
+ printer->Print(vars, "// Generated by the gRPC C++ plugin.\n");
printer->Print(vars,
"// If you make any local change, they will be lost.\n");
printer->Print(vars, "// source: $filename$\n\n");
diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc
index 4841da8da8..242ce06a16 100644
--- a/src/compiler/python_generator.cc
+++ b/src/compiler/python_generator.cc
@@ -101,18 +101,20 @@ class IndentScope {
// TODO(https://github.com/google/protobuf/issues/888):
// Export `ModuleName` from protobuf's
// `src/google/protobuf/compiler/python/python_generator.cc` file.
-grpc::string ModuleName(const grpc::string& filename) {
+grpc::string ModuleName(const grpc::string& filename,
+ const grpc::string& import_prefix) {
grpc::string basename = StripProto(filename);
basename = StringReplace(basename, "-", "_");
basename = StringReplace(basename, "/", ".");
- return basename + "_pb2";
+ return import_prefix + basename + "_pb2";
}
// TODO(https://github.com/google/protobuf/issues/888):
// Export `ModuleAlias` from protobuf's
// `src/google/protobuf/compiler/python/python_generator.cc` file.
-grpc::string ModuleAlias(const grpc::string& filename) {
- grpc::string module_name = ModuleName(filename);
+grpc::string ModuleAlias(const grpc::string& filename,
+ const grpc::string& import_prefix) {
+ grpc::string module_name = ModuleName(filename, import_prefix);
// We can't have dots in the module name, so we replace each with _dot_.
// But that could lead to a collision between a.b and a_dot_b, so we also
// duplicate each underscore.
@@ -189,7 +191,7 @@ bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type,
grpc::string generator_file_name = file->name();
grpc::string module;
if (generator_file_name != file_name || generate_in_pb2_grpc) {
- module = ModuleAlias(file_name) + ".";
+ module = ModuleAlias(file_name, config.import_prefix) + ".";
} else {
module = "";
}
@@ -666,8 +668,10 @@ bool PrivateGenerator::PrintPreamble() {
for (int k = 0; k < 2; ++k) {
const Descriptor* type = types[k];
grpc::string type_file_name = type->file()->name();
- grpc::string module_name = ModuleName(type_file_name);
- grpc::string module_alias = ModuleAlias(type_file_name);
+ grpc::string module_name =
+ ModuleName(type_file_name, config.import_prefix);
+ grpc::string module_alias =
+ ModuleAlias(type_file_name, config.import_prefix);
imports_set.insert(std::make_tuple(module_name, module_alias));
}
}
@@ -766,7 +770,9 @@ pair<bool, grpc::string> PrivateGenerator::GetGrpcServices() {
} // namespace
GeneratorConfiguration::GeneratorConfiguration()
- : grpc_package_root("grpc"), beta_package_root("grpc.beta") {}
+ : grpc_package_root("grpc"),
+ beta_package_root("grpc.beta"),
+ import_prefix("") {}
PythonGrpcGenerator::PythonGrpcGenerator(const GeneratorConfiguration& config)
: config_(config) {}
diff --git a/src/compiler/python_generator.h b/src/compiler/python_generator.h
index 6a95255d40..b91059fad7 100644
--- a/src/compiler/python_generator.h
+++ b/src/compiler/python_generator.h
@@ -45,7 +45,10 @@ namespace grpc_python_generator {
struct GeneratorConfiguration {
GeneratorConfiguration();
grpc::string grpc_package_root;
+ // TODO(https://github.com/grpc/grpc/issues/8622): Drop this.
grpc::string beta_package_root;
+ // TODO(https://github.com/google/protobuf/issues/888): Drop this.
+ grpc::string import_prefix;
};
class PythonGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator {
diff --git a/src/core/ext/census/grpc_filter.c b/src/core/ext/census/grpc_filter.c
index b80d831557..fc29dbd454 100644
--- a/src/core/ext/census/grpc_filter.c
+++ b/src/core/ext/census/grpc_filter.c
@@ -138,7 +138,7 @@ static grpc_error *client_init_call_elem(grpc_exec_ctx *exec_ctx,
static void client_destroy_call_elem(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
call_data *d = elem->call_data;
GPR_ASSERT(d != NULL);
/* TODO(hongyu): record rpc client stats and census_rpc_end_op here */
@@ -160,7 +160,7 @@ static grpc_error *server_init_call_elem(grpc_exec_ctx *exec_ctx,
static void server_destroy_call_elem(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
call_data *d = elem->call_data;
GPR_ASSERT(d != NULL);
/* TODO(hongyu): record rpc server stats and census_tracing_end_op here */
diff --git a/src/core/ext/client_channel/client_channel.c b/src/core/ext/client_channel/client_channel.c
index bf64f84772..960d00e815 100644
--- a/src/core/ext/client_channel/client_channel.c
+++ b/src/core/ext/client_channel/client_channel.c
@@ -71,7 +71,8 @@
*/
typedef enum {
- WAIT_FOR_READY_UNSET,
+ /* zero so it can be default initialized */
+ WAIT_FOR_READY_UNSET = 0,
WAIT_FOR_READY_FALSE,
WAIT_FOR_READY_TRUE
} wait_for_ready_value;
@@ -631,7 +632,8 @@ static void cc_destroy_channel_elem(grpc_exec_ctx *exec_ctx,
#define CANCELLED_CALL ((grpc_subchannel_call *)1)
typedef enum {
- GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING,
+ /* zero so that it can be default-initialized */
+ GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING = 0,
GRPC_SUBCHANNEL_CALL_HOLDER_PICKING_SUBCHANNEL
} subchannel_creation_phase;
@@ -653,13 +655,13 @@ typedef struct client_channel_call_data {
gpr_timespec call_start_time;
gpr_timespec deadline;
method_parameters *method_params;
- grpc_closure read_service_config;
grpc_error *cancel_error;
/** either 0 for no call, 1 for cancelled, or a pointer to a
grpc_subchannel_call */
gpr_atm subchannel_call;
+ gpr_arena *arena;
subchannel_creation_phase creation_phase;
grpc_connected_subchannel *connected_subchannel;
@@ -726,6 +728,47 @@ static void retry_waiting_locked(grpc_exec_ctx *exec_ctx, call_data *calld) {
gpr_free(ops);
}
+// Sets calld->method_params.
+// If the method params specify a timeout, populates
+// *per_method_deadline and returns true.
+static bool set_call_method_params_from_service_config_locked(
+ grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
+ gpr_timespec *per_method_deadline) {
+ channel_data *chand = elem->channel_data;
+ call_data *calld = elem->call_data;
+ if (chand->method_params_table != NULL) {
+ calld->method_params = grpc_method_config_table_get(
+ exec_ctx, chand->method_params_table, calld->path);
+ if (calld->method_params != NULL) {
+ method_parameters_ref(calld->method_params);
+ if (gpr_time_cmp(calld->method_params->timeout,
+ gpr_time_0(GPR_TIMESPAN)) != 0) {
+ *per_method_deadline =
+ gpr_time_add(calld->call_start_time, calld->method_params->timeout);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+static void apply_final_configuration_locked(grpc_exec_ctx *exec_ctx,
+ grpc_call_element *elem) {
+ /* apply service-config level configuration to the call (now that we're
+ * certain it exists) */
+ call_data *calld = elem->call_data;
+ gpr_timespec per_method_deadline;
+ if (set_call_method_params_from_service_config_locked(exec_ctx, elem,
+ &per_method_deadline)) {
+ // If the deadline from the service config is shorter than the one
+ // from the client API, reset the deadline timer.
+ if (gpr_time_cmp(per_method_deadline, calld->deadline) < 0) {
+ calld->deadline = per_method_deadline;
+ grpc_deadline_state_reset(exec_ctx, elem, calld->deadline);
+ }
+ }
+}
+
static void subchannel_ready_locked(grpc_exec_ctx *exec_ctx, void *arg,
grpc_error *error) {
grpc_call_element *elem = arg;
@@ -754,9 +797,14 @@ static void subchannel_ready_locked(grpc_exec_ctx *exec_ctx, void *arg,
} else {
/* Create call on subchannel. */
grpc_subchannel_call *subchannel_call = NULL;
+ const grpc_connected_subchannel_call_args call_args = {
+ .pollent = calld->pollent,
+ .path = calld->path,
+ .start_time = calld->call_start_time,
+ .deadline = calld->deadline,
+ .arena = calld->arena};
grpc_error *new_error = grpc_connected_subchannel_create_call(
- exec_ctx, calld->connected_subchannel, calld->pollent, calld->path,
- calld->call_start_time, calld->deadline, &subchannel_call);
+ exec_ctx, calld->connected_subchannel, &call_args, &subchannel_call);
if (new_error != GRPC_ERROR_NONE) {
new_error = grpc_error_add_child(new_error, error);
subchannel_call = CANCELLED_CALL;
@@ -851,6 +899,7 @@ static bool pick_subchannel_locked(
}
GPR_ASSERT(error == GRPC_ERROR_NONE);
if (chand->lb_policy != NULL) {
+ apply_final_configuration_locked(exec_ctx, elem);
grpc_lb_policy *lb_policy = chand->lb_policy;
GRPC_LB_POLICY_REF(lb_policy, "pick_subchannel");
// If the application explicitly set wait_for_ready, use that.
@@ -982,9 +1031,14 @@ static void start_transport_stream_op_locked_inner(grpc_exec_ctx *exec_ctx,
if (calld->creation_phase == GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING &&
calld->connected_subchannel != NULL) {
grpc_subchannel_call *subchannel_call = NULL;
+ const grpc_connected_subchannel_call_args call_args = {
+ .pollent = calld->pollent,
+ .path = calld->path,
+ .start_time = calld->call_start_time,
+ .deadline = calld->deadline,
+ .arena = calld->arena};
grpc_error *error = grpc_connected_subchannel_create_call(
- exec_ctx, calld->connected_subchannel, calld->pollent, calld->path,
- calld->call_start_time, calld->deadline, &subchannel_call);
+ exec_ctx, calld->connected_subchannel, &call_args, &subchannel_call);
if (error != GRPC_ERROR_NONE) {
subchannel_call = CANCELLED_CALL;
fail_locked(exec_ctx, calld, GRPC_ERROR_REF(error));
@@ -1060,114 +1114,19 @@ static void cc_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
GPR_TIMER_END("cc_start_transport_stream_op", 0);
}
-// Sets calld->method_params.
-// If the method params specify a timeout, populates
-// *per_method_deadline and returns true.
-static bool set_call_method_params_from_service_config_locked(
- grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
- gpr_timespec *per_method_deadline) {
- channel_data *chand = elem->channel_data;
- call_data *calld = elem->call_data;
- if (chand->method_params_table != NULL) {
- calld->method_params = grpc_method_config_table_get(
- exec_ctx, chand->method_params_table, calld->path);
- if (calld->method_params != NULL) {
- method_parameters_ref(calld->method_params);
- if (gpr_time_cmp(calld->method_params->timeout,
- gpr_time_0(GPR_TIMESPAN)) != 0) {
- *per_method_deadline =
- gpr_time_add(calld->call_start_time, calld->method_params->timeout);
- return true;
- }
- }
- }
- return false;
-}
-
-// Gets data from the service config. Invoked when the resolver returns
-// its initial result.
-static void read_service_config_locked(grpc_exec_ctx *exec_ctx, void *arg,
- grpc_error *error) {
- grpc_call_element *elem = arg;
- call_data *calld = elem->call_data;
- // If this is an error, there's no point in looking at the service config.
- if (error == GRPC_ERROR_NONE) {
- gpr_timespec per_method_deadline;
- if (set_call_method_params_from_service_config_locked(
- exec_ctx, elem, &per_method_deadline)) {
- // If the deadline from the service config is shorter than the one
- // from the client API, reset the deadline timer.
- if (gpr_time_cmp(per_method_deadline, calld->deadline) < 0) {
- calld->deadline = per_method_deadline;
- grpc_deadline_state_reset(exec_ctx, elem, calld->deadline);
- }
- }
- }
- GRPC_CALL_STACK_UNREF(exec_ctx, calld->owning_call, "read_service_config");
-}
-
-static void initial_read_service_config_locked(grpc_exec_ctx *exec_ctx,
- void *arg,
- grpc_error *error_ignored) {
- grpc_call_element *elem = arg;
- channel_data *chand = elem->channel_data;
- call_data *calld = elem->call_data;
- // If the resolver has already returned results, then we can access
- // the service config parameters immediately. Otherwise, we need to
- // defer that work until the resolver returns an initial result.
- if (chand->lb_policy != NULL) {
- // We already have a resolver result, so check for service config.
- gpr_timespec per_method_deadline;
- if (set_call_method_params_from_service_config_locked(
- exec_ctx, elem, &per_method_deadline)) {
- calld->deadline = gpr_time_min(calld->deadline, per_method_deadline);
- }
- } else {
- // We don't yet have a resolver result, so register a callback to
- // get the service config data once the resolver returns.
- // Take a reference to the call stack to be owned by the callback.
- GRPC_CALL_STACK_REF(calld->owning_call, "read_service_config");
- grpc_closure_init(&calld->read_service_config, read_service_config_locked,
- elem, grpc_combiner_scheduler(chand->combiner, false));
- grpc_closure_list_append(&chand->waiting_for_config_closures,
- &calld->read_service_config, GRPC_ERROR_NONE);
- }
- // Start the deadline timer with the current deadline value. If we
- // do not yet have service config data, then the timer may be reset
- // later.
- grpc_deadline_state_start(exec_ctx, elem, calld->deadline);
- GRPC_CALL_STACK_UNREF(exec_ctx, calld->owning_call,
- "initial_read_service_config");
-}
-
/* Constructor for call_data */
static grpc_error *cc_init_call_elem(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem,
const grpc_call_element_args *args) {
- channel_data *chand = elem->channel_data;
call_data *calld = elem->call_data;
// Initialize data members.
grpc_deadline_state_init(exec_ctx, elem, args->call_stack);
calld->path = grpc_slice_ref_internal(args->path);
calld->call_start_time = args->start_time;
calld->deadline = gpr_convert_clock_type(args->deadline, GPR_CLOCK_MONOTONIC);
- calld->method_params = NULL;
- calld->cancel_error = GRPC_ERROR_NONE;
- gpr_atm_rel_store(&calld->subchannel_call, 0);
- calld->connected_subchannel = NULL;
- calld->waiting_ops = NULL;
- calld->waiting_ops_count = 0;
- calld->waiting_ops_capacity = 0;
- calld->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING;
calld->owning_call = args->call_stack;
- calld->pollent = NULL;
- GRPC_CALL_STACK_REF(calld->owning_call, "initial_read_service_config");
- grpc_closure_sched(
- exec_ctx,
- grpc_closure_init(&calld->read_service_config,
- initial_read_service_config_locked, elem,
- grpc_combiner_scheduler(chand->combiner, false)),
- GRPC_ERROR_NONE);
+ calld->arena = args->arena;
+ grpc_deadline_state_start(exec_ctx, elem, calld->deadline);
return GRPC_ERROR_NONE;
}
@@ -1175,7 +1134,7 @@ static grpc_error *cc_init_call_elem(grpc_exec_ctx *exec_ctx,
static void cc_destroy_call_elem(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {
+ grpc_closure *then_schedule_closure) {
call_data *calld = elem->call_data;
grpc_deadline_state_destroy(exec_ctx, elem);
grpc_slice_unref_internal(exec_ctx, calld->path);
@@ -1185,6 +1144,8 @@ static void cc_destroy_call_elem(grpc_exec_ctx *exec_ctx,
GRPC_ERROR_UNREF(calld->cancel_error);
grpc_subchannel_call *call = GET_CALL(calld);
if (call != NULL && call != CANCELLED_CALL) {
+ grpc_subchannel_call_set_cleanup_closure(call, then_schedule_closure);
+ then_schedule_closure = NULL;
GRPC_SUBCHANNEL_CALL_UNREF(exec_ctx, call, "client_channel_destroy_call");
}
GPR_ASSERT(calld->creation_phase == GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING);
@@ -1194,7 +1155,7 @@ static void cc_destroy_call_elem(grpc_exec_ctx *exec_ctx,
"picked");
}
gpr_free(calld->waiting_ops);
- gpr_free(and_free_memory);
+ grpc_closure_sched(exec_ctx, then_schedule_closure, GRPC_ERROR_NONE);
}
static void cc_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/ext/client_channel/client_channel_plugin.c b/src/core/ext/client_channel/client_channel_plugin.c
index 6f9df3e386..28d3b63f99 100644
--- a/src/core/ext/client_channel/client_channel_plugin.c
+++ b/src/core/ext/client_channel/client_channel_plugin.c
@@ -64,7 +64,7 @@ static bool set_default_host_if_unset(grpc_exec_ctx *exec_ctx,
}
}
char *default_authority = grpc_get_default_authority(
- grpc_channel_stack_builder_get_target(builder));
+ exec_ctx, grpc_channel_stack_builder_get_target(builder));
if (default_authority != NULL) {
grpc_arg arg;
arg.type = GRPC_ARG_STRING;
diff --git a/src/core/ext/client_channel/http_proxy.c b/src/core/ext/client_channel/http_proxy.c
index bbe4ff550c..e280cef101 100644
--- a/src/core/ext/client_channel/http_proxy.c
+++ b/src/core/ext/client_channel/http_proxy.c
@@ -46,10 +46,11 @@
#include "src/core/lib/channel/channel_args.h"
#include "src/core/lib/support/env.h"
-static char* grpc_get_http_proxy_server() {
+static char* grpc_get_http_proxy_server(grpc_exec_ctx* exec_ctx) {
char* uri_str = gpr_getenv("http_proxy");
if (uri_str == NULL) return NULL;
- grpc_uri* uri = grpc_uri_parse(uri_str, false /* suppress_errors */);
+ grpc_uri* uri =
+ grpc_uri_parse(exec_ctx, uri_str, false /* suppress_errors */);
char* proxy_name = NULL;
if (uri == NULL || uri->authority == NULL) {
gpr_log(GPR_ERROR, "cannot parse value of 'http_proxy' env var");
@@ -76,9 +77,10 @@ static bool proxy_mapper_map_name(grpc_exec_ctx* exec_ctx,
const grpc_channel_args* args,
char** name_to_resolve,
grpc_channel_args** new_args) {
- *name_to_resolve = grpc_get_http_proxy_server();
+ *name_to_resolve = grpc_get_http_proxy_server(exec_ctx);
if (*name_to_resolve == NULL) return false;
- grpc_uri* uri = grpc_uri_parse(server_uri, false /* suppress_errors */);
+ grpc_uri* uri =
+ grpc_uri_parse(exec_ctx, server_uri, false /* suppress_errors */);
if (uri == NULL || uri->path[0] == '\0') {
gpr_log(GPR_ERROR,
"'http_proxy' environment variable set, but cannot "
diff --git a/src/core/ext/client_channel/parse_address.c b/src/core/ext/client_channel/parse_address.c
index 8e4da03de0..cd1b2cd80c 100644
--- a/src/core/ext/client_channel/parse_address.c
+++ b/src/core/ext/client_channel/parse_address.c
@@ -44,6 +44,7 @@
#include <grpc/support/host_port.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
+#include "src/core/lib/support/string.h"
#ifdef GRPC_HAVE_UNIX_SOCKET
@@ -120,9 +121,33 @@ int parse_ipv6(grpc_uri *uri, grpc_resolved_address *resolved_addr) {
memset(in6, 0, sizeof(*in6));
resolved_addr->len = sizeof(*in6);
in6->sin6_family = AF_INET6;
- if (inet_pton(AF_INET6, host, &in6->sin6_addr) == 0) {
- gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host);
- goto done;
+
+ /* Handle the RFC6874 syntax for IPv6 zone identifiers. */
+ char *host_end = (char *)gpr_memrchr(host, '%', strlen(host));
+ if (host_end != NULL) {
+ GPR_ASSERT(host_end >= host);
+ char host_without_scope[INET6_ADDRSTRLEN];
+ size_t host_without_scope_len = (size_t)(host_end - host);
+ uint32_t sin6_scope_id = 0;
+ strncpy(host_without_scope, host, host_without_scope_len);
+ host_without_scope[host_without_scope_len] = '\0';
+ if (inet_pton(AF_INET6, host_without_scope, &in6->sin6_addr) == 0) {
+ gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host_without_scope);
+ goto done;
+ }
+ if (gpr_parse_bytes_to_uint32(host_end + 1,
+ strlen(host) - host_without_scope_len - 1,
+ &sin6_scope_id) == 0) {
+ gpr_log(GPR_ERROR, "invalid ipv6 scope id: '%s'", host_end + 1);
+ goto done;
+ }
+ // Handle "sin6_scope_id" being type "u_long". See grpc issue ##10027.
+ in6->sin6_scope_id = sin6_scope_id;
+ } else {
+ if (inet_pton(AF_INET6, host, &in6->sin6_addr) == 0) {
+ gpr_log(GPR_ERROR, "invalid ipv6 address: '%s'", host);
+ goto done;
+ }
}
if (port != NULL) {
diff --git a/src/core/ext/client_channel/proxy_mapper_registry.c b/src/core/ext/client_channel/proxy_mapper_registry.c
index 2c44b9d490..0935ddbdbd 100644
--- a/src/core/ext/client_channel/proxy_mapper_registry.c
+++ b/src/core/ext/client_channel/proxy_mapper_registry.c
@@ -94,6 +94,14 @@ static void grpc_proxy_mapper_list_destroy(grpc_proxy_mapper_list* list) {
grpc_proxy_mapper_destroy(list->list[i]);
}
gpr_free(list->list);
+ // Clean up in case we re-initialze later.
+ // TODO(ctiller): This should ideally live in
+ // grpc_proxy_mapper_registry_init(). However, if we did this there,
+ // then we would do it AFTER we start registering proxy mappers from
+ // third-party plugins, so they'd never show up (and would leak memory).
+ // We probably need some sort of dependency system for plugins to fix
+ // this.
+ memset(list, 0, sizeof(*list));
}
//
@@ -102,9 +110,7 @@ static void grpc_proxy_mapper_list_destroy(grpc_proxy_mapper_list* list) {
static grpc_proxy_mapper_list g_proxy_mapper_list;
-void grpc_proxy_mapper_registry_init() {
- memset(&g_proxy_mapper_list, 0, sizeof(g_proxy_mapper_list));
-}
+void grpc_proxy_mapper_registry_init() {}
void grpc_proxy_mapper_registry_shutdown() {
grpc_proxy_mapper_list_destroy(&g_proxy_mapper_list);
diff --git a/src/core/ext/client_channel/resolver_registry.c b/src/core/ext/client_channel/resolver_registry.c
index f8e8bc9c39..3c5a6fb3ff 100644
--- a/src/core/ext/client_channel/resolver_registry.c
+++ b/src/core/ext/client_channel/resolver_registry.c
@@ -108,22 +108,23 @@ static grpc_resolver_factory *lookup_factory_by_uri(grpc_uri *uri) {
return lookup_factory(uri->scheme);
}
-static grpc_resolver_factory *resolve_factory(const char *target,
+static grpc_resolver_factory *resolve_factory(grpc_exec_ctx *exec_ctx,
+ const char *target,
grpc_uri **uri,
char **canonical_target) {
grpc_resolver_factory *factory = NULL;
GPR_ASSERT(uri != NULL);
- *uri = grpc_uri_parse(target, 1);
+ *uri = grpc_uri_parse(exec_ctx, target, 1);
factory = lookup_factory_by_uri(*uri);
if (factory == NULL) {
grpc_uri_destroy(*uri);
gpr_asprintf(canonical_target, "%s%s", g_default_resolver_prefix, target);
- *uri = grpc_uri_parse(*canonical_target, 1);
+ *uri = grpc_uri_parse(exec_ctx, *canonical_target, 1);
factory = lookup_factory_by_uri(*uri);
if (factory == NULL) {
- grpc_uri_destroy(grpc_uri_parse(target, 0));
- grpc_uri_destroy(grpc_uri_parse(*canonical_target, 0));
+ grpc_uri_destroy(grpc_uri_parse(exec_ctx, target, 0));
+ grpc_uri_destroy(grpc_uri_parse(exec_ctx, *canonical_target, 0));
gpr_log(GPR_ERROR, "don't know how to resolve '%s' or '%s'", target,
*canonical_target);
}
@@ -138,7 +139,7 @@ grpc_resolver *grpc_resolver_create(grpc_exec_ctx *exec_ctx, const char *target,
grpc_uri *uri = NULL;
char *canonical_target = NULL;
grpc_resolver_factory *factory =
- resolve_factory(target, &uri, &canonical_target);
+ resolve_factory(exec_ctx, target, &uri, &canonical_target);
grpc_resolver *resolver;
grpc_resolver_args resolver_args;
memset(&resolver_args, 0, sizeof(resolver_args));
@@ -153,21 +154,22 @@ grpc_resolver *grpc_resolver_create(grpc_exec_ctx *exec_ctx, const char *target,
return resolver;
}
-char *grpc_get_default_authority(const char *target) {
+char *grpc_get_default_authority(grpc_exec_ctx *exec_ctx, const char *target) {
grpc_uri *uri = NULL;
char *canonical_target = NULL;
grpc_resolver_factory *factory =
- resolve_factory(target, &uri, &canonical_target);
+ resolve_factory(exec_ctx, target, &uri, &canonical_target);
char *authority = grpc_resolver_factory_get_default_authority(factory, uri);
grpc_uri_destroy(uri);
gpr_free(canonical_target);
return authority;
}
-char *grpc_resolver_factory_add_default_prefix_if_needed(const char *target) {
+char *grpc_resolver_factory_add_default_prefix_if_needed(
+ grpc_exec_ctx *exec_ctx, const char *target) {
grpc_uri *uri = NULL;
char *canonical_target = NULL;
- resolve_factory(target, &uri, &canonical_target);
+ resolve_factory(exec_ctx, target, &uri, &canonical_target);
grpc_uri_destroy(uri);
return canonical_target == NULL ? gpr_strdup(target) : canonical_target;
}
diff --git a/src/core/ext/client_channel/resolver_registry.h b/src/core/ext/client_channel/resolver_registry.h
index e2c189cf0c..1a3ebee25a 100644
--- a/src/core/ext/client_channel/resolver_registry.h
+++ b/src/core/ext/client_channel/resolver_registry.h
@@ -74,10 +74,11 @@ grpc_resolver_factory *grpc_resolver_factory_lookup(const char *name);
/** Given a target, return a (freshly allocated with gpr_malloc) string
representing the default authority to pass from a client. */
-char *grpc_get_default_authority(const char *target);
+char *grpc_get_default_authority(grpc_exec_ctx *exec_ctx, const char *target);
/** Returns a newly allocated string containing \a target, adding the
default prefix if needed. */
-char *grpc_resolver_factory_add_default_prefix_if_needed(const char *target);
+char *grpc_resolver_factory_add_default_prefix_if_needed(
+ grpc_exec_ctx *exec_ctx, const char *target);
#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RESOLVER_REGISTRY_H */
diff --git a/src/core/ext/client_channel/subchannel.c b/src/core/ext/client_channel/subchannel.c
index cb2d2c821d..ed5029ea9a 100644
--- a/src/core/ext/client_channel/subchannel.c
+++ b/src/core/ext/client_channel/subchannel.c
@@ -148,6 +148,7 @@ struct grpc_subchannel {
struct grpc_subchannel_call {
grpc_connected_subchannel *connection;
+ grpc_closure *schedule_closure_after_destroy;
};
#define SUBCHANNEL_CALL_TO_CALL_STACK(call) ((grpc_call_stack *)((call) + 1))
@@ -331,7 +332,7 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
}
c->pollset_set = grpc_pollset_set_create();
grpc_resolved_address *addr = gpr_malloc(sizeof(*addr));
- grpc_get_subchannel_address_arg(args->args, addr);
+ grpc_get_subchannel_address_arg(exec_ctx, args->args, addr);
grpc_set_initial_connect_string(&addr, &c->initial_connect_string);
grpc_resolved_address *new_address = NULL;
grpc_channel_args *new_args = NULL;
@@ -340,17 +341,15 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
GPR_ASSERT(new_address != NULL);
gpr_free(addr);
addr = new_address;
- if (new_args != NULL) c->args = new_args;
- }
- if (c->args == NULL) {
- static const char *keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS};
- grpc_arg new_arg = grpc_create_subchannel_address_arg(addr);
- c->args = grpc_channel_args_copy_and_add_and_remove(
- args->args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), &new_arg,
- 1);
- gpr_free(new_arg.value.string);
}
+ static const char *keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS};
+ grpc_arg new_arg = grpc_create_subchannel_address_arg(addr);
gpr_free(addr);
+ c->args = grpc_channel_args_copy_and_add_and_remove(
+ new_args != NULL ? new_args : args->args, keys_to_remove,
+ GPR_ARRAY_SIZE(keys_to_remove), &new_arg, 1);
+ gpr_free(new_arg.value.string);
+ if (new_args != NULL) grpc_channel_args_destroy(exec_ctx, new_args);
c->root_external_state_watcher.next = c->root_external_state_watcher.prev =
&c->root_external_state_watcher;
grpc_closure_init(&c->connected, subchannel_connected, c,
@@ -719,13 +718,22 @@ static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg,
static void subchannel_call_destroy(grpc_exec_ctx *exec_ctx, void *call,
grpc_error *error) {
grpc_subchannel_call *c = call;
+ GPR_ASSERT(c->schedule_closure_after_destroy != NULL);
GPR_TIMER_BEGIN("grpc_subchannel_call_unref.destroy", 0);
grpc_connected_subchannel *connection = c->connection;
- grpc_call_stack_destroy(exec_ctx, SUBCHANNEL_CALL_TO_CALL_STACK(c), NULL, c);
+ grpc_call_stack_destroy(exec_ctx, SUBCHANNEL_CALL_TO_CALL_STACK(c), NULL,
+ c->schedule_closure_after_destroy);
GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, connection, "subchannel_call");
GPR_TIMER_END("grpc_subchannel_call_unref.destroy", 0);
}
+void grpc_subchannel_call_set_cleanup_closure(grpc_subchannel_call *call,
+ grpc_closure *closure) {
+ GPR_ASSERT(call->schedule_closure_after_destroy == NULL);
+ GPR_ASSERT(closure != NULL);
+ call->schedule_closure_after_destroy = closure;
+}
+
void grpc_subchannel_call_ref(
grpc_subchannel_call *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
GRPC_CALL_STACK_REF(SUBCHANNEL_CALL_TO_CALL_STACK(c), REF_REASON);
@@ -761,15 +769,22 @@ grpc_connected_subchannel *grpc_subchannel_get_connected_subchannel(
grpc_error *grpc_connected_subchannel_create_call(
grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *con,
- grpc_polling_entity *pollent, grpc_slice path, gpr_timespec start_time,
- gpr_timespec deadline, grpc_subchannel_call **call) {
+ const grpc_connected_subchannel_call_args *args,
+ grpc_subchannel_call **call) {
grpc_channel_stack *chanstk = CHANNEL_STACK_FROM_CONNECTION(con);
- *call = gpr_zalloc(sizeof(grpc_subchannel_call) + chanstk->call_stack_size);
+ *call = gpr_arena_alloc(
+ args->arena, sizeof(grpc_subchannel_call) + chanstk->call_stack_size);
grpc_call_stack *callstk = SUBCHANNEL_CALL_TO_CALL_STACK(*call);
(*call)->connection = con; // Ref is added below.
- grpc_error *error =
- grpc_call_stack_init(exec_ctx, chanstk, 1, subchannel_call_destroy, *call,
- NULL, NULL, path, start_time, deadline, callstk);
+ const grpc_call_element_args call_args = {.call_stack = callstk,
+ .server_transport_data = NULL,
+ .context = NULL,
+ .path = args->path,
+ .start_time = args->start_time,
+ .deadline = args->deadline,
+ .arena = args->arena};
+ grpc_error *error = grpc_call_stack_init(
+ exec_ctx, chanstk, 1, subchannel_call_destroy, *call, &call_args);
if (error != GRPC_ERROR_NONE) {
const char *error_string = grpc_error_string(error);
gpr_log(GPR_ERROR, "error: %s", error_string);
@@ -778,7 +793,7 @@ grpc_error *grpc_connected_subchannel_create_call(
return error;
}
GRPC_CONNECTED_SUBCHANNEL_REF(con, "subchannel_call");
- grpc_call_stack_set_pollset_or_pollset_set(exec_ctx, callstk, pollent);
+ grpc_call_stack_set_pollset_or_pollset_set(exec_ctx, callstk, args->pollent);
return GRPC_ERROR_NONE;
}
@@ -787,9 +802,9 @@ grpc_call_stack *grpc_subchannel_call_get_call_stack(
return SUBCHANNEL_CALL_TO_CALL_STACK(subchannel_call);
}
-static void grpc_uri_to_sockaddr(const char *uri_str,
+static void grpc_uri_to_sockaddr(grpc_exec_ctx *exec_ctx, const char *uri_str,
grpc_resolved_address *addr) {
- grpc_uri *uri = grpc_uri_parse(uri_str, 0 /* suppress_errors */);
+ grpc_uri *uri = grpc_uri_parse(exec_ctx, uri_str, 0 /* suppress_errors */);
GPR_ASSERT(uri != NULL);
if (strcmp(uri->scheme, "ipv4") == 0) {
GPR_ASSERT(parse_ipv4(uri, addr));
@@ -801,12 +816,13 @@ static void grpc_uri_to_sockaddr(const char *uri_str,
grpc_uri_destroy(uri);
}
-void grpc_get_subchannel_address_arg(const grpc_channel_args *args,
+void grpc_get_subchannel_address_arg(grpc_exec_ctx *exec_ctx,
+ const grpc_channel_args *args,
grpc_resolved_address *addr) {
const char *addr_uri_str = grpc_get_subchannel_address_uri_arg(args);
memset(addr, 0, sizeof(*addr));
if (*addr_uri_str != '\0') {
- grpc_uri_to_sockaddr(addr_uri_str, addr);
+ grpc_uri_to_sockaddr(exec_ctx, addr_uri_str, addr);
}
}
diff --git a/src/core/ext/client_channel/subchannel.h b/src/core/ext/client_channel/subchannel.h
index 26ce954487..3e64a2507c 100644
--- a/src/core/ext/client_channel/subchannel.h
+++ b/src/core/ext/client_channel/subchannel.h
@@ -37,6 +37,7 @@
#include "src/core/ext/client_channel/connector.h"
#include "src/core/lib/channel/channel_stack.h"
#include "src/core/lib/iomgr/polling_entity.h"
+#include "src/core/lib/support/arena.h"
#include "src/core/lib/transport/connectivity_state.h"
#include "src/core/lib/transport/metadata.h"
@@ -112,10 +113,18 @@ void grpc_subchannel_call_unref(grpc_exec_ctx *exec_ctx,
GRPC_SUBCHANNEL_REF_EXTRA_ARGS);
/** construct a subchannel call */
+typedef struct {
+ grpc_polling_entity *pollent;
+ grpc_slice path;
+ gpr_timespec start_time;
+ gpr_timespec deadline;
+ gpr_arena *arena;
+} grpc_connected_subchannel_call_args;
+
grpc_error *grpc_connected_subchannel_create_call(
grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *connected_subchannel,
- grpc_polling_entity *pollent, grpc_slice path, gpr_timespec start_time,
- gpr_timespec deadline, grpc_subchannel_call **subchannel_call);
+ const grpc_connected_subchannel_call_args *args,
+ grpc_subchannel_call **subchannel_call);
/** process a transport level op */
void grpc_connected_subchannel_process_transport_op(
@@ -154,6 +163,11 @@ void grpc_subchannel_call_process_op(grpc_exec_ctx *exec_ctx,
char *grpc_subchannel_call_get_peer(grpc_exec_ctx *exec_ctx,
grpc_subchannel_call *subchannel_call);
+/** Must be called once per call. Sets the 'then_schedule_closure' argument for
+ call stack destruction. */
+void grpc_subchannel_call_set_cleanup_closure(
+ grpc_subchannel_call *subchannel_call, grpc_closure *closure);
+
grpc_call_stack *grpc_subchannel_call_get_call_stack(
grpc_subchannel_call *subchannel_call);
@@ -175,7 +189,8 @@ grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
const grpc_subchannel_args *args);
/// Sets \a addr from \a args.
-void grpc_get_subchannel_address_arg(const grpc_channel_args *args,
+void grpc_get_subchannel_address_arg(grpc_exec_ctx *exec_ctx,
+ const grpc_channel_args *args,
grpc_resolved_address *addr);
/// Returns the URI string for the address to connect to.
diff --git a/src/core/ext/client_channel/uri_parser.c b/src/core/ext/client_channel/uri_parser.c
index 7dd7b753cc..d385db0801 100644
--- a/src/core/ext/client_channel/uri_parser.c
+++ b/src/core/ext/client_channel/uri_parser.c
@@ -35,13 +35,15 @@
#include <string.h>
-#include <grpc/slice.h>
#include <grpc/slice_buffer.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/port_platform.h>
#include <grpc/support/string_util.h>
+#include "src/core/lib/slice/percent_encoding.h"
+#include "src/core/lib/slice/slice_internal.h"
+#include "src/core/lib/slice/slice_string_helpers.h"
#include "src/core/lib/support/string.h"
/** a size_t default value... maps to all 1's */
@@ -68,11 +70,16 @@ static grpc_uri *bad_uri(const char *uri_text, size_t pos, const char *section,
return NULL;
}
-/** Returns a copy of \a src[begin, end) */
-static char *copy_component(const char *src, size_t begin, size_t end) {
- char *out = gpr_malloc(end - begin + 1);
- memcpy(out, src + begin, end - begin);
- out[end - begin] = 0;
+/** Returns a copy of percent decoded \a src[begin, end) */
+static char *decode_and_copy_component(grpc_exec_ctx *exec_ctx, const char *src,
+ size_t begin, size_t end) {
+ grpc_slice component =
+ grpc_slice_from_copied_buffer(src + begin, end - begin);
+ grpc_slice decoded_component =
+ grpc_permissive_percent_decode_slice(component);
+ char *out = grpc_dump_slice(decoded_component, GPR_DUMP_ASCII);
+ grpc_slice_unref_internal(exec_ctx, component);
+ grpc_slice_unref_internal(exec_ctx, decoded_component);
return out;
}
@@ -175,7 +182,8 @@ static void parse_query_parts(grpc_uri *uri) {
}
}
-grpc_uri *grpc_uri_parse(const char *uri_text, int suppress_errors) {
+grpc_uri *grpc_uri_parse(grpc_exec_ctx *exec_ctx, const char *uri_text,
+ int suppress_errors) {
grpc_uri *uri;
size_t scheme_begin = 0;
size_t scheme_end = NOT_SET;
@@ -263,11 +271,16 @@ grpc_uri *grpc_uri_parse(const char *uri_text, int suppress_errors) {
}
uri = gpr_zalloc(sizeof(*uri));
- uri->scheme = copy_component(uri_text, scheme_begin, scheme_end);
- uri->authority = copy_component(uri_text, authority_begin, authority_end);
- uri->path = copy_component(uri_text, path_begin, path_end);
- uri->query = copy_component(uri_text, query_begin, query_end);
- uri->fragment = copy_component(uri_text, fragment_begin, fragment_end);
+ uri->scheme =
+ decode_and_copy_component(exec_ctx, uri_text, scheme_begin, scheme_end);
+ uri->authority = decode_and_copy_component(exec_ctx, uri_text,
+ authority_begin, authority_end);
+ uri->path =
+ decode_and_copy_component(exec_ctx, uri_text, path_begin, path_end);
+ uri->query =
+ decode_and_copy_component(exec_ctx, uri_text, query_begin, query_end);
+ uri->fragment = decode_and_copy_component(exec_ctx, uri_text, fragment_begin,
+ fragment_end);
parse_query_parts(uri);
return uri;
diff --git a/src/core/ext/client_channel/uri_parser.h b/src/core/ext/client_channel/uri_parser.h
index 5fe0e8f35e..efd4302c1c 100644
--- a/src/core/ext/client_channel/uri_parser.h
+++ b/src/core/ext/client_channel/uri_parser.h
@@ -35,6 +35,7 @@
#define GRPC_CORE_EXT_CLIENT_CHANNEL_URI_PARSER_H
#include <stddef.h>
+#include "src/core/lib/iomgr/exec_ctx.h"
typedef struct {
char *scheme;
@@ -51,7 +52,8 @@ typedef struct {
} grpc_uri;
/** parse a uri, return NULL on failure */
-grpc_uri *grpc_uri_parse(const char *uri_text, int suppress_errors);
+grpc_uri *grpc_uri_parse(grpc_exec_ctx *exec_ctx, const char *uri_text,
+ int suppress_errors);
/** return the part of a query string after the '=' in "?key=xxx&...", or NULL
* if key is not present */
diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c
index aea0fcc33d..d612591f2e 100644
--- a/src/core/ext/lb_policy/grpclb/grpclb.c
+++ b/src/core/ext/lb_policy/grpclb/grpclb.c
@@ -861,7 +861,7 @@ static grpc_lb_policy *glb_create(grpc_exec_ctx *exec_ctx,
arg = grpc_channel_args_find(args->args, GRPC_ARG_SERVER_URI);
GPR_ASSERT(arg != NULL);
GPR_ASSERT(arg->type == GRPC_ARG_STRING);
- grpc_uri *uri = grpc_uri_parse(arg->value.string, true);
+ grpc_uri *uri = grpc_uri_parse(exec_ctx, arg->value.string, true);
GPR_ASSERT(uri->path[0] != '\0');
glb_policy->server_name =
gpr_strdup(uri->path[0] == '/' ? uri->path + 1 : uri->path);
diff --git a/src/core/ext/load_reporting/load_reporting_filter.c b/src/core/ext/load_reporting/load_reporting_filter.c
index c2750634a5..4ed832671d 100644
--- a/src/core/ext/load_reporting/load_reporting_filter.c
+++ b/src/core/ext/load_reporting/load_reporting_filter.c
@@ -123,7 +123,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
/* Destructor for call_data */
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
call_data *calld = elem->call_data;
/* TODO(dgq): do something with the data
diff --git a/src/core/ext/transport/chttp2/client/chttp2_connector.c b/src/core/ext/transport/chttp2/client/chttp2_connector.c
index fc5e17d8fc..eae0145ecc 100644
--- a/src/core/ext/transport/chttp2/client/chttp2_connector.c
+++ b/src/core/ext/transport/chttp2/client/chttp2_connector.c
@@ -226,7 +226,7 @@ static void chttp2_connector_connect(grpc_exec_ctx *exec_ctx,
grpc_closure *notify) {
chttp2_connector *c = (chttp2_connector *)con;
grpc_resolved_address addr;
- grpc_get_subchannel_address_arg(args->channel_args, &addr);
+ grpc_get_subchannel_address_arg(exec_ctx, args->channel_args, &addr);
gpr_mu_lock(&c->mu);
GPR_ASSERT(c->notify == NULL);
c->notify = notify;
diff --git a/src/core/ext/transport/chttp2/client/insecure/channel_create.c b/src/core/ext/transport/chttp2/client/insecure/channel_create.c
index 286232f277..067ac35a5a 100644
--- a/src/core/ext/transport/chttp2/client/insecure/channel_create.c
+++ b/src/core/ext/transport/chttp2/client/insecure/channel_create.c
@@ -72,7 +72,8 @@ static grpc_channel *client_channel_factory_create_channel(
grpc_arg arg;
arg.type = GRPC_ARG_STRING;
arg.key = GRPC_ARG_SERVER_URI;
- arg.value.string = grpc_resolver_factory_add_default_prefix_if_needed(target);
+ arg.value.string =
+ grpc_resolver_factory_add_default_prefix_if_needed(exec_ctx, target);
const char *to_remove[] = {GRPC_ARG_SERVER_URI};
grpc_channel_args *new_args =
grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
diff --git a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
index 825db68c65..f0c241d68e 100644
--- a/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
+++ b/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c
@@ -83,7 +83,7 @@ static grpc_subchannel_args *get_secure_naming_subchannel_args(
const char *server_uri_str = server_uri_arg->value.string;
GPR_ASSERT(server_uri_str != NULL);
grpc_uri *server_uri =
- grpc_uri_parse(server_uri_str, true /* supress errors */);
+ grpc_uri_parse(exec_ctx, server_uri_str, true /* supress errors */);
GPR_ASSERT(server_uri != NULL);
const char *server_uri_path;
server_uri_path =
@@ -96,7 +96,7 @@ static grpc_subchannel_args *get_secure_naming_subchannel_args(
const char *target_uri_str =
grpc_get_subchannel_address_uri_arg(args->args);
grpc_uri *target_uri =
- grpc_uri_parse(target_uri_str, false /* suppress errors */);
+ grpc_uri_parse(exec_ctx, target_uri_str, false /* suppress errors */);
GPR_ASSERT(target_uri != NULL);
if (target_uri->path[0] != '\0') { // "path" may be empty
const grpc_slice key = grpc_slice_from_static_string(
@@ -181,7 +181,8 @@ static grpc_channel *client_channel_factory_create_channel(
grpc_arg arg;
arg.type = GRPC_ARG_STRING;
arg.key = GRPC_ARG_SERVER_URI;
- arg.value.string = grpc_resolver_factory_add_default_prefix_if_needed(target);
+ arg.value.string =
+ grpc_resolver_factory_add_default_prefix_if_needed(exec_ctx, target);
const char *to_remove[] = {GRPC_ARG_SERVER_URI};
grpc_channel_args *new_args =
grpc_channel_args_copy_and_add_and_remove(args, to_remove, 1, &arg, 1);
diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
index da4c7dc7b2..082078c72f 100644
--- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c
+++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c
@@ -511,6 +511,10 @@ static void close_transport_locked(grpc_exec_ctx *exec_ctx,
grpc_chttp2_transport *t,
grpc_error *error) {
if (!t->closed) {
+ if (!grpc_error_has_clear_grpc_status(error)) {
+ error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
+ GRPC_STATUS_UNAVAILABLE);
+ }
if (t->write_state != GRPC_CHTTP2_WRITE_STATE_IDLE) {
if (t->close_transport_on_writes_finished == NULL) {
t->close_transport_on_writes_finished =
@@ -520,10 +524,6 @@ static void close_transport_locked(grpc_exec_ctx *exec_ctx,
grpc_error_add_child(t->close_transport_on_writes_finished, error);
return;
}
- if (!grpc_error_has_clear_grpc_status(error)) {
- error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
- GRPC_STATUS_UNAVAILABLE);
- }
t->closed = 1;
connectivity_state_set(exec_ctx, t, GRPC_CHANNEL_SHUTDOWN,
GRPC_ERROR_REF(error), "close_transport");
@@ -575,7 +575,7 @@ void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s) {
static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
grpc_stream *gs, grpc_stream_refcount *refcount,
- const void *server_data) {
+ const void *server_data, gpr_arena *arena) {
GPR_TIMER_BEGIN("init_stream", 0);
grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
grpc_chttp2_stream *s = (grpc_chttp2_stream *)gs;
@@ -588,8 +588,8 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
gpr_ref_init(&s->active_streams, 1);
GRPC_CHTTP2_STREAM_REF(s, "chttp2");
- grpc_chttp2_incoming_metadata_buffer_init(&s->metadata_buffer[0]);
- grpc_chttp2_incoming_metadata_buffer_init(&s->metadata_buffer[1]);
+ grpc_chttp2_incoming_metadata_buffer_init(&s->metadata_buffer[0], arena);
+ grpc_chttp2_incoming_metadata_buffer_init(&s->metadata_buffer[1], arena);
grpc_chttp2_data_parser_init(&s->data_parser);
grpc_slice_buffer_init(&s->flow_controlled_buffer);
s->deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
@@ -665,16 +665,17 @@ static void destroy_stream_locked(grpc_exec_ctx *exec_ctx, void *sp,
GPR_TIMER_END("destroy_stream", 0);
- gpr_free(s->destroy_stream_arg);
+ grpc_closure_sched(exec_ctx, s->destroy_stream_arg, GRPC_ERROR_NONE);
}
static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
- grpc_stream *gs, void *and_free_memory) {
+ grpc_stream *gs,
+ grpc_closure *then_schedule_closure) {
GPR_TIMER_BEGIN("destroy_stream", 0);
grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
grpc_chttp2_stream *s = (grpc_chttp2_stream *)gs;
- s->destroy_stream_arg = and_free_memory;
+ s->destroy_stream_arg = then_schedule_closure;
grpc_closure_sched(
exec_ctx, grpc_closure_init(&s->destroy_stream, destroy_stream_locked, s,
grpc_combiner_scheduler(t->combiner, false)),
@@ -1629,15 +1630,19 @@ void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
s->recv_trailing_metadata_finished != NULL) {
char status_string[GPR_LTOA_MIN_BUFSIZE];
gpr_ltoa(status, status_string);
- grpc_chttp2_incoming_metadata_buffer_replace_or_add(
- exec_ctx, &s->metadata_buffer[1],
- grpc_mdelem_from_slices(exec_ctx, GRPC_MDSTR_GRPC_STATUS,
- grpc_slice_from_copied_string(status_string)));
+ GRPC_LOG_IF_ERROR("add_status",
+ grpc_chttp2_incoming_metadata_buffer_replace_or_add(
+ exec_ctx, &s->metadata_buffer[1],
+ grpc_mdelem_from_slices(
+ exec_ctx, GRPC_MDSTR_GRPC_STATUS,
+ grpc_slice_from_copied_string(status_string))));
if (msg != NULL) {
- grpc_chttp2_incoming_metadata_buffer_replace_or_add(
- exec_ctx, &s->metadata_buffer[1],
- grpc_mdelem_from_slices(exec_ctx, GRPC_MDSTR_GRPC_MESSAGE,
- grpc_slice_from_copied_string(msg)));
+ GRPC_LOG_IF_ERROR(
+ "add_status_message",
+ grpc_chttp2_incoming_metadata_buffer_replace_or_add(
+ exec_ctx, &s->metadata_buffer[1],
+ grpc_mdelem_from_slices(exec_ctx, GRPC_MDSTR_GRPC_MESSAGE,
+ grpc_slice_from_copied_string(msg))));
}
s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE;
grpc_chttp2_maybe_complete_recv_trailing_metadata(exec_ctx, t, s);
diff --git a/src/core/ext/transport/chttp2/transport/frame_ping.c b/src/core/ext/transport/chttp2/transport/frame_ping.c
index f487533c41..9b4b1a7b84 100644
--- a/src/core/ext/transport/chttp2/transport/frame_ping.c
+++ b/src/core/ext/transport/chttp2/transport/frame_ping.c
@@ -91,7 +91,7 @@ grpc_error *grpc_chttp2_ping_parser_parse(grpc_exec_ctx *exec_ctx, void *parser,
grpc_chttp2_ping_parser *p = parser;
while (p->byte != 8 && cur != end) {
- p->opaque_8bytes |= (((uint64_t)*cur) << (8 * p->byte));
+ p->opaque_8bytes |= (((uint64_t)*cur) << (56 - 8 * p->byte));
cur++;
p->byte++;
}
diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.c b/src/core/ext/transport/chttp2/transport/hpack_parser.c
index 40f5120308..1865b997b7 100644
--- a/src/core/ext/transport/chttp2/transport/hpack_parser.c
+++ b/src/core/ext/transport/chttp2/transport/hpack_parser.c
@@ -1620,13 +1620,18 @@ void grpc_chttp2_hpack_parser_destroy(grpc_exec_ctx *exec_ctx,
grpc_error *grpc_chttp2_hpack_parser_parse(grpc_exec_ctx *exec_ctx,
grpc_chttp2_hpack_parser *p,
grpc_slice slice) {
- /* TODO(ctiller): limit the distance of end from beg, and perform multiple
- steps in the event of a large chunk of data to limit
- stack space usage when no tail call optimization is
- available */
+/* max number of bytes to parse at a time... limits call stack depth on
+ * compilers without TCO */
+#define MAX_PARSE_LENGTH 1024
p->current_slice_refcount = slice.refcount;
- grpc_error *error = p->state(exec_ctx, p, GRPC_SLICE_START_PTR(slice),
- GRPC_SLICE_END_PTR(slice));
+ uint8_t *start = GRPC_SLICE_START_PTR(slice);
+ uint8_t *end = GRPC_SLICE_END_PTR(slice);
+ grpc_error *error = GRPC_ERROR_NONE;
+ while (start != end && error == GRPC_ERROR_NONE) {
+ uint8_t *target = start + GPR_MIN(MAX_PARSE_LENGTH, end - start);
+ error = p->state(exec_ctx, p, start, target);
+ start = target;
+ }
p->current_slice_refcount = NULL;
return error;
}
diff --git a/src/core/ext/transport/chttp2/transport/incoming_metadata.c b/src/core/ext/transport/chttp2/transport/incoming_metadata.c
index c91b019aa0..da0a34d32a 100644
--- a/src/core/ext/transport/chttp2/transport/incoming_metadata.c
+++ b/src/core/ext/transport/chttp2/transport/incoming_metadata.c
@@ -41,69 +41,48 @@
#include <grpc/support/log.h>
void grpc_chttp2_incoming_metadata_buffer_init(
- grpc_chttp2_incoming_metadata_buffer *buffer) {
- buffer->deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
+ grpc_chttp2_incoming_metadata_buffer *buffer, gpr_arena *arena) {
+ buffer->arena = arena;
+ grpc_metadata_batch_init(&buffer->batch);
+ buffer->batch.deadline = gpr_inf_future(GPR_CLOCK_REALTIME);
}
void grpc_chttp2_incoming_metadata_buffer_destroy(
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer) {
- size_t i;
- if (!buffer->published) {
- for (i = 0; i < buffer->count; i++) {
- GRPC_MDELEM_UNREF(exec_ctx, buffer->elems[i].md);
- }
- }
- gpr_free(buffer->elems);
+ grpc_metadata_batch_destroy(exec_ctx, &buffer->batch);
}
-void grpc_chttp2_incoming_metadata_buffer_add(
- grpc_chttp2_incoming_metadata_buffer *buffer, grpc_mdelem elem) {
- GPR_ASSERT(!buffer->published);
- if (buffer->capacity == buffer->count) {
- buffer->capacity = GPR_MAX(8, 2 * buffer->capacity);
- buffer->elems =
- gpr_realloc(buffer->elems, sizeof(*buffer->elems) * buffer->capacity);
- }
- buffer->elems[buffer->count++].md = elem;
+grpc_error *grpc_chttp2_incoming_metadata_buffer_add(
+ grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer,
+ grpc_mdelem elem) {
buffer->size += GRPC_MDELEM_LENGTH(elem);
+ return grpc_metadata_batch_add_tail(
+ exec_ctx, &buffer->batch,
+ gpr_arena_alloc(buffer->arena, sizeof(grpc_linked_mdelem)), elem);
}
-void grpc_chttp2_incoming_metadata_buffer_replace_or_add(
+grpc_error *grpc_chttp2_incoming_metadata_buffer_replace_or_add(
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer,
grpc_mdelem elem) {
- for (size_t i = 0; i < buffer->count; i++) {
- if (grpc_slice_eq(GRPC_MDKEY(buffer->elems[i].md), GRPC_MDKEY(elem))) {
- GRPC_MDELEM_UNREF(exec_ctx, buffer->elems[i].md);
- buffer->elems[i].md = elem;
- return;
+ for (grpc_linked_mdelem *l = buffer->batch.list.head; l != NULL;
+ l = l->next) {
+ if (grpc_slice_eq(GRPC_MDKEY(l->md), GRPC_MDKEY(elem))) {
+ GRPC_MDELEM_UNREF(exec_ctx, l->md);
+ l->md = elem;
+ return GRPC_ERROR_NONE;
}
}
- grpc_chttp2_incoming_metadata_buffer_add(buffer, elem);
+ return grpc_chttp2_incoming_metadata_buffer_add(exec_ctx, buffer, elem);
}
void grpc_chttp2_incoming_metadata_buffer_set_deadline(
grpc_chttp2_incoming_metadata_buffer *buffer, gpr_timespec deadline) {
- GPR_ASSERT(!buffer->published);
- buffer->deadline = deadline;
+ buffer->batch.deadline = deadline;
}
void grpc_chttp2_incoming_metadata_buffer_publish(
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer,
grpc_metadata_batch *batch) {
- GPR_ASSERT(!buffer->published);
- buffer->published = 1;
- if (buffer->count > 0) {
- size_t i;
- for (i = 0; i < buffer->count; i++) {
- /* TODO(ctiller): do something better here */
- if (!GRPC_LOG_IF_ERROR("grpc_chttp2_incoming_metadata_buffer_publish",
- grpc_metadata_batch_link_tail(
- exec_ctx, batch, &buffer->elems[i]))) {
- GRPC_MDELEM_UNREF(exec_ctx, buffer->elems[i].md);
- }
- }
- } else {
- batch->list.head = batch->list.tail = NULL;
- }
- batch->deadline = buffer->deadline;
+ *batch = buffer->batch;
+ grpc_metadata_batch_init(&buffer->batch);
}
diff --git a/src/core/ext/transport/chttp2/transport/incoming_metadata.h b/src/core/ext/transport/chttp2/transport/incoming_metadata.h
index 1eac6fc150..288c917e65 100644
--- a/src/core/ext/transport/chttp2/transport/incoming_metadata.h
+++ b/src/core/ext/transport/chttp2/transport/incoming_metadata.h
@@ -37,28 +37,26 @@
#include "src/core/lib/transport/transport.h"
typedef struct {
- grpc_linked_mdelem *elems;
- size_t count;
- size_t capacity;
- gpr_timespec deadline;
- int published;
+ gpr_arena *arena;
+ grpc_metadata_batch batch;
size_t size; // total size of metadata
} grpc_chttp2_incoming_metadata_buffer;
/** assumes everything initially zeroed */
void grpc_chttp2_incoming_metadata_buffer_init(
- grpc_chttp2_incoming_metadata_buffer *buffer);
+ grpc_chttp2_incoming_metadata_buffer *buffer, gpr_arena *arena);
void grpc_chttp2_incoming_metadata_buffer_destroy(
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer);
void grpc_chttp2_incoming_metadata_buffer_publish(
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer,
grpc_metadata_batch *batch);
-void grpc_chttp2_incoming_metadata_buffer_add(
- grpc_chttp2_incoming_metadata_buffer *buffer, grpc_mdelem elem);
-void grpc_chttp2_incoming_metadata_buffer_replace_or_add(
+grpc_error *grpc_chttp2_incoming_metadata_buffer_add(
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer,
- grpc_mdelem elem);
+ grpc_mdelem elem) GRPC_MUST_USE_RESULT;
+grpc_error *grpc_chttp2_incoming_metadata_buffer_replace_or_add(
+ grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer,
+ grpc_mdelem elem) GRPC_MUST_USE_RESULT;
void grpc_chttp2_incoming_metadata_buffer_set_deadline(
grpc_chttp2_incoming_metadata_buffer *buffer, gpr_timespec deadline);
diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h
index d26812ad6b..3c56c21599 100644
--- a/src/core/ext/transport/chttp2/transport/internal.h
+++ b/src/core/ext/transport/chttp2/transport/internal.h
@@ -425,7 +425,7 @@ struct grpc_chttp2_stream {
grpc_stream_refcount *refcount;
grpc_closure destroy_stream;
- void *destroy_stream_arg;
+ grpc_closure *destroy_stream_arg;
grpc_chttp2_stream_link links[STREAM_LIST_COUNT];
uint8_t included[STREAM_LIST_COUNT];
diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c
index 7ed00522c3..7efc8c63c9 100644
--- a/src/core/ext/transport/chttp2/transport/parsing.c
+++ b/src/core/ext/transport/chttp2/transport/parsing.c
@@ -381,16 +381,38 @@ static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx,
s->incoming_window_delta +
t->settings[GRPC_ACKED_SETTINGS]
[GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]) {
- char *msg;
- gpr_asprintf(&msg,
- "frame of size %d overflows incoming window of %" PRId64,
- t->incoming_frame_size,
- s->incoming_window_delta +
- t->settings[GRPC_ACKED_SETTINGS]
- [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]);
- grpc_error *err = GRPC_ERROR_CREATE(msg);
- gpr_free(msg);
- return err;
+ if (incoming_frame_size <=
+ s->incoming_window_delta +
+ t->settings[GRPC_SENT_SETTINGS]
+ [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]) {
+ gpr_log(
+ GPR_ERROR,
+ "Incoming frame of size %d exceeds incoming window size of %" PRId64
+ ".\n"
+ "The (un-acked, future) window size would be %" PRId64
+ " which is not exceeded.\n"
+ "This would usually cause a disconnection, but allowing it due to "
+ "broken HTTP2 implementations in the wild.\n"
+ "See (for example) https://github.com/netty/netty/issues/6520.",
+ t->incoming_frame_size,
+ s->incoming_window_delta +
+ t->settings[GRPC_ACKED_SETTINGS]
+ [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
+ s->incoming_window_delta +
+ t->settings[GRPC_SENT_SETTINGS]
+ [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]);
+ } else {
+ char *msg;
+ gpr_asprintf(&msg,
+ "frame of size %d overflows incoming window of %" PRId64,
+ t->incoming_frame_size,
+ s->incoming_window_delta +
+ t->settings[GRPC_ACKED_SETTINGS]
+ [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]);
+ grpc_error *err = GRPC_ERROR_CREATE(msg);
+ gpr_free(msg);
+ return err;
+ }
}
GRPC_CHTTP2_FLOW_DEBIT_STREAM_INCOMING_WINDOW_DELTA("parse", t, s,
@@ -526,7 +548,14 @@ static void on_initial_header(grpc_exec_ctx *exec_ctx, void *tp,
s->seen_error = true;
GRPC_MDELEM_UNREF(exec_ctx, md);
} else {
- grpc_chttp2_incoming_metadata_buffer_add(&s->metadata_buffer[0], md);
+ grpc_error *error = grpc_chttp2_incoming_metadata_buffer_add(
+ exec_ctx, &s->metadata_buffer[0], md);
+ if (error != GRPC_ERROR_NONE) {
+ grpc_chttp2_cancel_stream(exec_ctx, t, s, error);
+ grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
+ s->seen_error = true;
+ GRPC_MDELEM_UNREF(exec_ctx, md);
+ }
}
}
@@ -576,7 +605,14 @@ static void on_trailing_header(grpc_exec_ctx *exec_ctx, void *tp,
s->seen_error = true;
GRPC_MDELEM_UNREF(exec_ctx, md);
} else {
- grpc_chttp2_incoming_metadata_buffer_add(&s->metadata_buffer[1], md);
+ grpc_error *error = grpc_chttp2_incoming_metadata_buffer_add(
+ exec_ctx, &s->metadata_buffer[1], md);
+ if (error != GRPC_ERROR_NONE) {
+ grpc_chttp2_cancel_stream(exec_ctx, t, s, error);
+ grpc_chttp2_parsing_become_skip_parser(exec_ctx, t);
+ s->seen_error = true;
+ GRPC_MDELEM_UNREF(exec_ctx, md);
+ }
}
GPR_TIMER_END("on_trailing_header", 0);
diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.c b/src/core/ext/transport/cronet/transport/cronet_transport.c
index 01a03533da..450d9ab23a 100644
--- a/src/core/ext/transport/cronet/transport/cronet_transport.c
+++ b/src/core/ext/transport/cronet/transport/cronet_transport.c
@@ -54,6 +54,7 @@
#include "third_party/objective_c/Cronet/bidirectional_stream_c.h"
#define GRPC_HEADER_SIZE_IN_BYTES 5
+#define GRPC_FLUSH_READ_SIZE 4096
#define CRONET_LOG(...) \
do { \
@@ -151,11 +152,17 @@ struct write_state {
struct op_state {
bool state_op_done[OP_NUM_OPS];
bool state_callback_received[OP_NUM_OPS];
+ /* A non-zero gRPC status code has been seen */
bool fail_state;
+ /* Transport is discarding all buffered messages */
bool flush_read;
bool flush_cronet_when_ready;
bool pending_write_for_trailer;
- bool unprocessed_send_message;
+ bool pending_send_message;
+ /* User requested RECV_TRAILING_METADATA */
+ bool pending_recv_trailing_metadata;
+ /* Cronet has not issued a callback of a bidirectional read */
+ bool pending_read_from_cronet;
grpc_error *cancel_error;
/* data structure for storing data coming from server */
struct read_state rs;
@@ -177,6 +184,7 @@ struct op_storage {
};
struct stream_obj {
+ gpr_arena *arena;
struct op_and_state *oas;
grpc_transport_stream_op *curr_op;
grpc_cronet_transport *curr_ct;
@@ -248,11 +256,35 @@ static const char *op_id_string(enum e_op_id i) {
return "UNKNOWN";
}
-static void free_read_buffer(stream_obj *s) {
+static void null_and_maybe_free_read_buffer(stream_obj *s) {
if (s->state.rs.read_buffer &&
s->state.rs.read_buffer != s->state.rs.grpc_header_bytes) {
gpr_free(s->state.rs.read_buffer);
- s->state.rs.read_buffer = NULL;
+ }
+ s->state.rs.read_buffer = NULL;
+}
+
+static void maybe_flush_read(stream_obj *s) {
+ /* To enter flush read state (discarding all the buffered messages in
+ * transport layer), two conditions must be satisfied: 1) non-zero grpc status
+ * has been received, and 2) an op requesting the status code
+ * (RECV_TRAILING_METADATA) is issued by the user. (See
+ * doc/status_ordering.md) */
+ /* Whenever the evaluation of any of the two condition is changed, we check
+ * whether we should enter the flush read state. */
+ if (s->state.pending_recv_trailing_metadata && s->state.fail_state) {
+ if (!s->state.flush_read && !s->state.rs.read_stream_closed) {
+ CRONET_LOG(GPR_DEBUG, "%p: Flush read", s);
+ s->state.flush_read = true;
+ null_and_maybe_free_read_buffer(s);
+ s->state.rs.read_buffer = gpr_malloc(GRPC_FLUSH_READ_SIZE);
+ if (!s->state.pending_read_from_cronet) {
+ CRONET_LOG(GPR_DEBUG, "bidirectional_stream_read(%p)", s->cbs);
+ bidirectional_stream_read(s->cbs, s->state.rs.read_buffer,
+ GRPC_FLUSH_READ_SIZE);
+ s->state.pending_read_from_cronet = true;
+ }
+ }
}
}
@@ -279,7 +311,11 @@ static void add_to_storage(struct stream_obj *s, grpc_transport_stream_op *op) {
storage->head = new_op;
storage->num_pending_ops++;
if (op->send_message) {
- s->state.unprocessed_send_message = true;
+ s->state.pending_send_message = true;
+ }
+ if (op->recv_trailing_metadata) {
+ s->state.pending_recv_trailing_metadata = true;
+ maybe_flush_read(s);
}
CRONET_LOG(GPR_DEBUG, "adding new op %p. %d in the queue.", new_op,
storage->num_pending_ops);
@@ -367,7 +403,7 @@ static void on_failed(bidirectional_stream *stream, int net_error) {
gpr_free(s->state.ws.write_buffer);
s->state.ws.write_buffer = NULL;
}
- free_read_buffer(s);
+ null_and_maybe_free_read_buffer(s);
gpr_mu_unlock(&s->mu);
execute_from_storage(s);
}
@@ -390,7 +426,7 @@ static void on_canceled(bidirectional_stream *stream) {
gpr_free(s->state.ws.write_buffer);
s->state.ws.write_buffer = NULL;
}
- free_read_buffer(s);
+ null_and_maybe_free_read_buffer(s);
gpr_mu_unlock(&s->mu);
execute_from_storage(s);
}
@@ -405,7 +441,7 @@ static void on_succeeded(bidirectional_stream *stream) {
bidirectional_stream_destroy(s->cbs);
s->state.state_callback_received[OP_SUCCEEDED] = true;
s->cbs = NULL;
- free_read_buffer(s);
+ null_and_maybe_free_read_buffer(s);
gpr_mu_unlock(&s->mu);
execute_from_storage(s);
}
@@ -451,15 +487,18 @@ static void on_response_headers_received(
gpr_mu_lock(&s->mu);
memset(&s->state.rs.initial_metadata, 0,
sizeof(s->state.rs.initial_metadata));
- grpc_chttp2_incoming_metadata_buffer_init(&s->state.rs.initial_metadata);
+ grpc_chttp2_incoming_metadata_buffer_init(&s->state.rs.initial_metadata,
+ s->arena);
for (size_t i = 0; i < headers->count; i++) {
- grpc_chttp2_incoming_metadata_buffer_add(
- &s->state.rs.initial_metadata,
- grpc_mdelem_from_slices(
- &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string(
- headers->headers[i].key)),
- grpc_slice_intern(
- grpc_slice_from_static_string(headers->headers[i].value))));
+ GRPC_LOG_IF_ERROR(
+ "on_response_headers_received",
+ grpc_chttp2_incoming_metadata_buffer_add(
+ &exec_ctx, &s->state.rs.initial_metadata,
+ grpc_mdelem_from_slices(
+ &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string(
+ headers->headers[i].key)),
+ grpc_slice_intern(grpc_slice_from_static_string(
+ headers->headers[i].value)))));
}
s->state.state_callback_received[OP_RECV_INITIAL_METADATA] = true;
if (!(s->state.state_op_done[OP_CANCEL_ERROR] ||
@@ -473,6 +512,7 @@ static void on_response_headers_received(
CRONET_LOG(GPR_DEBUG, "bidirectional_stream_read(%p)", s->cbs);
bidirectional_stream_read(s->cbs, s->state.rs.read_buffer,
s->state.rs.remaining_bytes);
+ s->state.pending_read_from_cronet = true;
}
gpr_mu_unlock(&s->mu);
grpc_exec_ctx_finish(&exec_ctx);
@@ -504,10 +544,13 @@ static void on_read_completed(bidirectional_stream *stream, char *data,
CRONET_LOG(GPR_DEBUG, "R: on_read_completed(%p, %p, %d)", stream, data,
count);
gpr_mu_lock(&s->mu);
+ s->state.pending_read_from_cronet = false;
s->state.state_callback_received[OP_RECV_MESSAGE] = true;
if (count > 0 && s->state.flush_read) {
CRONET_LOG(GPR_DEBUG, "bidirectional_stream_read(%p)", s->cbs);
- bidirectional_stream_read(s->cbs, s->state.rs.read_buffer, 4096);
+ bidirectional_stream_read(s->cbs, s->state.rs.read_buffer,
+ GRPC_FLUSH_READ_SIZE);
+ s->state.pending_read_from_cronet = true;
gpr_mu_unlock(&s->mu);
} else if (count > 0) {
s->state.rs.received_bytes += count;
@@ -518,16 +561,14 @@ static void on_read_completed(bidirectional_stream *stream, char *data,
bidirectional_stream_read(
s->cbs, s->state.rs.read_buffer + s->state.rs.received_bytes,
s->state.rs.remaining_bytes);
+ s->state.pending_read_from_cronet = true;
gpr_mu_unlock(&s->mu);
} else {
gpr_mu_unlock(&s->mu);
execute_from_storage(s);
}
} else {
- if (s->state.flush_read) {
- gpr_free(s->state.rs.read_buffer);
- s->state.rs.read_buffer = NULL;
- }
+ null_and_maybe_free_read_buffer(s);
s->state.rs.read_stream_closed = true;
gpr_mu_unlock(&s->mu);
execute_from_storage(s);
@@ -549,21 +590,25 @@ static void on_response_trailers_received(
memset(&s->state.rs.trailing_metadata, 0,
sizeof(s->state.rs.trailing_metadata));
s->state.rs.trailing_metadata_valid = false;
- grpc_chttp2_incoming_metadata_buffer_init(&s->state.rs.trailing_metadata);
+ grpc_chttp2_incoming_metadata_buffer_init(&s->state.rs.trailing_metadata,
+ s->arena);
for (size_t i = 0; i < trailers->count; i++) {
CRONET_LOG(GPR_DEBUG, "trailer key=%s, value=%s", trailers->headers[i].key,
trailers->headers[i].value);
- grpc_chttp2_incoming_metadata_buffer_add(
- &s->state.rs.trailing_metadata,
- grpc_mdelem_from_slices(
- &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string(
- trailers->headers[i].key)),
- grpc_slice_intern(
- grpc_slice_from_static_string(trailers->headers[i].value))));
+ GRPC_LOG_IF_ERROR(
+ "on_response_trailers_received",
+ grpc_chttp2_incoming_metadata_buffer_add(
+ &exec_ctx, &s->state.rs.trailing_metadata,
+ grpc_mdelem_from_slices(
+ &exec_ctx, grpc_slice_intern(grpc_slice_from_static_string(
+ trailers->headers[i].key)),
+ grpc_slice_intern(grpc_slice_from_static_string(
+ trailers->headers[i].value)))));
s->state.rs.trailing_metadata_valid = true;
if (0 == strcmp(trailers->headers[i].key, "grpc-status") &&
0 != strcmp(trailers->headers[i].value, "0")) {
s->state.fail_state = true;
+ maybe_flush_read(s);
}
}
s->state.state_callback_received[OP_RECV_TRAILING_METADATA] = true;
@@ -778,7 +823,7 @@ static bool op_can_be_run(grpc_transport_stream_op *curr_op,
else if (!stream_state->state_callback_received[OP_SEND_INITIAL_METADATA])
result = false;
/* we haven't sent message yet */
- else if (stream_state->unprocessed_send_message &&
+ else if (stream_state->pending_send_message &&
!stream_state->state_op_done[OP_SEND_MESSAGE])
result = false;
/* we haven't got on_write_completed for the send yet */
@@ -900,7 +945,7 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
} else if (stream_op->send_message &&
op_can_be_run(stream_op, s, &oas->state, OP_SEND_MESSAGE)) {
CRONET_LOG(GPR_DEBUG, "running: %p OP_SEND_MESSAGE", oas);
- stream_state->unprocessed_send_message = false;
+ stream_state->pending_send_message = false;
if (stream_state->state_callback_received[OP_FAILED]) {
result = NO_ACTION_POSSIBLE;
CRONET_LOG(GPR_DEBUG, "Stream is either cancelled or failed.");
@@ -1009,6 +1054,13 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
stream_state->state_op_done[OP_RECV_MESSAGE] = true;
oas->state.state_op_done[OP_RECV_MESSAGE] = true;
result = ACTION_TAKEN_NO_CALLBACK;
+ } else if (stream_state->flush_read) {
+ CRONET_LOG(GPR_DEBUG, "flush read");
+ grpc_closure_sched(exec_ctx, stream_op->recv_message_ready,
+ GRPC_ERROR_NONE);
+ stream_state->state_op_done[OP_RECV_MESSAGE] = true;
+ oas->state.state_op_done[OP_RECV_MESSAGE] = true;
+ result = ACTION_TAKEN_NO_CALLBACK;
} else if (stream_state->rs.length_field_received == false) {
if (stream_state->rs.received_bytes == GRPC_HEADER_SIZE_IN_BYTES &&
stream_state->rs.remaining_bytes == 0) {
@@ -1029,6 +1081,7 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
true; /* Indicates that at least one read request has been made */
bidirectional_stream_read(s->cbs, stream_state->rs.read_buffer,
stream_state->rs.remaining_bytes);
+ stream_state->pending_read_from_cronet = true;
result = ACTION_TAKEN_WITH_CALLBACK;
} else {
stream_state->rs.remaining_bytes = 0;
@@ -1047,11 +1100,13 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
stream_state->rs.read_buffer = stream_state->rs.grpc_header_bytes;
stream_state->rs.remaining_bytes = GRPC_HEADER_SIZE_IN_BYTES;
stream_state->rs.received_bytes = 0;
+ stream_state->rs.length_field_received = false;
CRONET_LOG(GPR_DEBUG, "bidirectional_stream_read(%p)", s->cbs);
stream_state->state_op_done[OP_READ_REQ_MADE] =
true; /* Indicates that at least one read request has been made */
bidirectional_stream_read(s->cbs, stream_state->rs.read_buffer,
stream_state->rs.remaining_bytes);
+ stream_state->pending_read_from_cronet = true;
result = ACTION_TAKEN_NO_CALLBACK;
}
} else if (stream_state->rs.remaining_bytes == 0) {
@@ -1064,6 +1119,7 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
true; /* Indicates that at least one read request has been made */
bidirectional_stream_read(s->cbs, stream_state->rs.read_buffer,
stream_state->rs.remaining_bytes);
+ stream_state->pending_read_from_cronet = true;
result = ACTION_TAKEN_WITH_CALLBACK;
} else {
result = NO_ACTION_POSSIBLE;
@@ -1075,7 +1131,7 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
uint8_t *dst_p = GRPC_SLICE_START_PTR(read_data_slice);
memcpy(dst_p, stream_state->rs.read_buffer,
(size_t)stream_state->rs.length_field);
- free_read_buffer(s);
+ null_and_maybe_free_read_buffer(s);
grpc_slice_buffer_init(&stream_state->rs.read_slice_buffer);
grpc_slice_buffer_add(&stream_state->rs.read_slice_buffer,
read_data_slice);
@@ -1096,6 +1152,7 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
CRONET_LOG(GPR_DEBUG, "bidirectional_stream_read(%p)", s->cbs);
bidirectional_stream_read(s->cbs, stream_state->rs.read_buffer,
stream_state->rs.remaining_bytes);
+ stream_state->pending_read_from_cronet = true;
result = ACTION_TAKEN_NO_CALLBACK;
}
} else if (stream_op->recv_trailing_metadata &&
@@ -1153,15 +1210,6 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
make a note */
if (stream_op->recv_message)
stream_state->state_op_done[OP_RECV_MESSAGE_AND_ON_COMPLETE] = true;
- } else if (stream_state->fail_state && !stream_state->flush_read) {
- CRONET_LOG(GPR_DEBUG, "running: %p flush read", oas);
- if (stream_state->rs.read_buffer &&
- stream_state->rs.read_buffer != stream_state->rs.grpc_header_bytes) {
- gpr_free(stream_state->rs.read_buffer);
- stream_state->rs.read_buffer = NULL;
- }
- stream_state->rs.read_buffer = gpr_malloc(4096);
- stream_state->flush_read = true;
} else {
result = NO_ACTION_POSSIBLE;
}
@@ -1174,7 +1222,7 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx,
static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
grpc_stream *gs, grpc_stream_refcount *refcount,
- const void *server_data) {
+ const void *server_data, gpr_arena *arena) {
stream_obj *s = (stream_obj *)gs;
memset(&s->storage, 0, sizeof(s->storage));
s->storage.head = NULL;
@@ -1190,10 +1238,13 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
s->state.fail_state = s->state.flush_read = false;
s->state.cancel_error = NULL;
s->state.flush_cronet_when_ready = s->state.pending_write_for_trailer = false;
- s->state.unprocessed_send_message = false;
+ s->state.pending_send_message = false;
+ s->state.pending_recv_trailing_metadata = false;
+ s->state.pending_read_from_cronet = false;
s->curr_gs = gs;
s->curr_ct = (grpc_cronet_transport *)gt;
+ s->arena = arena;
gpr_mu_init(&s->mu);
return 0;
@@ -1209,38 +1260,33 @@ static void set_pollset_set_do_nothing(grpc_exec_ctx *exec_ctx,
static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
grpc_stream *gs, grpc_transport_stream_op *op) {
CRONET_LOG(GPR_DEBUG, "perform_stream_op");
- stream_obj *s = (stream_obj *)gs;
- add_to_storage(s, op);
if (op->send_initial_metadata &&
header_has_authority(op->send_initial_metadata->list.head)) {
/* Cronet does not support :authority header field. We cancel the call when
- this field is present in metadata */
- bidirectional_stream_header_array header_array;
- bidirectional_stream_header *header;
- bidirectional_stream cbs;
- CRONET_LOG(GPR_DEBUG,
- ":authority header is provided but not supported;"
- " cancel operations");
- /* Notify application that operation is cancelled by forging trailers */
- header_array.count = 1;
- header_array.capacity = 1;
- header_array.headers = gpr_malloc(sizeof(bidirectional_stream_header));
- header = (bidirectional_stream_header *)header_array.headers;
- header->key = "grpc-status";
- header->value = "1"; /* Return status GRPC_STATUS_CANCELLED */
- cbs.annotation = (void *)s;
- s->state.state_op_done[OP_CANCEL_ERROR] = true;
- on_response_trailers_received(&cbs, &header_array);
- gpr_free(header_array.headers);
- } else {
- execute_from_storage(s);
+ this field is present in metadata */
+ if (op->recv_initial_metadata_ready) {
+ grpc_closure_sched(exec_ctx, op->recv_initial_metadata_ready,
+ GRPC_ERROR_CANCELLED);
+ }
+ if (op->recv_message_ready) {
+ grpc_closure_sched(exec_ctx, op->recv_message_ready,
+ GRPC_ERROR_CANCELLED);
+ }
+ grpc_closure_sched(exec_ctx, op->on_complete, GRPC_ERROR_CANCELLED);
+ return;
}
+ stream_obj *s = (stream_obj *)gs;
+ add_to_storage(s, op);
+ execute_from_storage(s);
}
static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
- grpc_stream *gs, void *and_free_memory) {
+ grpc_stream *gs,
+ grpc_closure *then_schedule_closure) {
stream_obj *s = (stream_obj *)gs;
+ null_and_maybe_free_read_buffer(s);
GRPC_ERROR_UNREF(s->state.cancel_error);
+ grpc_closure_sched(exec_ctx, then_schedule_closure, GRPC_ERROR_NONE);
}
static void destroy_transport(grpc_exec_ctx *exec_ctx, grpc_transport *gt) {}
diff --git a/src/core/lib/channel/channel_stack.c b/src/core/lib/channel/channel_stack.c
index 3fb2a60ac7..6d53b0576e 100644
--- a/src/core/lib/channel/channel_stack.c
+++ b/src/core/lib/channel/channel_stack.c
@@ -166,41 +166,32 @@ void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
}
}
-grpc_error *grpc_call_stack_init(
- grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack,
- int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg,
- grpc_call_context_element *context, const void *transport_server_data,
- grpc_slice path, gpr_timespec start_time, gpr_timespec deadline,
- grpc_call_stack *call_stack) {
+grpc_error *grpc_call_stack_init(grpc_exec_ctx *exec_ctx,
+ grpc_channel_stack *channel_stack,
+ int initial_refs, grpc_iomgr_cb_func destroy,
+ void *destroy_arg,
+ const grpc_call_element_args *elem_args) {
grpc_channel_element *channel_elems = CHANNEL_ELEMS_FROM_STACK(channel_stack);
size_t count = channel_stack->count;
grpc_call_element *call_elems;
char *user_data;
size_t i;
- call_stack->count = count;
- GRPC_STREAM_REF_INIT(&call_stack->refcount, initial_refs, destroy,
+ elem_args->call_stack->count = count;
+ GRPC_STREAM_REF_INIT(&elem_args->call_stack->refcount, initial_refs, destroy,
destroy_arg, "CALL_STACK");
- call_elems = CALL_ELEMS_FROM_STACK(call_stack);
+ call_elems = CALL_ELEMS_FROM_STACK(elem_args->call_stack);
user_data = ((char *)call_elems) +
ROUND_UP_TO_ALIGNMENT_SIZE(count * sizeof(grpc_call_element));
/* init per-filter data */
grpc_error *first_error = GRPC_ERROR_NONE;
- const grpc_call_element_args args = {
- .start_time = start_time,
- .call_stack = call_stack,
- .server_transport_data = transport_server_data,
- .context = context,
- .path = path,
- .deadline = deadline,
- };
for (i = 0; i < count; i++) {
call_elems[i].filter = channel_elems[i].filter;
call_elems[i].channel_data = channel_elems[i].channel_data;
call_elems[i].call_data = user_data;
- grpc_error *error =
- call_elems[i].filter->init_call_elem(exec_ctx, &call_elems[i], &args);
+ grpc_error *error = call_elems[i].filter->init_call_elem(
+ exec_ctx, &call_elems[i], elem_args);
if (error != GRPC_ERROR_NONE) {
if (first_error == GRPC_ERROR_NONE) {
first_error = error;
@@ -241,15 +232,16 @@ void grpc_call_stack_ignore_set_pollset_or_pollset_set(
void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack,
const grpc_call_final_info *final_info,
- void *and_free_memory) {
+ grpc_closure *then_schedule_closure) {
grpc_call_element *elems = CALL_ELEMS_FROM_STACK(stack);
size_t count = stack->count;
size_t i;
/* destroy per-filter data */
for (i = 0; i < count; i++) {
- elems[i].filter->destroy_call_elem(exec_ctx, &elems[i], final_info,
- i == count - 1 ? and_free_memory : NULL);
+ elems[i].filter->destroy_call_elem(
+ exec_ctx, &elems[i], final_info,
+ i == count - 1 ? then_schedule_closure : NULL);
}
}
diff --git a/src/core/lib/channel/channel_stack.h b/src/core/lib/channel/channel_stack.h
index 6d3340bcbf..80e3603e8d 100644
--- a/src/core/lib/channel/channel_stack.h
+++ b/src/core/lib/channel/channel_stack.h
@@ -56,6 +56,7 @@
#include "src/core/lib/debug/trace.h"
#include "src/core/lib/iomgr/polling_entity.h"
+#include "src/core/lib/support/arena.h"
#include "src/core/lib/transport/transport.h"
#ifdef __cplusplus
@@ -84,6 +85,7 @@ typedef struct {
grpc_slice path;
gpr_timespec start_time;
gpr_timespec deadline;
+ gpr_arena *arena;
} grpc_call_element_args;
typedef struct {
@@ -139,12 +141,12 @@ typedef struct {
/* Destroy per call data.
The filter does not need to do any chaining.
The bottom filter of a stack will be passed a non-NULL pointer to
- \a and_free_memory that should be passed to gpr_free when destruction
- is complete. \a final_info contains data about the completed call, mainly
- for reporting purposes. */
+ \a then_schedule_closure that should be passed to grpc_closure_sched when
+ destruction is complete. \a final_info contains data about the completed
+ call, mainly for reporting purposes. */
void (*destroy_call_elem)(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory);
+ grpc_closure *then_schedule_closure);
/* sizeof(per channel data) */
size_t sizeof_channel_data;
@@ -236,12 +238,11 @@ void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx,
/* Initialize a call stack given a channel stack. transport_server_data is
expected to be NULL on a client, or an opaque transport owned pointer on the
server. */
-grpc_error *grpc_call_stack_init(
- grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack,
- int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg,
- grpc_call_context_element *context, const void *transport_server_data,
- grpc_slice path, gpr_timespec start_time, gpr_timespec deadline,
- grpc_call_stack *call_stack);
+grpc_error *grpc_call_stack_init(grpc_exec_ctx *exec_ctx,
+ grpc_channel_stack *channel_stack,
+ int initial_refs, grpc_iomgr_cb_func destroy,
+ void *destroy_arg,
+ const grpc_call_element_args *elem_args);
/* Set a pollset or a pollset_set for a call stack: must occur before the first
* op is started */
void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
@@ -271,7 +272,7 @@ void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
/* Destroy a call stack */
void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack,
const grpc_call_final_info *final_info,
- void *and_free_memory);
+ grpc_closure *then_schedule_closure);
/* Ignore set pollset{_set} - used by filters if they don't care about pollsets
* at all. Does nothing. */
diff --git a/src/core/lib/channel/compress_filter.c b/src/core/lib/channel/compress_filter.c
index aa41014a21..02dc479f3a 100644
--- a/src/core/lib/channel/compress_filter.c
+++ b/src/core/lib/channel/compress_filter.c
@@ -292,7 +292,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
/* Destructor for call_data */
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
/* grab pointers to our data from the call element */
call_data *calld = elem->call_data;
grpc_slice_buffer_destroy_internal(exec_ctx, &calld->slices);
diff --git a/src/core/lib/channel/connected_channel.c b/src/core/lib/channel/connected_channel.c
index 29796f7ca7..42ef7b7806 100644
--- a/src/core/lib/channel/connected_channel.c
+++ b/src/core/lib/channel/connected_channel.c
@@ -88,7 +88,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
channel_data *chand = elem->channel_data;
int r = grpc_transport_init_stream(
exec_ctx, chand->transport, TRANSPORT_STREAM_FROM_CALL_DATA(calld),
- &args->call_stack->refcount, args->server_transport_data);
+ &args->call_stack->refcount, args->server_transport_data, args->arena);
return r == 0 ? GRPC_ERROR_NONE
: GRPC_ERROR_CREATE("transport stream initialization failed");
}
@@ -105,12 +105,12 @@ static void set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
/* Destructor for call_data */
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {
+ grpc_closure *then_schedule_closure) {
call_data *calld = elem->call_data;
channel_data *chand = elem->channel_data;
grpc_transport_destroy_stream(exec_ctx, chand->transport,
TRANSPORT_STREAM_FROM_CALL_DATA(calld),
- and_free_memory);
+ then_schedule_closure);
}
/* Constructor for channel_data */
diff --git a/src/core/lib/channel/deadline_filter.c b/src/core/lib/channel/deadline_filter.c
index 5a12d62f1d..34114bbebf 100644
--- a/src/core/lib/channel/deadline_filter.c
+++ b/src/core/lib/channel/deadline_filter.c
@@ -256,7 +256,7 @@ static grpc_error* init_call_elem(grpc_exec_ctx* exec_ctx,
// Destructor for call_data. Used for both client and server filters.
static void destroy_call_elem(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
const grpc_call_final_info* final_info,
- void* and_free_memory) {
+ grpc_closure* ignored) {
grpc_deadline_state_destroy(exec_ctx, elem);
}
diff --git a/src/core/lib/channel/http_client_filter.c b/src/core/lib/channel/http_client_filter.c
index c031533dd8..f9d0d689ac 100644
--- a/src/core/lib/channel/http_client_filter.c
+++ b/src/core/lib/channel/http_client_filter.c
@@ -412,7 +412,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
/* Destructor for call_data */
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
call_data *calld = elem->call_data;
grpc_slice_buffer_destroy_internal(exec_ctx, &calld->slices);
}
diff --git a/src/core/lib/channel/http_server_filter.c b/src/core/lib/channel/http_server_filter.c
index fb70de8e96..bebd3af335 100644
--- a/src/core/lib/channel/http_server_filter.c
+++ b/src/core/lib/channel/http_server_filter.c
@@ -358,7 +358,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
/* Destructor for call_data */
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
call_data *calld = elem->call_data;
grpc_slice_buffer_destroy_internal(exec_ctx, &calld->read_slice_buffer);
}
diff --git a/src/core/lib/channel/message_size_filter.c b/src/core/lib/channel/message_size_filter.c
index b424c0d2ac..5ba13fe251 100644
--- a/src/core/lib/channel/message_size_filter.c
+++ b/src/core/lib/channel/message_size_filter.c
@@ -200,7 +200,7 @@ static grpc_error* init_call_elem(grpc_exec_ctx* exec_ctx,
// Destructor for call_data.
static void destroy_call_elem(grpc_exec_ctx* exec_ctx, grpc_call_element* elem,
const grpc_call_final_info* final_info,
- void* ignored) {}
+ grpc_closure* ignored) {}
// Constructor for channel_data.
static grpc_error* init_channel_elem(grpc_exec_ctx* exec_ctx,
diff --git a/src/core/lib/iomgr/error.c b/src/core/lib/iomgr/error.c
index dbe5b139f9..1127fff756 100644
--- a/src/core/lib/iomgr/error.c
+++ b/src/core/lib/iomgr/error.c
@@ -35,6 +35,7 @@
#include <string.h>
+#include <grpc/slice.h>
#include <grpc/status.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
@@ -47,46 +48,7 @@
#include "src/core/lib/iomgr/error_internal.h"
#include "src/core/lib/profiling/timers.h"
-
-static void destroy_integer(void *key) {}
-
-static void *copy_integer(void *key) { return key; }
-
-static long compare_integers(void *key1, void *key2) {
- return GPR_ICMP((uintptr_t)key1, (uintptr_t)key2);
-}
-
-static void destroy_string(void *str) { gpr_free(str); }
-
-static void *copy_string(void *str) { return gpr_strdup(str); }
-
-static void destroy_err(void *err) { GRPC_ERROR_UNREF(err); }
-
-static void *copy_err(void *err) { return GRPC_ERROR_REF(err); }
-
-static void destroy_time(void *tm) { gpr_free(tm); }
-
-static gpr_timespec *box_time(gpr_timespec tm) {
- gpr_timespec *out = gpr_malloc(sizeof(*out));
- *out = tm;
- return out;
-}
-
-static void *copy_time(void *tm) { return box_time(*(gpr_timespec *)tm); }
-
-static const gpr_avl_vtable avl_vtable_ints = {destroy_integer, copy_integer,
- compare_integers,
- destroy_integer, copy_integer};
-
-static const gpr_avl_vtable avl_vtable_strs = {destroy_integer, copy_integer,
- compare_integers, destroy_string,
- copy_string};
-
-static const gpr_avl_vtable avl_vtable_times = {
- destroy_integer, copy_integer, compare_integers, destroy_time, copy_time};
-
-static const gpr_avl_vtable avl_vtable_errs = {
- destroy_integer, copy_integer, compare_integers, destroy_err, copy_err};
+#include "src/core/lib/slice/slice_internal.h"
static const char *error_int_name(grpc_error_ints key) {
switch (key) {
@@ -120,6 +82,8 @@ static const char *error_int_name(grpc_error_ints key) {
return "limit";
case GRPC_ERROR_INT_OCCURRED_DURING_WRITE:
return "occurred_during_write";
+ case GRPC_ERROR_INT_MAX:
+ GPR_UNREACHABLE_CODE(return "unknown");
}
GPR_UNREACHABLE_CODE(return "unknown");
}
@@ -150,6 +114,8 @@ static const char *error_str_name(grpc_error_strs key) {
return "filename";
case GRPC_ERROR_STR_QUEUED_BUFFERS:
return "queued_buffers";
+ case GRPC_ERROR_STR_MAX:
+ GPR_UNREACHABLE_CODE(return "unknown");
}
GPR_UNREACHABLE_CODE(return "unknown");
}
@@ -158,6 +124,8 @@ static const char *error_time_name(grpc_error_times key) {
switch (key) {
case GRPC_ERROR_TIME_CREATED:
return "created";
+ case GRPC_ERROR_TIME_MAX:
+ GPR_UNREACHABLE_CODE(return "unknown");
}
GPR_UNREACHABLE_CODE(return "unknown");
}
@@ -172,25 +140,51 @@ grpc_error *grpc_error_ref(grpc_error *err, const char *file, int line,
const char *func) {
if (grpc_error_is_special(err)) return err;
gpr_log(GPR_DEBUG, "%p: %" PRIdPTR " -> %" PRIdPTR " [%s:%d %s]", err,
- err->refs.count, err->refs.count + 1, file, line, func);
- gpr_ref(&err->refs);
+ gpr_atm_no_barrier_load(&err->atomics.refs.count),
+ gpr_atm_no_barrier_load(&err->atomics.refs.count) + 1, file, line,
+ func);
+ gpr_ref(&err->atomics.refs);
return err;
}
#else
grpc_error *grpc_error_ref(grpc_error *err) {
if (grpc_error_is_special(err)) return err;
- gpr_ref(&err->refs);
+ gpr_ref(&err->atomics.refs);
return err;
}
#endif
+static void unref_errs(grpc_error *err) {
+ uint8_t slot = err->first_err;
+ while (slot != UINT8_MAX) {
+ grpc_linked_error *lerr = (grpc_linked_error *)(err->arena + slot);
+ GRPC_ERROR_UNREF(lerr->err);
+ GPR_ASSERT(err->last_err == slot ? lerr->next == UINT8_MAX
+ : lerr->next != UINT8_MAX);
+ slot = lerr->next;
+ }
+}
+
+static void unref_slice(grpc_slice slice) {
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ grpc_slice_unref_internal(&exec_ctx, slice);
+ grpc_exec_ctx_finish(&exec_ctx);
+}
+
+static void unref_strs(grpc_error *err) {
+ for (size_t which = 0; which < GRPC_ERROR_STR_MAX; ++which) {
+ uint8_t slot = err->strs[which];
+ if (slot != UINT8_MAX) {
+ unref_slice(*(grpc_slice *)(err->arena + slot));
+ }
+ }
+}
+
static void error_destroy(grpc_error *err) {
GPR_ASSERT(!grpc_error_is_special(err));
- gpr_avl_unref(err->ints);
- gpr_avl_unref(err->strs);
- gpr_avl_unref(err->errs);
- gpr_avl_unref(err->times);
- gpr_free((void *)gpr_atm_acq_load(&err->error_string));
+ unref_errs(err);
+ unref_strs(err);
+ gpr_free((void *)gpr_atm_acq_load(&err->atomics.error_string));
gpr_free(err);
}
@@ -199,81 +193,209 @@ void grpc_error_unref(grpc_error *err, const char *file, int line,
const char *func) {
if (grpc_error_is_special(err)) return;
gpr_log(GPR_DEBUG, "%p: %" PRIdPTR " -> %" PRIdPTR " [%s:%d %s]", err,
- err->refs.count, err->refs.count - 1, file, line, func);
- if (gpr_unref(&err->refs)) {
+ gpr_atm_no_barrier_load(&err->atomics.refs.count),
+ gpr_atm_no_barrier_load(&err->atomics.refs.count) - 1, file, line,
+ func);
+ if (gpr_unref(&err->atomics.refs)) {
error_destroy(err);
}
}
#else
void grpc_error_unref(grpc_error *err) {
if (grpc_error_is_special(err)) return;
- if (gpr_unref(&err->refs)) {
+ if (gpr_unref(&err->atomics.refs)) {
error_destroy(err);
}
}
#endif
+static uint8_t get_placement(grpc_error **err, size_t size) {
+ GPR_ASSERT(*err);
+ uint8_t slots = (uint8_t)(size / sizeof(intptr_t));
+ if ((*err)->arena_size + slots > (*err)->arena_capacity) {
+ (*err)->arena_capacity = (uint8_t)(3 * (*err)->arena_capacity / 2);
+ *err = gpr_realloc(
+ *err, sizeof(grpc_error) + (*err)->arena_capacity * sizeof(intptr_t));
+ }
+ uint8_t placement = (*err)->arena_size;
+ (*err)->arena_size = (uint8_t)((*err)->arena_size + slots);
+ return placement;
+}
+
+static void internal_set_int(grpc_error **err, grpc_error_ints which,
+ intptr_t value) {
+ // GPR_ASSERT((*err)->ints[which] == UINT8_MAX); // TODO, enforce this
+ uint8_t slot = (*err)->ints[which];
+ if (slot == UINT8_MAX) {
+ slot = get_placement(err, sizeof(value));
+ }
+ (*err)->ints[which] = slot;
+ (*err)->arena[slot] = value;
+}
+
+static void internal_set_str(grpc_error **err, grpc_error_strs which,
+ grpc_slice value) {
+ // GPR_ASSERT((*err)->strs[which] == UINT8_MAX); // TODO, enforce this
+ uint8_t slot = (*err)->strs[which];
+ if (slot == UINT8_MAX) {
+ slot = get_placement(err, sizeof(value));
+ } else {
+ unref_slice(*(grpc_slice *)((*err)->arena + slot));
+ }
+ (*err)->strs[which] = slot;
+ memcpy((*err)->arena + slot, &value, sizeof(value));
+}
+
+static void internal_set_time(grpc_error **err, grpc_error_times which,
+ gpr_timespec value) {
+ // GPR_ASSERT((*err)->times[which] == UINT8_MAX); // TODO, enforce this
+ uint8_t slot = (*err)->times[which];
+ if (slot == UINT8_MAX) {
+ slot = get_placement(err, sizeof(value));
+ }
+ (*err)->times[which] = slot;
+ memcpy((*err)->arena + slot, &value, sizeof(value));
+}
+
+static void internal_add_error(grpc_error **err, grpc_error *new) {
+ grpc_linked_error new_last = {new, UINT8_MAX};
+ uint8_t slot = get_placement(err, sizeof(grpc_linked_error));
+ if ((*err)->first_err == UINT8_MAX) {
+ GPR_ASSERT((*err)->last_err == UINT8_MAX);
+ (*err)->last_err = slot;
+ (*err)->first_err = slot;
+ } else {
+ GPR_ASSERT((*err)->last_err != UINT8_MAX);
+ grpc_linked_error *old_last =
+ (grpc_linked_error *)((*err)->arena + (*err)->last_err);
+ old_last->next = slot;
+ (*err)->last_err = slot;
+ }
+ memcpy((*err)->arena + slot, &new_last, sizeof(grpc_linked_error));
+}
+
+#define SLOTS_PER_INT (sizeof(intptr_t) / sizeof(intptr_t))
+#define SLOTS_PER_STR (sizeof(grpc_slice) / sizeof(intptr_t))
+#define SLOTS_PER_TIME (sizeof(gpr_timespec) / sizeof(intptr_t))
+#define SLOTS_PER_LINKED_ERROR (sizeof(grpc_linked_error) / sizeof(intptr_t))
+
+// size of storing one int and two slices and a timespec. For line, desc, file,
+// and time created
+#define DEFAULT_ERROR_CAPACITY \
+ (SLOTS_PER_INT + (SLOTS_PER_STR * 2) + SLOTS_PER_TIME)
+
+// It is very common to include and extra int and string in an error
+#define SURPLUS_CAPACITY (2 * SLOTS_PER_INT + SLOTS_PER_TIME)
+
grpc_error *grpc_error_create(const char *file, int line, const char *desc,
grpc_error **referencing,
size_t num_referencing) {
GPR_TIMER_BEGIN("grpc_error_create", 0);
- grpc_error *err = gpr_malloc(sizeof(*err));
+ uint8_t initial_arena_capacity = (uint8_t)(
+ DEFAULT_ERROR_CAPACITY +
+ (uint8_t)(num_referencing * SLOTS_PER_LINKED_ERROR) + SURPLUS_CAPACITY);
+ grpc_error *err =
+ gpr_malloc(sizeof(*err) + initial_arena_capacity * sizeof(intptr_t));
if (err == NULL) { // TODO(ctiller): make gpr_malloc return NULL
return GRPC_ERROR_OOM;
}
#ifdef GRPC_ERROR_REFCOUNT_DEBUG
gpr_log(GPR_DEBUG, "%p create [%s:%d]", err, file, line);
#endif
- err->ints = gpr_avl_add(gpr_avl_create(&avl_vtable_ints),
- (void *)(uintptr_t)GRPC_ERROR_INT_FILE_LINE,
- (void *)(uintptr_t)line);
- err->strs = gpr_avl_add(
- gpr_avl_add(gpr_avl_create(&avl_vtable_strs),
- (void *)(uintptr_t)GRPC_ERROR_STR_FILE, gpr_strdup(file)),
- (void *)(uintptr_t)GRPC_ERROR_STR_DESCRIPTION, gpr_strdup(desc));
- err->errs = gpr_avl_create(&avl_vtable_errs);
- err->next_err = 0;
- for (size_t i = 0; i < num_referencing; i++) {
+
+ err->arena_size = 0;
+ err->arena_capacity = initial_arena_capacity;
+ err->first_err = UINT8_MAX;
+ err->last_err = UINT8_MAX;
+
+ memset(err->ints, UINT8_MAX, GRPC_ERROR_INT_MAX);
+ memset(err->strs, UINT8_MAX, GRPC_ERROR_STR_MAX);
+ memset(err->times, UINT8_MAX, GRPC_ERROR_TIME_MAX);
+
+ internal_set_int(&err, GRPC_ERROR_INT_FILE_LINE, line);
+ internal_set_str(&err, GRPC_ERROR_STR_FILE,
+ grpc_slice_from_static_string(file));
+ internal_set_str(
+ &err, GRPC_ERROR_STR_DESCRIPTION,
+ grpc_slice_from_copied_buffer(
+ desc,
+ strlen(desc) +
+ 1)); // TODO, pull this up. // TODO(ncteisen), pull this up.
+
+ for (size_t i = 0; i < num_referencing; ++i) {
if (referencing[i] == GRPC_ERROR_NONE) continue;
- err->errs = gpr_avl_add(err->errs, (void *)(err->next_err++),
- GRPC_ERROR_REF(referencing[i]));
- }
- err->times = gpr_avl_add(gpr_avl_create(&avl_vtable_times),
- (void *)(uintptr_t)GRPC_ERROR_TIME_CREATED,
- box_time(gpr_now(GPR_CLOCK_REALTIME)));
- gpr_atm_no_barrier_store(&err->error_string, 0);
- gpr_ref_init(&err->refs, 1);
+ internal_add_error(
+ &err,
+ GRPC_ERROR_REF(
+ referencing[i])); // TODO(ncteisen), change ownership semantics
+ }
+
+ internal_set_time(&err, GRPC_ERROR_TIME_CREATED, gpr_now(GPR_CLOCK_REALTIME));
+
+ gpr_atm_no_barrier_store(&err->atomics.error_string, 0);
+ gpr_ref_init(&err->atomics.refs, 1);
GPR_TIMER_END("grpc_error_create", 0);
return err;
}
+static void ref_strs(grpc_error *err) {
+ for (size_t i = 0; i < GRPC_ERROR_STR_MAX; ++i) {
+ uint8_t slot = err->strs[i];
+ if (slot != UINT8_MAX) {
+ grpc_slice_ref_internal(*(grpc_slice *)(err->arena + slot));
+ }
+ }
+}
+
+static void ref_errs(grpc_error *err) {
+ uint8_t slot = err->first_err;
+ while (slot != UINT8_MAX) {
+ grpc_linked_error *lerr = (grpc_linked_error *)(err->arena + slot);
+ GRPC_ERROR_REF(lerr->err);
+ slot = lerr->next;
+ }
+}
+
static grpc_error *copy_error_and_unref(grpc_error *in) {
GPR_TIMER_BEGIN("copy_error_and_unref", 0);
grpc_error *out;
if (grpc_error_is_special(in)) {
- if (in == GRPC_ERROR_NONE)
- out = grpc_error_set_int(GRPC_ERROR_CREATE("no error"),
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK);
- else if (in == GRPC_ERROR_OOM)
- out = GRPC_ERROR_CREATE("oom");
- else if (in == GRPC_ERROR_CANCELLED)
- out =
- grpc_error_set_int(GRPC_ERROR_CREATE("cancelled"),
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED);
- else
- out = GRPC_ERROR_CREATE("unknown");
+ out = GRPC_ERROR_CREATE("unknown");
+ if (in == GRPC_ERROR_NONE) {
+ internal_set_str(&out, GRPC_ERROR_STR_DESCRIPTION,
+ grpc_slice_from_static_string("no error"));
+ internal_set_int(&out, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK);
+ } else if (in == GRPC_ERROR_OOM) {
+ internal_set_str(&out, GRPC_ERROR_STR_DESCRIPTION,
+ grpc_slice_from_static_string("oom"));
+ } else if (in == GRPC_ERROR_CANCELLED) {
+ internal_set_str(&out, GRPC_ERROR_STR_DESCRIPTION,
+ grpc_slice_from_static_string("cancelled"));
+ internal_set_int(&out, GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED);
+ }
+ } else if (gpr_ref_is_unique(&in->atomics.refs)) {
+ out = in;
} else {
- out = gpr_malloc(sizeof(*out));
+ uint8_t new_arena_capacity = in->arena_capacity;
+ // the returned err will be added to, so we ensure this is room to avoid
+ // unneeded allocations.
+ if (in->arena_capacity - in->arena_size < (uint8_t)SLOTS_PER_STR) {
+ new_arena_capacity = (uint8_t)(3 * new_arena_capacity / 2);
+ }
+ out = gpr_malloc(sizeof(*in) + new_arena_capacity * sizeof(intptr_t));
#ifdef GRPC_ERROR_REFCOUNT_DEBUG
gpr_log(GPR_DEBUG, "%p create copying %p", out, in);
#endif
- out->ints = gpr_avl_ref(in->ints);
- out->strs = gpr_avl_ref(in->strs);
- out->errs = gpr_avl_ref(in->errs);
- out->times = gpr_avl_ref(in->times);
- gpr_atm_no_barrier_store(&out->error_string, 0);
- out->next_err = in->next_err;
- gpr_ref_init(&out->refs, 1);
+ // bulk memcpy of the rest of the struct.
+ size_t skip = sizeof(&out->atomics);
+ memcpy((void *)((uintptr_t)out + skip), (void *)((uintptr_t)in + skip),
+ sizeof(*in) + (in->arena_size * sizeof(intptr_t)) - skip);
+ // manually set the atomics and the new capacity
+ gpr_atm_no_barrier_store(&out->atomics.error_string, 0);
+ gpr_ref_init(&out->atomics.refs, 1);
+ out->arena_capacity = new_arena_capacity;
+ ref_strs(out);
+ ref_errs(out);
GRPC_ERROR_UNREF(in);
}
GPR_TIMER_END("copy_error_and_unref", 0);
@@ -284,7 +406,7 @@ grpc_error *grpc_error_set_int(grpc_error *src, grpc_error_ints which,
intptr_t value) {
GPR_TIMER_BEGIN("grpc_error_set_int", 0);
grpc_error *new = copy_error_and_unref(src);
- new->ints = gpr_avl_add(new->ints, (void *)(uintptr_t)which, (void *)value);
+ internal_set_int(&new, which, value);
GPR_TIMER_END("grpc_error_set_int", 0);
return new;
}
@@ -302,7 +424,6 @@ static special_error_status_map error_status_map[] = {
bool grpc_error_get_int(grpc_error *err, grpc_error_ints which, intptr_t *p) {
GPR_TIMER_BEGIN("grpc_error_get_int", 0);
- void *pp;
if (grpc_error_is_special(err)) {
if (which == GRPC_ERROR_INT_GRPC_STATUS) {
for (size_t i = 0; i < GPR_ARRAY_SIZE(error_status_map); i++) {
@@ -316,8 +437,9 @@ bool grpc_error_get_int(grpc_error *err, grpc_error_ints which, intptr_t *p) {
GPR_TIMER_END("grpc_error_get_int", 0);
return false;
}
- if (gpr_avl_maybe_get(err->ints, (void *)(uintptr_t)which, &pp)) {
- if (p != NULL) *p = (intptr_t)pp;
+ uint8_t slot = err->ints[which];
+ if (slot != UINT8_MAX) {
+ if (p != NULL) *p = err->arena[slot];
GPR_TIMER_END("grpc_error_get_int", 0);
return true;
}
@@ -329,8 +451,9 @@ grpc_error *grpc_error_set_str(grpc_error *src, grpc_error_strs which,
const char *value) {
GPR_TIMER_BEGIN("grpc_error_set_str", 0);
grpc_error *new = copy_error_and_unref(src);
- new->strs =
- gpr_avl_add(new->strs, (void *)(uintptr_t)which, gpr_strdup(value));
+ internal_set_str(&new, which,
+ grpc_slice_from_copied_buffer(
+ value, strlen(value) + 1)); // TODO, pull this up.
GPR_TIMER_END("grpc_error_set_str", 0);
return new;
}
@@ -346,13 +469,19 @@ const char *grpc_error_get_str(grpc_error *err, grpc_error_strs which) {
}
return NULL;
}
- return gpr_avl_get(err->strs, (void *)(uintptr_t)which);
+ uint8_t slot = err->strs[which];
+ if (slot != UINT8_MAX) {
+ return (const char *)GRPC_SLICE_START_PTR(
+ *(grpc_slice *)(err->arena + slot));
+ } else {
+ return NULL;
+ }
}
grpc_error *grpc_error_add_child(grpc_error *src, grpc_error *child) {
GPR_TIMER_BEGIN("grpc_error_add_child", 0);
grpc_error *new = copy_error_and_unref(src);
- new->errs = gpr_avl_add(new->errs, (void *)(new->next_err++), child);
+ internal_add_error(&new, child);
GPR_TIMER_END("grpc_error_add_child", 0);
return new;
}
@@ -372,42 +501,6 @@ typedef struct {
size_t cap_kvs;
} kv_pairs;
-static void append_kv(kv_pairs *kvs, char *key, char *value) {
- if (kvs->num_kvs == kvs->cap_kvs) {
- kvs->cap_kvs = GPR_MAX(3 * kvs->cap_kvs / 2, 4);
- kvs->kvs = gpr_realloc(kvs->kvs, sizeof(*kvs->kvs) * kvs->cap_kvs);
- }
- kvs->kvs[kvs->num_kvs].key = key;
- kvs->kvs[kvs->num_kvs].value = value;
- kvs->num_kvs++;
-}
-
-static void collect_kvs(gpr_avl_node *node, char *key(void *k),
- char *fmt(void *v), kv_pairs *kvs) {
- if (node == NULL) return;
- append_kv(kvs, key(node->key), fmt(node->value));
- collect_kvs(node->left, key, fmt, kvs);
- collect_kvs(node->right, key, fmt, kvs);
-}
-
-static char *key_int(void *p) {
- return gpr_strdup(error_int_name((grpc_error_ints)(uintptr_t)p));
-}
-
-static char *key_str(void *p) {
- return gpr_strdup(error_str_name((grpc_error_strs)(uintptr_t)p));
-}
-
-static char *key_time(void *p) {
- return gpr_strdup(error_time_name((grpc_error_times)(uintptr_t)p));
-}
-
-static char *fmt_int(void *p) {
- char *s;
- gpr_asprintf(&s, "%" PRIdPTR, (intptr_t)p);
- return s;
-}
-
static void append_chr(char c, char **s, size_t *sz, size_t *cap) {
if (*sz == *cap) {
*cap = GPR_MAX(8, 3 * *cap / 2);
@@ -459,6 +552,40 @@ static void append_esc_str(const char *str, char **s, size_t *sz, size_t *cap) {
append_chr('"', s, sz, cap);
}
+static void append_kv(kv_pairs *kvs, char *key, char *value) {
+ if (kvs->num_kvs == kvs->cap_kvs) {
+ kvs->cap_kvs = GPR_MAX(3 * kvs->cap_kvs / 2, 4);
+ kvs->kvs = gpr_realloc(kvs->kvs, sizeof(*kvs->kvs) * kvs->cap_kvs);
+ }
+ kvs->kvs[kvs->num_kvs].key = key;
+ kvs->kvs[kvs->num_kvs].value = value;
+ kvs->num_kvs++;
+}
+
+static char *key_int(grpc_error_ints which) {
+ return gpr_strdup(error_int_name(which));
+}
+
+static char *fmt_int(intptr_t p) {
+ char *s;
+ gpr_asprintf(&s, "%" PRIdPTR, p);
+ return s;
+}
+
+static void collect_ints_kvs(grpc_error *err, kv_pairs *kvs) {
+ for (size_t which = 0; which < GRPC_ERROR_INT_MAX; ++which) {
+ uint8_t slot = err->ints[which];
+ if (slot != UINT8_MAX) {
+ append_kv(kvs, key_int((grpc_error_ints)which),
+ fmt_int(err->arena[slot]));
+ }
+ }
+}
+
+static char *key_str(grpc_error_strs which) {
+ return gpr_strdup(error_str_name(which));
+}
+
static char *fmt_str(void *p) {
char *s = NULL;
size_t sz = 0;
@@ -468,8 +595,22 @@ static char *fmt_str(void *p) {
return s;
}
-static char *fmt_time(void *p) {
- gpr_timespec tm = *(gpr_timespec *)p;
+static void collect_strs_kvs(grpc_error *err, kv_pairs *kvs) {
+ for (size_t which = 0; which < GRPC_ERROR_STR_MAX; ++which) {
+ uint8_t slot = err->strs[which];
+ if (slot != UINT8_MAX) {
+ append_kv(
+ kvs, key_str((grpc_error_strs)which),
+ fmt_str(GRPC_SLICE_START_PTR(*(grpc_slice *)(err->arena + slot))));
+ }
+ }
+}
+
+static char *key_time(grpc_error_times which) {
+ return gpr_strdup(error_time_name(which));
+}
+
+static char *fmt_time(gpr_timespec tm) {
char *out;
char *pfx = "!!";
switch (tm.clock_type) {
@@ -490,24 +631,37 @@ static char *fmt_time(void *p) {
return out;
}
-static void add_errs(gpr_avl_node *n, char **s, size_t *sz, size_t *cap,
- bool *first) {
- if (n == NULL) return;
- add_errs(n->left, s, sz, cap, first);
- if (!*first) append_chr(',', s, sz, cap);
- *first = false;
- const char *e = grpc_error_string(n->value);
- append_str(e, s, sz, cap);
- add_errs(n->right, s, sz, cap, first);
+static void collect_times_kvs(grpc_error *err, kv_pairs *kvs) {
+ for (size_t which = 0; which < GRPC_ERROR_TIME_MAX; ++which) {
+ uint8_t slot = err->times[which];
+ if (slot != UINT8_MAX) {
+ append_kv(kvs, key_time((grpc_error_times)which),
+ fmt_time(*(gpr_timespec *)(err->arena + slot)));
+ }
+ }
+}
+
+static void add_errs(grpc_error *err, char **s, size_t *sz, size_t *cap) {
+ uint8_t slot = err->first_err;
+ bool first = true;
+ while (slot != UINT8_MAX) {
+ grpc_linked_error *lerr = (grpc_linked_error *)(err->arena + slot);
+ if (!first) append_chr(',', s, sz, cap);
+ first = false;
+ const char *e = grpc_error_string(lerr->err);
+ append_str(e, s, sz, cap);
+ GPR_ASSERT(err->last_err == slot ? lerr->next == UINT8_MAX
+ : lerr->next != UINT8_MAX);
+ slot = lerr->next;
+ }
}
static char *errs_string(grpc_error *err) {
char *s = NULL;
size_t sz = 0;
size_t cap = 0;
- bool first = true;
append_chr('[', &s, &sz, &cap);
- add_errs(err->errs.root, &s, &sz, &cap, &first);
+ add_errs(err, &s, &sz, &cap);
append_chr(']', &s, &sz, &cap);
append_chr(0, &s, &sz, &cap);
return s;
@@ -546,7 +700,7 @@ const char *grpc_error_string(grpc_error *err) {
if (err == GRPC_ERROR_OOM) return oom_error_string;
if (err == GRPC_ERROR_CANCELLED) return cancelled_error_string;
- void *p = (void *)gpr_atm_acq_load(&err->error_string);
+ void *p = (void *)gpr_atm_acq_load(&err->atomics.error_string);
if (p != NULL) {
GPR_TIMER_END("grpc_error_string", 0);
return p;
@@ -555,10 +709,10 @@ const char *grpc_error_string(grpc_error *err) {
kv_pairs kvs;
memset(&kvs, 0, sizeof(kvs));
- collect_kvs(err->ints.root, key_int, fmt_int, &kvs);
- collect_kvs(err->strs.root, key_str, fmt_str, &kvs);
- collect_kvs(err->times.root, key_time, fmt_time, &kvs);
- if (!gpr_avl_is_empty(err->errs)) {
+ collect_ints_kvs(err, &kvs);
+ collect_strs_kvs(err, &kvs);
+ collect_times_kvs(err, &kvs);
+ if (err->first_err != UINT8_MAX) {
append_kv(&kvs, gpr_strdup("referenced_errors"), errs_string(err));
}
@@ -566,9 +720,9 @@ const char *grpc_error_string(grpc_error *err) {
char *out = finish_kvs(&kvs);
- if (!gpr_atm_rel_cas(&err->error_string, 0, (gpr_atm)out)) {
+ if (!gpr_atm_rel_cas(&err->atomics.error_string, 0, (gpr_atm)out)) {
gpr_free(out);
- out = (char *)gpr_atm_no_barrier_load(&err->error_string);
+ out = (char *)gpr_atm_no_barrier_load(&err->atomics.error_string);
}
GPR_TIMER_END("grpc_error_string", 0);
diff --git a/src/core/lib/iomgr/error.h b/src/core/lib/iomgr/error.h
index 2613512acb..eb953947ae 100644
--- a/src/core/lib/iomgr/error.h
+++ b/src/core/lib/iomgr/error.h
@@ -102,6 +102,9 @@ typedef enum {
GRPC_ERROR_INT_LIMIT,
/// chttp2: did the error occur while a write was in progress
GRPC_ERROR_INT_OCCURRED_DURING_WRITE,
+
+ /// Must always be last
+ GRPC_ERROR_INT_MAX,
} grpc_error_ints;
typedef enum {
@@ -129,11 +132,17 @@ typedef enum {
GRPC_ERROR_STR_KEY,
/// value associated with the error
GRPC_ERROR_STR_VALUE,
+
+ /// Must always be last
+ GRPC_ERROR_STR_MAX,
} grpc_error_strs;
typedef enum {
/// timestamp of error creation
GRPC_ERROR_TIME_CREATED,
+
+ /// Must always be last
+ GRPC_ERROR_TIME_MAX,
} grpc_error_times;
/// The following "special" errors can be propagated without allocating memory.
@@ -184,8 +193,6 @@ void grpc_error_unref(grpc_error *err);
grpc_error *grpc_error_set_int(grpc_error *src, grpc_error_ints which,
intptr_t value) GRPC_MUST_USE_RESULT;
bool grpc_error_get_int(grpc_error *error, grpc_error_ints which, intptr_t *p);
-grpc_error *grpc_error_set_time(grpc_error *src, grpc_error_times which,
- gpr_timespec value) GRPC_MUST_USE_RESULT;
grpc_error *grpc_error_set_str(grpc_error *src, grpc_error_strs which,
const char *value) GRPC_MUST_USE_RESULT;
/// Returns NULL if the specified string is not set.
diff --git a/src/core/lib/iomgr/error_internal.h b/src/core/lib/iomgr/error_internal.h
index 1c89ead4ed..7f204df1b2 100644
--- a/src/core/lib/iomgr/error_internal.h
+++ b/src/core/lib/iomgr/error_internal.h
@@ -35,18 +35,39 @@
#define GRPC_CORE_LIB_IOMGR_ERROR_INTERNAL_H
#include <inttypes.h>
-#include <stdbool.h>
+#include <stdbool.h> // TODO, do we need this?
-#include <grpc/support/avl.h>
+#include <grpc/support/sync.h>
+typedef struct grpc_linked_error grpc_linked_error;
+
+struct grpc_linked_error {
+ grpc_error *err;
+ uint8_t next;
+};
+
+// c core representation of an error. See error.h for high level description of
+// this object.
struct grpc_error {
- gpr_refcount refs;
- gpr_avl ints;
- gpr_avl strs;
- gpr_avl times;
- gpr_avl errs;
- uintptr_t next_err;
- gpr_atm error_string;
+ // All atomics in grpc_error must be stored in this nested struct. The rest of
+ // the object is memcpy-ed in bulk in copy_and_unref.
+ struct atomics {
+ gpr_refcount refs;
+ gpr_atm error_string;
+ } atomics;
+ // These arrays index into dynamic arena at the bottom of the struct.
+ // UINT8_MAX is used as a sentinel value.
+ uint8_t ints[GRPC_ERROR_INT_MAX];
+ uint8_t strs[GRPC_ERROR_STR_MAX];
+ uint8_t times[GRPC_ERROR_TIME_MAX];
+ // The child errors are stored in the arena, but are effectively a linked list
+ // structure, since they are contained withing grpc_linked_error objects.
+ uint8_t first_err;
+ uint8_t last_err;
+ // The arena is dynamically reallocated with a grow factor of 1.5.
+ uint8_t arena_size;
+ uint8_t arena_capacity;
+ intptr_t arena[0];
};
bool grpc_error_is_special(grpc_error *err);
diff --git a/src/core/lib/iomgr/pollset_uv.c b/src/core/lib/iomgr/pollset_uv.c
index af33949c69..a2f81bcd78 100644
--- a/src/core/lib/iomgr/pollset_uv.c
+++ b/src/core/lib/iomgr/pollset_uv.c
@@ -39,6 +39,7 @@
#include <string.h>
+#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/sync.h>
@@ -61,25 +62,30 @@ gpr_mu grpc_polling_mu;
immediately in the next loop iteration.
Note: In the future, if there is a bug that involves missing wakeups in the
future, try adding a uv_async_t to kick the loop differently */
-uv_timer_t dummy_uv_handle;
+uv_timer_t *dummy_uv_handle;
size_t grpc_pollset_size() { return sizeof(grpc_pollset); }
void dummy_timer_cb(uv_timer_t *handle) {}
+void dummy_handle_close_cb(uv_handle_t *handle) { gpr_free(handle); }
+
void grpc_pollset_global_init(void) {
gpr_mu_init(&grpc_polling_mu);
- uv_timer_init(uv_default_loop(), &dummy_uv_handle);
+ dummy_uv_handle = gpr_malloc(sizeof(uv_timer_t));
+ uv_timer_init(uv_default_loop(), dummy_uv_handle);
grpc_pollset_work_run_loop = 1;
}
-static void timer_close_cb(uv_handle_t *handle) { handle->data = (void *)1; }
-
void grpc_pollset_global_shutdown(void) {
gpr_mu_destroy(&grpc_polling_mu);
- uv_close((uv_handle_t *)&dummy_uv_handle, timer_close_cb);
+ uv_close((uv_handle_t *)dummy_uv_handle, dummy_handle_close_cb);
}
+static void timer_run_cb(uv_timer_t *timer) {}
+
+static void timer_close_cb(uv_handle_t *handle) { handle->data = (void *)1; }
+
void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu) {
*mu = &grpc_polling_mu;
uv_timer_init(uv_default_loop(), &pollset->timer);
@@ -95,7 +101,7 @@ void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
uv_run(uv_default_loop(), UV_RUN_NOWAIT);
} else {
// kick the loop once
- uv_timer_start(&dummy_uv_handle, dummy_timer_cb, 0, 0);
+ uv_timer_start(dummy_uv_handle, dummy_timer_cb, 0, 0);
}
grpc_closure_sched(exec_ctx, closure, GRPC_ERROR_NONE);
}
@@ -111,8 +117,6 @@ void grpc_pollset_destroy(grpc_pollset *pollset) {
}
}
-static void timer_run_cb(uv_timer_t *timer) {}
-
grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
grpc_pollset_worker **worker_hdl,
gpr_timespec now, gpr_timespec deadline) {
@@ -145,7 +149,7 @@ grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
grpc_error *grpc_pollset_kick(grpc_pollset *pollset,
grpc_pollset_worker *specific_worker) {
- uv_timer_start(&dummy_uv_handle, dummy_timer_cb, 0, 0);
+ uv_timer_start(dummy_uv_handle, dummy_timer_cb, 0, 0);
return GRPC_ERROR_NONE;
}
diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h
index f1897bb91f..94a454c0b7 100644
--- a/src/core/lib/iomgr/port.h
+++ b/src/core/lib/iomgr/port.h
@@ -39,6 +39,7 @@
#if defined(GRPC_UV)
// Do nothing
#elif defined(GPR_MANYLINUX1)
+#define GRPC_HAVE_IFADDRS 1
#define GRPC_HAVE_IPV6_RECVPKTINFO 1
#define GRPC_HAVE_IP_PKTINFO 1
#define GRPC_HAVE_MSG_NOSIGNAL 1
@@ -65,6 +66,7 @@
#define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#elif defined(GPR_LINUX)
+#define GRPC_HAVE_IFADDRS 1
#define GRPC_HAVE_IPV6_RECVPKTINFO 1
#define GRPC_HAVE_IP_PKTINFO 1
#define GRPC_HAVE_MSG_NOSIGNAL 1
@@ -90,6 +92,7 @@
#define GRPC_POSIX_SOCKETUTILS
#endif
#elif defined(GPR_APPLE)
+#define GRPC_HAVE_IFADDRS 1
#define GRPC_HAVE_SO_NOSIGPIPE 1
#define GRPC_HAVE_UNIX_SOCKET 1
#define GRPC_MSG_IOVLEN_TYPE int
@@ -100,6 +103,7 @@
#define GRPC_POSIX_WAKEUP_FD 1
#define GRPC_TIMER_USE_GENERIC 1
#elif defined(GPR_FREEBSD)
+#define GRPC_HAVE_IFADDRS 1
#define GRPC_HAVE_IPV6_RECVPKTINFO 1
#define GRPC_HAVE_SO_NOSIGPIPE 1
#define GRPC_HAVE_UNIX_SOCKET 1
diff --git a/src/core/lib/iomgr/resolve_address_uv.c b/src/core/lib/iomgr/resolve_address_uv.c
index 79ff910738..4d715be94c 100644
--- a/src/core/lib/iomgr/resolve_address_uv.c
+++ b/src/core/lib/iomgr/resolve_address_uv.c
@@ -40,6 +40,7 @@
#include <grpc/support/host_port.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
+#include <grpc/support/useful.h>
#include "src/core/lib/iomgr/closure.h"
#include "src/core/lib/iomgr/error.h"
@@ -54,8 +55,36 @@ typedef struct request {
grpc_closure *on_done;
grpc_resolved_addresses **addresses;
struct addrinfo *hints;
+ char *host;
+ char *port;
} request;
+static int retry_named_port_failure(int status, request *r,
+ uv_getaddrinfo_cb getaddrinfo_cb) {
+ if (status != 0) {
+ // This loop is copied from resolve_address_posix.c
+ char *svc[][2] = {{"http", "80"}, {"https", "443"}};
+ for (size_t i = 0; i < GPR_ARRAY_SIZE(svc); i++) {
+ if (strcmp(r->port, svc[i][0]) == 0) {
+ int retry_status;
+ uv_getaddrinfo_t *req = gpr_malloc(sizeof(uv_getaddrinfo_t));
+ req->data = r;
+ retry_status = uv_getaddrinfo(uv_default_loop(), req, getaddrinfo_cb,
+ r->host, svc[i][1], r->hints);
+ if (retry_status < 0 || getaddrinfo_cb == NULL) {
+ // The callback will not be called
+ gpr_free(req);
+ }
+ return retry_status;
+ }
+ }
+ }
+ /* If this function calls uv_getaddrinfo, it will return that function's
+ return value. That function only returns numbers <=0, so we can safely
+ return 1 to indicate that we never retried */
+ return 1;
+}
+
static grpc_error *handle_addrinfo_result(int status, struct addrinfo *result,
grpc_resolved_addresses **addresses) {
struct addrinfo *resp;
@@ -97,13 +126,21 @@ static void getaddrinfo_callback(uv_getaddrinfo_t *req, int status,
request *r = (request *)req->data;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_error *error;
+ int retry_status;
+
+ gpr_free(req);
+ retry_status = retry_named_port_failure(status, r, getaddrinfo_callback);
+ if (retry_status == 0) {
+ // The request is being retried. Nothing should be done here
+ return;
+ }
+ /* Either no retry was attempted, or the retry failed. Either way, the
+ original error probably has more interesting information */
error = handle_addrinfo_result(status, res, r->addresses);
grpc_closure_sched(&exec_ctx, r->on_done, error);
grpc_exec_ctx_finish(&exec_ctx);
-
gpr_free(r->hints);
gpr_free(r);
- gpr_free(req);
uv_freeaddrinfo(res);
}
@@ -143,6 +180,7 @@ static grpc_error *blocking_resolve_address_impl(
uv_getaddrinfo_t req;
int s;
grpc_error *err;
+ int retry_status;
req.addrinfo = NULL;
@@ -158,6 +196,12 @@ static grpc_error *blocking_resolve_address_impl(
hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */
s = uv_getaddrinfo(uv_default_loop(), &req, NULL, host, port, &hints);
+ request r = {
+ .addresses = addresses, .hints = &hints, .host = host, .port = port};
+ retry_status = retry_named_port_failure(s, &r, NULL);
+ if (retry_status <= 0) {
+ s = retry_status;
+ }
err = handle_addrinfo_result(s, req.addrinfo, addresses);
done:
@@ -200,6 +244,8 @@ static void resolve_address_impl(grpc_exec_ctx *exec_ctx, const char *name,
r = gpr_malloc(sizeof(request));
r->on_done = on_done;
r->addresses = addrs;
+ r->host = host;
+ r->port = port;
req = gpr_malloc(sizeof(uv_getaddrinfo_t));
req->data = r;
@@ -222,6 +268,8 @@ static void resolve_address_impl(grpc_exec_ctx *exec_ctx, const char *name,
gpr_free(r);
gpr_free(req);
gpr_free(hints);
+ gpr_free(host);
+ gpr_free(port);
}
}
diff --git a/src/core/lib/iomgr/sockaddr_utils.c b/src/core/lib/iomgr/sockaddr_utils.c
index ffa62cb53c..9d2732666b 100644
--- a/src/core/lib/iomgr/sockaddr_utils.c
+++ b/src/core/lib/iomgr/sockaddr_utils.c
@@ -162,6 +162,7 @@ int grpc_sockaddr_to_string(char **out,
char ntop_buf[INET6_ADDRSTRLEN];
const void *ip = NULL;
int port;
+ uint32_t sin6_scope_id = 0;
int ret;
*out = NULL;
@@ -177,10 +178,19 @@ int grpc_sockaddr_to_string(char **out,
const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)addr;
ip = &addr6->sin6_addr;
port = ntohs(addr6->sin6_port);
+ sin6_scope_id = addr6->sin6_scope_id;
}
if (ip != NULL &&
grpc_inet_ntop(addr->sa_family, ip, ntop_buf, sizeof(ntop_buf)) != NULL) {
- ret = gpr_join_host_port(out, ntop_buf, port);
+ if (sin6_scope_id != 0) {
+ char *host_with_scope;
+ /* Enclose sin6_scope_id with the format defined in RFC 6784 section 2. */
+ gpr_asprintf(&host_with_scope, "%s%%25%" PRIu32, ntop_buf, sin6_scope_id);
+ ret = gpr_join_host_port(out, host_with_scope, port);
+ gpr_free(host_with_scope);
+ } else {
+ ret = gpr_join_host_port(out, ntop_buf, port);
+ }
} else {
ret = gpr_asprintf(out, "(sockaddr family=%d)", addr->sa_family);
}
diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c
index ae66577caf..618483d9cb 100644
--- a/src/core/lib/iomgr/tcp_client_uv.c
+++ b/src/core/lib/iomgr/tcp_client_uv.c
@@ -76,7 +76,6 @@ static void uv_tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp,
const char *str = grpc_error_string(error);
gpr_log(GPR_DEBUG, "CLIENT_CONNECT: %s: on_alarm: error=%s",
connect->addr_name, str);
- grpc_error_free_string(str);
}
if (error == GRPC_ERROR_NONE) {
/* error == NONE implies that the timer ran out, and wasn't cancelled. If
diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c
index 36f878fdd4..e242631fc0 100644
--- a/src/core/lib/iomgr/tcp_server_posix.c
+++ b/src/core/lib/iomgr/tcp_server_posix.c
@@ -44,11 +44,8 @@
#include <errno.h>
#include <fcntl.h>
-#include <ifaddrs.h>
-#include <limits.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
-#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
@@ -67,80 +64,10 @@
#include "src/core/lib/iomgr/sockaddr_utils.h"
#include "src/core/lib/iomgr/socket_utils_posix.h"
#include "src/core/lib/iomgr/tcp_posix.h"
+#include "src/core/lib/iomgr/tcp_server_utils_posix.h"
#include "src/core/lib/iomgr/unix_sockets_posix.h"
#include "src/core/lib/support/string.h"
-#define MIN_SAFE_ACCEPT_QUEUE_SIZE 100
-
-static gpr_once s_init_max_accept_queue_size;
-static int s_max_accept_queue_size;
-
-/* one listening port */
-typedef struct grpc_tcp_listener grpc_tcp_listener;
-struct grpc_tcp_listener {
- int fd;
- grpc_fd *emfd;
- grpc_tcp_server *server;
- grpc_resolved_address addr;
- int port;
- unsigned port_index;
- unsigned fd_index;
- grpc_closure read_closure;
- grpc_closure destroyed_closure;
- struct grpc_tcp_listener *next;
- /* sibling is a linked list of all listeners for a given port. add_port and
- clone_port place all new listeners in the same sibling list. A member of
- the 'sibling' list is also a member of the 'next' list. The head of each
- sibling list has is_sibling==0, and subsequent members of sibling lists
- have is_sibling==1. is_sibling allows separate sibling lists to be
- identified while iterating through 'next'. */
- struct grpc_tcp_listener *sibling;
- int is_sibling;
-};
-
-/* the overall server */
-struct grpc_tcp_server {
- gpr_refcount refs;
- /* Called whenever accept() succeeds on a server port. */
- grpc_tcp_server_cb on_accept_cb;
- void *on_accept_cb_arg;
-
- gpr_mu mu;
-
- /* active port count: how many ports are actually still listening */
- size_t active_ports;
- /* destroyed port count: how many ports are completely destroyed */
- size_t destroyed_ports;
-
- /* is this server shutting down? */
- bool shutdown;
- /* use SO_REUSEPORT */
- bool so_reuseport;
- /* expand wildcard addresses to a list of all local addresses */
- bool expand_wildcard_addrs;
-
- /* linked list of server ports */
- grpc_tcp_listener *head;
- grpc_tcp_listener *tail;
- unsigned nports;
-
- /* List of closures passed to shutdown_starting_add(). */
- grpc_closure_list shutdown_starting;
-
- /* shutdown callback */
- grpc_closure *shutdown_complete;
-
- /* all pollsets interested in new connections */
- grpc_pollset **pollsets;
- /* number of pollsets in the pollsets array */
- size_t pollset_count;
-
- /* next pollset to assign a channel to */
- gpr_atm next_pollset_to_assign;
-
- grpc_resource_quota *resource_quota;
-};
-
static gpr_once check_init = GPR_ONCE_INIT;
static bool has_so_reuseport = false;
@@ -161,7 +88,7 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx,
grpc_tcp_server **server) {
gpr_once_init(&check_init, init);
- grpc_tcp_server *s = gpr_malloc(sizeof(grpc_tcp_server));
+ grpc_tcp_server *s = gpr_zalloc(sizeof(grpc_tcp_server));
s->so_reuseport = has_so_reuseport;
s->resource_quota = grpc_resource_quota_create(NULL);
s->expand_wildcard_addrs = false;
@@ -299,99 +226,6 @@ static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
}
}
-/* get max listen queue size on linux */
-static void init_max_accept_queue_size(void) {
- int n = SOMAXCONN;
- char buf[64];
- FILE *fp = fopen("/proc/sys/net/core/somaxconn", "r");
- if (fp == NULL) {
- /* 2.4 kernel. */
- s_max_accept_queue_size = SOMAXCONN;
- return;
- }
- if (fgets(buf, sizeof buf, fp)) {
- char *end;
- long i = strtol(buf, &end, 10);
- if (i > 0 && i <= INT_MAX && end && *end == 0) {
- n = (int)i;
- }
- }
- fclose(fp);
- s_max_accept_queue_size = n;
-
- if (s_max_accept_queue_size < MIN_SAFE_ACCEPT_QUEUE_SIZE) {
- gpr_log(GPR_INFO,
- "Suspiciously small accept queue (%d) will probably lead to "
- "connection drops",
- s_max_accept_queue_size);
- }
-}
-
-static int get_max_accept_queue_size(void) {
- gpr_once_init(&s_init_max_accept_queue_size, init_max_accept_queue_size);
- return s_max_accept_queue_size;
-}
-
-/* Prepare a recently-created socket for listening. */
-static grpc_error *prepare_socket(int fd, const grpc_resolved_address *addr,
- bool so_reuseport, int *port) {
- grpc_resolved_address sockname_temp;
- grpc_error *err = GRPC_ERROR_NONE;
-
- GPR_ASSERT(fd >= 0);
-
- if (so_reuseport && !grpc_is_unix_socket(addr)) {
- err = grpc_set_socket_reuse_port(fd, 1);
- if (err != GRPC_ERROR_NONE) goto error;
- }
-
- err = grpc_set_socket_nonblocking(fd, 1);
- if (err != GRPC_ERROR_NONE) goto error;
- err = grpc_set_socket_cloexec(fd, 1);
- if (err != GRPC_ERROR_NONE) goto error;
- if (!grpc_is_unix_socket(addr)) {
- err = grpc_set_socket_low_latency(fd, 1);
- if (err != GRPC_ERROR_NONE) goto error;
- err = grpc_set_socket_reuse_addr(fd, 1);
- if (err != GRPC_ERROR_NONE) goto error;
- }
- err = grpc_set_socket_no_sigpipe_if_possible(fd);
- if (err != GRPC_ERROR_NONE) goto error;
-
- GPR_ASSERT(addr->len < ~(socklen_t)0);
- if (bind(fd, (struct sockaddr *)addr->addr, (socklen_t)addr->len) < 0) {
- err = GRPC_OS_ERROR(errno, "bind");
- goto error;
- }
-
- if (listen(fd, get_max_accept_queue_size()) < 0) {
- err = GRPC_OS_ERROR(errno, "listen");
- goto error;
- }
-
- sockname_temp.len = sizeof(struct sockaddr_storage);
-
- if (getsockname(fd, (struct sockaddr *)sockname_temp.addr,
- (socklen_t *)&sockname_temp.len) < 0) {
- err = GRPC_OS_ERROR(errno, "getsockname");
- goto error;
- }
-
- *port = grpc_sockaddr_get_port(&sockname_temp);
- return GRPC_ERROR_NONE;
-
-error:
- GPR_ASSERT(err != GRPC_ERROR_NONE);
- if (fd >= 0) {
- close(fd);
- }
- grpc_error *ret = grpc_error_set_int(
- GRPC_ERROR_CREATE_REFERENCING("Unable to configure socket", &err, 1),
- GRPC_ERROR_INT_FD, fd);
- GRPC_ERROR_UNREF(err);
- return ret;
-}
-
/* event manager callback when reads are ready */
static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) {
grpc_tcp_listener *sp = arg;
@@ -422,7 +256,14 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) {
grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
return;
default:
- gpr_log(GPR_ERROR, "Failed accept4: %s", strerror(errno));
+ gpr_mu_lock(&sp->server->mu);
+ if (!sp->server->shutdown_listeners) {
+ gpr_log(GPR_ERROR, "Failed accept4: %s", strerror(errno));
+ } else {
+ /* if we have shutdown listeners, accept4 could fail, and we
+ needn't notify users */
+ }
+ gpr_mu_unlock(&sp->server->mu);
goto error;
}
}
@@ -438,11 +279,6 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) {
grpc_fd *fdobj = grpc_fd_create(fd, name);
- if (read_notifier_pollset == NULL) {
- gpr_log(GPR_ERROR, "Read notifier pollset is not set on the fd");
- goto error;
- }
-
grpc_pollset_add_fd(exec_ctx, read_notifier_pollset, fdobj);
// Create acceptor.
@@ -473,216 +309,6 @@ error:
}
}
-static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd,
- const grpc_resolved_address *addr,
- unsigned port_index, unsigned fd_index,
- grpc_tcp_listener **listener) {
- grpc_tcp_listener *sp = NULL;
- int port = -1;
- char *addr_str;
- char *name;
-
- grpc_error *err = prepare_socket(fd, addr, s->so_reuseport, &port);
- if (err == GRPC_ERROR_NONE) {
- GPR_ASSERT(port > 0);
- grpc_sockaddr_to_string(&addr_str, addr, 1);
- gpr_asprintf(&name, "tcp-server-listener:%s", addr_str);
- gpr_mu_lock(&s->mu);
- s->nports++;
- GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server");
- sp = gpr_malloc(sizeof(grpc_tcp_listener));
- sp->next = NULL;
- if (s->head == NULL) {
- s->head = sp;
- } else {
- s->tail->next = sp;
- }
- s->tail = sp;
- sp->server = s;
- sp->fd = fd;
- sp->emfd = grpc_fd_create(fd, name);
- memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
- sp->port = port;
- sp->port_index = port_index;
- sp->fd_index = fd_index;
- sp->is_sibling = 0;
- sp->sibling = NULL;
- GPR_ASSERT(sp->emfd);
- gpr_mu_unlock(&s->mu);
- gpr_free(addr_str);
- gpr_free(name);
- }
-
- *listener = sp;
- return err;
-}
-
-/* If successful, add a listener to s for addr, set *dsmode for the socket, and
- return the *listener. */
-static grpc_error *add_addr_to_server(grpc_tcp_server *s,
- const grpc_resolved_address *addr,
- unsigned port_index, unsigned fd_index,
- grpc_dualstack_mode *dsmode,
- grpc_tcp_listener **listener) {
- grpc_resolved_address addr4_copy;
- int fd;
- grpc_error *err =
- grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, dsmode, &fd);
- if (err != GRPC_ERROR_NONE) {
- return err;
- }
- if (*dsmode == GRPC_DSMODE_IPV4 &&
- grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) {
- addr = &addr4_copy;
- }
- return add_socket_to_server(s, fd, addr, port_index, fd_index, listener);
-}
-
-/* Bind to "::" to get a port number not used by any address. */
-static grpc_error *get_unused_port(int *port) {
- grpc_resolved_address wild;
- grpc_sockaddr_make_wildcard6(0, &wild);
- grpc_dualstack_mode dsmode;
- int fd;
- grpc_error *err =
- grpc_create_dualstack_socket(&wild, SOCK_STREAM, 0, &dsmode, &fd);
- if (err != GRPC_ERROR_NONE) {
- return err;
- }
- if (dsmode == GRPC_DSMODE_IPV4) {
- grpc_sockaddr_make_wildcard4(0, &wild);
- }
- if (bind(fd, (const struct sockaddr *)wild.addr, (socklen_t)wild.len) != 0) {
- err = GRPC_OS_ERROR(errno, "bind");
- close(fd);
- return err;
- }
- if (getsockname(fd, (struct sockaddr *)wild.addr, (socklen_t *)&wild.len) !=
- 0) {
- err = GRPC_OS_ERROR(errno, "getsockname");
- close(fd);
- return err;
- }
- close(fd);
- *port = grpc_sockaddr_get_port(&wild);
- return *port <= 0 ? GRPC_ERROR_CREATE("Bad port") : GRPC_ERROR_NONE;
-}
-
-/* Return the listener in s with address addr or NULL. */
-static grpc_tcp_listener *find_listener_with_addr(grpc_tcp_server *s,
- grpc_resolved_address *addr) {
- grpc_tcp_listener *l;
- gpr_mu_lock(&s->mu);
- for (l = s->head; l != NULL; l = l->next) {
- if (l->addr.len != addr->len) {
- continue;
- }
- if (memcmp(l->addr.addr, addr->addr, addr->len) == 0) {
- break;
- }
- }
- gpr_mu_unlock(&s->mu);
- return l;
-}
-
-/* Get all addresses assigned to network interfaces on the machine and create a
- listener for each. requested_port is the port to use for every listener, or 0
- to select one random port that will be used for every listener. Set *out_port
- to the port selected. Return GRPC_ERROR_NONE only if all listeners were
- added. */
-static grpc_error *add_all_local_addrs_to_server(grpc_tcp_server *s,
- unsigned port_index,
- int requested_port,
- int *out_port) {
- struct ifaddrs *ifa = NULL;
- struct ifaddrs *ifa_it;
- unsigned fd_index = 0;
- grpc_tcp_listener *sp = NULL;
- grpc_error *err = GRPC_ERROR_NONE;
- if (requested_port == 0) {
- /* Note: There could be a race where some local addrs can listen on the
- selected port and some can't. The sane way to handle this would be to
- retry by recreating the whole grpc_tcp_server. Backing out individual
- listeners and orphaning the FDs looks like too much trouble. */
- if ((err = get_unused_port(&requested_port)) != GRPC_ERROR_NONE) {
- return err;
- } else if (requested_port <= 0) {
- return GRPC_ERROR_CREATE("Bad get_unused_port()");
- }
- gpr_log(GPR_DEBUG, "Picked unused port %d", requested_port);
- }
- if (getifaddrs(&ifa) != 0 || ifa == NULL) {
- return GRPC_OS_ERROR(errno, "getifaddrs");
- }
- for (ifa_it = ifa; ifa_it != NULL; ifa_it = ifa_it->ifa_next) {
- grpc_resolved_address addr;
- char *addr_str = NULL;
- grpc_dualstack_mode dsmode;
- grpc_tcp_listener *new_sp = NULL;
- const char *ifa_name = (ifa_it->ifa_name ? ifa_it->ifa_name : "<unknown>");
- if (ifa_it->ifa_addr == NULL) {
- continue;
- } else if (ifa_it->ifa_addr->sa_family == AF_INET) {
- addr.len = sizeof(struct sockaddr_in);
- } else if (ifa_it->ifa_addr->sa_family == AF_INET6) {
- addr.len = sizeof(struct sockaddr_in6);
- } else {
- continue;
- }
- memcpy(addr.addr, ifa_it->ifa_addr, addr.len);
- if (!grpc_sockaddr_set_port(&addr, requested_port)) {
- /* Should never happen, because we check sa_family above. */
- err = GRPC_ERROR_CREATE("Failed to set port");
- break;
- }
- if (grpc_sockaddr_to_string(&addr_str, &addr, 0) < 0) {
- addr_str = gpr_strdup("<error>");
- }
- gpr_log(GPR_DEBUG,
- "Adding local addr from interface %s flags 0x%x to server: %s",
- ifa_name, ifa_it->ifa_flags, addr_str);
- /* We could have multiple interfaces with the same address (e.g., bonding),
- so look for duplicates. */
- if (find_listener_with_addr(s, &addr) != NULL) {
- gpr_log(GPR_DEBUG, "Skipping duplicate addr %s on interface %s", addr_str,
- ifa_name);
- gpr_free(addr_str);
- continue;
- }
- if ((err = add_addr_to_server(s, &addr, port_index, fd_index, &dsmode,
- &new_sp)) != GRPC_ERROR_NONE) {
- char *err_str = NULL;
- grpc_error *root_err;
- if (gpr_asprintf(&err_str, "Failed to add listener: %s", addr_str) < 0) {
- err_str = gpr_strdup("Failed to add listener");
- }
- root_err = GRPC_ERROR_CREATE(err_str);
- gpr_free(err_str);
- gpr_free(addr_str);
- err = grpc_error_add_child(root_err, err);
- break;
- } else {
- GPR_ASSERT(requested_port == new_sp->port);
- ++fd_index;
- if (sp != NULL) {
- new_sp->is_sibling = 1;
- sp->sibling = new_sp;
- }
- sp = new_sp;
- }
- gpr_free(addr_str);
- }
- freeifaddrs(ifa);
- if (err != GRPC_ERROR_NONE) {
- return err;
- } else if (sp == NULL) {
- return GRPC_ERROR_CREATE("No local addresses");
- } else {
- *out_port = sp->port;
- return GRPC_ERROR_NONE;
- }
-}
-
/* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */
static grpc_error *add_wildcard_addrs_to_server(grpc_tcp_server *s,
unsigned port_index,
@@ -697,14 +323,16 @@ static grpc_error *add_wildcard_addrs_to_server(grpc_tcp_server *s,
grpc_error *v6_err = GRPC_ERROR_NONE;
grpc_error *v4_err = GRPC_ERROR_NONE;
*out_port = -1;
- if (s->expand_wildcard_addrs) {
- return add_all_local_addrs_to_server(s, port_index, requested_port,
- out_port);
+
+ if (grpc_tcp_server_have_ifaddrs() && s->expand_wildcard_addrs) {
+ return grpc_tcp_server_add_all_local_addrs(s, port_index, requested_port,
+ out_port);
}
+
grpc_sockaddr_make_wildcards(requested_port, &wild4, &wild6);
/* Try listening on IPv6 first. */
- if ((v6_err = add_addr_to_server(s, &wild6, port_index, fd_index, &dsmode,
- &sp)) == GRPC_ERROR_NONE) {
+ if ((v6_err = grpc_tcp_server_add_addr(s, &wild6, port_index, fd_index,
+ &dsmode, &sp)) == GRPC_ERROR_NONE) {
++fd_index;
requested_port = *out_port = sp->port;
if (dsmode == GRPC_DSMODE_DUALSTACK || dsmode == GRPC_DSMODE_IPV4) {
@@ -713,8 +341,8 @@ static grpc_error *add_wildcard_addrs_to_server(grpc_tcp_server *s,
}
/* If we got a v6-only socket or nothing, try adding 0.0.0.0. */
grpc_sockaddr_set_port(&wild4, requested_port);
- if ((v4_err = add_addr_to_server(s, &wild4, port_index, fd_index, &dsmode,
- &sp2)) == GRPC_ERROR_NONE) {
+ if ((v4_err = grpc_tcp_server_add_addr(s, &wild4, port_index, fd_index,
+ &dsmode, &sp2)) == GRPC_ERROR_NONE) {
*out_port = sp2->port;
if (sp != NULL) {
sp2->is_sibling = 1;
@@ -722,8 +350,20 @@ static grpc_error *add_wildcard_addrs_to_server(grpc_tcp_server *s,
}
}
if (*out_port > 0) {
- GRPC_LOG_IF_ERROR("Failed to add :: listener", v6_err);
- GRPC_LOG_IF_ERROR("Failed to add 0.0.0.0 listener", v4_err);
+ if (v6_err != GRPC_ERROR_NONE) {
+ gpr_log(GPR_INFO,
+ "Failed to add :: listener, "
+ "the environment may not support IPv6: %s",
+ grpc_error_string(v6_err));
+ GRPC_ERROR_UNREF(v6_err);
+ }
+ if (v4_err != GRPC_ERROR_NONE) {
+ gpr_log(GPR_INFO,
+ "Failed to add 0.0.0.0 listener, "
+ "the environment may not support IPv4: %s",
+ grpc_error_string(v4_err));
+ GRPC_ERROR_UNREF(v4_err);
+ }
return GRPC_ERROR_NONE;
} else {
grpc_error *root_err =
@@ -752,7 +392,7 @@ static grpc_error *clone_port(grpc_tcp_listener *listener, unsigned count) {
err = grpc_create_dualstack_socket(&listener->addr, SOCK_STREAM, 0, &dsmode,
&fd);
if (err != GRPC_ERROR_NONE) return err;
- err = prepare_socket(fd, &listener->addr, true, &port);
+ err = grpc_tcp_server_prepare_socket(fd, &listener->addr, true, &port);
if (err != GRPC_ERROR_NONE) return err;
listener->server->nports++;
grpc_sockaddr_to_string(&addr_str, &listener->addr, 1);
@@ -824,7 +464,7 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s,
if (grpc_sockaddr_to_v4mapped(addr, &addr6_v4mapped)) {
addr = &addr6_v4mapped;
}
- if ((err = add_addr_to_server(s, addr, port_index, 0, &dsmode, &sp)) ==
+ if ((err = grpc_tcp_server_add_addr(s, addr, port_index, 0, &dsmode, &sp)) ==
GRPC_ERROR_NONE) {
*out_port = sp->port;
}
@@ -941,6 +581,7 @@ void grpc_tcp_server_unref(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) {
void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx,
grpc_tcp_server *s) {
gpr_mu_lock(&s->mu);
+ s->shutdown_listeners = true;
/* shutdown all fd's */
if (s->active_ports) {
grpc_tcp_listener *sp;
diff --git a/src/core/lib/iomgr/tcp_server_utils_posix.h b/src/core/lib/iomgr/tcp_server_utils_posix.h
new file mode 100644
index 0000000000..f5dc8532f9
--- /dev/null
+++ b/src/core/lib/iomgr/tcp_server_utils_posix.h
@@ -0,0 +1,134 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
+#define GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
+
+#include "src/core/lib/iomgr/ev_posix.h"
+#include "src/core/lib/iomgr/resolve_address.h"
+#include "src/core/lib/iomgr/socket_utils_posix.h"
+#include "src/core/lib/iomgr/tcp_server.h"
+
+/* one listening port */
+typedef struct grpc_tcp_listener {
+ int fd;
+ grpc_fd *emfd;
+ grpc_tcp_server *server;
+ grpc_resolved_address addr;
+ int port;
+ unsigned port_index;
+ unsigned fd_index;
+ grpc_closure read_closure;
+ grpc_closure destroyed_closure;
+ struct grpc_tcp_listener *next;
+ /* sibling is a linked list of all listeners for a given port. add_port and
+ clone_port place all new listeners in the same sibling list. A member of
+ the 'sibling' list is also a member of the 'next' list. The head of each
+ sibling list has is_sibling==0, and subsequent members of sibling lists
+ have is_sibling==1. is_sibling allows separate sibling lists to be
+ identified while iterating through 'next'. */
+ struct grpc_tcp_listener *sibling;
+ int is_sibling;
+} grpc_tcp_listener;
+
+/* the overall server */
+struct grpc_tcp_server {
+ gpr_refcount refs;
+ /* Called whenever accept() succeeds on a server port. */
+ grpc_tcp_server_cb on_accept_cb;
+ void *on_accept_cb_arg;
+
+ gpr_mu mu;
+
+ /* active port count: how many ports are actually still listening */
+ size_t active_ports;
+ /* destroyed port count: how many ports are completely destroyed */
+ size_t destroyed_ports;
+
+ /* is this server shutting down? */
+ bool shutdown;
+ /* have listeners been shutdown? */
+ bool shutdown_listeners;
+ /* use SO_REUSEPORT */
+ bool so_reuseport;
+ /* expand wildcard addresses to a list of all local addresses */
+ bool expand_wildcard_addrs;
+
+ /* linked list of server ports */
+ grpc_tcp_listener *head;
+ grpc_tcp_listener *tail;
+ unsigned nports;
+
+ /* List of closures passed to shutdown_starting_add(). */
+ grpc_closure_list shutdown_starting;
+
+ /* shutdown callback */
+ grpc_closure *shutdown_complete;
+
+ /* all pollsets interested in new connections */
+ grpc_pollset **pollsets;
+ /* number of pollsets in the pollsets array */
+ size_t pollset_count;
+
+ /* next pollset to assign a channel to */
+ gpr_atm next_pollset_to_assign;
+
+ grpc_resource_quota *resource_quota;
+};
+
+/* If successful, add a listener to \a s for \a addr, set \a dsmode for the
+ socket, and return the \a listener. */
+grpc_error *grpc_tcp_server_add_addr(grpc_tcp_server *s,
+ const grpc_resolved_address *addr,
+ unsigned port_index, unsigned fd_index,
+ grpc_dualstack_mode *dsmode,
+ grpc_tcp_listener **listener);
+
+/* Get all addresses assigned to network interfaces on the machine and create a
+ listener for each. requested_port is the port to use for every listener, or 0
+ to select one random port that will be used for every listener. Set *out_port
+ to the port selected. Return GRPC_ERROR_NONE only if all listeners were
+ added. */
+grpc_error *grpc_tcp_server_add_all_local_addrs(grpc_tcp_server *s,
+ unsigned port_index,
+ int requested_port,
+ int *out_port);
+
+/* Prepare a recently-created socket for listening. */
+grpc_error *grpc_tcp_server_prepare_socket(int fd,
+ const grpc_resolved_address *addr,
+ bool so_reuseport, int *port);
+/* Ruturn true if the platform supports ifaddrs */
+bool grpc_tcp_server_have_ifaddrs(void);
+
+#endif /* GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H */
diff --git a/src/core/lib/iomgr/tcp_server_utils_posix_common.c b/src/core/lib/iomgr/tcp_server_utils_posix_common.c
new file mode 100644
index 0000000000..e45e27d5ab
--- /dev/null
+++ b/src/core/lib/iomgr/tcp_server_utils_posix_common.c
@@ -0,0 +1,220 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_HAVE_IFADDRS
+
+#include "src/core/lib/iomgr/tcp_server_utils_posix.h"
+
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/sync.h>
+
+#include "src/core/lib/iomgr/error.h"
+#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/sockaddr_utils.h"
+#include "src/core/lib/iomgr/unix_sockets_posix.h"
+
+#define MIN_SAFE_ACCEPT_QUEUE_SIZE 100
+
+static gpr_once s_init_max_accept_queue_size;
+static int s_max_accept_queue_size;
+
+/* get max listen queue size on linux */
+static void init_max_accept_queue_size(void) {
+ int n = SOMAXCONN;
+ char buf[64];
+ FILE *fp = fopen("/proc/sys/net/core/somaxconn", "r");
+ if (fp == NULL) {
+ /* 2.4 kernel. */
+ s_max_accept_queue_size = SOMAXCONN;
+ return;
+ }
+ if (fgets(buf, sizeof buf, fp)) {
+ char *end;
+ long i = strtol(buf, &end, 10);
+ if (i > 0 && i <= INT_MAX && end && *end == 0) {
+ n = (int)i;
+ }
+ }
+ fclose(fp);
+ s_max_accept_queue_size = n;
+
+ if (s_max_accept_queue_size < MIN_SAFE_ACCEPT_QUEUE_SIZE) {
+ gpr_log(GPR_INFO,
+ "Suspiciously small accept queue (%d) will probably lead to "
+ "connection drops",
+ s_max_accept_queue_size);
+ }
+}
+
+static int get_max_accept_queue_size(void) {
+ gpr_once_init(&s_init_max_accept_queue_size, init_max_accept_queue_size);
+ return s_max_accept_queue_size;
+}
+
+static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd,
+ const grpc_resolved_address *addr,
+ unsigned port_index, unsigned fd_index,
+ grpc_tcp_listener **listener) {
+ grpc_tcp_listener *sp = NULL;
+ int port = -1;
+ char *addr_str;
+ char *name;
+
+ grpc_error *err =
+ grpc_tcp_server_prepare_socket(fd, addr, s->so_reuseport, &port);
+ if (err == GRPC_ERROR_NONE) {
+ GPR_ASSERT(port > 0);
+ grpc_sockaddr_to_string(&addr_str, addr, 1);
+ gpr_asprintf(&name, "tcp-server-listener:%s", addr_str);
+ gpr_mu_lock(&s->mu);
+ s->nports++;
+ GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server");
+ sp = gpr_malloc(sizeof(grpc_tcp_listener));
+ sp->next = NULL;
+ if (s->head == NULL) {
+ s->head = sp;
+ } else {
+ s->tail->next = sp;
+ }
+ s->tail = sp;
+ sp->server = s;
+ sp->fd = fd;
+ sp->emfd = grpc_fd_create(fd, name);
+ memcpy(&sp->addr, addr, sizeof(grpc_resolved_address));
+ sp->port = port;
+ sp->port_index = port_index;
+ sp->fd_index = fd_index;
+ sp->is_sibling = 0;
+ sp->sibling = NULL;
+ GPR_ASSERT(sp->emfd);
+ gpr_mu_unlock(&s->mu);
+ gpr_free(addr_str);
+ gpr_free(name);
+ }
+
+ *listener = sp;
+ return err;
+}
+
+/* If successful, add a listener to s for addr, set *dsmode for the socket, and
+ return the *listener. */
+grpc_error *grpc_tcp_server_add_addr(grpc_tcp_server *s,
+ const grpc_resolved_address *addr,
+ unsigned port_index, unsigned fd_index,
+ grpc_dualstack_mode *dsmode,
+ grpc_tcp_listener **listener) {
+ grpc_resolved_address addr4_copy;
+ int fd;
+ grpc_error *err =
+ grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, dsmode, &fd);
+ if (err != GRPC_ERROR_NONE) {
+ return err;
+ }
+ if (*dsmode == GRPC_DSMODE_IPV4 &&
+ grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) {
+ addr = &addr4_copy;
+ }
+ return add_socket_to_server(s, fd, addr, port_index, fd_index, listener);
+}
+
+/* Prepare a recently-created socket for listening. */
+grpc_error *grpc_tcp_server_prepare_socket(int fd,
+ const grpc_resolved_address *addr,
+ bool so_reuseport, int *port) {
+ grpc_resolved_address sockname_temp;
+ grpc_error *err = GRPC_ERROR_NONE;
+
+ GPR_ASSERT(fd >= 0);
+
+ if (so_reuseport && !grpc_is_unix_socket(addr)) {
+ err = grpc_set_socket_reuse_port(fd, 1);
+ if (err != GRPC_ERROR_NONE) goto error;
+ }
+
+ err = grpc_set_socket_nonblocking(fd, 1);
+ if (err != GRPC_ERROR_NONE) goto error;
+ err = grpc_set_socket_cloexec(fd, 1);
+ if (err != GRPC_ERROR_NONE) goto error;
+ if (!grpc_is_unix_socket(addr)) {
+ err = grpc_set_socket_low_latency(fd, 1);
+ if (err != GRPC_ERROR_NONE) goto error;
+ err = grpc_set_socket_reuse_addr(fd, 1);
+ if (err != GRPC_ERROR_NONE) goto error;
+ }
+ err = grpc_set_socket_no_sigpipe_if_possible(fd);
+ if (err != GRPC_ERROR_NONE) goto error;
+
+ GPR_ASSERT(addr->len < ~(socklen_t)0);
+ if (bind(fd, (struct sockaddr *)addr->addr, (socklen_t)addr->len) < 0) {
+ err = GRPC_OS_ERROR(errno, "bind");
+ goto error;
+ }
+
+ if (listen(fd, get_max_accept_queue_size()) < 0) {
+ err = GRPC_OS_ERROR(errno, "listen");
+ goto error;
+ }
+
+ sockname_temp.len = sizeof(struct sockaddr_storage);
+
+ if (getsockname(fd, (struct sockaddr *)sockname_temp.addr,
+ (socklen_t *)&sockname_temp.len) < 0) {
+ err = GRPC_OS_ERROR(errno, "getsockname");
+ goto error;
+ }
+
+ *port = grpc_sockaddr_get_port(&sockname_temp);
+ return GRPC_ERROR_NONE;
+
+error:
+ GPR_ASSERT(err != GRPC_ERROR_NONE);
+ if (fd >= 0) {
+ close(fd);
+ }
+ grpc_error *ret = grpc_error_set_int(
+ GRPC_ERROR_CREATE_REFERENCING("Unable to configure socket", &err, 1),
+ GRPC_ERROR_INT_FD, fd);
+ GRPC_ERROR_UNREF(err);
+ return ret;
+}
+
+#endif /* GRPC_HAVE_IFADDRS */
diff --git a/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c b/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c
new file mode 100644
index 0000000000..6354a6bdc1
--- /dev/null
+++ b/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c
@@ -0,0 +1,195 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#ifdef GRPC_HAVE_IFADDRS
+
+#include "src/core/lib/iomgr/tcp_server_utils_posix.h"
+
+#include <errno.h>
+#include <ifaddrs.h>
+#include <stddef.h>
+#include <string.h>
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+
+#include "src/core/lib/iomgr/error.h"
+#include "src/core/lib/iomgr/sockaddr.h"
+#include "src/core/lib/iomgr/sockaddr_utils.h"
+
+/* Return the listener in s with address addr or NULL. */
+static grpc_tcp_listener *find_listener_with_addr(grpc_tcp_server *s,
+ grpc_resolved_address *addr) {
+ grpc_tcp_listener *l;
+ gpr_mu_lock(&s->mu);
+ for (l = s->head; l != NULL; l = l->next) {
+ if (l->addr.len != addr->len) {
+ continue;
+ }
+ if (memcmp(l->addr.addr, addr->addr, addr->len) == 0) {
+ break;
+ }
+ }
+ gpr_mu_unlock(&s->mu);
+ return l;
+}
+
+/* Bind to "::" to get a port number not used by any address. */
+static grpc_error *get_unused_port(int *port) {
+ grpc_resolved_address wild;
+ grpc_sockaddr_make_wildcard6(0, &wild);
+ grpc_dualstack_mode dsmode;
+ int fd;
+ grpc_error *err =
+ grpc_create_dualstack_socket(&wild, SOCK_STREAM, 0, &dsmode, &fd);
+ if (err != GRPC_ERROR_NONE) {
+ return err;
+ }
+ if (dsmode == GRPC_DSMODE_IPV4) {
+ grpc_sockaddr_make_wildcard4(0, &wild);
+ }
+ if (bind(fd, (const struct sockaddr *)wild.addr, (socklen_t)wild.len) != 0) {
+ err = GRPC_OS_ERROR(errno, "bind");
+ close(fd);
+ return err;
+ }
+ if (getsockname(fd, (struct sockaddr *)wild.addr, (socklen_t *)&wild.len) !=
+ 0) {
+ err = GRPC_OS_ERROR(errno, "getsockname");
+ close(fd);
+ return err;
+ }
+ close(fd);
+ *port = grpc_sockaddr_get_port(&wild);
+ return *port <= 0 ? GRPC_ERROR_CREATE("Bad port") : GRPC_ERROR_NONE;
+}
+
+grpc_error *grpc_tcp_server_add_all_local_addrs(grpc_tcp_server *s,
+ unsigned port_index,
+ int requested_port,
+ int *out_port) {
+ struct ifaddrs *ifa = NULL;
+ struct ifaddrs *ifa_it;
+ unsigned fd_index = 0;
+ grpc_tcp_listener *sp = NULL;
+ grpc_error *err = GRPC_ERROR_NONE;
+ if (requested_port == 0) {
+ /* Note: There could be a race where some local addrs can listen on the
+ selected port and some can't. The sane way to handle this would be to
+ retry by recreating the whole grpc_tcp_server. Backing out individual
+ listeners and orphaning the FDs looks like too much trouble. */
+ if ((err = get_unused_port(&requested_port)) != GRPC_ERROR_NONE) {
+ return err;
+ } else if (requested_port <= 0) {
+ return GRPC_ERROR_CREATE("Bad get_unused_port()");
+ }
+ gpr_log(GPR_DEBUG, "Picked unused port %d", requested_port);
+ }
+ if (getifaddrs(&ifa) != 0 || ifa == NULL) {
+ return GRPC_OS_ERROR(errno, "getifaddrs");
+ }
+ for (ifa_it = ifa; ifa_it != NULL; ifa_it = ifa_it->ifa_next) {
+ grpc_resolved_address addr;
+ char *addr_str = NULL;
+ grpc_dualstack_mode dsmode;
+ grpc_tcp_listener *new_sp = NULL;
+ const char *ifa_name = (ifa_it->ifa_name ? ifa_it->ifa_name : "<unknown>");
+ if (ifa_it->ifa_addr == NULL) {
+ continue;
+ } else if (ifa_it->ifa_addr->sa_family == AF_INET) {
+ addr.len = sizeof(struct sockaddr_in);
+ } else if (ifa_it->ifa_addr->sa_family == AF_INET6) {
+ addr.len = sizeof(struct sockaddr_in6);
+ } else {
+ continue;
+ }
+ memcpy(addr.addr, ifa_it->ifa_addr, addr.len);
+ if (!grpc_sockaddr_set_port(&addr, requested_port)) {
+ /* Should never happen, because we check sa_family above. */
+ err = GRPC_ERROR_CREATE("Failed to set port");
+ break;
+ }
+ if (grpc_sockaddr_to_string(&addr_str, &addr, 0) < 0) {
+ addr_str = gpr_strdup("<error>");
+ }
+ gpr_log(GPR_DEBUG,
+ "Adding local addr from interface %s flags 0x%x to server: %s",
+ ifa_name, ifa_it->ifa_flags, addr_str);
+ /* We could have multiple interfaces with the same address (e.g., bonding),
+ so look for duplicates. */
+ if (find_listener_with_addr(s, &addr) != NULL) {
+ gpr_log(GPR_DEBUG, "Skipping duplicate addr %s on interface %s", addr_str,
+ ifa_name);
+ gpr_free(addr_str);
+ continue;
+ }
+ if ((err = grpc_tcp_server_add_addr(s, &addr, port_index, fd_index, &dsmode,
+ &new_sp)) != GRPC_ERROR_NONE) {
+ char *err_str = NULL;
+ grpc_error *root_err;
+ if (gpr_asprintf(&err_str, "Failed to add listener: %s", addr_str) < 0) {
+ err_str = gpr_strdup("Failed to add listener");
+ }
+ root_err = GRPC_ERROR_CREATE(err_str);
+ gpr_free(err_str);
+ gpr_free(addr_str);
+ err = grpc_error_add_child(root_err, err);
+ break;
+ } else {
+ GPR_ASSERT(requested_port == new_sp->port);
+ ++fd_index;
+ if (sp != NULL) {
+ new_sp->is_sibling = 1;
+ sp->sibling = new_sp;
+ }
+ sp = new_sp;
+ }
+ gpr_free(addr_str);
+ }
+ freeifaddrs(ifa);
+ if (err != GRPC_ERROR_NONE) {
+ return err;
+ } else if (sp == NULL) {
+ return GRPC_ERROR_CREATE("No local addresses");
+ } else {
+ *out_port = sp->port;
+ return GRPC_ERROR_NONE;
+ }
+}
+
+bool grpc_tcp_server_have_ifaddrs(void) { return true; }
+
+#endif /* GRPC_HAVE_IFADDRS */
diff --git a/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c b/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c
new file mode 100644
index 0000000000..95c3198be6
--- /dev/null
+++ b/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c
@@ -0,0 +1,49 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/port.h"
+
+#if defined(GRPC_POSIX_SOCKET) && !defined(GRPC_HAVE_IFADDRS)
+
+#include "src/core/lib/iomgr/tcp_server_utils_posix.h"
+
+grpc_error *grpc_tcp_server_add_all_local_addrs(grpc_tcp_server *s,
+ unsigned port_index,
+ int requested_port,
+ int *out_port) {
+ return GRPC_ERROR_CREATE("no ifaddrs available");
+}
+
+bool grpc_tcp_server_have_ifaddrs(void) { return false; }
+
+#endif /* defined(GRPC_POSIX_SOCKET) && !defined(GRPC_HAVE_IFADDRS) */
diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c
index 2a1c8d39fa..71e295770a 100644
--- a/src/core/lib/iomgr/udp_server.c
+++ b/src/core/lib/iomgr/udp_server.c
@@ -109,8 +109,8 @@ struct grpc_udp_server {
grpc_pollset **pollsets;
/* number of pollsets in the pollsets array */
size_t pollset_count;
- /* The parent grpc server */
- grpc_server *grpc_server;
+ /* opaque object to pass to callbacks */
+ void *user_data;
};
grpc_udp_server *grpc_udp_server_create(void) {
@@ -178,7 +178,7 @@ static void deactivated_all_ports(grpc_exec_ctx *exec_ctx, grpc_udp_server *s) {
/* Call the orphan_cb to signal that the FD is about to be closed and
* should no longer be used. */
GPR_ASSERT(sp->orphan_cb);
- sp->orphan_cb(exec_ctx, sp->emfd);
+ sp->orphan_cb(exec_ctx, sp->emfd, sp->server->user_data);
grpc_fd_orphan(exec_ctx, sp->emfd, &sp->destroyed_closure, NULL,
"udp_listener_shutdown");
@@ -204,7 +204,7 @@ void grpc_udp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
if (s->active_ports) {
for (sp = s->head; sp; sp = sp->next) {
GPR_ASSERT(sp->orphan_cb);
- sp->orphan_cb(exec_ctx, sp->emfd);
+ sp->orphan_cb(exec_ctx, sp->emfd, sp->server->user_data);
grpc_fd_shutdown(exec_ctx, sp->emfd,
GRPC_ERROR_CREATE("Server destroyed"));
}
@@ -299,7 +299,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
/* Tell the registered callback that data is available to read. */
GPR_ASSERT(sp->read_cb);
- sp->read_cb(exec_ctx, sp->emfd, sp->server->grpc_server);
+ sp->read_cb(exec_ctx, sp->emfd, sp->server->user_data);
/* Re-arm the notification event so we get another chance to read. */
grpc_fd_notify_on_read(exec_ctx, sp->emfd, &sp->read_closure);
@@ -322,7 +322,7 @@ static void on_write(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
/* Tell the registered callback that the socket is writeable. */
GPR_ASSERT(sp->write_cb);
- sp->write_cb(exec_ctx, sp->emfd);
+ sp->write_cb(exec_ctx, sp->emfd, sp->server->user_data);
/* Re-arm the notification event so we get another chance to write. */
grpc_fd_notify_on_write(exec_ctx, sp->emfd, &sp->write_closure);
@@ -464,13 +464,13 @@ int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned port_index) {
void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
grpc_pollset **pollsets, size_t pollset_count,
- grpc_server *server) {
+ void *user_data) {
size_t i;
gpr_mu_lock(&s->mu);
grpc_udp_listener *sp;
GPR_ASSERT(s->active_ports == 0);
s->pollsets = pollsets;
- s->grpc_server = server;
+ s->user_data = user_data;
sp = s->head;
while (sp != NULL) {
@@ -485,7 +485,11 @@ void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
grpc_schedule_on_exec_ctx);
grpc_fd_notify_on_write(exec_ctx, sp->emfd, &sp->write_closure);
- s->active_ports++;
+ /* Registered for both read and write callbacks: increment active_ports
+ * twice to account for this, and delay free-ing of memory until both
+ * on_read and on_write have fired. */
+ s->active_ports += 2;
+
sp = sp->next;
}
diff --git a/src/core/lib/iomgr/udp_server.h b/src/core/lib/iomgr/udp_server.h
index ed63fa7d81..90842a47f0 100644
--- a/src/core/lib/iomgr/udp_server.h
+++ b/src/core/lib/iomgr/udp_server.h
@@ -47,23 +47,23 @@ typedef struct grpc_udp_server grpc_udp_server;
/* Called when data is available to read from the socket. */
typedef void (*grpc_udp_server_read_cb)(grpc_exec_ctx *exec_ctx, grpc_fd *emfd,
- struct grpc_server *server);
+ void *user_data);
/* Called when the socket is writeable. */
-typedef void (*grpc_udp_server_write_cb)(grpc_exec_ctx *exec_ctx,
- grpc_fd *emfd);
+typedef void (*grpc_udp_server_write_cb)(grpc_exec_ctx *exec_ctx, grpc_fd *emfd,
+ void *user_data);
/* Called when the grpc_fd is about to be orphaned (and the FD closed). */
typedef void (*grpc_udp_server_orphan_cb)(grpc_exec_ctx *exec_ctx,
- grpc_fd *emfd);
+ grpc_fd *emfd, void *user_data);
/* Create a server, initially not bound to any ports */
grpc_udp_server *grpc_udp_server_create(void);
-/* Start listening to bound ports */
+/* Start listening to bound ports. user_data is passed to callbacks. */
void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *udp_server,
grpc_pollset **pollsets, size_t pollset_count,
- struct grpc_server *server);
+ void *user_data);
int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned port_index);
diff --git a/src/core/lib/iomgr/wakeup_fd_posix.h b/src/core/lib/iomgr/wakeup_fd_posix.h
index 71d32d97ba..c8dd242c75 100644
--- a/src/core/lib/iomgr/wakeup_fd_posix.h
+++ b/src/core/lib/iomgr/wakeup_fd_posix.h
@@ -46,7 +46,7 @@
*
* Setup:
* 1. Before calling anything, call global_init() at least once.
- * 1. Call grpc_wakeup_fd_create() to get a wakeup_fd.
+ * 1. Call grpc_wakeup_fd_init() to set up a wakeup_fd.
* 2. Add the result of GRPC_WAKEUP_FD_FD to the set of monitored file
* descriptors for the poll() style API you are using. Monitor the file
* descriptor for readability.
diff --git a/src/core/lib/security/transport/client_auth_filter.c b/src/core/lib/security/transport/client_auth_filter.c
index a23082a866..8dea1d98ff 100644
--- a/src/core/lib/security/transport/client_auth_filter.c
+++ b/src/core/lib/security/transport/client_auth_filter.c
@@ -318,7 +318,7 @@ static void set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
/* Destructor for call_data */
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
call_data *calld = elem->call_data;
grpc_call_credentials_unref(exec_ctx, calld->creds);
if (calld->have_host) {
diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c
index 14619d97ca..01cb473177 100644
--- a/src/core/lib/security/transport/server_auth_filter.c
+++ b/src/core/lib/security/transport/server_auth_filter.c
@@ -227,7 +227,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
/* Destructor for call_data */
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {}
+ grpc_closure *ignored) {}
/* Constructor for channel_data */
static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/lib/support/arena.c b/src/core/lib/support/arena.c
new file mode 100644
index 0000000000..7bcb983f24
--- /dev/null
+++ b/src/core/lib/support/arena.c
@@ -0,0 +1,98 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/support/arena.h"
+#include <grpc/support/alloc.h>
+#include <grpc/support/atm.h>
+#include <grpc/support/log.h>
+#include <grpc/support/useful.h>
+
+#define ROUND_UP_TO_ALIGNMENT_SIZE(x) \
+ (((x) + GPR_MAX_ALIGNMENT - 1u) & ~(GPR_MAX_ALIGNMENT - 1u))
+
+typedef struct zone {
+ size_t size_begin;
+ size_t size_end;
+ gpr_atm next_atm;
+} zone;
+
+struct gpr_arena {
+ gpr_atm size_so_far;
+ zone initial_zone;
+};
+
+gpr_arena *gpr_arena_create(size_t initial_size) {
+ initial_size = ROUND_UP_TO_ALIGNMENT_SIZE(initial_size);
+ gpr_arena *a = gpr_zalloc(sizeof(gpr_arena) + initial_size);
+ a->initial_zone.size_end = initial_size;
+ return a;
+}
+
+size_t gpr_arena_destroy(gpr_arena *arena) {
+ gpr_atm size = gpr_atm_no_barrier_load(&arena->size_so_far);
+ zone *z = (zone *)gpr_atm_no_barrier_load(&arena->initial_zone.next_atm);
+ gpr_free(arena);
+ while (z) {
+ zone *next_z = (zone *)gpr_atm_no_barrier_load(&z->next_atm);
+ gpr_free(z);
+ z = next_z;
+ }
+ return (size_t)size;
+}
+
+void *gpr_arena_alloc(gpr_arena *arena, size_t size) {
+ size = ROUND_UP_TO_ALIGNMENT_SIZE(size);
+ size_t start =
+ (size_t)gpr_atm_no_barrier_fetch_add(&arena->size_so_far, size);
+ zone *z = &arena->initial_zone;
+ while (start > z->size_end) {
+ zone *next_z = (zone *)gpr_atm_acq_load(&z->next_atm);
+ if (next_z == NULL) {
+ size_t next_z_size = (size_t)gpr_atm_no_barrier_load(&arena->size_so_far);
+ next_z = gpr_zalloc(sizeof(zone) + next_z_size);
+ next_z->size_begin = z->size_end;
+ next_z->size_end = z->size_end + next_z_size;
+ if (!gpr_atm_rel_cas(&z->next_atm, (gpr_atm)NULL, (gpr_atm)next_z)) {
+ gpr_free(next_z);
+ next_z = (zone *)gpr_atm_acq_load(&z->next_atm);
+ }
+ }
+ z = next_z;
+ }
+ if (start + size > z->size_end) {
+ return gpr_arena_alloc(arena, size);
+ }
+ GPR_ASSERT(start >= z->size_begin);
+ GPR_ASSERT(start + size <= z->size_end);
+ return ((char *)(z + 1)) + start - z->size_begin;
+}
diff --git a/src/core/lib/support/arena.h b/src/core/lib/support/arena.h
new file mode 100644
index 0000000000..c28033ffc3
--- /dev/null
+++ b/src/core/lib/support/arena.h
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+// \file Arena based allocator
+// Allows very fast allocation of memory, but that memory cannot be freed until
+// the arena as a whole is freed
+// Tracks the total memory allocated against it, so that future arenas can
+// pre-allocate the right amount of memory
+
+#ifndef GRPC_CORE_LIB_SUPPORT_ARENA_H
+#define GRPC_CORE_LIB_SUPPORT_ARENA_H
+
+#include <stddef.h>
+
+typedef struct gpr_arena gpr_arena;
+
+// Create an arena, with \a initial_size bytes in the first allocated buffer
+gpr_arena *gpr_arena_create(size_t initial_size);
+// Allocate \a size bytes from the arena
+void *gpr_arena_alloc(gpr_arena *arena, size_t size);
+// Destroy an arena, returning the total number of bytes allocated
+size_t gpr_arena_destroy(gpr_arena *arena);
+
+#endif /* GRPC_CORE_LIB_SUPPORT_ARENA_H */
diff --git a/src/core/lib/support/sync.c b/src/core/lib/support/sync.c
index 44b83f8175..b52f004f74 100644
--- a/src/core/lib/support/sync.c
+++ b/src/core/lib/support/sync.c
@@ -37,6 +37,8 @@
#include <grpc/support/log.h>
#include <grpc/support/sync.h>
+#include <assert.h>
+
/* Number of mutexes to allocate for events, to avoid lock contention.
Should be a prime. */
enum { event_sync_partitions = 31 };
@@ -99,8 +101,12 @@ void gpr_ref_init(gpr_refcount *r, int n) { gpr_atm_rel_store(&r->count, n); }
void gpr_ref(gpr_refcount *r) { gpr_atm_no_barrier_fetch_add(&r->count, 1); }
void gpr_ref_non_zero(gpr_refcount *r) {
+#ifndef NDEBUG
gpr_atm prior = gpr_atm_no_barrier_fetch_add(&r->count, 1);
- GPR_ASSERT(prior > 0);
+ assert(prior > 0);
+#else
+ gpr_ref(r);
+#endif
}
void gpr_refn(gpr_refcount *r, int n) {
@@ -113,6 +119,10 @@ int gpr_unref(gpr_refcount *r) {
return prior == 1;
}
+int gpr_ref_is_unique(gpr_refcount *r) {
+ return gpr_atm_acq_load(&r->count) == 1;
+}
+
void gpr_stats_init(gpr_stats_counter *c, intptr_t n) {
gpr_atm_rel_store(&c->value, n);
}
diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c
index cc57654ea4..2c5d8c0ff3 100644
--- a/src/core/lib/surface/call.c
+++ b/src/core/lib/surface/call.c
@@ -51,6 +51,7 @@
#include "src/core/lib/profiling/timers.h"
#include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/slice/slice_string_helpers.h"
+#include "src/core/lib/support/arena.h"
#include "src/core/lib/support/string.h"
#include "src/core/lib/surface/api_trace.h"
#include "src/core/lib/surface/call.h"
@@ -138,14 +139,15 @@ typedef struct batch_control {
} batch_control;
struct grpc_call {
+ gpr_arena *arena;
grpc_completion_queue *cq;
grpc_polling_entity pollent;
grpc_channel *channel;
grpc_call *parent;
grpc_call *first_child;
gpr_timespec start_time;
- /* TODO(ctiller): share with cq if possible? */
- gpr_mu mu;
+ /* protects first_child, and child next/prev links */
+ gpr_mu child_list_mu;
/* client or server call */
bool is_client;
@@ -160,7 +162,8 @@ struct grpc_call {
bool received_initial_metadata;
bool receiving_message;
bool requested_final_op;
- bool received_final_op;
+ gpr_atm any_ops_sent_atm;
+ gpr_atm received_final_op_atm;
/* have we received initial metadata */
bool has_initial_md_been_received;
@@ -211,6 +214,8 @@ struct grpc_call {
grpc_closure receiving_initial_metadata_ready;
uint32_t test_only_last_message_flags;
+ grpc_closure release_call;
+
union {
struct {
grpc_status_code *status;
@@ -272,9 +277,13 @@ grpc_error *grpc_call_create(grpc_exec_ctx *exec_ctx,
grpc_channel_get_channel_stack(args->channel);
grpc_call *call;
GPR_TIMER_BEGIN("grpc_call_create", 0);
- call = gpr_zalloc(sizeof(grpc_call) + channel_stack->call_stack_size);
+ gpr_arena *arena =
+ gpr_arena_create(grpc_channel_get_call_size_estimate(args->channel));
+ call = gpr_arena_alloc(arena,
+ sizeof(grpc_call) + channel_stack->call_stack_size);
+ call->arena = arena;
*out_call = call;
- gpr_mu_init(&call->mu);
+ gpr_mu_init(&call->child_list_mu);
call->channel = args->channel;
call->cq = args->cq;
call->parent = args->parent_call;
@@ -312,7 +321,7 @@ grpc_error *grpc_call_create(grpc_exec_ctx *exec_ctx,
GPR_ASSERT(call->is_client);
GPR_ASSERT(!args->parent_call->is_client);
- gpr_mu_lock(&args->parent_call->mu);
+ gpr_mu_lock(&args->parent_call->child_list_mu);
if (args->propagation_mask & GRPC_PROPAGATE_DEADLINE) {
send_deadline = gpr_time_min(
@@ -340,6 +349,10 @@ grpc_error *grpc_call_create(grpc_exec_ctx *exec_ctx,
}
if (args->propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
call->cancellation_is_inherited = 1;
+ if (gpr_atm_acq_load(&args->parent_call->received_final_op_atm)) {
+ cancel_with_error(exec_ctx, call, STATUS_FROM_API_OVERRIDE,
+ GRPC_ERROR_CANCELLED);
+ }
}
if (args->parent_call->first_child == NULL) {
@@ -352,18 +365,23 @@ grpc_error *grpc_call_create(grpc_exec_ctx *exec_ctx,
call;
}
- gpr_mu_unlock(&args->parent_call->mu);
+ gpr_mu_unlock(&args->parent_call->child_list_mu);
}
call->send_deadline = send_deadline;
GRPC_CHANNEL_INTERNAL_REF(args->channel, "call");
/* initial refcount dropped by grpc_call_destroy */
+ grpc_call_element_args call_args = {
+ .call_stack = CALL_STACK_FROM_CALL(call),
+ .server_transport_data = args->server_transport_data,
+ .context = call->context,
+ .path = path,
+ .start_time = call->start_time,
+ .deadline = send_deadline,
+ .arena = call->arena};
add_init_error(&error, grpc_call_stack_init(exec_ctx, channel_stack, 1,
- destroy_call, call, call->context,
- args->server_transport_data, path,
- call->start_time, send_deadline,
- CALL_STACK_FROM_CALL(call)));
+ destroy_call, call, &call_args));
if (error != GRPC_ERROR_NONE) {
cancel_with_error(exec_ctx, call, STATUS_FROM_SURFACE,
GRPC_ERROR_REF(error));
@@ -420,6 +438,14 @@ void grpc_call_internal_unref(grpc_exec_ctx *exec_ctx, grpc_call *c REF_ARG) {
GRPC_CALL_STACK_UNREF(exec_ctx, CALL_STACK_FROM_CALL(c), REF_REASON);
}
+static void release_call(grpc_exec_ctx *exec_ctx, void *call,
+ grpc_error *error) {
+ grpc_call *c = call;
+ grpc_channel *channel = c->channel;
+ grpc_channel_update_call_size_estimate(channel, gpr_arena_destroy(c->arena));
+ GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, "call");
+}
+
static void set_status_value_directly(grpc_status_code status, void *dest);
static void destroy_call(grpc_exec_ctx *exec_ctx, void *call,
grpc_error *error) {
@@ -434,7 +460,7 @@ static void destroy_call(grpc_exec_ctx *exec_ctx, void *call,
if (c->receiving_stream != NULL) {
grpc_byte_stream_destroy(exec_ctx, c->receiving_stream);
}
- gpr_mu_destroy(&c->mu);
+ gpr_mu_destroy(&c->child_list_mu);
for (ii = 0; ii < c->send_extra_metadata_count; ii++) {
GRPC_MDELEM_UNREF(exec_ctx, c->send_extra_metadata[ii].md);
}
@@ -446,7 +472,6 @@ static void destroy_call(grpc_exec_ctx *exec_ctx, void *call,
if (c->cq) {
GRPC_CQ_INTERNAL_UNREF(c->cq, "bind");
}
- grpc_channel *channel = c->channel;
get_final_status(call, set_status_value_directly, &c->final_info.final_status,
NULL);
@@ -455,11 +480,12 @@ static void destroy_call(grpc_exec_ctx *exec_ctx, void *call,
for (i = 0; i < STATUS_SOURCE_COUNT; i++) {
GRPC_ERROR_UNREF(
- unpack_received_status(gpr_atm_no_barrier_load(&c->status[i])).error);
+ unpack_received_status(gpr_atm_acq_load(&c->status[i])).error);
}
- grpc_call_stack_destroy(exec_ctx, CALL_STACK_FROM_CALL(c), &c->final_info, c);
- GRPC_CHANNEL_INTERNAL_UNREF(exec_ctx, channel, "call");
+ grpc_call_stack_destroy(exec_ctx, CALL_STACK_FROM_CALL(c), &c->final_info,
+ grpc_closure_init(&c->release_call, release_call, c,
+ grpc_schedule_on_exec_ctx));
GPR_TIMER_END("destroy_call", 0);
}
@@ -472,7 +498,7 @@ void grpc_call_destroy(grpc_call *c) {
GRPC_API_TRACE("grpc_call_destroy(c=%p)", 1, (c));
if (parent) {
- gpr_mu_lock(&parent->mu);
+ gpr_mu_lock(&parent->child_list_mu);
if (c == parent->first_child) {
parent->first_child = c->sibling_next;
if (c == parent->first_child) {
@@ -481,15 +507,14 @@ void grpc_call_destroy(grpc_call *c) {
c->sibling_prev->sibling_next = c->sibling_next;
c->sibling_next->sibling_prev = c->sibling_prev;
}
- gpr_mu_unlock(&parent->mu);
+ gpr_mu_unlock(&parent->child_list_mu);
GRPC_CALL_INTERNAL_UNREF(&exec_ctx, parent, "child");
}
- gpr_mu_lock(&c->mu);
GPR_ASSERT(!c->destroy_called);
c->destroy_called = 1;
- cancel = !c->received_final_op;
- gpr_mu_unlock(&c->mu);
+ cancel = gpr_atm_acq_load(&c->any_ops_sent_atm) &&
+ !gpr_atm_acq_load(&c->received_final_op_atm);
if (cancel) {
cancel_with_error(&exec_ctx, c, STATUS_FROM_API_OVERRIDE,
GRPC_ERROR_CANCELLED);
@@ -554,53 +579,25 @@ grpc_call_error grpc_call_cancel_with_status(grpc_call *c,
"c=%p, status=%d, description=%s, reserved=%p)",
4, (c, (int)status, description, reserved));
GPR_ASSERT(reserved == NULL);
- gpr_mu_lock(&c->mu);
cancel_with_status(&exec_ctx, c, STATUS_FROM_API_OVERRIDE, status,
description);
- gpr_mu_unlock(&c->mu);
grpc_exec_ctx_finish(&exec_ctx);
return GRPC_CALL_OK;
}
-typedef struct termination_closure {
- grpc_closure closure;
- grpc_call *call;
- grpc_transport_stream_op op;
-} termination_closure;
-
-static void done_termination(grpc_exec_ctx *exec_ctx, void *tcp,
+static void done_termination(grpc_exec_ctx *exec_ctx, void *call,
grpc_error *error) {
- termination_closure *tc = tcp;
- GRPC_CALL_INTERNAL_UNREF(exec_ctx, tc->call, "termination");
- gpr_free(tc);
-}
-
-static void send_termination(grpc_exec_ctx *exec_ctx, void *tcp,
- grpc_error *error) {
- termination_closure *tc = tcp;
- memset(&tc->op, 0, sizeof(tc->op));
- tc->op.cancel_error = GRPC_ERROR_REF(error);
- /* reuse closure to catch completion */
- tc->op.on_complete = grpc_closure_init(&tc->closure, done_termination, tc,
- grpc_schedule_on_exec_ctx);
- execute_op(exec_ctx, tc->call, &tc->op);
-}
-
-static void terminate_with_error(grpc_exec_ctx *exec_ctx, grpc_call *c,
- grpc_error *error) {
- termination_closure *tc = gpr_malloc(sizeof(*tc));
- memset(tc, 0, sizeof(*tc));
- tc->call = c;
- GRPC_CALL_INTERNAL_REF(tc->call, "termination");
- grpc_closure_sched(exec_ctx, grpc_closure_init(&tc->closure, send_termination,
- tc, grpc_schedule_on_exec_ctx),
- error);
+ GRPC_CALL_INTERNAL_UNREF(exec_ctx, call, "termination");
}
static void cancel_with_error(grpc_exec_ctx *exec_ctx, grpc_call *c,
status_source source, grpc_error *error) {
+ GRPC_CALL_INTERNAL_REF(c, "termination");
set_status_from_error(exec_ctx, c, source, GRPC_ERROR_REF(error));
- terminate_with_error(exec_ctx, c, error);
+ grpc_transport_stream_op *op = grpc_make_transport_stream_op(
+ grpc_closure_create(done_termination, c, grpc_schedule_on_exec_ctx));
+ op->cancel_error = error;
+ execute_op(exec_ctx, c, op);
}
static grpc_error *error_from_status(grpc_status_code status,
@@ -714,9 +711,7 @@ static void set_incoming_compression_algorithm(
grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
grpc_call *call) {
grpc_compression_algorithm algorithm;
- gpr_mu_lock(&call->mu);
algorithm = call->incoming_compression_algorithm;
- gpr_mu_unlock(&call->mu);
return algorithm;
}
@@ -728,9 +723,7 @@ static grpc_compression_algorithm compression_algorithm_for_level_locked(
uint32_t grpc_call_test_only_get_message_flags(grpc_call *call) {
uint32_t flags;
- gpr_mu_lock(&call->mu);
flags = call->test_only_last_message_flags;
- gpr_mu_unlock(&call->mu);
return flags;
}
@@ -784,9 +777,7 @@ static void set_encodings_accepted_by_peer(grpc_exec_ctx *exec_ctx,
uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call *call) {
uint32_t encodings_accepted_by_peer;
- gpr_mu_lock(&call->mu);
encodings_accepted_by_peer = call->encodings_accepted_by_peer;
- gpr_mu_unlock(&call->mu);
return encodings_accepted_by_peer;
}
@@ -1055,7 +1046,7 @@ static void finish_batch_completion(grpc_exec_ctx *exec_ctx, void *user_data,
}
static grpc_error *consolidate_batch_errors(batch_control *bctl) {
- size_t n = (size_t)gpr_atm_no_barrier_load(&bctl->num_errors);
+ size_t n = (size_t)gpr_atm_acq_load(&bctl->num_errors);
if (n == 0) {
return GRPC_ERROR_NONE;
} else if (n == 1) {
@@ -1082,8 +1073,6 @@ static void post_batch_completion(grpc_exec_ctx *exec_ctx,
grpc_call *call = bctl->call;
grpc_error *error = consolidate_batch_errors(bctl);
- gpr_mu_lock(&call->mu);
-
if (bctl->send_initial_metadata) {
grpc_metadata_batch_destroy(
exec_ctx,
@@ -1102,20 +1091,23 @@ static void post_batch_completion(grpc_exec_ctx *exec_ctx,
&call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
recv_trailing_filter(exec_ctx, call, md);
- call->received_final_op = true;
/* propagate cancellation to any interested children */
+ gpr_atm_rel_store(&call->received_final_op_atm, 1);
+ gpr_mu_lock(&call->child_list_mu);
child_call = call->first_child;
if (child_call != NULL) {
do {
next_child_call = child_call->sibling_next;
if (child_call->cancellation_is_inherited) {
GRPC_CALL_INTERNAL_REF(child_call, "propagate_cancel");
- grpc_call_cancel(child_call, NULL);
+ cancel_with_error(exec_ctx, child_call, STATUS_FROM_API_OVERRIDE,
+ GRPC_ERROR_CANCELLED);
GRPC_CALL_INTERNAL_UNREF(exec_ctx, child_call, "propagate_cancel");
}
child_call = next_child_call;
} while (child_call != call->first_child);
}
+ gpr_mu_unlock(&call->child_list_mu);
if (call->is_client) {
get_final_status(call, set_status_value_directly,
@@ -1129,7 +1121,6 @@ static void post_batch_completion(grpc_exec_ctx *exec_ctx,
GRPC_ERROR_UNREF(error);
error = GRPC_ERROR_NONE;
}
- gpr_mu_unlock(&call->mu);
if (bctl->is_notify_tag_closure) {
/* unrefs bctl->error */
@@ -1220,7 +1211,6 @@ static void receiving_stream_ready(grpc_exec_ctx *exec_ctx, void *bctlp,
grpc_error *error) {
batch_control *bctl = bctlp;
grpc_call *call = bctl->call;
- gpr_mu_lock(&bctl->call->mu);
if (error != GRPC_ERROR_NONE) {
if (call->receiving_stream != NULL) {
grpc_byte_stream_destroy(exec_ctx, call->receiving_stream);
@@ -1232,11 +1222,9 @@ static void receiving_stream_ready(grpc_exec_ctx *exec_ctx, void *bctlp,
}
if (call->has_initial_md_been_received || error != GRPC_ERROR_NONE ||
call->receiving_stream == NULL) {
- gpr_mu_unlock(&bctl->call->mu);
process_data_after_md(exec_ctx, bctlp);
} else {
call->saved_receiving_stream_ready_bctlp = bctlp;
- gpr_mu_unlock(&bctl->call->mu);
}
}
@@ -1295,7 +1283,7 @@ static void validate_filtered_metadata(grpc_exec_ctx *exec_ctx,
static void add_batch_error(grpc_exec_ctx *exec_ctx, batch_control *bctl,
grpc_error *error, bool has_cancelled) {
if (error == GRPC_ERROR_NONE) return;
- int idx = (int)gpr_atm_no_barrier_fetch_add(&bctl->num_errors, 1);
+ int idx = (int)gpr_atm_full_fetch_add(&bctl->num_errors, 1);
if (idx == 0 && !has_cancelled) {
cancel_with_error(exec_ctx, bctl->call, STATUS_FROM_CORE,
GRPC_ERROR_REF(error));
@@ -1308,8 +1296,6 @@ static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx,
batch_control *bctl = bctlp;
grpc_call *call = bctl->call;
- gpr_mu_lock(&call->mu);
-
add_batch_error(exec_ctx, bctl, GRPC_ERROR_REF(error), false);
if (error == GRPC_ERROR_NONE) {
grpc_metadata_batch *md =
@@ -1335,11 +1321,9 @@ static void receiving_initial_metadata_ready(grpc_exec_ctx *exec_ctx,
receiving_stream_ready, call->saved_receiving_stream_ready_bctlp,
grpc_schedule_on_exec_ctx);
call->saved_receiving_stream_ready_bctlp = NULL;
- grpc_closure_sched(exec_ctx, saved_rsr_closure, GRPC_ERROR_REF(error));
+ grpc_closure_run(exec_ctx, saved_rsr_closure, GRPC_ERROR_REF(error));
}
- gpr_mu_unlock(&call->mu);
-
finish_batch_step(exec_ctx, bctl);
}
@@ -1392,7 +1376,6 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
bctl->notify_tag = notify_tag;
bctl->is_notify_tag_closure = (uint8_t)(is_notify_tag_closure != 0);
- gpr_mu_lock(&call->mu);
grpc_transport_stream_op *stream_op = &bctl->op;
memset(stream_op, 0, sizeof(*stream_op));
stream_op->covered_by_poller = true;
@@ -1678,7 +1661,7 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx,
grpc_closure_init(&bctl->finish_batch, finish_batch, bctl,
grpc_schedule_on_exec_ctx);
stream_op->on_complete = &bctl->finish_batch;
- gpr_mu_unlock(&call->mu);
+ gpr_atm_rel_store(&call->any_ops_sent_atm, 1);
execute_op(exec_ctx, call, stream_op);
@@ -1709,7 +1692,6 @@ done_with_error:
if (bctl->recv_final_op) {
call->requested_final_op = 0;
}
- gpr_mu_unlock(&call->mu);
goto done;
}
@@ -1758,10 +1740,8 @@ uint8_t grpc_call_is_client(grpc_call *call) { return call->is_client; }
grpc_compression_algorithm grpc_call_compression_for_level(
grpc_call *call, grpc_compression_level level) {
- gpr_mu_lock(&call->mu);
grpc_compression_algorithm algo =
compression_algorithm_for_level_locked(call, level);
- gpr_mu_unlock(&call->mu);
return algo;
}
diff --git a/src/core/lib/surface/channel.c b/src/core/lib/surface/channel.c
index d6acd392c1..2b700b2f67 100644
--- a/src/core/lib/surface/channel.c
+++ b/src/core/lib/surface/channel.c
@@ -68,6 +68,8 @@ struct grpc_channel {
grpc_compression_options compression_options;
grpc_mdelem default_authority;
+ gpr_atm call_size_estimate;
+
gpr_mu registered_call_mu;
registered_call *registered_calls;
@@ -115,6 +117,10 @@ grpc_channel *grpc_channel_create(grpc_exec_ctx *exec_ctx, const char *target,
gpr_mu_init(&channel->registered_call_mu);
channel->registered_calls = NULL;
+ gpr_atm_no_barrier_store(
+ &channel->call_size_estimate,
+ (gpr_atm)CHANNEL_STACK_FROM_CHANNEL(channel)->call_stack_size);
+
grpc_compression_options_init(&channel->compression_options);
for (size_t i = 0; i < args->num_args; i++) {
if (0 == strcmp(args->args[i].key, GRPC_ARG_DEFAULT_AUTHORITY)) {
@@ -177,6 +183,32 @@ done:
return channel;
}
+size_t grpc_channel_get_call_size_estimate(grpc_channel *channel) {
+#define ROUND_UP_SIZE 256
+ return ((size_t)gpr_atm_no_barrier_load(&channel->call_size_estimate) +
+ ROUND_UP_SIZE) &
+ ~(size_t)(ROUND_UP_SIZE - 1);
+}
+
+void grpc_channel_update_call_size_estimate(grpc_channel *channel,
+ size_t size) {
+ size_t cur = (size_t)gpr_atm_no_barrier_load(&channel->call_size_estimate);
+ if (cur < size) {
+ /* size grew: update estimate */
+ gpr_atm_no_barrier_cas(&channel->call_size_estimate, (gpr_atm)cur,
+ (gpr_atm)size);
+ /* if we lose: never mind, something else will likely update soon enough */
+ } else if (cur == size) {
+ /* no change: holding pattern */
+ } else if (cur > 0) {
+ /* size shrank: decrease estimate */
+ gpr_atm_no_barrier_cas(
+ &channel->call_size_estimate, (gpr_atm)cur,
+ (gpr_atm)(GPR_MIN(cur - 1, (255 * cur + size) / 256)));
+ /* if we lose: never mind, something else will likely update soon enough */
+ }
+}
+
char *grpc_channel_get_target(grpc_channel *channel) {
GRPC_API_TRACE("grpc_channel_get_target(channel=%p)", 1, (channel));
return gpr_strdup(channel->target);
diff --git a/src/core/lib/surface/channel.h b/src/core/lib/surface/channel.h
index 3a441d7add..c4aebd8b9b 100644
--- a/src/core/lib/surface/channel.h
+++ b/src/core/lib/surface/channel.h
@@ -66,6 +66,9 @@ grpc_mdelem grpc_channel_get_reffed_status_elem(grpc_exec_ctx *exec_ctx,
grpc_channel *channel,
int status_code);
+size_t grpc_channel_get_call_size_estimate(grpc_channel *channel);
+void grpc_channel_update_call_size_estimate(grpc_channel *channel, size_t size);
+
#ifdef GRPC_STREAM_REFCOUNT_DEBUG
void grpc_channel_internal_ref(grpc_channel *channel, const char *reason);
void grpc_channel_internal_unref(grpc_exec_ctx *exec_ctx, grpc_channel *channel,
diff --git a/src/core/lib/surface/lame_client.c b/src/core/lib/surface/lame_client.c
index 49bc4c114b..9ddb88bd11 100644
--- a/src/core/lib/surface/lame_client.c
+++ b/src/core/lib/surface/lame_client.c
@@ -130,8 +130,8 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {
- gpr_free(and_free_memory);
+ grpc_closure *then_schedule_closure) {
+ grpc_closure_sched(exec_ctx, then_schedule_closure, GRPC_ERROR_NONE);
}
static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c
index b360579553..1186a4af63 100644
--- a/src/core/lib/surface/server.c
+++ b/src/core/lib/surface/server.c
@@ -898,7 +898,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
channel_data *chand = elem->channel_data;
call_data *calld = elem->call_data;
diff --git a/src/core/lib/surface/version.c b/src/core/lib/surface/version.c
index 1143a9e044..ba80bd801e 100644
--- a/src/core/lib/surface/version.c
+++ b/src/core/lib/surface/version.c
@@ -38,4 +38,4 @@
const char *grpc_version_string(void) { return "3.0.0-dev"; }
-const char *grpc_g_stands_for(void) { return "green"; }
+const char *grpc_g_stands_for(void) { return "gentle"; }
diff --git a/src/core/lib/transport/error_utils.c b/src/core/lib/transport/error_utils.c
index da77828d9c..ef55e561fb 100644
--- a/src/core/lib/transport/error_utils.c
+++ b/src/core/lib/transport/error_utils.c
@@ -44,12 +44,12 @@ static grpc_error *recursively_find_error_with_field(grpc_error *error,
}
if (grpc_error_is_special(error)) return NULL;
// Otherwise, search through its children.
- intptr_t key = 0;
- while (true) {
- grpc_error *child_error = gpr_avl_get(error->errs, (void *)key++);
- if (child_error == NULL) break;
- grpc_error *result = recursively_find_error_with_field(child_error, which);
- if (result != NULL) return result;
+ uint8_t slot = error->first_err;
+ while (slot != UINT8_MAX) {
+ grpc_linked_error *lerr = (grpc_linked_error *)(error->arena + slot);
+ grpc_error *result = recursively_find_error_with_field(lerr->err, which);
+ if (result) return result;
+ slot = lerr->next;
}
return NULL;
}
@@ -112,13 +112,13 @@ bool grpc_error_has_clear_grpc_status(grpc_error *error) {
if (grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, NULL)) {
return true;
}
- intptr_t key = 0;
- while (true) {
- grpc_error *child_error = gpr_avl_get(error->errs, (void *)key++);
- if (child_error == NULL) break;
- if (grpc_error_has_clear_grpc_status(child_error)) {
+ uint8_t slot = error->first_err;
+ while (slot != UINT8_MAX) {
+ grpc_linked_error *lerr = (grpc_linked_error *)(error->arena + slot);
+ if (grpc_error_has_clear_grpc_status(lerr->err)) {
return true;
}
+ slot = lerr->next;
}
return false;
}
diff --git a/src/core/lib/transport/transport.c b/src/core/lib/transport/transport.c
index 004e748f25..d56cb31ee0 100644
--- a/src/core/lib/transport/transport.c
+++ b/src/core/lib/transport/transport.c
@@ -84,6 +84,39 @@ void grpc_stream_unref(grpc_exec_ctx *exec_ctx,
}
}
+#define STREAM_REF_FROM_SLICE_REF(p) \
+ ((grpc_stream_refcount *)(((uint8_t *)p) - \
+ offsetof(grpc_stream_refcount, slice_refcount)))
+
+static void slice_stream_ref(void *p) {
+#ifdef GRPC_STREAM_REFCOUNT_DEBUG
+ grpc_stream_ref(STREAM_REF_FROM_SLICE_REF(p), "slice");
+#else
+ grpc_stream_ref(STREAM_REF_FROM_SLICE_REF(p));
+#endif
+}
+
+static void slice_stream_unref(grpc_exec_ctx *exec_ctx, void *p) {
+#ifdef GRPC_STREAM_REFCOUNT_DEBUG
+ grpc_stream_unref(exec_ctx, STREAM_REF_FROM_SLICE_REF(p), "slice");
+#else
+ grpc_stream_unref(exec_ctx, STREAM_REF_FROM_SLICE_REF(p));
+#endif
+}
+
+grpc_slice grpc_slice_from_stream_owned_buffer(grpc_stream_refcount *refcount,
+ void *buffer, size_t length) {
+ slice_stream_ref(&refcount->slice_refcount);
+ return (grpc_slice){.refcount = &refcount->slice_refcount,
+ .data.refcounted = {.bytes = buffer, .length = length}};
+}
+
+static const grpc_slice_refcount_vtable stream_ref_slice_vtable = {
+ .ref = slice_stream_ref,
+ .unref = slice_stream_unref,
+ .eq = grpc_slice_default_eq_impl,
+ .hash = grpc_slice_default_hash_impl};
+
#ifdef GRPC_STREAM_REFCOUNT_DEBUG
void grpc_stream_ref_init(grpc_stream_refcount *refcount, int initial_refs,
grpc_iomgr_cb_func cb, void *cb_arg,
@@ -95,6 +128,8 @@ void grpc_stream_ref_init(grpc_stream_refcount *refcount, int initial_refs,
#endif
gpr_ref_init(&refcount->refs, initial_refs);
grpc_closure_init(&refcount->destroy, cb, cb_arg, grpc_schedule_on_exec_ctx);
+ refcount->slice_refcount.vtable = &stream_ref_slice_vtable;
+ refcount->slice_refcount.sub_refcount = &refcount->slice_refcount;
}
static void move64(uint64_t *from, uint64_t *to) {
@@ -127,9 +162,9 @@ void grpc_transport_destroy(grpc_exec_ctx *exec_ctx,
int grpc_transport_init_stream(grpc_exec_ctx *exec_ctx,
grpc_transport *transport, grpc_stream *stream,
grpc_stream_refcount *refcount,
- const void *server_data) {
+ const void *server_data, gpr_arena *arena) {
return transport->vtable->init_stream(exec_ctx, transport, stream, refcount,
- server_data);
+ server_data, arena);
}
void grpc_transport_perform_stream_op(grpc_exec_ctx *exec_ctx,
@@ -162,9 +197,10 @@ void grpc_transport_set_pops(grpc_exec_ctx *exec_ctx, grpc_transport *transport,
void grpc_transport_destroy_stream(grpc_exec_ctx *exec_ctx,
grpc_transport *transport,
- grpc_stream *stream, void *and_free_memory) {
+ grpc_stream *stream,
+ grpc_closure *then_schedule_closure) {
transport->vtable->destroy_stream(exec_ctx, transport, stream,
- and_free_memory);
+ then_schedule_closure);
}
char *grpc_transport_get_peer(grpc_exec_ctx *exec_ctx,
@@ -219,8 +255,9 @@ typedef struct {
static void destroy_made_transport_stream_op(grpc_exec_ctx *exec_ctx, void *arg,
grpc_error *error) {
made_transport_stream_op *op = arg;
- grpc_closure_sched(exec_ctx, op->inner_on_complete, GRPC_ERROR_REF(error));
+ grpc_closure *c = op->inner_on_complete;
gpr_free(op);
+ grpc_closure_run(exec_ctx, c, GRPC_ERROR_REF(error));
}
grpc_transport_stream_op *grpc_make_transport_stream_op(
diff --git a/src/core/lib/transport/transport.h b/src/core/lib/transport/transport.h
index bb23c0225a..950b18aeda 100644
--- a/src/core/lib/transport/transport.h
+++ b/src/core/lib/transport/transport.h
@@ -41,6 +41,7 @@
#include "src/core/lib/iomgr/polling_entity.h"
#include "src/core/lib/iomgr/pollset.h"
#include "src/core/lib/iomgr/pollset_set.h"
+#include "src/core/lib/support/arena.h"
#include "src/core/lib/transport/byte_stream.h"
#include "src/core/lib/transport/metadata_batch.h"
@@ -64,6 +65,7 @@ typedef struct grpc_stream_refcount {
#ifdef GRPC_STREAM_REFCOUNT_DEBUG
const char *object_type;
#endif
+ grpc_slice_refcount slice_refcount;
} grpc_stream_refcount;
#ifdef GRPC_STREAM_REFCOUNT_DEBUG
@@ -84,6 +86,11 @@ void grpc_stream_unref(grpc_exec_ctx *exec_ctx, grpc_stream_refcount *refcount);
grpc_stream_ref_init(rc, ir, cb, cb_arg)
#endif
+/* Wrap a buffer that is owned by some stream object into a slice that shares
+ the same refcount */
+grpc_slice grpc_slice_from_stream_owned_buffer(grpc_stream_refcount *refcount,
+ void *buffer, size_t length);
+
typedef struct {
uint64_t framing_bytes;
uint64_t data_bytes;
@@ -223,7 +230,7 @@ size_t grpc_transport_stream_size(grpc_transport *transport);
int grpc_transport_init_stream(grpc_exec_ctx *exec_ctx,
grpc_transport *transport, grpc_stream *stream,
grpc_stream_refcount *refcount,
- const void *server_data);
+ const void *server_data, gpr_arena *arena);
void grpc_transport_set_pops(grpc_exec_ctx *exec_ctx, grpc_transport *transport,
grpc_stream *stream, grpc_polling_entity *pollent);
@@ -240,7 +247,8 @@ void grpc_transport_set_pops(grpc_exec_ctx *exec_ctx, grpc_transport *transport,
caller, but any child memory must be cleaned up) */
void grpc_transport_destroy_stream(grpc_exec_ctx *exec_ctx,
grpc_transport *transport,
- grpc_stream *stream, void *and_free_memory);
+ grpc_stream *stream,
+ grpc_closure *then_schedule_closure);
void grpc_transport_stream_op_finish_with_failure(grpc_exec_ctx *exec_ctx,
grpc_transport_stream_op *op,
diff --git a/src/core/lib/transport/transport_impl.h b/src/core/lib/transport/transport_impl.h
index 8553148c35..6f688bf8d2 100644
--- a/src/core/lib/transport/transport_impl.h
+++ b/src/core/lib/transport/transport_impl.h
@@ -47,7 +47,7 @@ typedef struct grpc_transport_vtable {
/* implementation of grpc_transport_init_stream */
int (*init_stream)(grpc_exec_ctx *exec_ctx, grpc_transport *self,
grpc_stream *stream, grpc_stream_refcount *refcount,
- const void *server_data);
+ const void *server_data, gpr_arena *arena);
/* implementation of grpc_transport_set_pollset */
void (*set_pollset)(grpc_exec_ctx *exec_ctx, grpc_transport *self,
@@ -67,7 +67,8 @@ typedef struct grpc_transport_vtable {
/* implementation of grpc_transport_destroy_stream */
void (*destroy_stream)(grpc_exec_ctx *exec_ctx, grpc_transport *self,
- grpc_stream *stream, void *and_free_memory);
+ grpc_stream *stream,
+ grpc_closure *then_schedule_closure);
/* implementation of grpc_transport_destroy */
void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_transport *self);
diff --git a/src/core/lib/tsi/test_creds/BUILD b/src/core/lib/tsi/test_creds/BUILD
index dcd6d930a8..5cf04caf17 100644
--- a/src/core/lib/tsi/test_creds/BUILD
+++ b/src/core/lib/tsi/test_creds/BUILD
@@ -27,6 +27,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+licenses(["notice"]) # 3-clause BSD
+
exports_files([
"ca.pem",
"server1.key",
diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc
index 65f3277499..eddcacc332 100644
--- a/src/cpp/common/channel_arguments.cc
+++ b/src/cpp/common/channel_arguments.cc
@@ -81,6 +81,16 @@ ChannelArguments::ChannelArguments(const ChannelArguments& other)
}
}
+ChannelArguments::~ChannelArguments() {
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ for (auto it = args_.begin(); it != args_.end(); ++it) {
+ if (it->type == GRPC_ARG_POINTER) {
+ it->value.pointer.vtable->destroy(&exec_ctx, it->value.pointer.p);
+ }
+ }
+ grpc_exec_ctx_finish(&exec_ctx);
+}
+
void ChannelArguments::Swap(ChannelArguments& other) {
args_.swap(other.args_);
strings_.swap(other.strings_);
@@ -101,8 +111,10 @@ void ChannelArguments::SetSocketMutator(grpc_socket_mutator* mutator) {
for (auto it = args_.begin(); it != args_.end(); ++it) {
if (it->type == mutator_arg.type &&
grpc::string(it->key) == grpc::string(mutator_arg.key)) {
+ GPR_ASSERT(!replaced);
it->value.pointer.vtable->destroy(&exec_ctx, it->value.pointer.p);
it->value.pointer = mutator_arg.value.pointer;
+ replaced = true;
}
}
grpc_exec_ctx_finish(&exec_ctx);
@@ -185,7 +197,7 @@ void ChannelArguments::SetPointerWithVtable(
arg.type = GRPC_ARG_POINTER;
strings_.push_back(key);
arg.key = const_cast<char*>(strings_.back().c_str());
- arg.value.pointer.p = value;
+ arg.value.pointer.p = vtable->copy(value);
arg.value.pointer.vtable = vtable;
args_.push_back(arg);
}
diff --git a/src/cpp/common/channel_filter.h b/src/cpp/common/channel_filter.h
index 79c4bab985..494d5d64d7 100644
--- a/src/cpp/common/channel_filter.h
+++ b/src/cpp/common/channel_filter.h
@@ -318,7 +318,8 @@ class ChannelFilter final {
static void DestroyCallElement(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {
+ grpc_closure *then_call_closure) {
+ GPR_ASSERT(then_call_closure == NULL);
reinterpret_cast<CallDataType *>(elem->call_data)->~CallDataType();
}
diff --git a/src/cpp/common/version_cc.cc b/src/cpp/common/version_cc.cc
index 039c530cdc..f5a0e4131d 100644
--- a/src/cpp/common/version_cc.cc
+++ b/src/cpp/common/version_cc.cc
@@ -37,5 +37,5 @@
#include <grpc++/grpc++.h>
namespace grpc {
-grpc::string Version() { return "1.2.0-dev"; }
+grpc::string Version() { return "1.3.0-dev"; }
}
diff --git a/src/cpp/server/channel_argument_option.cc b/src/cpp/server/channel_argument_option.cc
new file mode 100644
index 0000000000..723f968ff8
--- /dev/null
+++ b/src/cpp/server/channel_argument_option.cc
@@ -0,0 +1,78 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc++/impl/channel_argument_option.h>
+
+namespace grpc {
+
+std::unique_ptr<ServerBuilderOption> MakeChannelArgumentOption(
+ const grpc::string &name, const grpc::string &value) {
+ class StringOption final : public ServerBuilderOption {
+ public:
+ StringOption(const grpc::string &name, const grpc::string &value)
+ : name_(name), value_(value) {}
+
+ virtual void UpdateArguments(ChannelArguments *args) override {
+ args->SetString(name_, value_);
+ }
+ virtual void UpdatePlugins(
+ std::vector<std::unique_ptr<ServerBuilderPlugin>> *plugins) override {}
+
+ private:
+ const grpc::string name_;
+ const grpc::string value_;
+ };
+ return std::unique_ptr<ServerBuilderOption>(new StringOption(name, value));
+}
+
+std::unique_ptr<ServerBuilderOption> MakeChannelArgumentOption(
+ const grpc::string &name, int value) {
+ class IntOption final : public ServerBuilderOption {
+ public:
+ IntOption(const grpc::string &name, int value)
+ : name_(name), value_(value) {}
+
+ virtual void UpdateArguments(ChannelArguments *args) override {
+ args->SetInt(name_, value_);
+ }
+ virtual void UpdatePlugins(
+ std::vector<std::unique_ptr<ServerBuilderPlugin>> *plugins) override {}
+
+ private:
+ const grpc::string name_;
+ const int value_;
+ };
+ return std::unique_ptr<ServerBuilderOption>(new IntOption(name, value));
+}
+
+} // namespace grpc
diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc
index 00a90bb184..4eb4b5a1b2 100644
--- a/src/cpp/server/server_builder.cc
+++ b/src/cpp/server/server_builder.cc
@@ -323,9 +323,14 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
}
}
+ bool added_port = false;
for (auto port = ports_.begin(); port != ports_.end(); port++) {
int r = server->AddListeningPort(port->addr, port->creds.get());
- if (!r) return nullptr;
+ if (!r) {
+ if (added_port) server->Shutdown();
+ return nullptr;
+ }
+ added_port = true;
if (port->selected_port != nullptr) {
*port->selected_port = r;
}
@@ -333,6 +338,7 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
auto cqs_data = cqs_.empty() ? nullptr : &cqs_[0];
if (!server->Start(cqs_data, cqs_.size())) {
+ if (added_port) server->Shutdown();
return nullptr;
}
diff --git a/src/cpp/server/server_cc.cc b/src/cpp/server/server_cc.cc
index 9e11a8a9e0..e874892e73 100644
--- a/src/cpp/server/server_cc.cc
+++ b/src/cpp/server/server_cc.cc
@@ -534,7 +534,7 @@ bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) {
void Server::ShutdownInternal(gpr_timespec deadline) {
std::unique_lock<std::mutex> lock(mu_);
- if (started_ && !shutdown_) {
+ if (!shutdown_) {
shutdown_ = true;
/// The completion queue to use for server shutdown completion notification
diff --git a/src/csharp/Grpc.Auth/Grpc.Auth.csproj b/src/csharp/Grpc.Auth/Grpc.Auth.csproj
index db55ed5a6c..9ef98529e8 100644
--- a/src/csharp/Grpc.Auth/Grpc.Auth.csproj
+++ b/src/csharp/Grpc.Auth/Grpc.Auth.csproj
@@ -34,32 +34,26 @@
<Reference Include="System.Net" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.WebRequest" />
- <Reference Include="BouncyCastle.Crypto">
- <HintPath>..\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll</HintPath>
- </Reference>
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="log4net">
- <HintPath>..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.Core">
- <HintPath>..\packages\Google.Apis.Core.1.16.0\lib\net45\Google.Apis.Core.dll</HintPath>
- </Reference>
<Reference Include="Zlib.Portable">
<HintPath>..\packages\Zlib.Portable.Signed.1.11.0\lib\portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid\Zlib.Portable.dll</HintPath>
</Reference>
+ <Reference Include="Google.Apis.Core">
+ <HintPath>..\packages\Google.Apis.Core.1.21.0\lib\net45\Google.Apis.Core.dll</HintPath>
+ </Reference>
<Reference Include="Google.Apis">
- <HintPath>..\packages\Google.Apis.1.16.0\lib\net45\Google.Apis.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.1.21.0\lib\net45\Google.Apis.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.PlatformServices">
- <HintPath>..\packages\Google.Apis.1.16.0\lib\net45\Google.Apis.PlatformServices.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.1.21.0\lib\net45\Google.Apis.PlatformServices.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.Auth">
- <HintPath>..\packages\Google.Apis.Auth.1.16.0\lib\net45\Google.Apis.Auth.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.Auth.1.21.0\lib\net45\Google.Apis.Auth.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.Auth.PlatformServices">
- <HintPath>..\packages\Google.Apis.Auth.1.16.0\lib\net45\Google.Apis.Auth.PlatformServices.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.Auth.1.21.0\lib\net45\Google.Apis.Auth.PlatformServices.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json">
+ <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
diff --git a/src/csharp/Grpc.Auth/packages.config b/src/csharp/Grpc.Auth/packages.config
index 11c6375c63..aecc65e849 100644
--- a/src/csharp/Grpc.Auth/packages.config
+++ b/src/csharp/Grpc.Auth/packages.config
@@ -1,10 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="BouncyCastle" version="1.7.0" targetFramework="net45" />
- <package id="Google.Apis" version="1.16.0" targetFramework="net45" />
- <package id="Google.Apis.Auth" version="1.16.0" targetFramework="net45" />
- <package id="Google.Apis.Core" version="1.16.0" targetFramework="net45" />
- <package id="log4net" version="2.0.3" targetFramework="net45" />
- <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
+ <package id="Google.Apis" version="1.21.0" targetFramework="net45" />
+ <package id="Google.Apis.Auth" version="1.21.0" targetFramework="net45" />
+ <package id="Google.Apis.Core" version="1.21.0" targetFramework="net45" />
+ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
<package id="Zlib.Portable.Signed" version="1.11.0" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.Auth/project.json b/src/csharp/Grpc.Auth/project.json
index 3805f4759e..370bf11b2d 100644
--- a/src/csharp/Grpc.Auth/project.json
+++ b/src/csharp/Grpc.Auth/project.json
@@ -1,5 +1,5 @@
{
- "version": "1.2.0-dev",
+ "version": "1.3.0-dev",
"title": "gRPC C# Auth",
"authors": [ "Google Inc." ],
"copyright": "Copyright 2015, Google Inc.",
@@ -21,8 +21,8 @@
}
},
"dependencies": {
- "Grpc.Core": "1.2.0-dev",
- "Google.Apis.Auth": "1.16.0"
+ "Grpc.Core": "1.3.0-dev",
+ "Google.Apis.Auth": "1.21.0"
},
"frameworks": {
"net45": { },
diff --git a/src/csharp/Grpc.Core.Testing/project.json b/src/csharp/Grpc.Core.Testing/project.json
index 02be957812..38d5fab50e 100644
--- a/src/csharp/Grpc.Core.Testing/project.json
+++ b/src/csharp/Grpc.Core.Testing/project.json
@@ -1,5 +1,5 @@
{
- "version": "1.2.0-dev",
+ "version": "1.3.0-dev",
"title": "gRPC C# Core Testing",
"authors": [ "Google Inc." ],
"copyright": "Copyright 2017, Google Inc.",
@@ -21,7 +21,7 @@
}
},
"dependencies": {
- "Grpc.Core": "1.2.0-dev"
+ "Grpc.Core": "1.3.0-dev"
},
"frameworks": {
"net45": {
diff --git a/src/csharp/Grpc.Core.Tests/AuthContextTest.cs b/src/csharp/Grpc.Core.Tests/AuthContextTest.cs
new file mode 100644
index 0000000000..f5fa469520
--- /dev/null
+++ b/src/csharp/Grpc.Core.Tests/AuthContextTest.cs
@@ -0,0 +1,86 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using NUnit.Framework;
+using Grpc.Core;
+using System.Linq;
+
+namespace Grpc.Core.Tests
+{
+ public class AuthContextTest
+ {
+ [Test]
+ public void EmptyContext()
+ {
+ var context = new AuthContext(null, new Dictionary<string, List<AuthProperty>>());
+ Assert.IsFalse(context.IsPeerAuthenticated);
+ Assert.IsNull(context.PeerIdentityPropertyName);
+ Assert.AreEqual(0, context.PeerIdentity.Count());
+ Assert.AreEqual(0, context.Properties.Count());
+ Assert.AreEqual(0, context.FindPropertiesByName("nonexistent").Count());
+ }
+
+ [Test]
+ public void AuthenticatedContext()
+ {
+ var property1 = AuthProperty.Create("abc", new byte[] { 68, 69, 70 });
+ var context = new AuthContext("some_identity", new Dictionary<string, List<AuthProperty>>
+ {
+ {"some_identity", new List<AuthProperty> {property1}}
+ });
+ Assert.IsTrue(context.IsPeerAuthenticated);
+ Assert.AreEqual("some_identity", context.PeerIdentityPropertyName);
+ Assert.AreEqual(1, context.PeerIdentity.Count());
+ }
+
+ [Test]
+ public void FindPropertiesByName()
+ {
+ var property1 = AuthProperty.Create("abc", new byte[] {68, 69, 70});
+ var property2 = AuthProperty.Create("abc", new byte[] {71, 72, 73 });
+ var property3 = AuthProperty.Create("abc", new byte[] {});
+ var context = new AuthContext(null, new Dictionary<string, List<AuthProperty>>
+ {
+ {"existent", new List<AuthProperty> {property1, property2}},
+ {"foobar", new List<AuthProperty> {property3}},
+ });
+ Assert.AreEqual(3, context.Properties.Count());
+ Assert.AreEqual(0, context.FindPropertiesByName("nonexistent").Count());
+
+ var existentProperties = new List<AuthProperty>(context.FindPropertiesByName("existent"));
+ Assert.AreEqual(2, existentProperties.Count);
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core.Tests/AuthPropertyTest.cs b/src/csharp/Grpc.Core.Tests/AuthPropertyTest.cs
new file mode 100644
index 0000000000..745191b80d
--- /dev/null
+++ b/src/csharp/Grpc.Core.Tests/AuthPropertyTest.cs
@@ -0,0 +1,82 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using NUnit.Framework;
+
+namespace Grpc.Core.Tests
+{
+ public class AuthPropertyTest
+ {
+ [Test]
+ public void Create_NameIsNotNull()
+ {
+ Assert.Throws(typeof(ArgumentNullException), () => AuthProperty.Create(null, new byte[0]));
+ Assert.Throws(typeof(ArgumentNullException), () => AuthProperty.CreateUnsafe(null, new byte[0]));
+ }
+
+ [Test]
+ public void Create_ValueIsNotNull()
+ {
+ Assert.Throws(typeof(ArgumentNullException), () => AuthProperty.Create("abc", null));
+ Assert.Throws(typeof(ArgumentNullException), () => AuthProperty.CreateUnsafe("abc", null));
+ }
+
+ [Test]
+ public void Create()
+ {
+ var valueBytes = new byte[] { 68, 69, 70 };
+ var authProperty = AuthProperty.Create("abc", valueBytes);
+
+ Assert.AreEqual("abc", authProperty.Name);
+ Assert.AreNotSame(valueBytes, authProperty.ValueBytesUnsafe);
+ CollectionAssert.AreEqual(valueBytes, authProperty.ValueBytes);
+ CollectionAssert.AreEqual(valueBytes, authProperty.ValueBytesUnsafe);
+ Assert.AreEqual("DEF", authProperty.Value);
+ }
+
+ [Test]
+ public void CreateUnsafe()
+ {
+ var valueBytes = new byte[] { 68, 69, 70 };
+ var authProperty = AuthProperty.CreateUnsafe("abc", valueBytes);
+
+ Assert.AreEqual("abc", authProperty.Name);
+ Assert.AreSame(valueBytes, authProperty.ValueBytesUnsafe);
+ Assert.AreNotSame(valueBytes, authProperty.ValueBytes);
+ CollectionAssert.AreEqual(valueBytes, authProperty.ValueBytes);
+ CollectionAssert.AreEqual(valueBytes, authProperty.ValueBytesUnsafe);
+ Assert.AreEqual("DEF", authProperty.Value);
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core.Tests/ClientServerTest.cs b/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
index 6bf9756962..3a99107c42 100644
--- a/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ClientServerTest.cs
@@ -376,6 +376,18 @@ namespace Grpc.Core.Tests
}
[Test]
+ public void ServerCallContext_AuthContextNotPopulated()
+ {
+ helper.UnaryHandler = new UnaryServerMethod<string, string>(async (request, context) =>
+ {
+ Assert.IsFalse(context.AuthContext.IsPeerAuthenticated);
+ Assert.AreEqual(0, context.AuthContext.Properties.Count());
+ return "PASS";
+ });
+ Assert.AreEqual("PASS", Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "abc"));
+ }
+
+ [Test]
public async Task Channel_WaitForStateChangedAsync()
{
helper.UnaryHandler = new UnaryServerMethod<string, string>(async (request, context) =>
diff --git a/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj b/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
index 646effe21a..a1a2e4eebd 100644
--- a/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
+++ b/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
@@ -27,17 +27,17 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
- <Reference Include="nunit.framework">
- <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
- </Reference>
- <Reference Include="nunitlite">
- <HintPath>..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll</HintPath>
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
- <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+ <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
- <Reference Include="System.Interactive.Async">
- <HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
+ <Reference Include="nunit.framework">
+ <HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="nunitlite">
+ <HintPath>..\packages\NUnitLite.3.6.0\lib\net45\nunitlite.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
@@ -64,7 +64,6 @@
<Compile Include="ChannelOptionsTest.cs" />
<Compile Include="Internal\TimespecTest.cs" />
<Compile Include="TimeoutsTest.cs" />
- <Compile Include="NUnitVersionTest.cs" />
<Compile Include="ChannelTest.cs" />
<Compile Include="MockServiceHelper.cs" />
<Compile Include="ResponseHeadersTest.cs" />
@@ -81,6 +80,8 @@
<Compile Include="ShutdownHookPendingCallTest.cs" />
<Compile Include="ShutdownHookClientTest.cs" />
<Compile Include="AppDomainUnloadTest.cs" />
+ <Compile Include="AuthContextTest.cs" />
+ <Compile Include="AuthPropertyTest.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
diff --git a/src/csharp/Grpc.Core.Tests/TestResult.xml b/src/csharp/Grpc.Core.Tests/TestResult.xml
deleted file mode 100644
index 13da80739c..0000000000
--- a/src/csharp/Grpc.Core.Tests/TestResult.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8" standalone="no"?>
-<!--This file represents the results of running a test suite-->
-<test-results name="/usr/local/google/home/jtattermusch/github/grpc/src/csharp/GrpcCoreTests/bin/Debug/GrpcCoreTests.dll" total="3" errors="0" failures="0" not-run="0" inconclusive="0" ignored="0" skipped="0" invalid="0" date="2015-01-29" time="19:40:47">
- <environment nunit-version="2.6.0.0" clr-version="4.0.30319.17020" os-version="Unix 3.13.0.43" platform="Unix" cwd="/usr/local/google/home/jtattermusch/github/grpc/src/csharp/GrpcCoreTests" machine-name="jtattermusch.mtv.corp.google.com" user="jtattermusch" user-domain="jtattermusch.mtv.corp.google.com" />
- <culture-info current-culture="en-US" current-uiculture="en-US" />
- <test-suite type="Assembly" name="/usr/local/google/home/jtattermusch/github/grpc/src/csharp/GrpcCoreTests/bin/Debug/GrpcCoreTests.dll" executed="True" result="Success" success="True" time="0.172" asserts="0">
- <results>
- <test-suite type="Namespace" name="Google" executed="True" result="Success" success="True" time="0.166" asserts="0">
- <results>
- <test-suite type="Namespace" name="GRPC" executed="True" result="Success" success="True" time="0.166" asserts="0">
- <results>
- <test-suite type="Namespace" name="Core" executed="True" result="Success" success="True" time="0.166" asserts="0">
- <results>
- <test-suite type="Namespace" name="Tests" executed="True" result="Success" success="True" time="0.166" asserts="0">
- <results>
- <test-suite type="TestFixture" name="CallsTest" executed="True" result="Success" success="True" time="0.009" asserts="0">
- <results>
- <test-case name="Grpc.Core.Tests.CallsTest.Test1" executed="True" result="Success" success="True" time="0.004" asserts="0" />
- </results>
- </test-suite>
- <test-suite type="TestFixture" name="ClientServerTest" executed="True" result="Success" success="True" time="0.149" asserts="0">
- <results>
- <test-case name="Grpc.Core.Tests.ClientServerTest.EmptyCall" executed="True" result="Success" success="True" time="0.111" asserts="0" />
- </results>
- </test-suite>
- <test-suite type="TestFixture" name="ServerTest" executed="True" result="Success" success="True" time="0.001" asserts="0">
- <results>
- <test-case name="Grpc.Core.Tests.ServerTest.StartAndShutdownServer" executed="True" result="Success" success="True" time="0.001" asserts="0" />
- </results>
- </test-suite>
- </results>
- </test-suite>
- </results>
- </test-suite>
- </results>
- </test-suite>
- </results>
- </test-suite>
- </results>
- </test-suite>
-</test-results> \ No newline at end of file
diff --git a/src/csharp/Grpc.Core.Tests/packages.config b/src/csharp/Grpc.Core.Tests/packages.config
index 4750735fad..994a278762 100644
--- a/src/csharp/Grpc.Core.Tests/packages.config
+++ b/src/csharp/Grpc.Core.Tests/packages.config
@@ -1,9 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
- <package id="NUnit" version="3.2.0" targetFramework="net45" />
- <package id="NUnit.ConsoleRunner" version="3.2.0" />
- <package id="NUnitLite" version="3.2.0" targetFramework="net45" />
+ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
+ <package id="NUnit" version="3.6.0" targetFramework="net45" />
+ <package id="NUnitLite" version="3.6.0" targetFramework="net45" />
<package id="OpenCover" version="4.6.519" />
<package id="ReportGenerator" version="2.4.4.0" />
<package id="System.Interactive.Async" version="3.1.1" targetFramework="net45" />
diff --git a/src/csharp/Grpc.Core.Tests/project.json b/src/csharp/Grpc.Core.Tests/project.json
index 045207a413..14e5ed51ad 100644
--- a/src/csharp/Grpc.Core.Tests/project.json
+++ b/src/csharp/Grpc.Core.Tests/project.json
@@ -45,10 +45,10 @@
"Grpc.Core": {
"target": "project"
},
- "Newtonsoft.Json": "8.0.3",
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*",
- "NUnit.ConsoleRunner": "3.2.0",
+ "Newtonsoft.Json": "9.0.1",
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0",
+ "NUnit.ConsoleRunner": "3.6.0",
"OpenCover": "4.6.519",
"ReportGenerator": "2.4.4.0"
},
diff --git a/src/csharp/Grpc.Core/AuthContext.cs b/src/csharp/Grpc.Core/AuthContext.cs
new file mode 100644
index 0000000000..340b2201c7
--- /dev/null
+++ b/src/csharp/Grpc.Core/AuthContext.cs
@@ -0,0 +1,128 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Grpc.Core.Internal;
+using Grpc.Core.Utils;
+
+namespace Grpc.Core
+{
+ /// <summary>
+ /// Authentication context for a call.
+ /// AuthContext is the only reliable source of truth when it comes to authenticating calls.
+ /// Using any other call/context properties for authentication purposes is wrong and inherently unsafe.
+ /// Note: experimental API that can change or be removed without any prior notice.
+ /// </summary>
+ public class AuthContext
+ {
+ string peerIdentityPropertyName;
+ Dictionary<string, List<AuthProperty>> properties;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="T:Grpc.Core.AuthContext"/> class.
+ /// </summary>
+ /// <param name="peerIdentityPropertyName">Peer identity property name.</param>
+ /// <param name="properties">Multimap of auth properties by name.</param>
+ internal AuthContext(string peerIdentityPropertyName, Dictionary<string, List<AuthProperty>> properties)
+ {
+ this.peerIdentityPropertyName = peerIdentityPropertyName;
+ this.properties = GrpcPreconditions.CheckNotNull(properties);
+ }
+
+ /// <summary>
+ /// Returns <c>true</c> if the peer is authenticated.
+ /// </summary>
+ public bool IsPeerAuthenticated
+ {
+ get
+ {
+ return peerIdentityPropertyName != null;
+ }
+ }
+
+ /// <summary>
+ /// Gets the name of the property that indicates the peer identity. Returns <c>null</c>
+ /// if the peer is not authenticated.
+ /// </summary>
+ public string PeerIdentityPropertyName
+ {
+ get
+ {
+ return peerIdentityPropertyName;
+ }
+ }
+
+ /// <summary>
+ /// Gets properties that represent the peer identity (there can be more than one). Returns an empty collection
+ /// if the peer is not authenticated.
+ /// </summary>
+ public IEnumerable<AuthProperty> PeerIdentity
+ {
+ get
+ {
+ if (peerIdentityPropertyName == null)
+ {
+ return Enumerable.Empty<AuthProperty>();
+ }
+ return properties[peerIdentityPropertyName];
+ }
+ }
+
+ /// <summary>
+ /// Gets the auth properties of this context.
+ /// </summary>
+ public IEnumerable<AuthProperty> Properties
+ {
+ get
+ {
+ return properties.Values.SelectMany(v => v);
+ }
+ }
+
+ /// <summary>
+ /// Returns the auth properties with given name (there can be more than one).
+ /// If no properties of given name exist, an empty collection will be returned.
+ /// </summary>
+ public IEnumerable<AuthProperty> FindPropertiesByName(string propertyName)
+ {
+ List<AuthProperty> result;
+ if (!properties.TryGetValue(propertyName, out result))
+ {
+ return Enumerable.Empty<AuthProperty>();
+ }
+ return result;
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core/AuthProperty.cs b/src/csharp/Grpc.Core/AuthProperty.cs
new file mode 100644
index 0000000000..c7a132b09e
--- /dev/null
+++ b/src/csharp/Grpc.Core/AuthProperty.cs
@@ -0,0 +1,126 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Grpc.Core.Internal;
+using Grpc.Core.Utils;
+
+namespace Grpc.Core
+{
+ /// <summary>
+ /// A property of an <see cref="AuthContext"/>.
+ /// Note: experimental API that can change or be removed without any prior notice.
+ /// </summary>
+ public class AuthProperty
+ {
+ string name;
+ byte[] valueBytes;
+ Lazy<string> value;
+
+ private AuthProperty(string name, byte[] valueBytes)
+ {
+ this.name = GrpcPreconditions.CheckNotNull(name);
+ this.valueBytes = GrpcPreconditions.CheckNotNull(valueBytes);
+ this.value = new Lazy<string>(() => MarshalUtils.GetStringUTF8(this.valueBytes));
+ }
+
+ /// <summary>
+ /// Gets the name of the property.
+ /// </summary>
+ public string Name
+ {
+ get
+ {
+ return name;
+ }
+ }
+
+ /// <summary>
+ /// Gets the string value of the property.
+ /// </summary>
+ public string Value
+ {
+ get
+ {
+ return value.Value;
+ }
+ }
+
+ /// <summary>
+ /// Gets the binary value of the property.
+ /// </summary>
+ public byte[] ValueBytes
+ {
+ get
+ {
+ var valueCopy = new byte[valueBytes.Length];
+ Buffer.BlockCopy(valueBytes, 0, valueCopy, 0, valueBytes.Length);
+ return valueCopy;
+ }
+ }
+
+ /// <summary>
+ /// Creates an instance of <c>AuthProperty</c>.
+ /// </summary>
+ /// <param name="name">the name</param>
+ /// <param name="valueBytes">the binary value of the property</param>
+ public static AuthProperty Create(string name, byte[] valueBytes)
+ {
+ GrpcPreconditions.CheckNotNull(valueBytes);
+ var valueCopy = new byte[valueBytes.Length];
+ Buffer.BlockCopy(valueBytes, 0, valueCopy, 0, valueBytes.Length);
+ return new AuthProperty(name, valueCopy);
+ }
+
+ /// <summary>
+ /// Gets the binary value of the property (without making a defensive copy).
+ /// </summary>
+ internal byte[] ValueBytesUnsafe
+ {
+ get
+ {
+ return valueBytes;
+ }
+ }
+
+ /// <summary>
+ /// Creates and instance of <c>AuthProperty</c> without making a defensive copy of <c>valueBytes</c>.
+ /// </summary>
+ internal static AuthProperty CreateUnsafe(string name, byte[] valueBytes)
+ {
+ return new AuthProperty(name, valueBytes);
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj
index 23e1ddcf7f..d6d8dfac22 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.csproj
+++ b/src/csharp/Grpc.Core/Grpc.Core.csproj
@@ -131,6 +131,10 @@
<Compile Include="Internal\RequestCallContextSafeHandle.cs" />
<Compile Include="Utils\TaskUtils.cs" />
<Compile Include="Internal\CallFlags.cs" />
+ <Compile Include="AuthContext.cs" />
+ <Compile Include="Internal\AuthContextSafeHandle.cs" />
+ <Compile Include="Internal\MarshalUtils.cs" />
+ <Compile Include="AuthProperty.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Grpc.Core.project.json" />
diff --git a/src/csharp/Grpc.Core/Internal/AuthContextSafeHandle.cs b/src/csharp/Grpc.Core/Internal/AuthContextSafeHandle.cs
new file mode 100644
index 0000000000..59e33a0fdf
--- /dev/null
+++ b/src/csharp/Grpc.Core/Internal/AuthContextSafeHandle.cs
@@ -0,0 +1,119 @@
+#region Copyright notice and license
+
+// Copyright 2017, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.Text;
+using Grpc.Core;
+using Grpc.Core.Utils;
+
+namespace Grpc.Core.Internal
+{
+ /// <summary>
+ /// grpc_auth_context
+ /// </summary>
+ internal class AuthContextSafeHandle : SafeHandleZeroIsInvalid
+ {
+ static readonly NativeMethods Native = NativeMethods.Get();
+
+ private AuthContextSafeHandle()
+ {
+ }
+
+ /// <summary>
+ /// Copies contents of the native auth context into a new <c>AuthContext</c> instance.
+ /// </summary>
+ public AuthContext ToAuthContext()
+ {
+ if (IsInvalid)
+ {
+ return new AuthContext(null, new Dictionary<string, List<AuthProperty>>());
+ }
+
+ var peerIdentityPropertyName = Marshal.PtrToStringAnsi(Native.grpcsharp_auth_context_peer_identity_property_name(this));
+
+ var propertiesDict = new Dictionary<string, List<AuthProperty>>();
+
+ var it = Native.grpcsharp_auth_context_property_iterator(this);
+ IntPtr authPropertyPtr = IntPtr.Zero;
+ while ((authPropertyPtr = Native.grpcsharp_auth_property_iterator_next(ref it)) != IntPtr.Zero)
+ {
+ var authProperty = PtrToAuthProperty(authPropertyPtr);
+
+ if (!propertiesDict.ContainsKey(authProperty.Name))
+ {
+ propertiesDict[authProperty.Name] = new List<AuthProperty>();
+ }
+ propertiesDict[authProperty.Name].Add(authProperty);
+ }
+
+ return new AuthContext(peerIdentityPropertyName, propertiesDict);
+ }
+
+ protected override bool ReleaseHandle()
+ {
+ Native.grpcsharp_auth_context_release(handle);
+ return true;
+ }
+
+ private AuthProperty PtrToAuthProperty(IntPtr authPropertyPtr)
+ {
+ var nativeAuthProperty = (NativeAuthProperty) Marshal.PtrToStructure(authPropertyPtr, typeof(NativeAuthProperty));
+ var name = Marshal.PtrToStringAnsi(nativeAuthProperty.Name);
+ var valueBytes = new byte[(int) nativeAuthProperty.ValueLength];
+ Marshal.Copy(nativeAuthProperty.Value, valueBytes, 0, (int)nativeAuthProperty.ValueLength);
+ return AuthProperty.CreateUnsafe(name, valueBytes);
+ }
+
+ /// <summary>
+ /// grpc_auth_property
+ /// </summary>
+ internal struct NativeAuthProperty
+ {
+ public IntPtr Name;
+ public IntPtr Value;
+ public UIntPtr ValueLength;
+ }
+
+ /// <summary>
+ /// grpc_auth_property_iterator
+ /// </summary>
+ internal struct NativeAuthPropertyIterator
+ {
+ public IntPtr AuthContext;
+ public UIntPtr Index;
+ public IntPtr Name;
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs b/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
index efae149f09..6dee6d8c35 100644
--- a/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/BatchContextSafeHandle.cs
@@ -43,7 +43,6 @@ namespace Grpc.Core.Internal
/// </summary>
internal class BatchContextSafeHandle : SafeHandleZeroIsInvalid
{
- static readonly Encoding EncodingUTF8 = System.Text.Encoding.UTF8;
static readonly NativeMethods Native = NativeMethods.Get();
private BatchContextSafeHandle()
@@ -75,7 +74,7 @@ namespace Grpc.Core.Internal
{
UIntPtr detailsLength;
IntPtr detailsPtr = Native.grpcsharp_batch_context_recv_status_on_client_details(this, out detailsLength);
- string details = PtrToStringUtf8(detailsPtr, (int) detailsLength.ToUInt32());
+ string details = MarshalUtils.PtrToStringUTF8(detailsPtr, (int) detailsLength.ToUInt32());
var status = new Status(Native.grpcsharp_batch_context_recv_status_on_client_status(this), details);
IntPtr metadataArrayPtr = Native.grpcsharp_batch_context_recv_status_on_client_trailing_metadata(this);
@@ -108,12 +107,5 @@ namespace Grpc.Core.Internal
Native.grpcsharp_batch_context_destroy(handle);
return true;
}
-
- string PtrToStringUtf8(IntPtr ptr, int len)
- {
- var bytes = new byte[len];
- Marshal.Copy(ptr, bytes, 0, len);
- return EncodingUTF8.GetString(bytes);
- }
}
}
diff --git a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs
index 710ca480e8..3c368fbc6c 100644
--- a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs
@@ -45,7 +45,6 @@ namespace Grpc.Core.Internal
internal class CallSafeHandle : SafeHandleZeroIsInvalid, INativeCall
{
public static readonly CallSafeHandle NullInstance = new CallSafeHandle();
- static readonly Encoding EncodingUTF8 = System.Text.Encoding.UTF8;
static readonly NativeMethods Native = NativeMethods.Get();
const uint GRPC_WRITE_BUFFER_HINT = 1;
@@ -140,7 +139,7 @@ namespace Grpc.Core.Internal
var ctx = BatchContextSafeHandle.Create();
var optionalPayloadLength = optionalPayload != null ? new UIntPtr((ulong)optionalPayload.Length) : UIntPtr.Zero;
completionQueue.CompletionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success));
- var statusDetailBytes = EncodingUTF8.GetBytes(status.Detail);
+ var statusDetailBytes = MarshalUtils.GetBytesUTF8(status.Detail);
Native.grpcsharp_call_send_status_from_server(this, ctx, status.StatusCode, statusDetailBytes, new UIntPtr((ulong)statusDetailBytes.Length), metadataArray, sendEmptyInitialMetadata,
optionalPayload, optionalPayloadLength, writeFlags).CheckOk();
}
@@ -204,6 +203,11 @@ namespace Grpc.Core.Internal
}
}
+ public AuthContextSafeHandle GetAuthContext()
+ {
+ return Native.grpcsharp_call_auth_context(this);
+ }
+
protected override bool ReleaseHandle()
{
Native.grpcsharp_call_destroy(handle);
diff --git a/src/csharp/Grpc.Core/Internal/MarshalUtils.cs b/src/csharp/Grpc.Core/Internal/MarshalUtils.cs
new file mode 100644
index 0000000000..897e2f70bb
--- /dev/null
+++ b/src/csharp/Grpc.Core/Internal/MarshalUtils.cs
@@ -0,0 +1,90 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Grpc.Core.Internal
+{
+ /// <summary>
+ /// Useful methods for native/managed marshalling.
+ /// </summary>
+ internal static class MarshalUtils
+ {
+ static readonly Encoding EncodingUTF8 = System.Text.Encoding.UTF8;
+ static readonly Encoding EncodingASCII = System.Text.Encoding.ASCII;
+
+ /// <summary>
+ /// Converts <c>IntPtr</c> pointing to a UTF-8 encoded byte array to <c>string</c>.
+ /// </summary>
+ public static string PtrToStringUTF8(IntPtr ptr, int len)
+ {
+ var bytes = new byte[len];
+ Marshal.Copy(ptr, bytes, 0, len);
+ return EncodingUTF8.GetString(bytes);
+ }
+
+ /// <summary>
+ /// Returns byte array containing UTF-8 encoding of given string.
+ /// </summary>
+ public static byte[] GetBytesUTF8(string str)
+ {
+ return EncodingUTF8.GetBytes(str);
+ }
+
+ /// <summary>
+ /// Get string from a UTF8 encoded byte array.
+ /// </summary>
+ public static string GetStringUTF8(byte[] bytes)
+ {
+ return EncodingUTF8.GetString(bytes);
+ }
+
+ /// <summary>
+ /// Returns byte array containing ASCII encoding of given string.
+ /// </summary>
+ public static byte[] GetBytesASCII(string str)
+ {
+ return EncodingASCII.GetBytes(str);
+ }
+
+ /// <summary>
+ /// Get string from an ASCII encoded byte array.
+ /// </summary>
+ public static string GetStringASCII(byte[] bytes)
+ {
+ return EncodingASCII.GetString(bytes);
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core/Internal/NativeMethods.cs b/src/csharp/Grpc.Core/Internal/NativeMethods.cs
index aff9550e8d..dd65f05217 100644
--- a/src/csharp/Grpc.Core/Internal/NativeMethods.cs
+++ b/src/csharp/Grpc.Core/Internal/NativeMethods.cs
@@ -148,6 +148,12 @@ namespace Grpc.Core.Internal
public readonly Delegates.grpcsharp_server_shutdown_and_notify_callback_delegate grpcsharp_server_shutdown_and_notify_callback;
public readonly Delegates.grpcsharp_server_destroy_delegate grpcsharp_server_destroy;
+ public readonly Delegates.grpcsharp_call_auth_context_delegate grpcsharp_call_auth_context;
+ public readonly Delegates.grpcsharp_auth_context_peer_identity_property_name_delegate grpcsharp_auth_context_peer_identity_property_name;
+ public readonly Delegates.grpcsharp_auth_context_property_iterator_delegate grpcsharp_auth_context_property_iterator;
+ public readonly Delegates.grpcsharp_auth_property_iterator_next_delegate grpcsharp_auth_property_iterator_next;
+ public readonly Delegates.grpcsharp_auth_context_release_delegate grpcsharp_auth_context_release;
+
public readonly Delegates.gprsharp_now_delegate gprsharp_now;
public readonly Delegates.gprsharp_inf_future_delegate gprsharp_inf_future;
public readonly Delegates.gprsharp_inf_past_delegate gprsharp_inf_past;
@@ -256,6 +262,12 @@ namespace Grpc.Core.Internal
this.grpcsharp_server_shutdown_and_notify_callback = GetMethodDelegate<Delegates.grpcsharp_server_shutdown_and_notify_callback_delegate>(library);
this.grpcsharp_server_destroy = GetMethodDelegate<Delegates.grpcsharp_server_destroy_delegate>(library);
+ this.grpcsharp_call_auth_context = GetMethodDelegate<Delegates.grpcsharp_call_auth_context_delegate>(library);
+ this.grpcsharp_auth_context_peer_identity_property_name = GetMethodDelegate<Delegates.grpcsharp_auth_context_peer_identity_property_name_delegate>(library);
+ this.grpcsharp_auth_context_property_iterator = GetMethodDelegate<Delegates.grpcsharp_auth_context_property_iterator_delegate>(library);
+ this.grpcsharp_auth_property_iterator_next = GetMethodDelegate<Delegates.grpcsharp_auth_property_iterator_next_delegate>(library);
+ this.grpcsharp_auth_context_release = GetMethodDelegate<Delegates.grpcsharp_auth_context_release_delegate>(library);
+
this.gprsharp_now = GetMethodDelegate<Delegates.gprsharp_now_delegate>(library);
this.gprsharp_inf_future = GetMethodDelegate<Delegates.gprsharp_inf_future_delegate>(library);
this.gprsharp_inf_past = GetMethodDelegate<Delegates.gprsharp_inf_past_delegate>(library);
@@ -404,6 +416,12 @@ namespace Grpc.Core.Internal
public delegate void grpcsharp_server_shutdown_and_notify_callback_delegate(ServerSafeHandle server, CompletionQueueSafeHandle cq, BatchContextSafeHandle ctx);
public delegate void grpcsharp_server_destroy_delegate(IntPtr server);
+ public delegate AuthContextSafeHandle grpcsharp_call_auth_context_delegate(CallSafeHandle call);
+ public delegate IntPtr grpcsharp_auth_context_peer_identity_property_name_delegate(AuthContextSafeHandle authContext); // returns const char*
+ public delegate AuthContextSafeHandle.NativeAuthPropertyIterator grpcsharp_auth_context_property_iterator_delegate(AuthContextSafeHandle authContext);
+ public delegate IntPtr grpcsharp_auth_property_iterator_next_delegate(ref AuthContextSafeHandle.NativeAuthPropertyIterator iterator); // returns const auth_property*
+ public delegate void grpcsharp_auth_context_release_delegate(IntPtr authContext);
+
public delegate Timespec gprsharp_now_delegate(ClockType clockType);
public delegate Timespec gprsharp_inf_future_delegate(ClockType clockType);
public delegate Timespec gprsharp_inf_past_delegate(ClockType clockType);
diff --git a/src/csharp/Grpc.Core/Metadata.cs b/src/csharp/Grpc.Core/Metadata.cs
index 6fc715d6ee..6e195b49cc 100644
--- a/src/csharp/Grpc.Core/Metadata.cs
+++ b/src/csharp/Grpc.Core/Metadata.cs
@@ -32,12 +32,10 @@
using System;
using System.Collections;
using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Globalization;
-using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
+using Grpc.Core.Internal;
using Grpc.Core.Utils;
namespace Grpc.Core
@@ -242,7 +240,6 @@ namespace Grpc.Core
/// </summary>
public class Entry
{
- private static readonly Encoding Encoding = Encoding.ASCII;
private static readonly Regex ValidKeyRegex = new Regex("^[a-z0-9_-]+$");
readonly string key;
@@ -306,7 +303,7 @@ namespace Grpc.Core
{
if (valueBytes == null)
{
- return Encoding.GetBytes(value);
+ return MarshalUtils.GetBytesASCII(value);
}
// defensive copy to guarantee immutability
@@ -324,7 +321,7 @@ namespace Grpc.Core
get
{
GrpcPreconditions.CheckState(!IsBinary, "Cannot access string value of a binary metadata entry");
- return value ?? Encoding.GetString(valueBytes);
+ return value ?? MarshalUtils.GetStringASCII(valueBytes);
}
}
@@ -358,7 +355,7 @@ namespace Grpc.Core
/// </summary>
internal byte[] GetSerializedValueUnsafe()
{
- return valueBytes ?? Encoding.GetBytes(value);
+ return valueBytes ?? MarshalUtils.GetBytesASCII(value);
}
/// <summary>
@@ -371,7 +368,7 @@ namespace Grpc.Core
{
return new Entry(key, null, valueBytes);
}
- return new Entry(key, Encoding.GetString(valueBytes), null);
+ return new Entry(key, MarshalUtils.GetStringASCII(valueBytes), null);
}
private static string NormalizeKey(string key)
diff --git a/src/csharp/Grpc.Core/ServerCallContext.cs b/src/csharp/Grpc.Core/ServerCallContext.cs
index 8f28fbc045..c8950b7677 100644
--- a/src/csharp/Grpc.Core/ServerCallContext.cs
+++ b/src/csharp/Grpc.Core/ServerCallContext.cs
@@ -32,7 +32,6 @@
#endregion
using System;
-using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
@@ -56,6 +55,7 @@ namespace Grpc.Core
private Status status = Status.DefaultSuccess;
private Func<Metadata, Task> writeHeadersFunc;
private IHasWriteOptions writeOptionsHolder;
+ private Lazy<AuthContext> authContext;
internal ServerCallContext(CallSafeHandle callHandle, string method, string host, DateTime deadline, Metadata requestHeaders, CancellationToken cancellationToken,
Func<Metadata, Task> writeHeadersFunc, IHasWriteOptions writeOptionsHolder)
@@ -68,6 +68,7 @@ namespace Grpc.Core
this.cancellationToken = cancellationToken;
this.writeHeadersFunc = writeHeadersFunc;
this.writeOptionsHolder = writeOptionsHolder;
+ this.authContext = new Lazy<AuthContext>(GetAuthContextEager);
}
/// <summary>
@@ -187,6 +188,26 @@ namespace Grpc.Core
writeOptionsHolder.WriteOptions = value;
}
}
+
+ /// <summary>
+ /// Gets the <c>AuthContext</c> associated with this call.
+ /// Note: Access to AuthContext is an experimental API that can change without any prior notice.
+ /// </summary>
+ public AuthContext AuthContext
+ {
+ get
+ {
+ return authContext.Value;
+ }
+ }
+
+ private AuthContext GetAuthContextEager()
+ {
+ using (var authContextNative = callHandle.GetAuthContext())
+ {
+ return authContextNative.ToAuthContext();
+ }
+ }
}
/// <summary>
diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs
index f01a024db4..6012d904b6 100644
--- a/src/csharp/Grpc.Core/VersionInfo.cs
+++ b/src/csharp/Grpc.Core/VersionInfo.cs
@@ -48,11 +48,11 @@ namespace Grpc.Core
/// <summary>
/// Current <c>AssemblyFileVersion</c> of gRPC C# assemblies
/// </summary>
- public const string CurrentAssemblyFileVersion = "1.2.0.0";
+ public const string CurrentAssemblyFileVersion = "1.3.0.0";
/// <summary>
/// Current version of gRPC C#
/// </summary>
- public const string CurrentVersion = "1.2.0-dev";
+ public const string CurrentVersion = "1.3.0-dev";
}
}
diff --git a/src/csharp/Grpc.Core/project.json b/src/csharp/Grpc.Core/project.json
index 0e37ec8927..a1306baa87 100644
--- a/src/csharp/Grpc.Core/project.json
+++ b/src/csharp/Grpc.Core/project.json
@@ -1,5 +1,5 @@
{
- "version": "1.2.0-dev",
+ "version": "1.3.0-dev",
"title": "gRPC C# Core",
"authors": [ "Google Inc." ],
"copyright": "Copyright 2015, Google Inc.",
diff --git a/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj b/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
index d22fe87825..c96243b1c7 100644
--- a/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
+++ b/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
@@ -27,17 +27,17 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
+ </Reference>
<Reference Include="nunit.framework">
- <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
+ <HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="nunitlite">
- <HintPath>..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll</HintPath>
+ <HintPath>..\packages\NUnitLite.3.6.0\lib\net45\nunitlite.dll</HintPath>
</Reference>
<Reference Include="Google.Protobuf">
- <HintPath>..\packages\Google.Protobuf.3.0.0\lib\net45\Google.Protobuf.dll</HintPath>
- </Reference>
- <Reference Include="System.Interactive.Async">
- <HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
+ <HintPath>..\packages\Google.Protobuf.3.2.0\lib\net45\Google.Protobuf.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
diff --git a/src/csharp/Grpc.Examples.Tests/packages.config b/src/csharp/Grpc.Examples.Tests/packages.config
index 0fed4dbd41..8a7f7a0652 100644
--- a/src/csharp/Grpc.Examples.Tests/packages.config
+++ b/src/csharp/Grpc.Examples.Tests/packages.config
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.Protobuf" version="3.0.0" targetFramework="net45" />
- <package id="NUnit" version="3.2.0" targetFramework="net45" />
- <package id="NUnitLite" version="3.2.0" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.2.0" targetFramework="net45" />
+ <package id="NUnit" version="3.6.0" targetFramework="net45" />
+ <package id="NUnitLite" version="3.6.0" targetFramework="net45" />
<package id="System.Interactive.Async" version="3.1.1" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.Examples.Tests/project.json b/src/csharp/Grpc.Examples.Tests/project.json
index e509621a29..4ffcaf57fd 100644
--- a/src/csharp/Grpc.Examples.Tests/project.json
+++ b/src/csharp/Grpc.Examples.Tests/project.json
@@ -45,8 +45,8 @@
"Grpc.Examples": {
"target": "project"
},
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*"
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0"
},
"frameworks": {
"net45": { },
diff --git a/src/csharp/Grpc.Examples/Grpc.Examples.csproj b/src/csharp/Grpc.Examples/Grpc.Examples.csproj
index 44acb6c2e3..fc927543f7 100644
--- a/src/csharp/Grpc.Examples/Grpc.Examples.csproj
+++ b/src/csharp/Grpc.Examples/Grpc.Examples.csproj
@@ -3,8 +3,6 @@
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>10.0.0</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{7DC1433E-3225-42C7-B7EA-546D56E27A4B}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>Grpc.Examples</RootNamespace>
@@ -28,17 +26,17 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
- <Reference Include="nunit.framework">
- <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
- </Reference>
<Reference Include="System" />
<Reference Include="System.Data.Linq" />
- <Reference Include="Google.Protobuf">
- <HintPath>..\packages\Google.Protobuf.3.0.0\lib\net45\Google.Protobuf.dll</HintPath>
- </Reference>
<Reference Include="System.Interactive.Async">
<HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference>
+ <Reference Include="nunit.framework">
+ <HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.Protobuf">
+ <HintPath>..\packages\Google.Protobuf.3.2.0\lib\net45\Google.Protobuf.dll</HintPath>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\Grpc.Core\Version.cs">
diff --git a/src/csharp/Grpc.Examples/packages.config b/src/csharp/Grpc.Examples/packages.config
index c7db26bd64..79a898081e 100644
--- a/src/csharp/Grpc.Examples/packages.config
+++ b/src/csharp/Grpc.Examples/packages.config
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.Protobuf" version="3.0.0" targetFramework="net45" />
- <package id="NUnit" version="3.2.0" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.2.0" targetFramework="net45" />
+ <package id="NUnit" version="3.6.0" targetFramework="net45" />
<package id="System.Interactive.Async" version="3.1.1" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.Examples/project.json b/src/csharp/Grpc.Examples/project.json
index 21a730cb22..3ee0a71356 100644
--- a/src/csharp/Grpc.Examples/project.json
+++ b/src/csharp/Grpc.Examples/project.json
@@ -6,15 +6,10 @@
"Grpc.Core": {
"target": "project"
},
- "Google.Protobuf": "3.0.0"
+ "Google.Protobuf": "3.2.0"
},
"frameworks": {
- "net45": {
- "frameworkAssemblies": {
- "System.Runtime": "",
- "System.IO": ""
- }
- },
+ "net45": {},
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
diff --git a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
index b82f976861..71f0ee19b8 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
+++ b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
@@ -35,14 +35,14 @@
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
+ <Reference Include="Google.Protobuf">
+ <HintPath>..\packages\Google.Protobuf.3.2.0\lib\net45\Google.Protobuf.dll</HintPath>
+ </Reference>
<Reference Include="nunit.framework">
- <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
+ <HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="nunitlite">
- <HintPath>..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll</HintPath>
- </Reference>
- <Reference Include="Google.Protobuf">
- <HintPath>..\packages\Google.Protobuf.3.0.0\lib\net45\Google.Protobuf.dll</HintPath>
+ <HintPath>..\packages\NUnitLite.3.6.0\lib\net45\nunitlite.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
diff --git a/src/csharp/Grpc.HealthCheck.Tests/packages.config b/src/csharp/Grpc.HealthCheck.Tests/packages.config
index e796d6b135..48c94bc4a3 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/packages.config
+++ b/src/csharp/Grpc.HealthCheck.Tests/packages.config
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.Protobuf" version="3.0.0" targetFramework="net45" />
- <package id="NUnit" version="3.2.0" targetFramework="net45" />
- <package id="NUnitLite" version="3.2.0" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.2.0" targetFramework="net45" />
+ <package id="NUnit" version="3.6.0" targetFramework="net45" />
+ <package id="NUnitLite" version="3.6.0" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.HealthCheck.Tests/project.json b/src/csharp/Grpc.HealthCheck.Tests/project.json
index 654454d1cb..2814cbfe46 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/project.json
+++ b/src/csharp/Grpc.HealthCheck.Tests/project.json
@@ -45,8 +45,8 @@
"Grpc.HealthCheck": {
"target": "project"
},
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*"
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0"
},
"frameworks": {
"net45": { },
diff --git a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
index 63aa18584d..171525b708 100644
--- a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
+++ b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
@@ -36,12 +36,12 @@
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
- <Reference Include="Google.Protobuf">
- <HintPath>..\packages\Google.Protobuf.3.0.0\lib\net45\Google.Protobuf.dll</HintPath>
- </Reference>
<Reference Include="System.Interactive.Async">
<HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference>
+ <Reference Include="Google.Protobuf">
+ <HintPath>..\packages\Google.Protobuf.3.2.0\lib\net45\Google.Protobuf.dll</HintPath>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\Grpc.Core\Version.cs">
diff --git a/src/csharp/Grpc.HealthCheck/packages.config b/src/csharp/Grpc.HealthCheck/packages.config
index 5ab40b7a8c..eec292b306 100644
--- a/src/csharp/Grpc.HealthCheck/packages.config
+++ b/src/csharp/Grpc.HealthCheck/packages.config
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.Protobuf" version="3.0.0" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.2.0" targetFramework="net45" />
<package id="System.Interactive.Async" version="3.1.1" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.HealthCheck/project.json b/src/csharp/Grpc.HealthCheck/project.json
index 5d3b2f554b..e93d0bf81b 100644
--- a/src/csharp/Grpc.HealthCheck/project.json
+++ b/src/csharp/Grpc.HealthCheck/project.json
@@ -1,5 +1,5 @@
{
- "version": "1.2.0-dev",
+ "version": "1.3.0-dev",
"title": "gRPC C# Healthchecking",
"authors": [ "Google Inc." ],
"copyright": "Copyright 2015, Google Inc.",
@@ -21,16 +21,11 @@
}
},
"dependencies": {
- "Grpc.Core": "1.2.0-dev",
- "Google.Protobuf": "3.0.0"
+ "Grpc.Core": "1.3.0-dev",
+ "Google.Protobuf": "3.2.0"
},
"frameworks": {
- "net45": {
- "frameworkAssemblies": {
- "System.Runtime": "",
- "System.IO": ""
- }
- },
+ "net45": {},
"netstandard1.5": {
"dependencies": {
"NETStandard.Library": "1.6.0"
diff --git a/src/csharp/Grpc.IntegrationTesting.Client/Grpc.IntegrationTesting.Client.csproj b/src/csharp/Grpc.IntegrationTesting.Client/Grpc.IntegrationTesting.Client.csproj
index 6bb5f33966..a793f3f6df 100644
--- a/src/csharp/Grpc.IntegrationTesting.Client/Grpc.IntegrationTesting.Client.csproj
+++ b/src/csharp/Grpc.IntegrationTesting.Client/Grpc.IntegrationTesting.Client.csproj
@@ -34,33 +34,6 @@
<Reference Include="System.Net" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.WebRequest" />
- <Reference Include="BouncyCastle.Crypto">
- <HintPath>..\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll</HintPath>
- </Reference>
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="log4net">
- <HintPath>..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.Core">
- <HintPath>..\packages\Google.Apis.Core.1.16.0\lib\net45\Google.Apis.Core.dll</HintPath>
- </Reference>
- <Reference Include="Zlib.Portable">
- <HintPath>..\packages\Zlib.Portable.Signed.1.11.0\lib\portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid\Zlib.Portable.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis">
- <HintPath>..\packages\Google.Apis.1.16.0\lib\net45\Google.Apis.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.PlatformServices">
- <HintPath>..\packages\Google.Apis.1.16.0\lib\net45\Google.Apis.PlatformServices.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.Auth">
- <HintPath>..\packages\Google.Apis.Auth.1.16.0\lib\net45\Google.Apis.Auth.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.Auth.PlatformServices">
- <HintPath>..\packages\Google.Apis.Auth.1.16.0\lib\net45\Google.Apis.Auth.PlatformServices.dll</HintPath>
- </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\Grpc.Core\Version.cs">
@@ -82,6 +55,5 @@
</ItemGroup>
<ItemGroup>
<None Include="Grpc.IntegrationTesting.Client.project.json" />
- <None Include="packages.config" />
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/src/csharp/Grpc.IntegrationTesting.Client/packages.config b/src/csharp/Grpc.IntegrationTesting.Client/packages.config
deleted file mode 100644
index 11c6375c63..0000000000
--- a/src/csharp/Grpc.IntegrationTesting.Client/packages.config
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="BouncyCastle" version="1.7.0" targetFramework="net45" />
- <package id="Google.Apis" version="1.16.0" targetFramework="net45" />
- <package id="Google.Apis.Auth" version="1.16.0" targetFramework="net45" />
- <package id="Google.Apis.Core" version="1.16.0" targetFramework="net45" />
- <package id="log4net" version="2.0.3" targetFramework="net45" />
- <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
- <package id="Zlib.Portable.Signed" version="1.11.0" targetFramework="net45" />
-</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.IntegrationTesting.QpsWorker/packages.config b/src/csharp/Grpc.IntegrationTesting.QpsWorker/packages.config
deleted file mode 100644
index 79ece06bef..0000000000
--- a/src/csharp/Grpc.IntegrationTesting.QpsWorker/packages.config
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-</packages>
diff --git a/src/csharp/Grpc.IntegrationTesting.Server/Grpc.IntegrationTesting.Server.csproj b/src/csharp/Grpc.IntegrationTesting.Server/Grpc.IntegrationTesting.Server.csproj
index 081dc24fbf..80d36363f7 100644
--- a/src/csharp/Grpc.IntegrationTesting.Server/Grpc.IntegrationTesting.Server.csproj
+++ b/src/csharp/Grpc.IntegrationTesting.Server/Grpc.IntegrationTesting.Server.csproj
@@ -34,33 +34,6 @@
<Reference Include="System.Net" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.WebRequest" />
- <Reference Include="BouncyCastle.Crypto">
- <HintPath>..\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll</HintPath>
- </Reference>
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="log4net">
- <HintPath>..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.Core">
- <HintPath>..\packages\Google.Apis.Core.1.16.0\lib\net45\Google.Apis.Core.dll</HintPath>
- </Reference>
- <Reference Include="Zlib.Portable">
- <HintPath>..\packages\Zlib.Portable.Signed.1.11.0\lib\portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid\Zlib.Portable.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis">
- <HintPath>..\packages\Google.Apis.1.16.0\lib\net45\Google.Apis.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.PlatformServices">
- <HintPath>..\packages\Google.Apis.1.16.0\lib\net45\Google.Apis.PlatformServices.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.Auth">
- <HintPath>..\packages\Google.Apis.Auth.1.16.0\lib\net45\Google.Apis.Auth.dll</HintPath>
- </Reference>
- <Reference Include="Google.Apis.Auth.PlatformServices">
- <HintPath>..\packages\Google.Apis.Auth.1.16.0\lib\net45\Google.Apis.Auth.PlatformServices.dll</HintPath>
- </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\Grpc.Core\Version.cs">
@@ -82,6 +55,5 @@
</ItemGroup>
<ItemGroup>
<None Include="Grpc.IntegrationTesting.Server.project.json" />
- <None Include="packages.config" />
</ItemGroup>
</Project> \ No newline at end of file
diff --git a/src/csharp/Grpc.IntegrationTesting.Server/packages.config b/src/csharp/Grpc.IntegrationTesting.Server/packages.config
deleted file mode 100644
index 11c6375c63..0000000000
--- a/src/csharp/Grpc.IntegrationTesting.Server/packages.config
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
- <package id="BouncyCastle" version="1.7.0" targetFramework="net45" />
- <package id="Google.Apis" version="1.16.0" targetFramework="net45" />
- <package id="Google.Apis.Auth" version="1.16.0" targetFramework="net45" />
- <package id="Google.Apis.Core" version="1.16.0" targetFramework="net45" />
- <package id="log4net" version="2.0.3" targetFramework="net45" />
- <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
- <package id="Zlib.Portable.Signed" version="1.11.0" targetFramework="net45" />
-</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.IntegrationTesting.StressClient/packages.config b/src/csharp/Grpc.IntegrationTesting.StressClient/packages.config
deleted file mode 100644
index 79ece06bef..0000000000
--- a/src/csharp/Grpc.IntegrationTesting.StressClient/packages.config
+++ /dev/null
@@ -1,3 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<packages>
-</packages>
diff --git a/src/csharp/Grpc.IntegrationTesting/Control.cs b/src/csharp/Grpc.IntegrationTesting/Control.cs
index 3f4862d567..6c0176fb43 100644
--- a/src/csharp/Grpc.IntegrationTesting/Control.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Control.cs
@@ -30,63 +30,66 @@ namespace Grpc.Testing {
"cnBjLnRlc3RpbmcuQ2xvc2VkTG9vcFBhcmFtc0gAEi4KB3BvaXNzb24YAiAB",
"KAsyGy5ncnBjLnRlc3RpbmcuUG9pc3NvblBhcmFtc0gAQgYKBGxvYWQiQwoO",
"U2VjdXJpdHlQYXJhbXMSEwoLdXNlX3Rlc3RfY2EYASABKAgSHAoUc2VydmVy",
- "X2hvc3Rfb3ZlcnJpZGUYAiABKAki8AMKDENsaWVudENvbmZpZxIWCg5zZXJ2",
- "ZXJfdGFyZ2V0cxgBIAMoCRItCgtjbGllbnRfdHlwZRgCIAEoDjIYLmdycGMu",
- "dGVzdGluZy5DbGllbnRUeXBlEjUKD3NlY3VyaXR5X3BhcmFtcxgDIAEoCzIc",
- "LmdycGMudGVzdGluZy5TZWN1cml0eVBhcmFtcxIkChxvdXRzdGFuZGluZ19y",
- "cGNzX3Blcl9jaGFubmVsGAQgASgFEhcKD2NsaWVudF9jaGFubmVscxgFIAEo",
- "BRIcChRhc3luY19jbGllbnRfdGhyZWFkcxgHIAEoBRInCghycGNfdHlwZRgI",
- "IAEoDjIVLmdycGMudGVzdGluZy5ScGNUeXBlEi0KC2xvYWRfcGFyYW1zGAog",
- "ASgLMhguZ3JwYy50ZXN0aW5nLkxvYWRQYXJhbXMSMwoOcGF5bG9hZF9jb25m",
- "aWcYCyABKAsyGy5ncnBjLnRlc3RpbmcuUGF5bG9hZENvbmZpZxI3ChBoaXN0",
- "b2dyYW1fcGFyYW1zGAwgASgLMh0uZ3JwYy50ZXN0aW5nLkhpc3RvZ3JhbVBh",
- "cmFtcxIRCgljb3JlX2xpc3QYDSADKAUSEgoKY29yZV9saW1pdBgOIAEoBRIY",
- "ChBvdGhlcl9jbGllbnRfYXBpGA8gASgJIjgKDENsaWVudFN0YXR1cxIoCgVz",
- "dGF0cxgBIAEoCzIZLmdycGMudGVzdGluZy5DbGllbnRTdGF0cyIVCgRNYXJr",
- "Eg0KBXJlc2V0GAEgASgIImgKCkNsaWVudEFyZ3MSKwoFc2V0dXAYASABKAsy",
- "Gi5ncnBjLnRlc3RpbmcuQ2xpZW50Q29uZmlnSAASIgoEbWFyaxgCIAEoCzIS",
- "LmdycGMudGVzdGluZy5NYXJrSABCCQoHYXJndHlwZSK0AgoMU2VydmVyQ29u",
- "ZmlnEi0KC3NlcnZlcl90eXBlGAEgASgOMhguZ3JwYy50ZXN0aW5nLlNlcnZl",
- "clR5cGUSNQoPc2VjdXJpdHlfcGFyYW1zGAIgASgLMhwuZ3JwYy50ZXN0aW5n",
- "LlNlY3VyaXR5UGFyYW1zEgwKBHBvcnQYBCABKAUSHAoUYXN5bmNfc2VydmVy",
- "X3RocmVhZHMYByABKAUSEgoKY29yZV9saW1pdBgIIAEoBRIzCg5wYXlsb2Fk",
- "X2NvbmZpZxgJIAEoCzIbLmdycGMudGVzdGluZy5QYXlsb2FkQ29uZmlnEhEK",
- "CWNvcmVfbGlzdBgKIAMoBRIYChBvdGhlcl9zZXJ2ZXJfYXBpGAsgASgJEhwK",
- "E3Jlc291cmNlX3F1b3RhX3NpemUY6QcgASgFImgKClNlcnZlckFyZ3MSKwoF",
- "c2V0dXAYASABKAsyGi5ncnBjLnRlc3RpbmcuU2VydmVyQ29uZmlnSAASIgoE",
- "bWFyaxgCIAEoCzISLmdycGMudGVzdGluZy5NYXJrSABCCQoHYXJndHlwZSJV",
- "CgxTZXJ2ZXJTdGF0dXMSKAoFc3RhdHMYASABKAsyGS5ncnBjLnRlc3Rpbmcu",
- "U2VydmVyU3RhdHMSDAoEcG9ydBgCIAEoBRINCgVjb3JlcxgDIAEoBSINCgtD",
- "b3JlUmVxdWVzdCIdCgxDb3JlUmVzcG9uc2USDQoFY29yZXMYASABKAUiBgoE",
- "Vm9pZCL9AQoIU2NlbmFyaW8SDAoEbmFtZRgBIAEoCRIxCg1jbGllbnRfY29u",
- "ZmlnGAIgASgLMhouZ3JwYy50ZXN0aW5nLkNsaWVudENvbmZpZxITCgtudW1f",
- "Y2xpZW50cxgDIAEoBRIxCg1zZXJ2ZXJfY29uZmlnGAQgASgLMhouZ3JwYy50",
- "ZXN0aW5nLlNlcnZlckNvbmZpZxITCgtudW1fc2VydmVycxgFIAEoBRIWCg53",
- "YXJtdXBfc2Vjb25kcxgGIAEoBRIZChFiZW5jaG1hcmtfc2Vjb25kcxgHIAEo",
- "BRIgChhzcGF3bl9sb2NhbF93b3JrZXJfY291bnQYCCABKAUiNgoJU2NlbmFy",
- "aW9zEikKCXNjZW5hcmlvcxgBIAMoCzIWLmdycGMudGVzdGluZy5TY2VuYXJp",
- "byL4AgoVU2NlbmFyaW9SZXN1bHRTdW1tYXJ5EgsKA3FwcxgBIAEoARIbChNx",
- "cHNfcGVyX3NlcnZlcl9jb3JlGAIgASgBEhoKEnNlcnZlcl9zeXN0ZW1fdGlt",
- "ZRgDIAEoARIYChBzZXJ2ZXJfdXNlcl90aW1lGAQgASgBEhoKEmNsaWVudF9z",
- "eXN0ZW1fdGltZRgFIAEoARIYChBjbGllbnRfdXNlcl90aW1lGAYgASgBEhIK",
- "CmxhdGVuY3lfNTAYByABKAESEgoKbGF0ZW5jeV85MBgIIAEoARISCgpsYXRl",
- "bmN5Xzk1GAkgASgBEhIKCmxhdGVuY3lfOTkYCiABKAESEwoLbGF0ZW5jeV85",
- "OTkYCyABKAESGAoQc2VydmVyX2NwdV91c2FnZRgMIAEoARImCh5zdWNjZXNz",
- "ZnVsX3JlcXVlc3RzX3Blcl9zZWNvbmQYDSABKAESIgoaZmFpbGVkX3JlcXVl",
- "c3RzX3Blcl9zZWNvbmQYDiABKAEigwMKDlNjZW5hcmlvUmVzdWx0EigKCHNj",
- "ZW5hcmlvGAEgASgLMhYuZ3JwYy50ZXN0aW5nLlNjZW5hcmlvEi4KCWxhdGVu",
- "Y2llcxgCIAEoCzIbLmdycGMudGVzdGluZy5IaXN0b2dyYW1EYXRhEi8KDGNs",
- "aWVudF9zdGF0cxgDIAMoCzIZLmdycGMudGVzdGluZy5DbGllbnRTdGF0cxIv",
- "CgxzZXJ2ZXJfc3RhdHMYBCADKAsyGS5ncnBjLnRlc3RpbmcuU2VydmVyU3Rh",
- "dHMSFAoMc2VydmVyX2NvcmVzGAUgAygFEjQKB3N1bW1hcnkYBiABKAsyIy5n",
- "cnBjLnRlc3RpbmcuU2NlbmFyaW9SZXN1bHRTdW1tYXJ5EhYKDmNsaWVudF9z",
- "dWNjZXNzGAcgAygIEhYKDnNlcnZlcl9zdWNjZXNzGAggAygIEjkKD3JlcXVl",
- "c3RfcmVzdWx0cxgJIAMoCzIgLmdycGMudGVzdGluZy5SZXF1ZXN0UmVzdWx0",
- "Q291bnQqQQoKQ2xpZW50VHlwZRIPCgtTWU5DX0NMSUVOVBAAEhAKDEFTWU5D",
- "X0NMSUVOVBABEhAKDE9USEVSX0NMSUVOVBACKlsKClNlcnZlclR5cGUSDwoL",
- "U1lOQ19TRVJWRVIQABIQCgxBU1lOQ19TRVJWRVIQARIYChRBU1lOQ19HRU5F",
- "UklDX1NFUlZFUhACEhAKDE9USEVSX1NFUlZFUhADKiMKB1JwY1R5cGUSCQoF",
- "VU5BUlkQABINCglTVFJFQU1JTkcQAWIGcHJvdG8z"));
+ "X2hvc3Rfb3ZlcnJpZGUYAiABKAkiTQoKQ2hhbm5lbEFyZxIMCgRuYW1lGAEg",
+ "ASgJEhMKCXN0cl92YWx1ZRgCIAEoCUgAEhMKCWludF92YWx1ZRgDIAEoBUgA",
+ "QgcKBXZhbHVlIqAECgxDbGllbnRDb25maWcSFgoOc2VydmVyX3RhcmdldHMY",
+ "ASADKAkSLQoLY2xpZW50X3R5cGUYAiABKA4yGC5ncnBjLnRlc3RpbmcuQ2xp",
+ "ZW50VHlwZRI1Cg9zZWN1cml0eV9wYXJhbXMYAyABKAsyHC5ncnBjLnRlc3Rp",
+ "bmcuU2VjdXJpdHlQYXJhbXMSJAocb3V0c3RhbmRpbmdfcnBjc19wZXJfY2hh",
+ "bm5lbBgEIAEoBRIXCg9jbGllbnRfY2hhbm5lbHMYBSABKAUSHAoUYXN5bmNf",
+ "Y2xpZW50X3RocmVhZHMYByABKAUSJwoIcnBjX3R5cGUYCCABKA4yFS5ncnBj",
+ "LnRlc3RpbmcuUnBjVHlwZRItCgtsb2FkX3BhcmFtcxgKIAEoCzIYLmdycGMu",
+ "dGVzdGluZy5Mb2FkUGFyYW1zEjMKDnBheWxvYWRfY29uZmlnGAsgASgLMhsu",
+ "Z3JwYy50ZXN0aW5nLlBheWxvYWRDb25maWcSNwoQaGlzdG9ncmFtX3BhcmFt",
+ "cxgMIAEoCzIdLmdycGMudGVzdGluZy5IaXN0b2dyYW1QYXJhbXMSEQoJY29y",
+ "ZV9saXN0GA0gAygFEhIKCmNvcmVfbGltaXQYDiABKAUSGAoQb3RoZXJfY2xp",
+ "ZW50X2FwaRgPIAEoCRIuCgxjaGFubmVsX2FyZ3MYECADKAsyGC5ncnBjLnRl",
+ "c3RpbmcuQ2hhbm5lbEFyZyI4CgxDbGllbnRTdGF0dXMSKAoFc3RhdHMYASAB",
+ "KAsyGS5ncnBjLnRlc3RpbmcuQ2xpZW50U3RhdHMiFQoETWFyaxINCgVyZXNl",
+ "dBgBIAEoCCJoCgpDbGllbnRBcmdzEisKBXNldHVwGAEgASgLMhouZ3JwYy50",
+ "ZXN0aW5nLkNsaWVudENvbmZpZ0gAEiIKBG1hcmsYAiABKAsyEi5ncnBjLnRl",
+ "c3RpbmcuTWFya0gAQgkKB2FyZ3R5cGUitAIKDFNlcnZlckNvbmZpZxItCgtz",
+ "ZXJ2ZXJfdHlwZRgBIAEoDjIYLmdycGMudGVzdGluZy5TZXJ2ZXJUeXBlEjUK",
+ "D3NlY3VyaXR5X3BhcmFtcxgCIAEoCzIcLmdycGMudGVzdGluZy5TZWN1cml0",
+ "eVBhcmFtcxIMCgRwb3J0GAQgASgFEhwKFGFzeW5jX3NlcnZlcl90aHJlYWRz",
+ "GAcgASgFEhIKCmNvcmVfbGltaXQYCCABKAUSMwoOcGF5bG9hZF9jb25maWcY",
+ "CSABKAsyGy5ncnBjLnRlc3RpbmcuUGF5bG9hZENvbmZpZxIRCgljb3JlX2xp",
+ "c3QYCiADKAUSGAoQb3RoZXJfc2VydmVyX2FwaRgLIAEoCRIcChNyZXNvdXJj",
+ "ZV9xdW90YV9zaXplGOkHIAEoBSJoCgpTZXJ2ZXJBcmdzEisKBXNldHVwGAEg",
+ "ASgLMhouZ3JwYy50ZXN0aW5nLlNlcnZlckNvbmZpZ0gAEiIKBG1hcmsYAiAB",
+ "KAsyEi5ncnBjLnRlc3RpbmcuTWFya0gAQgkKB2FyZ3R5cGUiVQoMU2VydmVy",
+ "U3RhdHVzEigKBXN0YXRzGAEgASgLMhkuZ3JwYy50ZXN0aW5nLlNlcnZlclN0",
+ "YXRzEgwKBHBvcnQYAiABKAUSDQoFY29yZXMYAyABKAUiDQoLQ29yZVJlcXVl",
+ "c3QiHQoMQ29yZVJlc3BvbnNlEg0KBWNvcmVzGAEgASgFIgYKBFZvaWQi/QEK",
+ "CFNjZW5hcmlvEgwKBG5hbWUYASABKAkSMQoNY2xpZW50X2NvbmZpZxgCIAEo",
+ "CzIaLmdycGMudGVzdGluZy5DbGllbnRDb25maWcSEwoLbnVtX2NsaWVudHMY",
+ "AyABKAUSMQoNc2VydmVyX2NvbmZpZxgEIAEoCzIaLmdycGMudGVzdGluZy5T",
+ "ZXJ2ZXJDb25maWcSEwoLbnVtX3NlcnZlcnMYBSABKAUSFgoOd2FybXVwX3Nl",
+ "Y29uZHMYBiABKAUSGQoRYmVuY2htYXJrX3NlY29uZHMYByABKAUSIAoYc3Bh",
+ "d25fbG9jYWxfd29ya2VyX2NvdW50GAggASgFIjYKCVNjZW5hcmlvcxIpCglz",
+ "Y2VuYXJpb3MYASADKAsyFi5ncnBjLnRlc3RpbmcuU2NlbmFyaW8i+AIKFVNj",
+ "ZW5hcmlvUmVzdWx0U3VtbWFyeRILCgNxcHMYASABKAESGwoTcXBzX3Blcl9z",
+ "ZXJ2ZXJfY29yZRgCIAEoARIaChJzZXJ2ZXJfc3lzdGVtX3RpbWUYAyABKAES",
+ "GAoQc2VydmVyX3VzZXJfdGltZRgEIAEoARIaChJjbGllbnRfc3lzdGVtX3Rp",
+ "bWUYBSABKAESGAoQY2xpZW50X3VzZXJfdGltZRgGIAEoARISCgpsYXRlbmN5",
+ "XzUwGAcgASgBEhIKCmxhdGVuY3lfOTAYCCABKAESEgoKbGF0ZW5jeV85NRgJ",
+ "IAEoARISCgpsYXRlbmN5Xzk5GAogASgBEhMKC2xhdGVuY3lfOTk5GAsgASgB",
+ "EhgKEHNlcnZlcl9jcHVfdXNhZ2UYDCABKAESJgoec3VjY2Vzc2Z1bF9yZXF1",
+ "ZXN0c19wZXJfc2Vjb25kGA0gASgBEiIKGmZhaWxlZF9yZXF1ZXN0c19wZXJf",
+ "c2Vjb25kGA4gASgBIoMDCg5TY2VuYXJpb1Jlc3VsdBIoCghzY2VuYXJpbxgB",
+ "IAEoCzIWLmdycGMudGVzdGluZy5TY2VuYXJpbxIuCglsYXRlbmNpZXMYAiAB",
+ "KAsyGy5ncnBjLnRlc3RpbmcuSGlzdG9ncmFtRGF0YRIvCgxjbGllbnRfc3Rh",
+ "dHMYAyADKAsyGS5ncnBjLnRlc3RpbmcuQ2xpZW50U3RhdHMSLwoMc2VydmVy",
+ "X3N0YXRzGAQgAygLMhkuZ3JwYy50ZXN0aW5nLlNlcnZlclN0YXRzEhQKDHNl",
+ "cnZlcl9jb3JlcxgFIAMoBRI0CgdzdW1tYXJ5GAYgASgLMiMuZ3JwYy50ZXN0",
+ "aW5nLlNjZW5hcmlvUmVzdWx0U3VtbWFyeRIWCg5jbGllbnRfc3VjY2VzcxgH",
+ "IAMoCBIWCg5zZXJ2ZXJfc3VjY2VzcxgIIAMoCBI5Cg9yZXF1ZXN0X3Jlc3Vs",
+ "dHMYCSADKAsyIC5ncnBjLnRlc3RpbmcuUmVxdWVzdFJlc3VsdENvdW50KkEK",
+ "CkNsaWVudFR5cGUSDwoLU1lOQ19DTElFTlQQABIQCgxBU1lOQ19DTElFTlQQ",
+ "ARIQCgxPVEhFUl9DTElFTlQQAipbCgpTZXJ2ZXJUeXBlEg8KC1NZTkNfU0VS",
+ "VkVSEAASEAoMQVNZTkNfU0VSVkVSEAESGAoUQVNZTkNfR0VORVJJQ19TRVJW",
+ "RVIQAhIQCgxPVEhFUl9TRVJWRVIQAyojCgdScGNUeXBlEgkKBVVOQVJZEAAS",
+ "DQoJU1RSRUFNSU5HEAFiBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Grpc.Testing.PayloadsReflection.Descriptor, global::Grpc.Testing.StatsReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Grpc.Testing.ClientType), typeof(global::Grpc.Testing.ServerType), typeof(global::Grpc.Testing.RpcType), }, new pbr::GeneratedClrTypeInfo[] {
@@ -94,7 +97,8 @@ namespace Grpc.Testing {
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClosedLoopParams), global::Grpc.Testing.ClosedLoopParams.Parser, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.LoadParams), global::Grpc.Testing.LoadParams.Parser, new[]{ "ClosedLoop", "Poisson" }, new[]{ "Load" }, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SecurityParams), global::Grpc.Testing.SecurityParams.Parser, new[]{ "UseTestCa", "ServerHostOverride" }, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientConfig), global::Grpc.Testing.ClientConfig.Parser, new[]{ "ServerTargets", "ClientType", "SecurityParams", "OutstandingRpcsPerChannel", "ClientChannels", "AsyncClientThreads", "RpcType", "LoadParams", "PayloadConfig", "HistogramParams", "CoreList", "CoreLimit", "OtherClientApi" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ChannelArg), global::Grpc.Testing.ChannelArg.Parser, new[]{ "Name", "StrValue", "IntValue" }, new[]{ "Value" }, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientConfig), global::Grpc.Testing.ClientConfig.Parser, new[]{ "ServerTargets", "ClientType", "SecurityParams", "OutstandingRpcsPerChannel", "ClientChannels", "AsyncClientThreads", "RpcType", "LoadParams", "PayloadConfig", "HistogramParams", "CoreList", "CoreLimit", "OtherClientApi", "ChannelArgs" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientStatus), global::Grpc.Testing.ClientStatus.Parser, new[]{ "Stats" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Mark), global::Grpc.Testing.Mark.Parser, new[]{ "Reset" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientArgs), global::Grpc.Testing.ClientArgs.Parser, new[]{ "Setup", "Mark" }, new[]{ "Argtype" }, null, null),
@@ -116,13 +120,13 @@ namespace Grpc.Testing {
#region Enums
public enum ClientType {
/// <summary>
- /// Many languages support a basic distinction between using
- /// sync or async client, and this allows the specification
+ /// Many languages support a basic distinction between using
+ /// sync or async client, and this allows the specification
/// </summary>
[pbr::OriginalName("SYNC_CLIENT")] SyncClient = 0,
[pbr::OriginalName("ASYNC_CLIENT")] AsyncClient = 1,
/// <summary>
- /// used for some language-specific variants
+ /// used for some language-specific variants
/// </summary>
[pbr::OriginalName("OTHER_CLIENT")] OtherClient = 2,
}
@@ -132,7 +136,7 @@ namespace Grpc.Testing {
[pbr::OriginalName("ASYNC_SERVER")] AsyncServer = 1,
[pbr::OriginalName("ASYNC_GENERIC_SERVER")] AsyncGenericServer = 2,
/// <summary>
- /// used for some language-specific variants
+ /// used for some language-specific variants
/// </summary>
[pbr::OriginalName("OTHER_SERVER")] OtherServer = 3,
}
@@ -146,8 +150,8 @@ namespace Grpc.Testing {
#region Messages
/// <summary>
- /// Parameters of poisson process distribution, which is a good representation
- /// of activity coming in from independent identical stationary sources.
+ /// Parameters of poisson process distribution, which is a good representation
+ /// of activity coming in from independent identical stationary sources.
/// </summary>
public sealed partial class PoissonParams : pb::IMessage<PoissonParams> {
private static readonly pb::MessageParser<PoissonParams> _parser = new pb::MessageParser<PoissonParams>(() => new PoissonParams());
@@ -185,7 +189,7 @@ namespace Grpc.Testing {
public const int OfferedLoadFieldNumber = 1;
private double offeredLoad_;
/// <summary>
- /// The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
+ /// The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double OfferedLoad {
@@ -270,8 +274,8 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Once an RPC finishes, immediately start a new one.
- /// No configuration parameters needed.
+ /// Once an RPC finishes, immediately start a new one.
+ /// No configuration parameters needed.
/// </summary>
public sealed partial class ClosedLoopParams : pb::IMessage<ClosedLoopParams> {
private static readonly pb::MessageParser<ClosedLoopParams> _parser = new pb::MessageParser<ClosedLoopParams>(() => new ClosedLoopParams());
@@ -549,7 +553,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// presence of SecurityParams implies use of TLS
+ /// presence of SecurityParams implies use of TLS
/// </summary>
public sealed partial class SecurityParams : pb::IMessage<SecurityParams> {
private static readonly pb::MessageParser<SecurityParams> _parser = new pb::MessageParser<SecurityParams>(() => new SecurityParams());
@@ -696,6 +700,210 @@ namespace Grpc.Testing {
}
+ public sealed partial class ChannelArg : pb::IMessage<ChannelArg> {
+ private static readonly pb::MessageParser<ChannelArg> _parser = new pb::MessageParser<ChannelArg>(() => new ChannelArg());
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser<ChannelArg> Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[4]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ChannelArg() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ChannelArg(ChannelArg other) : this() {
+ name_ = other.name_;
+ switch (other.ValueCase) {
+ case ValueOneofCase.StrValue:
+ StrValue = other.StrValue;
+ break;
+ case ValueOneofCase.IntValue:
+ IntValue = other.IntValue;
+ break;
+ }
+
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ChannelArg Clone() {
+ return new ChannelArg(this);
+ }
+
+ /// <summary>Field number for the "name" field.</summary>
+ public const int NameFieldNumber = 1;
+ private string name_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Name {
+ get { return name_; }
+ set {
+ name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// <summary>Field number for the "str_value" field.</summary>
+ public const int StrValueFieldNumber = 2;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string StrValue {
+ get { return valueCase_ == ValueOneofCase.StrValue ? (string) value_ : ""; }
+ set {
+ value_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ valueCase_ = ValueOneofCase.StrValue;
+ }
+ }
+
+ /// <summary>Field number for the "int_value" field.</summary>
+ public const int IntValueFieldNumber = 3;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int IntValue {
+ get { return valueCase_ == ValueOneofCase.IntValue ? (int) value_ : 0; }
+ set {
+ value_ = value;
+ valueCase_ = ValueOneofCase.IntValue;
+ }
+ }
+
+ private object value_;
+ /// <summary>Enum of possible cases for the "value" oneof.</summary>
+ public enum ValueOneofCase {
+ None = 0,
+ StrValue = 2,
+ IntValue = 3,
+ }
+ private ValueOneofCase valueCase_ = ValueOneofCase.None;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ValueOneofCase ValueCase {
+ get { return valueCase_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void ClearValue() {
+ valueCase_ = ValueOneofCase.None;
+ value_ = null;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ChannelArg);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ChannelArg other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Name != other.Name) return false;
+ if (StrValue != other.StrValue) return false;
+ if (IntValue != other.IntValue) return false;
+ if (ValueCase != other.ValueCase) return false;
+ return true;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Name.Length != 0) hash ^= Name.GetHashCode();
+ if (valueCase_ == ValueOneofCase.StrValue) hash ^= StrValue.GetHashCode();
+ if (valueCase_ == ValueOneofCase.IntValue) hash ^= IntValue.GetHashCode();
+ hash ^= (int) valueCase_;
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Name.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Name);
+ }
+ if (valueCase_ == ValueOneofCase.StrValue) {
+ output.WriteRawTag(18);
+ output.WriteString(StrValue);
+ }
+ if (valueCase_ == ValueOneofCase.IntValue) {
+ output.WriteRawTag(24);
+ output.WriteInt32(IntValue);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Name.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
+ }
+ if (valueCase_ == ValueOneofCase.StrValue) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(StrValue);
+ }
+ if (valueCase_ == ValueOneofCase.IntValue) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(IntValue);
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ChannelArg other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Name.Length != 0) {
+ Name = other.Name;
+ }
+ switch (other.ValueCase) {
+ case ValueOneofCase.StrValue:
+ StrValue = other.StrValue;
+ break;
+ case ValueOneofCase.IntValue:
+ IntValue = other.IntValue;
+ break;
+ }
+
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10: {
+ Name = input.ReadString();
+ break;
+ }
+ case 18: {
+ StrValue = input.ReadString();
+ break;
+ }
+ case 24: {
+ IntValue = input.ReadInt32();
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
public sealed partial class ClientConfig : pb::IMessage<ClientConfig> {
private static readonly pb::MessageParser<ClientConfig> _parser = new pb::MessageParser<ClientConfig>(() => new ClientConfig());
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -703,7 +911,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[4]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[5]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -733,6 +941,7 @@ namespace Grpc.Testing {
coreList_ = other.coreList_.Clone();
coreLimit_ = other.coreLimit_;
otherClientApi_ = other.otherClientApi_;
+ channelArgs_ = other.channelArgs_.Clone();
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -746,7 +955,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForString(10);
private readonly pbc::RepeatedField<string> serverTargets_ = new pbc::RepeatedField<string>();
/// <summary>
- /// List of targets to connect to. At least one target needs to be specified.
+ /// List of targets to connect to. At least one target needs to be specified.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<string> ServerTargets {
@@ -779,8 +988,8 @@ namespace Grpc.Testing {
public const int OutstandingRpcsPerChannelFieldNumber = 4;
private int outstandingRpcsPerChannel_;
/// <summary>
- /// How many concurrent RPCs to start for each channel.
- /// For synchronous client, use a separate thread for each outstanding RPC.
+ /// How many concurrent RPCs to start for each channel.
+ /// For synchronous client, use a separate thread for each outstanding RPC.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int OutstandingRpcsPerChannel {
@@ -794,8 +1003,8 @@ namespace Grpc.Testing {
public const int ClientChannelsFieldNumber = 5;
private int clientChannels_;
/// <summary>
- /// Number of independent client channels to create.
- /// i-th channel will connect to server_target[i % server_targets.size()]
+ /// Number of independent client channels to create.
+ /// i-th channel will connect to server_target[i % server_targets.size()]
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int ClientChannels {
@@ -809,7 +1018,7 @@ namespace Grpc.Testing {
public const int AsyncClientThreadsFieldNumber = 7;
private int asyncClientThreads_;
/// <summary>
- /// Only for async client. Number of threads to use to start/manage RPCs.
+ /// Only for async client. Number of threads to use to start/manage RPCs.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int AsyncClientThreads {
@@ -834,7 +1043,7 @@ namespace Grpc.Testing {
public const int LoadParamsFieldNumber = 10;
private global::Grpc.Testing.LoadParams loadParams_;
/// <summary>
- /// The requested load for the entire client (aggregated over all the threads).
+ /// The requested load for the entire client (aggregated over all the threads).
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.LoadParams LoadParams {
@@ -872,7 +1081,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForInt32(106);
private readonly pbc::RepeatedField<int> coreList_ = new pbc::RepeatedField<int>();
/// <summary>
- /// Specify the cores we should run the client on, if desired
+ /// Specify the cores we should run the client on, if desired
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<int> CoreList {
@@ -894,7 +1103,7 @@ namespace Grpc.Testing {
public const int OtherClientApiFieldNumber = 15;
private string otherClientApi_ = "";
/// <summary>
- /// If we use an OTHER_CLIENT client_type, this string gives more detail
+ /// If we use an OTHER_CLIENT client_type, this string gives more detail
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string OtherClientApi {
@@ -904,6 +1113,16 @@ namespace Grpc.Testing {
}
}
+ /// <summary>Field number for the "channel_args" field.</summary>
+ public const int ChannelArgsFieldNumber = 16;
+ private static readonly pb::FieldCodec<global::Grpc.Testing.ChannelArg> _repeated_channelArgs_codec
+ = pb::FieldCodec.ForMessage(130, global::Grpc.Testing.ChannelArg.Parser);
+ private readonly pbc::RepeatedField<global::Grpc.Testing.ChannelArg> channelArgs_ = new pbc::RepeatedField<global::Grpc.Testing.ChannelArg>();
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField<global::Grpc.Testing.ChannelArg> ChannelArgs {
+ get { return channelArgs_; }
+ }
+
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as ClientConfig);
@@ -930,6 +1149,7 @@ namespace Grpc.Testing {
if(!coreList_.Equals(other.coreList_)) return false;
if (CoreLimit != other.CoreLimit) return false;
if (OtherClientApi != other.OtherClientApi) return false;
+ if(!channelArgs_.Equals(other.channelArgs_)) return false;
return true;
}
@@ -949,6 +1169,7 @@ namespace Grpc.Testing {
hash ^= coreList_.GetHashCode();
if (CoreLimit != 0) hash ^= CoreLimit.GetHashCode();
if (OtherClientApi.Length != 0) hash ^= OtherClientApi.GetHashCode();
+ hash ^= channelArgs_.GetHashCode();
return hash;
}
@@ -1005,6 +1226,7 @@ namespace Grpc.Testing {
output.WriteRawTag(122);
output.WriteString(OtherClientApi);
}
+ channelArgs_.WriteTo(output, _repeated_channelArgs_codec);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1045,6 +1267,7 @@ namespace Grpc.Testing {
if (OtherClientApi.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(OtherClientApi);
}
+ size += channelArgs_.CalculateSize(_repeated_channelArgs_codec);
return size;
}
@@ -1100,6 +1323,7 @@ namespace Grpc.Testing {
if (other.OtherClientApi.Length != 0) {
OtherClientApi = other.OtherClientApi;
}
+ channelArgs_.Add(other.channelArgs_);
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1175,6 +1399,10 @@ namespace Grpc.Testing {
OtherClientApi = input.ReadString();
break;
}
+ case 130: {
+ channelArgs_.AddEntriesFrom(input, _repeated_channelArgs_codec);
+ break;
+ }
}
}
}
@@ -1188,7 +1416,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[5]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[6]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1305,7 +1533,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Request current stats
+ /// Request current stats
/// </summary>
public sealed partial class Mark : pb::IMessage<Mark> {
private static readonly pb::MessageParser<Mark> _parser = new pb::MessageParser<Mark>(() => new Mark());
@@ -1314,7 +1542,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[6]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[7]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1343,7 +1571,7 @@ namespace Grpc.Testing {
public const int ResetFieldNumber = 1;
private bool reset_;
/// <summary>
- /// if true, the stats will be reset after taking their snapshot.
+ /// if true, the stats will be reset after taking their snapshot.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public bool Reset {
@@ -1434,7 +1662,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[7]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[8]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1620,7 +1848,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[8]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[9]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -1679,7 +1907,7 @@ namespace Grpc.Testing {
public const int PortFieldNumber = 4;
private int port_;
/// <summary>
- /// Port on which to listen. Zero means pick unused port.
+ /// Port on which to listen. Zero means pick unused port.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int Port {
@@ -1693,7 +1921,7 @@ namespace Grpc.Testing {
public const int AsyncServerThreadsFieldNumber = 7;
private int asyncServerThreads_;
/// <summary>
- /// Only for async server. Number of threads used to serve the requests.
+ /// Only for async server. Number of threads used to serve the requests.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int AsyncServerThreads {
@@ -1707,7 +1935,7 @@ namespace Grpc.Testing {
public const int CoreLimitFieldNumber = 8;
private int coreLimit_;
/// <summary>
- /// Specify the number of cores to limit server to, if desired
+ /// Specify the number of cores to limit server to, if desired
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int CoreLimit {
@@ -1721,7 +1949,10 @@ namespace Grpc.Testing {
public const int PayloadConfigFieldNumber = 9;
private global::Grpc.Testing.PayloadConfig payloadConfig_;
/// <summary>
- /// payload config, used in generic server
+ /// payload config, used in generic server.
+ /// Note this must NOT be used in proto (non-generic) servers. For proto servers,
+ /// 'response sizes' must be configured from the 'response_size' field of the
+ /// 'SimpleRequest' objects in RPC requests.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.PayloadConfig PayloadConfig {
@@ -1737,7 +1968,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForInt32(82);
private readonly pbc::RepeatedField<int> coreList_ = new pbc::RepeatedField<int>();
/// <summary>
- /// Specify the cores we should run the server on, if desired
+ /// Specify the cores we should run the server on, if desired
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<int> CoreList {
@@ -1748,7 +1979,7 @@ namespace Grpc.Testing {
public const int OtherServerApiFieldNumber = 11;
private string otherServerApi_ = "";
/// <summary>
- /// If we use an OTHER_SERVER client_type, this string gives more detail
+ /// If we use an OTHER_SERVER client_type, this string gives more detail
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string OtherServerApi {
@@ -1762,7 +1993,7 @@ namespace Grpc.Testing {
public const int ResourceQuotaSizeFieldNumber = 1001;
private int resourceQuotaSize_;
/// <summary>
- /// Buffer pool size (no buffer pool specified if unset)
+ /// Buffer pool size (no buffer pool specified if unset)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int ResourceQuotaSize {
@@ -1987,7 +2218,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[9]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[10]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -2173,7 +2404,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[10]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[11]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -2215,7 +2446,7 @@ namespace Grpc.Testing {
public const int PortFieldNumber = 2;
private int port_;
/// <summary>
- /// the port bound by the server
+ /// the port bound by the server
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int Port {
@@ -2229,7 +2460,7 @@ namespace Grpc.Testing {
public const int CoresFieldNumber = 3;
private int cores_;
/// <summary>
- /// Number of cores available to the server
+ /// Number of cores available to the server
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int Cores {
@@ -2358,7 +2589,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[11]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[12]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -2447,7 +2678,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[12]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[13]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -2476,7 +2707,7 @@ namespace Grpc.Testing {
public const int CoresFieldNumber = 1;
private int cores_;
/// <summary>
- /// Number of cores available on the server
+ /// Number of cores available on the server
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int Cores {
@@ -2567,7 +2798,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[13]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[14]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -2650,7 +2881,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// A single performance scenario: input to qps_json_driver
+ /// A single performance scenario: input to qps_json_driver
/// </summary>
public sealed partial class Scenario : pb::IMessage<Scenario> {
private static readonly pb::MessageParser<Scenario> _parser = new pb::MessageParser<Scenario>(() => new Scenario());
@@ -2659,7 +2890,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[14]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[15]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -2695,7 +2926,7 @@ namespace Grpc.Testing {
public const int NameFieldNumber = 1;
private string name_ = "";
/// <summary>
- /// Human readable name for this scenario
+ /// Human readable name for this scenario
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string Name {
@@ -2709,7 +2940,7 @@ namespace Grpc.Testing {
public const int ClientConfigFieldNumber = 2;
private global::Grpc.Testing.ClientConfig clientConfig_;
/// <summary>
- /// Client configuration
+ /// Client configuration
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.ClientConfig ClientConfig {
@@ -2723,7 +2954,7 @@ namespace Grpc.Testing {
public const int NumClientsFieldNumber = 3;
private int numClients_;
/// <summary>
- /// Number of clients to start for the test
+ /// Number of clients to start for the test
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int NumClients {
@@ -2737,7 +2968,7 @@ namespace Grpc.Testing {
public const int ServerConfigFieldNumber = 4;
private global::Grpc.Testing.ServerConfig serverConfig_;
/// <summary>
- /// Server configuration
+ /// Server configuration
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.ServerConfig ServerConfig {
@@ -2751,7 +2982,7 @@ namespace Grpc.Testing {
public const int NumServersFieldNumber = 5;
private int numServers_;
/// <summary>
- /// Number of servers to start for the test
+ /// Number of servers to start for the test
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int NumServers {
@@ -2765,7 +2996,7 @@ namespace Grpc.Testing {
public const int WarmupSecondsFieldNumber = 6;
private int warmupSeconds_;
/// <summary>
- /// Warmup period, in seconds
+ /// Warmup period, in seconds
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int WarmupSeconds {
@@ -2779,7 +3010,7 @@ namespace Grpc.Testing {
public const int BenchmarkSecondsFieldNumber = 7;
private int benchmarkSeconds_;
/// <summary>
- /// Benchmark time, in seconds
+ /// Benchmark time, in seconds
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int BenchmarkSeconds {
@@ -2793,7 +3024,7 @@ namespace Grpc.Testing {
public const int SpawnLocalWorkerCountFieldNumber = 8;
private int spawnLocalWorkerCount_;
/// <summary>
- /// Number of workers to spawn locally (usually zero)
+ /// Number of workers to spawn locally (usually zero)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int SpawnLocalWorkerCount {
@@ -3002,7 +3233,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// A set of scenarios to be run with qps_json_driver
+ /// A set of scenarios to be run with qps_json_driver
/// </summary>
public sealed partial class Scenarios : pb::IMessage<Scenarios> {
private static readonly pb::MessageParser<Scenarios> _parser = new pb::MessageParser<Scenarios>(() => new Scenarios());
@@ -3011,7 +3242,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[15]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[16]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -3114,8 +3345,8 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Basic summary that can be computed from ClientStats and ServerStats
- /// once the scenario has finished.
+ /// Basic summary that can be computed from ClientStats and ServerStats
+ /// once the scenario has finished.
/// </summary>
public sealed partial class ScenarioResultSummary : pb::IMessage<ScenarioResultSummary> {
private static readonly pb::MessageParser<ScenarioResultSummary> _parser = new pb::MessageParser<ScenarioResultSummary>(() => new ScenarioResultSummary());
@@ -3124,7 +3355,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[16]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[17]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -3166,7 +3397,7 @@ namespace Grpc.Testing {
public const int QpsFieldNumber = 1;
private double qps_;
/// <summary>
- /// Total number of operations per second over all clients.
+ /// Total number of operations per second over all clients.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double Qps {
@@ -3180,7 +3411,7 @@ namespace Grpc.Testing {
public const int QpsPerServerCoreFieldNumber = 2;
private double qpsPerServerCore_;
/// <summary>
- /// QPS per one server core.
+ /// QPS per one server core.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double QpsPerServerCore {
@@ -3194,7 +3425,7 @@ namespace Grpc.Testing {
public const int ServerSystemTimeFieldNumber = 3;
private double serverSystemTime_;
/// <summary>
- /// server load based on system_time (0.85 => 85%)
+ /// server load based on system_time (0.85 => 85%)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double ServerSystemTime {
@@ -3208,7 +3439,7 @@ namespace Grpc.Testing {
public const int ServerUserTimeFieldNumber = 4;
private double serverUserTime_;
/// <summary>
- /// server load based on user_time (0.85 => 85%)
+ /// server load based on user_time (0.85 => 85%)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double ServerUserTime {
@@ -3222,7 +3453,7 @@ namespace Grpc.Testing {
public const int ClientSystemTimeFieldNumber = 5;
private double clientSystemTime_;
/// <summary>
- /// client load based on system_time (0.85 => 85%)
+ /// client load based on system_time (0.85 => 85%)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double ClientSystemTime {
@@ -3236,7 +3467,7 @@ namespace Grpc.Testing {
public const int ClientUserTimeFieldNumber = 6;
private double clientUserTime_;
/// <summary>
- /// client load based on user_time (0.85 => 85%)
+ /// client load based on user_time (0.85 => 85%)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double ClientUserTime {
@@ -3250,7 +3481,7 @@ namespace Grpc.Testing {
public const int Latency50FieldNumber = 7;
private double latency50_;
/// <summary>
- /// X% latency percentiles (in nanoseconds)
+ /// X% latency percentiles (in nanoseconds)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double Latency50 {
@@ -3308,7 +3539,7 @@ namespace Grpc.Testing {
public const int ServerCpuUsageFieldNumber = 12;
private double serverCpuUsage_;
/// <summary>
- /// server cpu usage percentage
+ /// server cpu usage percentage
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double ServerCpuUsage {
@@ -3322,7 +3553,7 @@ namespace Grpc.Testing {
public const int SuccessfulRequestsPerSecondFieldNumber = 13;
private double successfulRequestsPerSecond_;
/// <summary>
- /// Number of requests that succeeded/failed
+ /// Number of requests that succeeded/failed
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double SuccessfulRequestsPerSecond {
@@ -3626,7 +3857,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Results of a single benchmark scenario.
+ /// Results of a single benchmark scenario.
/// </summary>
public sealed partial class ScenarioResult : pb::IMessage<ScenarioResult> {
private static readonly pb::MessageParser<ScenarioResult> _parser = new pb::MessageParser<ScenarioResult>(() => new ScenarioResult());
@@ -3635,7 +3866,7 @@ namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public static pbr::MessageDescriptor Descriptor {
- get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[17]; }
+ get { return global::Grpc.Testing.ControlReflection.Descriptor.MessageTypes[18]; }
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
@@ -3672,7 +3903,7 @@ namespace Grpc.Testing {
public const int ScenarioFieldNumber = 1;
private global::Grpc.Testing.Scenario scenario_;
/// <summary>
- /// Inputs used to run the scenario.
+ /// Inputs used to run the scenario.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.Scenario Scenario {
@@ -3686,7 +3917,7 @@ namespace Grpc.Testing {
public const int LatenciesFieldNumber = 2;
private global::Grpc.Testing.HistogramData latencies_;
/// <summary>
- /// Histograms from all clients merged into one histogram.
+ /// Histograms from all clients merged into one histogram.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.HistogramData Latencies {
@@ -3702,7 +3933,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForMessage(26, global::Grpc.Testing.ClientStats.Parser);
private readonly pbc::RepeatedField<global::Grpc.Testing.ClientStats> clientStats_ = new pbc::RepeatedField<global::Grpc.Testing.ClientStats>();
/// <summary>
- /// Client stats for each client
+ /// Client stats for each client
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<global::Grpc.Testing.ClientStats> ClientStats {
@@ -3715,7 +3946,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForMessage(34, global::Grpc.Testing.ServerStats.Parser);
private readonly pbc::RepeatedField<global::Grpc.Testing.ServerStats> serverStats_ = new pbc::RepeatedField<global::Grpc.Testing.ServerStats>();
/// <summary>
- /// Server stats for each server
+ /// Server stats for each server
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<global::Grpc.Testing.ServerStats> ServerStats {
@@ -3728,7 +3959,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForInt32(42);
private readonly pbc::RepeatedField<int> serverCores_ = new pbc::RepeatedField<int>();
/// <summary>
- /// Number of cores available to each server
+ /// Number of cores available to each server
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<int> ServerCores {
@@ -3739,7 +3970,7 @@ namespace Grpc.Testing {
public const int SummaryFieldNumber = 6;
private global::Grpc.Testing.ScenarioResultSummary summary_;
/// <summary>
- /// An after-the-fact computed summary
+ /// An after-the-fact computed summary
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.ScenarioResultSummary Summary {
@@ -3755,7 +3986,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForBool(58);
private readonly pbc::RepeatedField<bool> clientSuccess_ = new pbc::RepeatedField<bool>();
/// <summary>
- /// Information on success or failure of each worker
+ /// Information on success or failure of each worker
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<bool> ClientSuccess {
@@ -3778,7 +4009,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForMessage(74, global::Grpc.Testing.RequestResultCount.Parser);
private readonly pbc::RepeatedField<global::Grpc.Testing.RequestResultCount> requestResults_ = new pbc::RepeatedField<global::Grpc.Testing.RequestResultCount>();
/// <summary>
- /// Number of failed requests (one row per status code seen)
+ /// Number of failed requests (one row per status code seen)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<global::Grpc.Testing.RequestResultCount> RequestResults {
diff --git a/src/csharp/Grpc.IntegrationTesting/Empty.cs b/src/csharp/Grpc.IntegrationTesting/Empty.cs
index 3017e664b9..24ffd61741 100644
--- a/src/csharp/Grpc.IntegrationTesting/Empty.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Empty.cs
@@ -35,13 +35,13 @@ namespace Grpc.Testing {
}
#region Messages
/// <summary>
- /// An empty message that you can re-use to avoid defining duplicated empty
- /// messages in your project. A typical example is to use it as argument or the
- /// return value of a service API. For instance:
+ /// An empty message that you can re-use to avoid defining duplicated empty
+ /// messages in your project. A typical example is to use it as argument or the
+ /// return value of a service API. For instance:
///
- /// service Foo {
- /// rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { };
- /// };
+ /// service Foo {
+ /// rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { };
+ /// };
/// </summary>
public sealed partial class Empty : pb::IMessage<Empty> {
private static readonly pb::MessageParser<Empty> _parser = new pb::MessageParser<Empty>(() => new Empty());
diff --git a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
index f7abcf8046..38b9a5d3c5 100644
--- a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
+++ b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
@@ -33,53 +33,47 @@
<Reference Include="System.Net" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.WebRequest" />
- <Reference Include="BouncyCastle.Crypto">
- <HintPath>..\packages\BouncyCastle.1.7.0\lib\Net40-Client\BouncyCastle.Crypto.dll</HintPath>
- </Reference>
- <Reference Include="Newtonsoft.Json">
- <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
- </Reference>
- <Reference Include="nunit.framework">
- <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
- </Reference>
- <Reference Include="nunitlite">
- <HintPath>..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll</HintPath>
- </Reference>
- <Reference Include="CommandLineParser.Unofficial">
- <HintPath>..\packages\CommandLineParser.Unofficial.2.0.275\lib\net45\CommandLineParser.Unofficial.dll</HintPath>
+ <Reference Include="Zlib.Portable">
+ <HintPath>..\packages\Zlib.Portable.Signed.1.11.0\lib\portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid\Zlib.Portable.dll</HintPath>
</Reference>
- <Reference Include="log4net">
- <HintPath>..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.Core">
- <HintPath>..\packages\Google.Apis.Core.1.16.0\lib\net45\Google.Apis.Core.dll</HintPath>
- </Reference>
- <Reference Include="Zlib.Portable">
- <HintPath>..\packages\Zlib.Portable.Signed.1.11.0\lib\portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid\Zlib.Portable.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.Core.1.21.0\lib\net45\Google.Apis.Core.dll</HintPath>
</Reference>
<Reference Include="Google.Apis">
- <HintPath>..\packages\Google.Apis.1.16.0\lib\net45\Google.Apis.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.1.21.0\lib\net45\Google.Apis.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.PlatformServices">
- <HintPath>..\packages\Google.Apis.1.16.0\lib\net45\Google.Apis.PlatformServices.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.1.21.0\lib\net45\Google.Apis.PlatformServices.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.Auth">
- <HintPath>..\packages\Google.Apis.Auth.1.16.0\lib\net45\Google.Apis.Auth.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.Auth.1.21.0\lib\net45\Google.Apis.Auth.dll</HintPath>
</Reference>
<Reference Include="Google.Apis.Auth.PlatformServices">
- <HintPath>..\packages\Google.Apis.Auth.1.16.0\lib\net45\Google.Apis.Auth.PlatformServices.dll</HintPath>
+ <HintPath>..\packages\Google.Apis.Auth.1.21.0\lib\net45\Google.Apis.Auth.PlatformServices.dll</HintPath>
</Reference>
<Reference Include="Google.Protobuf">
- <HintPath>..\packages\Google.Protobuf.3.0.0\lib\net45\Google.Protobuf.dll</HintPath>
+ <HintPath>..\packages\Google.Protobuf.3.2.0\lib\net45\Google.Protobuf.dll</HintPath>
+ </Reference>
+ <Reference Include="nunit.framework">
+ <HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="nunitlite">
+ <HintPath>..\packages\NUnitLite.3.6.0\lib\net45\nunitlite.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json">
+ <HintPath>..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Castle.Core">
- <HintPath>..\packages\Castle.Core.3.3.3\lib\net45\Castle.Core.dll</HintPath>
+ <HintPath>..\packages\Castle.Core.4.0.0\lib\net45\Castle.Core.dll</HintPath>
</Reference>
<Reference Include="Moq">
- <HintPath>..\packages\Moq.4.6.38-alpha\lib\net45\Moq.dll</HintPath>
+ <HintPath>..\packages\Moq.4.7.0\lib\net45\Moq.dll</HintPath>
</Reference>
- <Reference Include="System.Interactive.Async">
- <HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
+ <Reference Include="CommandLine">
+ <HintPath>..\packages\CommandLineParser.2.1.1-beta\lib\net45\CommandLine.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
diff --git a/src/csharp/Grpc.IntegrationTesting/Messages.cs b/src/csharp/Grpc.IntegrationTesting/Messages.cs
index 369fe738d6..278ef662e4 100644
--- a/src/csharp/Grpc.IntegrationTesting/Messages.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Messages.cs
@@ -75,12 +75,12 @@ namespace Grpc.Testing {
}
#region Enums
/// <summary>
- /// DEPRECATED, don't use. To be removed shortly.
- /// The type of payload that should be returned.
+ /// DEPRECATED, don't use. To be removed shortly.
+ /// The type of payload that should be returned.
/// </summary>
public enum PayloadType {
/// <summary>
- /// Compressable text format.
+ /// Compressable text format.
/// </summary>
[pbr::OriginalName("COMPRESSABLE")] Compressable = 0,
}
@@ -89,9 +89,9 @@ namespace Grpc.Testing {
#region Messages
/// <summary>
- /// TODO(dgq): Go back to using well-known types once
- /// https://github.com/grpc/grpc/issues/6980 has been fixed.
- /// import "google/protobuf/wrappers.proto";
+ /// TODO(dgq): Go back to using well-known types once
+ /// https://github.com/grpc/grpc/issues/6980 has been fixed.
+ /// import "google/protobuf/wrappers.proto";
/// </summary>
public sealed partial class BoolValue : pb::IMessage<BoolValue> {
private static readonly pb::MessageParser<BoolValue> _parser = new pb::MessageParser<BoolValue>(() => new BoolValue());
@@ -129,7 +129,7 @@ namespace Grpc.Testing {
public const int ValueFieldNumber = 1;
private bool value_;
/// <summary>
- /// The bool value.
+ /// The bool value.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public bool Value {
@@ -214,7 +214,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// A block of data, to simply increase gRPC message size.
+ /// A block of data, to simply increase gRPC message size.
/// </summary>
public sealed partial class Payload : pb::IMessage<Payload> {
private static readonly pb::MessageParser<Payload> _parser = new pb::MessageParser<Payload>(() => new Payload());
@@ -253,8 +253,8 @@ namespace Grpc.Testing {
public const int TypeFieldNumber = 1;
private global::Grpc.Testing.PayloadType type_ = 0;
/// <summary>
- /// DEPRECATED, don't use. To be removed shortly.
- /// The type of data in body.
+ /// DEPRECATED, don't use. To be removed shortly.
+ /// The type of data in body.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.PayloadType Type {
@@ -268,7 +268,7 @@ namespace Grpc.Testing {
public const int BodyFieldNumber = 2;
private pb::ByteString body_ = pb::ByteString.Empty;
/// <summary>
- /// Primary contents of payload.
+ /// Primary contents of payload.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pb::ByteString Body {
@@ -369,8 +369,8 @@ namespace Grpc.Testing {
}
/// <summary>
- /// A protobuf representation for grpc status. This is used by test
- /// clients to specify a status that the server should attempt to return.
+ /// A protobuf representation for grpc status. This is used by test
+ /// clients to specify a status that the server should attempt to return.
/// </summary>
public sealed partial class EchoStatus : pb::IMessage<EchoStatus> {
private static readonly pb::MessageParser<EchoStatus> _parser = new pb::MessageParser<EchoStatus>(() => new EchoStatus());
@@ -518,7 +518,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Unary request.
+ /// Unary request.
/// </summary>
public sealed partial class SimpleRequest : pb::IMessage<SimpleRequest> {
private static readonly pb::MessageParser<SimpleRequest> _parser = new pb::MessageParser<SimpleRequest>(() => new SimpleRequest());
@@ -563,9 +563,9 @@ namespace Grpc.Testing {
public const int ResponseTypeFieldNumber = 1;
private global::Grpc.Testing.PayloadType responseType_ = 0;
/// <summary>
- /// DEPRECATED, don't use. To be removed shortly.
- /// Desired payload type in the response from the server.
- /// If response_type is RANDOM, server randomly chooses one from other formats.
+ /// DEPRECATED, don't use. To be removed shortly.
+ /// Desired payload type in the response from the server.
+ /// If response_type is RANDOM, server randomly chooses one from other formats.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.PayloadType ResponseType {
@@ -579,7 +579,7 @@ namespace Grpc.Testing {
public const int ResponseSizeFieldNumber = 2;
private int responseSize_;
/// <summary>
- /// Desired payload size in the response from the server.
+ /// Desired payload size in the response from the server.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int ResponseSize {
@@ -593,7 +593,7 @@ namespace Grpc.Testing {
public const int PayloadFieldNumber = 3;
private global::Grpc.Testing.Payload payload_;
/// <summary>
- /// Optional input payload sent along with the request.
+ /// Optional input payload sent along with the request.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.Payload Payload {
@@ -607,7 +607,7 @@ namespace Grpc.Testing {
public const int FillUsernameFieldNumber = 4;
private bool fillUsername_;
/// <summary>
- /// Whether SimpleResponse should include username.
+ /// Whether SimpleResponse should include username.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public bool FillUsername {
@@ -621,7 +621,7 @@ namespace Grpc.Testing {
public const int FillOauthScopeFieldNumber = 5;
private bool fillOauthScope_;
/// <summary>
- /// Whether SimpleResponse should include OAuth scope.
+ /// Whether SimpleResponse should include OAuth scope.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public bool FillOauthScope {
@@ -635,10 +635,10 @@ namespace Grpc.Testing {
public const int ResponseCompressedFieldNumber = 6;
private global::Grpc.Testing.BoolValue responseCompressed_;
/// <summary>
- /// Whether to request the server to compress the response. This field is
- /// "nullable" in order to interoperate seamlessly with clients not able to
- /// implement the full compression tests by introspecting the call to verify
- /// the response's compression status.
+ /// Whether to request the server to compress the response. This field is
+ /// "nullable" in order to interoperate seamlessly with clients not able to
+ /// implement the full compression tests by introspecting the call to verify
+ /// the response's compression status.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.BoolValue ResponseCompressed {
@@ -652,7 +652,7 @@ namespace Grpc.Testing {
public const int ResponseStatusFieldNumber = 7;
private global::Grpc.Testing.EchoStatus responseStatus_;
/// <summary>
- /// Whether server should return a given status
+ /// Whether server should return a given status
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.EchoStatus ResponseStatus {
@@ -666,7 +666,7 @@ namespace Grpc.Testing {
public const int ExpectCompressedFieldNumber = 8;
private global::Grpc.Testing.BoolValue expectCompressed_;
/// <summary>
- /// Whether the server should expect this request to be compressed.
+ /// Whether the server should expect this request to be compressed.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.BoolValue ExpectCompressed {
@@ -887,7 +887,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Unary response, as configured by the request.
+ /// Unary response, as configured by the request.
/// </summary>
public sealed partial class SimpleResponse : pb::IMessage<SimpleResponse> {
private static readonly pb::MessageParser<SimpleResponse> _parser = new pb::MessageParser<SimpleResponse>(() => new SimpleResponse());
@@ -927,7 +927,7 @@ namespace Grpc.Testing {
public const int PayloadFieldNumber = 1;
private global::Grpc.Testing.Payload payload_;
/// <summary>
- /// Payload to increase message size.
+ /// Payload to increase message size.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.Payload Payload {
@@ -941,8 +941,8 @@ namespace Grpc.Testing {
public const int UsernameFieldNumber = 2;
private string username_ = "";
/// <summary>
- /// The user the request came from, for verifying authentication was
- /// successful when the client expected it.
+ /// The user the request came from, for verifying authentication was
+ /// successful when the client expected it.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string Username {
@@ -956,7 +956,7 @@ namespace Grpc.Testing {
public const int OauthScopeFieldNumber = 3;
private string oauthScope_ = "";
/// <summary>
- /// OAuth scope.
+ /// OAuth scope.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string OauthScope {
@@ -1079,7 +1079,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Client-streaming request.
+ /// Client-streaming request.
/// </summary>
public sealed partial class StreamingInputCallRequest : pb::IMessage<StreamingInputCallRequest> {
private static readonly pb::MessageParser<StreamingInputCallRequest> _parser = new pb::MessageParser<StreamingInputCallRequest>(() => new StreamingInputCallRequest());
@@ -1118,7 +1118,7 @@ namespace Grpc.Testing {
public const int PayloadFieldNumber = 1;
private global::Grpc.Testing.Payload payload_;
/// <summary>
- /// Optional input payload sent along with the request.
+ /// Optional input payload sent along with the request.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.Payload Payload {
@@ -1132,10 +1132,10 @@ namespace Grpc.Testing {
public const int ExpectCompressedFieldNumber = 2;
private global::Grpc.Testing.BoolValue expectCompressed_;
/// <summary>
- /// Whether the server should expect this request to be compressed. This field
- /// is "nullable" in order to interoperate seamlessly with servers not able to
- /// implement the full compression tests by introspecting the call to verify
- /// the request's compression status.
+ /// Whether the server should expect this request to be compressed. This field
+ /// is "nullable" in order to interoperate seamlessly with servers not able to
+ /// implement the full compression tests by introspecting the call to verify
+ /// the request's compression status.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.BoolValue ExpectCompressed {
@@ -1248,7 +1248,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Client-streaming response.
+ /// Client-streaming response.
/// </summary>
public sealed partial class StreamingInputCallResponse : pb::IMessage<StreamingInputCallResponse> {
private static readonly pb::MessageParser<StreamingInputCallResponse> _parser = new pb::MessageParser<StreamingInputCallResponse>(() => new StreamingInputCallResponse());
@@ -1286,7 +1286,7 @@ namespace Grpc.Testing {
public const int AggregatedPayloadSizeFieldNumber = 1;
private int aggregatedPayloadSize_;
/// <summary>
- /// Aggregated size of payloads received from the client.
+ /// Aggregated size of payloads received from the client.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int AggregatedPayloadSize {
@@ -1371,7 +1371,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Configuration for a particular response.
+ /// Configuration for a particular response.
/// </summary>
public sealed partial class ResponseParameters : pb::IMessage<ResponseParameters> {
private static readonly pb::MessageParser<ResponseParameters> _parser = new pb::MessageParser<ResponseParameters>(() => new ResponseParameters());
@@ -1411,7 +1411,7 @@ namespace Grpc.Testing {
public const int SizeFieldNumber = 1;
private int size_;
/// <summary>
- /// Desired payload sizes in responses from the server.
+ /// Desired payload sizes in responses from the server.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int Size {
@@ -1425,8 +1425,8 @@ namespace Grpc.Testing {
public const int IntervalUsFieldNumber = 2;
private int intervalUs_;
/// <summary>
- /// Desired interval between consecutive responses in the response stream in
- /// microseconds.
+ /// Desired interval between consecutive responses in the response stream in
+ /// microseconds.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int IntervalUs {
@@ -1440,10 +1440,10 @@ namespace Grpc.Testing {
public const int CompressedFieldNumber = 3;
private global::Grpc.Testing.BoolValue compressed_;
/// <summary>
- /// Whether to request the server to compress the response. This field is
- /// "nullable" in order to interoperate seamlessly with clients not able to
- /// implement the full compression tests by introspecting the call to verify
- /// the response's compression status.
+ /// Whether to request the server to compress the response. This field is
+ /// "nullable" in order to interoperate seamlessly with clients not able to
+ /// implement the full compression tests by introspecting the call to verify
+ /// the response's compression status.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.BoolValue Compressed {
@@ -1566,7 +1566,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Server-streaming request.
+ /// Server-streaming request.
/// </summary>
public sealed partial class StreamingOutputCallRequest : pb::IMessage<StreamingOutputCallRequest> {
private static readonly pb::MessageParser<StreamingOutputCallRequest> _parser = new pb::MessageParser<StreamingOutputCallRequest>(() => new StreamingOutputCallRequest());
@@ -1607,11 +1607,11 @@ namespace Grpc.Testing {
public const int ResponseTypeFieldNumber = 1;
private global::Grpc.Testing.PayloadType responseType_ = 0;
/// <summary>
- /// DEPRECATED, don't use. To be removed shortly.
- /// Desired payload type in the response from the server.
- /// If response_type is RANDOM, the payload from each response in the stream
- /// might be of different types. This is to simulate a mixed type of payload
- /// stream.
+ /// DEPRECATED, don't use. To be removed shortly.
+ /// Desired payload type in the response from the server.
+ /// If response_type is RANDOM, the payload from each response in the stream
+ /// might be of different types. This is to simulate a mixed type of payload
+ /// stream.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.PayloadType ResponseType {
@@ -1627,7 +1627,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForMessage(18, global::Grpc.Testing.ResponseParameters.Parser);
private readonly pbc::RepeatedField<global::Grpc.Testing.ResponseParameters> responseParameters_ = new pbc::RepeatedField<global::Grpc.Testing.ResponseParameters>();
/// <summary>
- /// Configuration for each expected response message.
+ /// Configuration for each expected response message.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<global::Grpc.Testing.ResponseParameters> ResponseParameters {
@@ -1638,7 +1638,7 @@ namespace Grpc.Testing {
public const int PayloadFieldNumber = 3;
private global::Grpc.Testing.Payload payload_;
/// <summary>
- /// Optional input payload sent along with the request.
+ /// Optional input payload sent along with the request.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.Payload Payload {
@@ -1652,7 +1652,7 @@ namespace Grpc.Testing {
public const int ResponseStatusFieldNumber = 7;
private global::Grpc.Testing.EchoStatus responseStatus_;
/// <summary>
- /// Whether server should return a given status
+ /// Whether server should return a given status
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.EchoStatus ResponseStatus {
@@ -1790,7 +1790,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Server-streaming response, as configured by the request and parameters.
+ /// Server-streaming response, as configured by the request and parameters.
/// </summary>
public sealed partial class StreamingOutputCallResponse : pb::IMessage<StreamingOutputCallResponse> {
private static readonly pb::MessageParser<StreamingOutputCallResponse> _parser = new pb::MessageParser<StreamingOutputCallResponse>(() => new StreamingOutputCallResponse());
@@ -1828,7 +1828,7 @@ namespace Grpc.Testing {
public const int PayloadFieldNumber = 1;
private global::Grpc.Testing.Payload payload_;
/// <summary>
- /// Payload to increase response size.
+ /// Payload to increase response size.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.Payload Payload {
@@ -1919,8 +1919,8 @@ namespace Grpc.Testing {
}
/// <summary>
- /// For reconnect interop test only.
- /// Client tells server what reconnection parameters it used.
+ /// For reconnect interop test only.
+ /// Client tells server what reconnection parameters it used.
/// </summary>
public sealed partial class ReconnectParams : pb::IMessage<ReconnectParams> {
private static readonly pb::MessageParser<ReconnectParams> _parser = new pb::MessageParser<ReconnectParams>(() => new ReconnectParams());
@@ -2040,9 +2040,9 @@ namespace Grpc.Testing {
}
/// <summary>
- /// For reconnect interop test only.
- /// Server tells client whether its reconnects are following the spec and the
- /// reconnect backoffs it saw.
+ /// For reconnect interop test only.
+ /// Server tells client whether its reconnects are following the spec and the
+ /// reconnect backoffs it saw.
/// </summary>
public sealed partial class ReconnectInfo : pb::IMessage<ReconnectInfo> {
private static readonly pb::MessageParser<ReconnectInfo> _parser = new pb::MessageParser<ReconnectInfo>(() => new ReconnectInfo());
diff --git a/src/csharp/Grpc.IntegrationTesting/Metrics.cs b/src/csharp/Grpc.IntegrationTesting/Metrics.cs
index 4de1847e5f..84eb09af4f 100644
--- a/src/csharp/Grpc.IntegrationTesting/Metrics.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Metrics.cs
@@ -44,7 +44,7 @@ namespace Grpc.Testing {
}
#region Messages
/// <summary>
- /// Reponse message containing the gauge name and value
+ /// Reponse message containing the gauge name and value
/// </summary>
public sealed partial class GaugeResponse : pb::IMessage<GaugeResponse> {
private static readonly pb::MessageParser<GaugeResponse> _parser = new pb::MessageParser<GaugeResponse>(() => new GaugeResponse());
@@ -282,7 +282,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Request message containing the gauge name
+ /// Request message containing the gauge name
/// </summary>
public sealed partial class GaugeRequest : pb::IMessage<GaugeRequest> {
private static readonly pb::MessageParser<GaugeRequest> _parser = new pb::MessageParser<GaugeRequest>(() => new GaugeRequest());
diff --git a/src/csharp/Grpc.IntegrationTesting/Payloads.cs b/src/csharp/Grpc.IntegrationTesting/Payloads.cs
index 7aef35cda3..f918b9576b 100644
--- a/src/csharp/Grpc.IntegrationTesting/Payloads.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Payloads.cs
@@ -335,8 +335,8 @@ namespace Grpc.Testing {
}
/// <summary>
- /// TODO (vpai): Fill this in once the details of complex, representative
- /// protos are decided
+ /// TODO (vpai): Fill this in once the details of complex, representative
+ /// protos are decided
/// </summary>
public sealed partial class ComplexProtoParams : pb::IMessage<ComplexProtoParams> {
private static readonly pb::MessageParser<ComplexProtoParams> _parser = new pb::MessageParser<ComplexProtoParams>(() => new ComplexProtoParams());
diff --git a/src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs b/src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs
index f85e272711..377dad63f4 100644
--- a/src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs
+++ b/src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs
@@ -37,6 +37,7 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using Google.Protobuf;
using Grpc.Core;
using Grpc.Core.Utils;
using Grpc.Testing;
@@ -68,7 +69,7 @@ namespace Grpc.IntegrationTesting
server = new Server
{
- Services = { TestService.BindService(new TestServiceImpl()) },
+ Services = { TestService.BindService(new SslCredentialsTestServiceImpl()) },
Ports = { { Host, ServerPort.PickUnused, serverCredentials } }
};
server.Start();
@@ -95,5 +96,40 @@ namespace Grpc.IntegrationTesting
var response = client.UnaryCall(new SimpleRequest { ResponseSize = 10 });
Assert.AreEqual(10, response.Payload.Body.Length);
}
+
+ [Test]
+ public async Task AuthContextIsPopulated()
+ {
+ var call = client.StreamingInputCall();
+ await call.RequestStream.CompleteAsync();
+ var response = await call.ResponseAsync;
+ Assert.AreEqual(12345, response.AggregatedPayloadSize);
+ }
+
+ private class SslCredentialsTestServiceImpl : TestService.TestServiceBase
+ {
+ public override async Task<SimpleResponse> UnaryCall(SimpleRequest request, ServerCallContext context)
+ {
+ return new SimpleResponse { Payload = CreateZerosPayload(request.ResponseSize) };
+ }
+
+ public override async Task<StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<StreamingInputCallRequest> requestStream, ServerCallContext context)
+ {
+ var authContext = context.AuthContext;
+ await requestStream.ForEachAsync(async request => {});
+
+ Assert.IsTrue(authContext.IsPeerAuthenticated);
+ Assert.AreEqual("x509_subject_alternative_name", authContext.PeerIdentityPropertyName);
+ Assert.IsTrue(authContext.PeerIdentity.Count() > 0);
+ Assert.AreEqual("ssl", authContext.FindPropertiesByName("transport_security_type").First().Value);
+
+ return new StreamingInputCallResponse { AggregatedPayloadSize = 12345 };
+ }
+
+ private static Payload CreateZerosPayload(int size)
+ {
+ return new Payload { Body = ByteString.CopyFrom(new byte[size]) };
+ }
+ }
}
}
diff --git a/src/csharp/Grpc.IntegrationTesting/Stats.cs b/src/csharp/Grpc.IntegrationTesting/Stats.cs
index 504aa11d8a..79ff220436 100644
--- a/src/csharp/Grpc.IntegrationTesting/Stats.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Stats.cs
@@ -90,7 +90,7 @@ namespace Grpc.Testing {
public const int TimeElapsedFieldNumber = 1;
private double timeElapsed_;
/// <summary>
- /// wall clock time change in seconds since last reset
+ /// wall clock time change in seconds since last reset
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double TimeElapsed {
@@ -104,7 +104,7 @@ namespace Grpc.Testing {
public const int TimeUserFieldNumber = 2;
private double timeUser_;
/// <summary>
- /// change in user time (in seconds) used by the server since last reset
+ /// change in user time (in seconds) used by the server since last reset
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double TimeUser {
@@ -118,8 +118,8 @@ namespace Grpc.Testing {
public const int TimeSystemFieldNumber = 3;
private double timeSystem_;
/// <summary>
- /// change in server time (in seconds) used by the server process and all
- /// threads since last reset
+ /// change in server time (in seconds) used by the server process and all
+ /// threads since last reset
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double TimeSystem {
@@ -133,7 +133,7 @@ namespace Grpc.Testing {
public const int TotalCpuTimeFieldNumber = 4;
private ulong totalCpuTime_;
/// <summary>
- /// change in total cpu time of the server (data from proc/stat)
+ /// change in total cpu time of the server (data from proc/stat)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public ulong TotalCpuTime {
@@ -147,7 +147,7 @@ namespace Grpc.Testing {
public const int IdleCpuTimeFieldNumber = 5;
private ulong idleCpuTime_;
/// <summary>
- /// change in idle time of the server (data from proc/stat)
+ /// change in idle time of the server (data from proc/stat)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public ulong IdleCpuTime {
@@ -296,7 +296,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Histogram params based on grpc/support/histogram.c
+ /// Histogram params based on grpc/support/histogram.c
/// </summary>
public sealed partial class HistogramParams : pb::IMessage<HistogramParams> {
private static readonly pb::MessageParser<HistogramParams> _parser = new pb::MessageParser<HistogramParams>(() => new HistogramParams());
@@ -335,7 +335,7 @@ namespace Grpc.Testing {
public const int ResolutionFieldNumber = 1;
private double resolution_;
/// <summary>
- /// first bucket is [0, 1 + resolution)
+ /// first bucket is [0, 1 + resolution)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double Resolution {
@@ -349,7 +349,7 @@ namespace Grpc.Testing {
public const int MaxPossibleFieldNumber = 2;
private double maxPossible_;
/// <summary>
- /// use enough buckets to allow this value
+ /// use enough buckets to allow this value
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double MaxPossible {
@@ -450,7 +450,7 @@ namespace Grpc.Testing {
}
/// <summary>
- /// Histogram data based on grpc/support/histogram.c
+ /// Histogram data based on grpc/support/histogram.c
/// </summary>
public sealed partial class HistogramData : pb::IMessage<HistogramData> {
private static readonly pb::MessageParser<HistogramData> _parser = new pb::MessageParser<HistogramData>(() => new HistogramData());
@@ -887,7 +887,7 @@ namespace Grpc.Testing {
public const int LatenciesFieldNumber = 1;
private global::Grpc.Testing.HistogramData latencies_;
/// <summary>
- /// Latency histogram. Data points are in nanoseconds.
+ /// Latency histogram. Data points are in nanoseconds.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Testing.HistogramData Latencies {
@@ -901,7 +901,7 @@ namespace Grpc.Testing {
public const int TimeElapsedFieldNumber = 2;
private double timeElapsed_;
/// <summary>
- /// See ServerStats for details.
+ /// See ServerStats for details.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public double TimeElapsed {
@@ -939,7 +939,7 @@ namespace Grpc.Testing {
= pb::FieldCodec.ForMessage(42, global::Grpc.Testing.RequestResultCount.Parser);
private readonly pbc::RepeatedField<global::Grpc.Testing.RequestResultCount> requestResults_ = new pbc::RepeatedField<global::Grpc.Testing.RequestResultCount>();
/// <summary>
- /// Number of failed requests (one row per status code seen)
+ /// Number of failed requests (one row per status code seen)
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<global::Grpc.Testing.RequestResultCount> RequestResults {
diff --git a/src/csharp/Grpc.IntegrationTesting/packages.config b/src/csharp/Grpc.IntegrationTesting/packages.config
index a03ee926f4..030f9d97b8 100644
--- a/src/csharp/Grpc.IntegrationTesting/packages.config
+++ b/src/csharp/Grpc.IntegrationTesting/packages.config
@@ -1,17 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="BouncyCastle" version="1.7.0" targetFramework="net45" />
- <package id="Castle.Core" version="3.3.3" targetFramework="net45" />
- <package id="CommandLineParser.Unofficial" version="2.0.275" targetFramework="net45" />
- <package id="Google.Apis" version="1.16.0" targetFramework="net45" />
- <package id="Google.Apis.Auth" version="1.16.0" targetFramework="net45" />
- <package id="Google.Apis.Core" version="1.16.0" targetFramework="net45" />
- <package id="Google.Protobuf" version="3.0.0" targetFramework="net45" />
- <package id="log4net" version="2.0.3" targetFramework="net45" />
- <package id="Moq" version="4.6.38-alpha" targetFramework="net45" />
- <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net45" />
- <package id="NUnit" version="3.2.0" targetFramework="net45" />
- <package id="NUnitLite" version="3.2.0" targetFramework="net45" />
+ <package id="Castle.Core" version="4.0.0" targetFramework="net45" />
+ <package id="CommandLineParser" version="2.1.1-beta" targetFramework="net45" />
+ <package id="Google.Apis" version="1.21.0" targetFramework="net45" />
+ <package id="Google.Apis.Auth" version="1.21.0" targetFramework="net45" />
+ <package id="Google.Apis.Core" version="1.21.0" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.2.0" targetFramework="net45" />
+ <package id="Moq" version="4.7.0" targetFramework="net45" />
+ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net45" />
+ <package id="NUnit" version="3.6.0" targetFramework="net45" />
+ <package id="NUnitLite" version="3.6.0" targetFramework="net45" />
<package id="System.Interactive.Async" version="3.1.1" targetFramework="net45" />
<package id="Zlib.Portable.Signed" version="1.11.0" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.IntegrationTesting/project.json b/src/csharp/Grpc.IntegrationTesting/project.json
index eba54318a5..40fc566adc 100644
--- a/src/csharp/Grpc.IntegrationTesting/project.json
+++ b/src/csharp/Grpc.IntegrationTesting/project.json
@@ -54,18 +54,15 @@
"Grpc.Core": {
"target": "project"
},
- "Google.Protobuf": "3.0.0",
- "CommandLineParser.Unofficial": "2.0.275",
- "Moq": "4.6.38-alpha",
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*"
+ "Google.Protobuf": "3.2.0",
+ "CommandLineParser": "2.1.1-beta",
+ "Moq": "4.7.0",
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0"
},
"frameworks": {
"net45": {
- "frameworkAssemblies": {
- "System.Runtime": "",
- "System.IO": ""
- }
+ "frameworkAssemblies": {}
},
"netcoreapp1.0": {
"imports": [
diff --git a/src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj b/src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj
index c5918b194e..7e2b551799 100644
--- a/src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj
+++ b/src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj
@@ -35,17 +35,17 @@
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
- <Reference Include="nunit.framework">
- <HintPath>..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll</HintPath>
- </Reference>
- <Reference Include="nunitlite">
- <HintPath>..\packages\NUnitLite.3.2.0\lib\net45\nunitlite.dll</HintPath>
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference>
<Reference Include="Google.Protobuf">
- <HintPath>..\packages\Google.Protobuf.3.0.0\lib\net45\Google.Protobuf.dll</HintPath>
+ <HintPath>..\packages\Google.Protobuf.3.2.0\lib\net45\Google.Protobuf.dll</HintPath>
</Reference>
- <Reference Include="System.Interactive.Async">
- <HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
+ <Reference Include="nunit.framework">
+ <HintPath>..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="nunitlite">
+ <HintPath>..\packages\NUnitLite.3.6.0\lib\net45\nunitlite.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
diff --git a/src/csharp/Grpc.Reflection.Tests/packages.config b/src/csharp/Grpc.Reflection.Tests/packages.config
index 0fed4dbd41..8a7f7a0652 100644
--- a/src/csharp/Grpc.Reflection.Tests/packages.config
+++ b/src/csharp/Grpc.Reflection.Tests/packages.config
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.Protobuf" version="3.0.0" targetFramework="net45" />
- <package id="NUnit" version="3.2.0" targetFramework="net45" />
- <package id="NUnitLite" version="3.2.0" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.2.0" targetFramework="net45" />
+ <package id="NUnit" version="3.6.0" targetFramework="net45" />
+ <package id="NUnitLite" version="3.6.0" targetFramework="net45" />
<package id="System.Interactive.Async" version="3.1.1" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.Reflection.Tests/project.json b/src/csharp/Grpc.Reflection.Tests/project.json
index b90834a25e..fc05557c88 100644
--- a/src/csharp/Grpc.Reflection.Tests/project.json
+++ b/src/csharp/Grpc.Reflection.Tests/project.json
@@ -45,8 +45,8 @@
"Grpc.Reflection": {
"target": "project"
},
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*"
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0"
},
"frameworks": {
"net45": { },
diff --git a/src/csharp/Grpc.Reflection/Grpc.Reflection.csproj b/src/csharp/Grpc.Reflection/Grpc.Reflection.csproj
index 4e254a0b53..b0ab170e3f 100644
--- a/src/csharp/Grpc.Reflection/Grpc.Reflection.csproj
+++ b/src/csharp/Grpc.Reflection/Grpc.Reflection.csproj
@@ -36,12 +36,12 @@
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
- <Reference Include="Google.Protobuf">
- <HintPath>..\packages\Google.Protobuf.3.0.0\lib\net45\Google.Protobuf.dll</HintPath>
- </Reference>
<Reference Include="System.Interactive.Async">
<HintPath>..\packages\System.Interactive.Async.3.1.1\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference>
+ <Reference Include="Google.Protobuf">
+ <HintPath>..\packages\Google.Protobuf.3.2.0\lib\net45\Google.Protobuf.dll</HintPath>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\Grpc.Core\Version.cs">
diff --git a/src/csharp/Grpc.Reflection/Reflection.cs b/src/csharp/Grpc.Reflection/Reflection.cs
index 06c5d08030..86e9aace8c 100644
--- a/src/csharp/Grpc.Reflection/Reflection.cs
+++ b/src/csharp/Grpc.Reflection/Reflection.cs
@@ -70,7 +70,7 @@ namespace Grpc.Reflection.V1Alpha {
}
#region Messages
/// <summary>
- /// The message sent by the client when calling ServerReflectionInfo method.
+ /// The message sent by the client when calling ServerReflectionInfo method.
/// </summary>
public sealed partial class ServerReflectionRequest : pb::IMessage<ServerReflectionRequest> {
private static readonly pb::MessageParser<ServerReflectionRequest> _parser = new pb::MessageParser<ServerReflectionRequest>(() => new ServerReflectionRequest());
@@ -136,7 +136,7 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "file_by_filename" field.</summary>
public const int FileByFilenameFieldNumber = 3;
/// <summary>
- /// Find a proto file by the file name.
+ /// Find a proto file by the file name.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string FileByFilename {
@@ -150,9 +150,9 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "file_containing_symbol" field.</summary>
public const int FileContainingSymbolFieldNumber = 4;
/// <summary>
- /// Find the proto file that declares the given fully-qualified symbol name.
- /// This field should be a fully-qualified symbol name
- /// (e.g. &lt;package>.&lt;service>[.&lt;method>] or &lt;package>.&lt;type>).
+ /// Find the proto file that declares the given fully-qualified symbol name.
+ /// This field should be a fully-qualified symbol name
+ /// (e.g. &lt;package>.&lt;service>[.&lt;method>] or &lt;package>.&lt;type>).
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string FileContainingSymbol {
@@ -166,8 +166,8 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "file_containing_extension" field.</summary>
public const int FileContainingExtensionFieldNumber = 5;
/// <summary>
- /// Find the proto file which defines an extension extending the given
- /// message type with the given field number.
+ /// Find the proto file which defines an extension extending the given
+ /// message type with the given field number.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Reflection.V1Alpha.ExtensionRequest FileContainingExtension {
@@ -181,14 +181,14 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "all_extension_numbers_of_type" field.</summary>
public const int AllExtensionNumbersOfTypeFieldNumber = 6;
/// <summary>
- /// Finds the tag numbers used by all known extensions of the given message
- /// type, and appends them to ExtensionNumberResponse in an undefined order.
- /// Its corresponding method is best-effort: it's not guaranteed that the
- /// reflection service will implement this method, and it's not guaranteed
- /// that this method will provide all extensions. Returns
- /// StatusCode::UNIMPLEMENTED if it's not implemented.
- /// This field should be a fully-qualified type name. The format is
- /// &lt;package>.&lt;type>
+ /// Finds the tag numbers used by all known extensions of the given message
+ /// type, and appends them to ExtensionNumberResponse in an undefined order.
+ /// Its corresponding method is best-effort: it's not guaranteed that the
+ /// reflection service will implement this method, and it's not guaranteed
+ /// that this method will provide all extensions. Returns
+ /// StatusCode::UNIMPLEMENTED if it's not implemented.
+ /// This field should be a fully-qualified type name. The format is
+ /// &lt;package>.&lt;type>
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string AllExtensionNumbersOfType {
@@ -202,8 +202,8 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "list_services" field.</summary>
public const int ListServicesFieldNumber = 7;
/// <summary>
- /// List the full names of registered services. The content will not be
- /// checked.
+ /// List the full names of registered services. The content will not be
+ /// checked.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string ListServices {
@@ -401,8 +401,8 @@ namespace Grpc.Reflection.V1Alpha {
}
/// <summary>
- /// The type name and extension number sent by the client when requesting
- /// file_containing_extension.
+ /// The type name and extension number sent by the client when requesting
+ /// file_containing_extension.
/// </summary>
public sealed partial class ExtensionRequest : pb::IMessage<ExtensionRequest> {
private static readonly pb::MessageParser<ExtensionRequest> _parser = new pb::MessageParser<ExtensionRequest>(() => new ExtensionRequest());
@@ -441,7 +441,7 @@ namespace Grpc.Reflection.V1Alpha {
public const int ContainingTypeFieldNumber = 1;
private string containingType_ = "";
/// <summary>
- /// Fully-qualified type name. The format should be &lt;package>.&lt;type>
+ /// Fully-qualified type name. The format should be &lt;package>.&lt;type>
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string ContainingType {
@@ -553,7 +553,7 @@ namespace Grpc.Reflection.V1Alpha {
}
/// <summary>
- /// The message sent by the server to answer ServerReflectionInfo method.
+ /// The message sent by the server to answer ServerReflectionInfo method.
/// </summary>
public sealed partial class ServerReflectionResponse : pb::IMessage<ServerReflectionResponse> {
private static readonly pb::MessageParser<ServerReflectionResponse> _parser = new pb::MessageParser<ServerReflectionResponse>(() => new ServerReflectionResponse());
@@ -628,12 +628,12 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "file_descriptor_response" field.</summary>
public const int FileDescriptorResponseFieldNumber = 4;
/// <summary>
- /// This message is used to answer file_by_filename, file_containing_symbol,
- /// file_containing_extension requests with transitive dependencies. As
- /// the repeated label is not allowed in oneof fields, we use a
- /// FileDescriptorResponse message to encapsulate the repeated fields.
- /// The reflection service is allowed to avoid sending FileDescriptorProtos
- /// that were previously sent in response to earlier requests in the stream.
+ /// This message is used to answer file_by_filename, file_containing_symbol,
+ /// file_containing_extension requests with transitive dependencies. As
+ /// the repeated label is not allowed in oneof fields, we use a
+ /// FileDescriptorResponse message to encapsulate the repeated fields.
+ /// The reflection service is allowed to avoid sending FileDescriptorProtos
+ /// that were previously sent in response to earlier requests in the stream.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Reflection.V1Alpha.FileDescriptorResponse FileDescriptorResponse {
@@ -647,7 +647,7 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "all_extension_numbers_response" field.</summary>
public const int AllExtensionNumbersResponseFieldNumber = 5;
/// <summary>
- /// This message is used to answer all_extension_numbers_of_type requst.
+ /// This message is used to answer all_extension_numbers_of_type requst.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Reflection.V1Alpha.ExtensionNumberResponse AllExtensionNumbersResponse {
@@ -661,7 +661,7 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "list_services_response" field.</summary>
public const int ListServicesResponseFieldNumber = 6;
/// <summary>
- /// This message is used to answer list_services request.
+ /// This message is used to answer list_services request.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Reflection.V1Alpha.ListServiceResponse ListServicesResponse {
@@ -675,7 +675,7 @@ namespace Grpc.Reflection.V1Alpha {
/// <summary>Field number for the "error_response" field.</summary>
public const int ErrorResponseFieldNumber = 7;
/// <summary>
- /// This message is used when an error occurs.
+ /// This message is used when an error occurs.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public global::Grpc.Reflection.V1Alpha.ErrorResponse ErrorResponse {
@@ -893,9 +893,9 @@ namespace Grpc.Reflection.V1Alpha {
}
/// <summary>
- /// Serialized FileDescriptorProto messages sent by the server answering
- /// a file_by_filename, file_containing_symbol, or file_containing_extension
- /// request.
+ /// Serialized FileDescriptorProto messages sent by the server answering
+ /// a file_by_filename, file_containing_symbol, or file_containing_extension
+ /// request.
/// </summary>
public sealed partial class FileDescriptorResponse : pb::IMessage<FileDescriptorResponse> {
private static readonly pb::MessageParser<FileDescriptorResponse> _parser = new pb::MessageParser<FileDescriptorResponse>(() => new FileDescriptorResponse());
@@ -935,9 +935,9 @@ namespace Grpc.Reflection.V1Alpha {
= pb::FieldCodec.ForBytes(10);
private readonly pbc::RepeatedField<pb::ByteString> fileDescriptorProto_ = new pbc::RepeatedField<pb::ByteString>();
/// <summary>
- /// Serialized FileDescriptorProto messages. We avoid taking a dependency on
- /// descriptor.proto, which uses proto2 only features, by making them opaque
- /// bytes instead.
+ /// Serialized FileDescriptorProto messages. We avoid taking a dependency on
+ /// descriptor.proto, which uses proto2 only features, by making them opaque
+ /// bytes instead.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<pb::ByteString> FileDescriptorProto {
@@ -1012,8 +1012,8 @@ namespace Grpc.Reflection.V1Alpha {
}
/// <summary>
- /// A list of extension numbers sent by the server answering
- /// all_extension_numbers_of_type request.
+ /// A list of extension numbers sent by the server answering
+ /// all_extension_numbers_of_type request.
/// </summary>
public sealed partial class ExtensionNumberResponse : pb::IMessage<ExtensionNumberResponse> {
private static readonly pb::MessageParser<ExtensionNumberResponse> _parser = new pb::MessageParser<ExtensionNumberResponse>(() => new ExtensionNumberResponse());
@@ -1052,8 +1052,8 @@ namespace Grpc.Reflection.V1Alpha {
public const int BaseTypeNameFieldNumber = 1;
private string baseTypeName_ = "";
/// <summary>
- /// Full name of the base type, including the package name. The format
- /// is &lt;package>.&lt;type>
+ /// Full name of the base type, including the package name. The format
+ /// is &lt;package>.&lt;type>
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string BaseTypeName {
@@ -1158,7 +1158,7 @@ namespace Grpc.Reflection.V1Alpha {
}
/// <summary>
- /// A list of ServiceResponse sent by the server answering list_services request.
+ /// A list of ServiceResponse sent by the server answering list_services request.
/// </summary>
public sealed partial class ListServiceResponse : pb::IMessage<ListServiceResponse> {
private static readonly pb::MessageParser<ListServiceResponse> _parser = new pb::MessageParser<ListServiceResponse>(() => new ListServiceResponse());
@@ -1198,8 +1198,8 @@ namespace Grpc.Reflection.V1Alpha {
= pb::FieldCodec.ForMessage(10, global::Grpc.Reflection.V1Alpha.ServiceResponse.Parser);
private readonly pbc::RepeatedField<global::Grpc.Reflection.V1Alpha.ServiceResponse> service_ = new pbc::RepeatedField<global::Grpc.Reflection.V1Alpha.ServiceResponse>();
/// <summary>
- /// The information of each service may be expanded in the future, so we use
- /// ServiceResponse message to encapsulate it.
+ /// The information of each service may be expanded in the future, so we use
+ /// ServiceResponse message to encapsulate it.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public pbc::RepeatedField<global::Grpc.Reflection.V1Alpha.ServiceResponse> Service {
@@ -1274,8 +1274,8 @@ namespace Grpc.Reflection.V1Alpha {
}
/// <summary>
- /// The information of a single service used by ListServiceResponse to answer
- /// list_services request.
+ /// The information of a single service used by ListServiceResponse to answer
+ /// list_services request.
/// </summary>
public sealed partial class ServiceResponse : pb::IMessage<ServiceResponse> {
private static readonly pb::MessageParser<ServiceResponse> _parser = new pb::MessageParser<ServiceResponse>(() => new ServiceResponse());
@@ -1313,8 +1313,8 @@ namespace Grpc.Reflection.V1Alpha {
public const int NameFieldNumber = 1;
private string name_ = "";
/// <summary>
- /// Full name of a registered service, including its package name. The format
- /// is &lt;package>.&lt;service>
+ /// Full name of a registered service, including its package name. The format
+ /// is &lt;package>.&lt;service>
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public string Name {
@@ -1399,7 +1399,7 @@ namespace Grpc.Reflection.V1Alpha {
}
/// <summary>
- /// The error code and error message sent by the server when an error occurs.
+ /// The error code and error message sent by the server when an error occurs.
/// </summary>
public sealed partial class ErrorResponse : pb::IMessage<ErrorResponse> {
private static readonly pb::MessageParser<ErrorResponse> _parser = new pb::MessageParser<ErrorResponse>(() => new ErrorResponse());
@@ -1438,7 +1438,7 @@ namespace Grpc.Reflection.V1Alpha {
public const int ErrorCodeFieldNumber = 1;
private int errorCode_;
/// <summary>
- /// This field uses the error codes defined in grpc::StatusCode.
+ /// This field uses the error codes defined in grpc::StatusCode.
/// </summary>
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public int ErrorCode {
diff --git a/src/csharp/Grpc.Reflection/packages.config b/src/csharp/Grpc.Reflection/packages.config
index 5ab40b7a8c..eec292b306 100644
--- a/src/csharp/Grpc.Reflection/packages.config
+++ b/src/csharp/Grpc.Reflection/packages.config
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.Protobuf" version="3.0.0" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.2.0" targetFramework="net45" />
<package id="System.Interactive.Async" version="3.1.1" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.Reflection/project.json b/src/csharp/Grpc.Reflection/project.json
index bfc57661eb..014c78e489 100644
--- a/src/csharp/Grpc.Reflection/project.json
+++ b/src/csharp/Grpc.Reflection/project.json
@@ -1,5 +1,5 @@
{
- "version": "1.2.0-dev",
+ "version": "1.3.0-dev",
"title": "gRPC C# Reflection",
"authors": [ "Google Inc." ],
"copyright": "Copyright 2016, Google Inc.",
@@ -21,16 +21,11 @@
}
},
"dependencies": {
- "Grpc.Core": "1.2.0-dev",
- "Google.Protobuf": "3.0.0"
+ "Grpc.Core": "1.3.0-dev",
+ "Google.Protobuf": "3.2.0"
},
"frameworks": {
- "net45": {
- "frameworkAssemblies": {
- "System.Runtime": "",
- "System.IO": ""
- }
- },
+ "net45": {},
"netstandard1.5": {
"dependencies": {
"NETStandard.Library": "1.6.0"
diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat
index b99fdcbdfd..4fec2c71cf 100755
--- a/src/csharp/build_packages_dotnetcli.bat
+++ b/src/csharp/build_packages_dotnetcli.bat
@@ -28,7 +28,7 @@
@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@rem Current package versions
-set VERSION=1.2.0-dev
+set VERSION=1.3.0-dev
set PROTOBUF_VERSION=3.0.0
@rem Adjust the location of nuget.exe
diff --git a/src/csharp/build_packages_dotnetcli.sh b/src/csharp/build_packages_dotnetcli.sh
index 442e3acad2..f51b42bc8c 100755
--- a/src/csharp/build_packages_dotnetcli.sh
+++ b/src/csharp/build_packages_dotnetcli.sh
@@ -66,7 +66,7 @@ dotnet pack --configuration Release Grpc.Auth/project.json --output ../../artifa
dotnet pack --configuration Release Grpc.HealthCheck/project.json --output ../../artifacts
dotnet pack --configuration Release Grpc.Reflection/project.json --output ../../artifacts
-nuget pack Grpc.nuspec -Version "1.2.0-dev" -OutputDirectory ../../artifacts
-nuget pack Grpc.Tools.nuspec -Version "1.2.0-dev" -OutputDirectory ../../artifacts
+nuget pack Grpc.nuspec -Version "1.3.0-dev" -OutputDirectory ../../artifacts
+nuget pack Grpc.Tools.nuspec -Version "1.3.0-dev" -OutputDirectory ../../artifacts
(cd ../../artifacts && zip csharp_nugets_dotnetcli.zip *.nupkg)
diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c
index 6a241190b2..491df4de6a 100644
--- a/src/csharp/ext/grpc_csharp_ext.c
+++ b/src/csharp/ext/grpc_csharp_ext.c
@@ -1023,6 +1023,31 @@ GPR_EXPORT grpc_call_credentials *GPR_CALLTYPE grpcsharp_metadata_credentials_cr
return grpc_metadata_credentials_create_from_plugin(plugin, NULL);
}
+/* Auth context */
+
+GPR_EXPORT grpc_auth_context *GPR_CALLTYPE grpcsharp_call_auth_context(grpc_call *call) {
+ return grpc_call_auth_context(call);
+}
+
+GPR_EXPORT const char *GPR_CALLTYPE grpcsharp_auth_context_peer_identity_property_name(
+ const grpc_auth_context *ctx) {
+ return grpc_auth_context_peer_identity_property_name(ctx);
+}
+
+GPR_EXPORT grpc_auth_property_iterator GPR_CALLTYPE
+grpcsharp_auth_context_property_iterator(const grpc_auth_context *ctx) {
+ return grpc_auth_context_property_iterator(ctx);
+}
+
+GPR_EXPORT const grpc_auth_property *GPR_CALLTYPE grpcsharp_auth_property_iterator_next(
+ grpc_auth_property_iterator *it) {
+ return grpc_auth_property_iterator_next(it);
+}
+
+GPR_EXPORT void GPR_CALLTYPE grpcsharp_auth_context_release(grpc_auth_context *ctx) {
+ grpc_auth_context_release(ctx);
+}
+
/* Logging */
typedef void(GPR_CALLTYPE *grpcsharp_log_func)(const char *file, int32_t line,
diff --git a/src/csharp/global.json b/src/csharp/global.json
new file mode 100644
index 0000000000..32ff399ef9
--- /dev/null
+++ b/src/csharp/global.json
@@ -0,0 +1,5 @@
+{
+ "sdk": {
+ "version": "1.0.0-preview2-003121"
+ }
+} \ No newline at end of file
diff --git a/src/csharp/tests.json b/src/csharp/tests.json
index 4ce6769eee..707d140f62 100644
--- a/src/csharp/tests.json
+++ b/src/csharp/tests.json
@@ -8,6 +8,8 @@
"Grpc.Core.Internal.Tests.MetadataArraySafeHandleTest",
"Grpc.Core.Internal.Tests.TimespecTest",
"Grpc.Core.Tests.AppDomainUnloadTest",
+ "Grpc.Core.Tests.AuthContextTest",
+ "Grpc.Core.Tests.AuthPropertyTest",
"Grpc.Core.Tests.CallCredentialsTest",
"Grpc.Core.Tests.CallOptionsTest",
"Grpc.Core.Tests.ChannelCredentialsTest",
@@ -20,7 +22,6 @@
"Grpc.Core.Tests.HalfcloseTest",
"Grpc.Core.Tests.MarshallingErrorsTest",
"Grpc.Core.Tests.MetadataTest",
- "Grpc.Core.Tests.NUnitVersionTest",
"Grpc.Core.Tests.PerformanceTest",
"Grpc.Core.Tests.PInvokeTest",
"Grpc.Core.Tests.ResponseHeadersTest",
diff --git a/src/node/health_check/package.json b/src/node/health_check/package.json
index 8376339deb..e218f5a406 100644
--- a/src/node/health_check/package.json
+++ b/src/node/health_check/package.json
@@ -1,6 +1,6 @@
{
"name": "grpc-health-check",
- "version": "1.2.0-dev",
+ "version": "1.3.0-dev",
"author": "Google Inc.",
"description": "Health check service for use with gRPC",
"repository": {
@@ -15,7 +15,7 @@
}
],
"dependencies": {
- "grpc": "^1.2.0-dev",
+ "grpc": "^1.3.0-dev",
"lodash": "^3.9.3",
"google-protobuf": "^3.0.0"
},
diff --git a/src/node/src/server.js b/src/node/src/server.js
index 8a7eff507d..a5a0ea2642 100644
--- a/src/node/src/server.js
+++ b/src/node/src/server.js
@@ -728,7 +728,7 @@ var defaultHandler = {
* method implementation for the provided service.
*/
Server.prototype.addService = function(service, implementation) {
- if (!_.isObjectLike(service) || !_.isObjectLike(implementation)) {
+ if (!_.isObject(service) || !_.isObject(implementation)) {
throw new Error('addService requires two objects as arguments');
}
if (_.keys(service).length === 0) {
diff --git a/src/node/tools/package.json b/src/node/tools/package.json
index 53dd53f539..3096c6e42a 100644
--- a/src/node/tools/package.json
+++ b/src/node/tools/package.json
@@ -1,6 +1,6 @@
{
"name": "grpc-tools",
- "version": "1.2.0-dev",
+ "version": "1.3.0-dev",
"author": "Google Inc.",
"description": "Tools for developing with gRPC on Node.js",
"homepage": "http://www.grpc.io/",
diff --git a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
index 1a3b775c60..ab8f82a39e 100644
--- a/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
+++ b/src/objective-c/!ProtoCompiler-gRPCPlugin.podspec
@@ -42,7 +42,7 @@ Pod::Spec.new do |s|
# exclamation mark ensures that other "regular" pods will be able to find it as it'll be installed
# before them.
s.name = '!ProtoCompiler-gRPCPlugin'
- v = '1.2.0-dev'
+ v = '1.3.0-dev'
s.version = v
s.summary = 'The gRPC ProtoC plugin generates Objective-C files from .proto services.'
s.description = <<-DESC
diff --git a/src/objective-c/GRPCClient/private/version.h b/src/objective-c/GRPCClient/private/version.h
index e569faa25b..09155ee4d4 100644
--- a/src/objective-c/GRPCClient/private/version.h
+++ b/src/objective-c/GRPCClient/private/version.h
@@ -38,4 +38,4 @@
// `tools/buildgen/generate_projects.sh`.
-#define GRPC_OBJC_VERSION_STRING @"1.2.0-dev"
+#define GRPC_OBJC_VERSION_STRING @"1.3.0-dev"
diff --git a/src/objective-c/tests/InteropTests.m b/src/objective-c/tests/InteropTests.m
index 5584246ad9..d964f53e8e 100644
--- a/src/objective-c/tests/InteropTests.m
+++ b/src/objective-c/tests/InteropTests.m
@@ -90,6 +90,9 @@
return nil;
}
+// This number indicates how many bytes of overhead does Protocol Buffers encoding add onto the
+// message. The number varies as different message.proto is used on different servers. The actual
+// number for each interop server is overridden in corresponding derived test classes.
- (int32_t)encodingOverhead {
return 0;
}
@@ -169,8 +172,6 @@
[self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil];
}
-#ifndef GRPC_COMPILE_WITH_CRONET
-// TODO (mxyan): Fix this test
- (void)testResponsesOverMaxSizeFailWithActionableMessage {
XCTAssertNotNil(self.class.host);
__weak XCTestExpectation *expectation = [self expectationWithDescription:@"ResponseOverMaxSize"];
@@ -191,7 +192,6 @@
[self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil];
}
-#endif
- (void)testResponsesOver4MBAreAcceptedIfOptedIn {
XCTAssertNotNil(self.class.host);
@@ -327,8 +327,6 @@
[self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil];
}
-#ifndef GRPC_COMPILE_WITH_CRONET
-// TODO(makdharma@): Fix this test
- (void)testEmptyStreamRPC {
XCTAssertNotNil(self.class.host);
__weak XCTestExpectation *expectation = [self expectationWithDescription:@"EmptyStream"];
@@ -342,7 +340,6 @@
}];
[self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil];
}
-#endif
- (void)testCancelAfterBeginRPC {
XCTAssertNotNil(self.class.host);
diff --git a/src/objective-c/tests/InteropTestsLocalCleartext.m b/src/objective-c/tests/InteropTestsLocalCleartext.m
index b41210f50f..4987660808 100644
--- a/src/objective-c/tests/InteropTestsLocalCleartext.m
+++ b/src/objective-c/tests/InteropTestsLocalCleartext.m
@@ -37,6 +37,10 @@
static NSString * const kLocalCleartextHost = @"localhost:5050";
+// The Protocol Buffers encoding overhead of local interop server. Acquired
+// by experiment. Adjust this when server's proto file changes.
+static int32_t kLocalInteropServerOverhead = 10;
+
/** Tests in InteropTests.m, sending the RPCs to a local cleartext server. */
@interface InteropTestsLocalCleartext : InteropTests
@end
@@ -48,7 +52,7 @@ static NSString * const kLocalCleartextHost = @"localhost:5050";
}
- (int32_t)encodingOverhead {
- return 10; // bytes
+ return kLocalInteropServerOverhead; // bytes
}
- (void)setUp {
diff --git a/src/objective-c/tests/InteropTestsLocalSSL.m b/src/objective-c/tests/InteropTestsLocalSSL.m
index 1479c5896c..934d500abc 100644
--- a/src/objective-c/tests/InteropTestsLocalSSL.m
+++ b/src/objective-c/tests/InteropTestsLocalSSL.m
@@ -37,6 +37,10 @@
static NSString * const kLocalSSLHost = @"localhost:5051";
+// The Protocol Buffers encoding overhead of local interop server. Acquired
+// by experiment. Adjust this when server's proto file changes.
+static int32_t kLocalInteropServerOverhead = 10;
+
/** Tests in InteropTests.m, sending the RPCs to a local SSL server. */
@interface InteropTestsLocalSSL : InteropTests
@end
@@ -48,7 +52,7 @@ static NSString * const kLocalSSLHost = @"localhost:5051";
}
- (int32_t)encodingOverhead {
- return 10; // bytes
+ return kLocalInteropServerOverhead; // bytes
}
- (void)setUp {
diff --git a/src/objective-c/tests/InteropTestsRemote.m b/src/objective-c/tests/InteropTestsRemote.m
index 70f84753bb..9fb30aa43d 100644
--- a/src/objective-c/tests/InteropTestsRemote.m
+++ b/src/objective-c/tests/InteropTestsRemote.m
@@ -37,6 +37,10 @@
static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.googleapis.com";
+// The Protocol Buffers encoding overhead of remote interop server. Acquired
+// by experiment. Adjust this when server's proto file changes.
+static int32_t kRemoteInteropServerOverhead = 12;
+
/** Tests in InteropTests.m, sending the RPCs to a remote SSL server. */
@interface InteropTestsRemote : InteropTests
@end
@@ -48,7 +52,7 @@ static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.googleapis.com";
}
- (int32_t)encodingOverhead {
- return 12; // bytes
+ return kRemoteInteropServerOverhead; // bytes
}
@end
diff --git a/src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m b/src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m
index fab8ad8d25..005bac0a0d 100644
--- a/src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m
+++ b/src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m
@@ -37,6 +37,10 @@
static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.googleapis.com";
+// The Protocol Buffers encoding overhead of remote interop server. Acquired
+// by experiment. Adjust this when server's proto file changes.
+static int32_t kRemoteInteropServerOverhead = 12;
+
/** Tests in InteropTests.m, sending the RPCs to a remote SSL server. */
@interface InteropTestsRemoteWithCronet : InteropTests
@end
@@ -47,4 +51,8 @@ static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.googleapis.com";
return kRemoteSSLHost;
}
+- (int32_t)encodingOverhead {
+ return kRemoteInteropServerOverhead; // bytes
+}
+
@end
diff --git a/src/php/composer.json b/src/php/composer.json
index 491e34795a..2b140077cc 100644
--- a/src/php/composer.json
+++ b/src/php/composer.json
@@ -2,7 +2,7 @@
"name": "grpc/grpc-dev",
"description": "gRPC library for PHP - for Developement use only",
"license": "BSD-3-Clause",
- "version": "1.2.0",
+ "version": "1.3.0",
"require": {
"php": ">=5.5.0",
"google/protobuf": "^v3.1.0"
diff --git a/src/php/tests/qps/client.php b/src/php/tests/qps/client.php
new file mode 100644
index 0000000000..d9ca35ba43
--- /dev/null
+++ b/src/php/tests/qps/client.php
@@ -0,0 +1,166 @@
+<?php
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/*
+ * PHP client for QPS testing works as follows:
+ * 1. Gets initiated by a call from a proxy that implements the worker service. The
+ * argument to this client is the proxy connection information
+ * 2. Initiate an RPC to the proxy to get ClientConfig
+ * 3. Initiate a client-side telemetry RPC to the proxy
+ * 4. Parse the client config, which includes server target information and then start
+ * a unary or streaming test as appropriate.
+ * 5. After each completed RPC, send its timing to the proxy. The proxy does all histogramming
+ * 6. Proxy will respond on the timing channel when it's time to complete. Our
+ * next timing write will fail and we know that it's time to stop
+ * The above complex dance is since threading and async are not idiomatic and we
+ * shouldn't ever be waiting to read a mark
+ *
+ * This test only supports a single channel since threading/async is not idiomatic
+ * This test supports unary or streaming ping-pongs, as well as open-loop
+ *
+ */
+
+require dirname(__FILE__).'/vendor/autoload.php';
+
+/**
+ * Assertion function that always exits with an error code if the assertion is
+ * falsy.
+ *
+ * @param $value Assertion value. Should be true.
+ * @param $error_message Message to display if the assertion is false
+ */
+function hardAssert($value, $error_message)
+{
+ if (!$value) {
+ echo $error_message."\n";
+ exit(1);
+ }
+}
+
+function hardAssertIfStatusOk($status)
+{
+ if ($status->code !== Grpc\STATUS_OK) {
+ echo "Call did not complete successfully. Status object:\n";
+ var_dump($status);
+ exit(1);
+ }
+}
+
+/* Start the actual client */
+
+function qps_client_main($proxy_address) {
+ echo "Initiating php client\n";
+
+ $proxystubopts = [];
+ $proxystubopts['credentials'] = Grpc\ChannelCredentials::createInsecure();
+ $proxystub = new Grpc\Testing\ProxyClientServiceClient($proxy_address, $proxystubopts);
+ list($config, $status) = $proxystub->GetConfig(new Grpc\Testing\Void())->wait();
+ hardAssertIfStatusOk($status);
+ hardAssert($config->getClientChannels() == 1, "Only 1 channel supported");
+ hardAssert($config->getOutstandingRpcsPerChannel() == 1, "Only 1 outstanding RPC supported");
+
+ echo "Got configuration from proxy, target is " . $config->getServerTargets()[0] . "\n";
+
+ $stubopts = [];
+ if ($config->getSecurityParams()) {
+ if ($config->getSecurityParams()->getUseTestCa()) {
+ $stubopts['credentials'] = Grpc\ChannelCredentials::createSsl(
+ file_get_contents(dirname(__FILE__).'/../data/ca.pem'));
+ } else {
+ $stubopts['credentials'] = Grpc\ChannelCredentials::createSsl(null);
+ }
+ $override = $config->getSecurityParams()->getServerHostOverride();
+ if ($override) {
+ $stubopts['grpc.ssl_target_name_override'] = $override;
+ $stubopts['grpc.default_authority'] = $override;
+ }
+ } else {
+ $stubopts['credentials'] = Grpc\ChannelCredentials::createInsecure();
+ }
+ echo "Initiating php benchmarking client\n";
+
+ $stub = new Grpc\Testing\BenchmarkServiceClient(
+ $config->getServerTargets()[0], $stubopts);
+ $req = new Grpc\Testing\SimpleRequest();
+
+ $req->setResponseType(Grpc\Testing\PayloadType::COMPRESSABLE);
+ $req->setResponseSize($config->getPayloadConfig()->getSimpleParams()->getRespSize());
+ $payload = new Grpc\Testing\Payload();
+ $payload->setType(Grpc\Testing\PayloadType::COMPRESSABLE);
+ $payload->setBody(str_repeat("\0", $config->getPayloadConfig()->getSimpleParams()->getReqSize()));
+ $req->setPayload($payload);
+
+ /* TODO(stanley-cheung): Enable the following by removing the 0&& once protobuf
+ * properly supports oneof in PHP */
+ if (0 && $config->getLoadParams()->getLoad() == "poisson") {
+ $poisson = true;
+ $lamrecip = 1.0/($config->getLoadParams()->getPoisson()->getOfferedLoad());
+ $issue = microtime(true) + $lamrecip * -log(1.0-rand()/(getrandmax()+1));
+ } else {
+ $poisson = false;
+ }
+ $metric = new Grpc\Testing\ProxyStat;
+ $telemetry = $proxystub->ReportTime();
+ if ($config->getRpcType() == Grpc\Testing\RpcType::UNARY) {
+ while (1) {
+ if ($poisson) {
+ time_sleep_until($issue);
+ $issue = $issue + $lamrecip * -log(1.0-rand()/(getrandmax()+1));
+ }
+ $startreq = microtime(true);
+ list($resp,$status) = $stub->UnaryCall($req)->wait();
+ hardAssertIfStatusOk($status);
+ $metric->setLatency(microtime(true)-$startreq);
+ $telemetry->write($metric);
+ }
+ } else {
+ $stream = $stub->StreamingCall();
+ while (1) {
+ if ($poisson) {
+ time_sleep_until($issue);
+ $issue = $issue + $lamrecip * -log(1.0-rand()/(getrandmax()+1));
+ }
+ $startreq = microtime(true);
+ $stream->write($req);
+ $resp = $stream->read();
+ $metric->setLatency(microtime(true)-$startreq);
+ $telemetry->write($metric);
+ }
+ }
+}
+
+ini_set('display_startup_errors', 1);
+ini_set('display_errors', 1);
+error_reporting(-1);
+qps_client_main($argv[1]);
diff --git a/src/php/tests/qps/composer.json b/src/php/tests/qps/composer.json
new file mode 100644
index 0000000000..0fc87098f5
--- /dev/null
+++ b/src/php/tests/qps/composer.json
@@ -0,0 +1,11 @@
+{
+ "minimum-stability": "dev",
+ "require": {
+ "grpc/grpc": "dev-master"
+ },
+ "autoload": {
+ "psr-4": {
+ "": "generated_code/"
+ }
+ }
+}
diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Control.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Control.php
new file mode 100644
index 0000000000..efca18a0cb
--- /dev/null
+++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Control.php
@@ -0,0 +1,127 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace GPBMetadata\Src\Proto\Grpc\Testing;
+
+class Control
+{
+ public static $is_initialized = false;
+
+ public static function initOnce() {
+ $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
+
+ if (static::$is_initialized == true) {
+ return;
+ }
+ \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce();
+ \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce();
+ $pool->internalAddGeneratedFile(hex2bin(
+ "0add170a247372632f70726f746f2f677270632f74657374696e672f636f" .
+ "6e74726f6c2e70726f746f120c677270632e74657374696e671a25737263" .
+ "2f70726f746f2f677270632f74657374696e672f7061796c6f6164732e70" .
+ "726f746f1a227372632f70726f746f2f677270632f74657374696e672f73" .
+ "746174732e70726f746f22250a0d506f6973736f6e506172616d7312140a" .
+ "0c6f6666657265645f6c6f616418012001280122120a10436c6f7365644c" .
+ "6f6f70506172616d73227b0a0a4c6f6164506172616d7312350a0b636c6f" .
+ "7365645f6c6f6f7018012001280b321e2e677270632e74657374696e672e" .
+ "436c6f7365644c6f6f70506172616d734800122e0a07706f6973736f6e18" .
+ "022001280b321b2e677270632e74657374696e672e506f6973736f6e5061" .
+ "72616d73480042060a046c6f616422430a0e536563757269747950617261" .
+ "6d7312130a0b7573655f746573745f6361180120012808121c0a14736572" .
+ "7665725f686f73745f6f76657272696465180220012809224d0a0a436861" .
+ "6e6e656c417267120c0a046e616d6518012001280912130a097374725f76" .
+ "616c7565180220012809480012130a09696e745f76616c75651803200128" .
+ "05480042070a0576616c756522a0040a0c436c69656e74436f6e66696712" .
+ "160a0e7365727665725f74617267657473180120032809122d0a0b636c69" .
+ "656e745f7479706518022001280e32182e677270632e74657374696e672e" .
+ "436c69656e745479706512350a0f73656375726974795f706172616d7318" .
+ "032001280b321c2e677270632e74657374696e672e536563757269747950" .
+ "6172616d7312240a1c6f75747374616e64696e675f727063735f7065725f" .
+ "6368616e6e656c18042001280512170a0f636c69656e745f6368616e6e65" .
+ "6c73180520012805121c0a146173796e635f636c69656e745f7468726561" .
+ "647318072001280512270a087270635f7479706518082001280e32152e67" .
+ "7270632e74657374696e672e52706354797065122d0a0b6c6f61645f7061" .
+ "72616d73180a2001280b32182e677270632e74657374696e672e4c6f6164" .
+ "506172616d7312330a0e7061796c6f61645f636f6e666967180b2001280b" .
+ "321b2e677270632e74657374696e672e5061796c6f6164436f6e66696712" .
+ "370a10686973746f6772616d5f706172616d73180c2001280b321d2e6772" .
+ "70632e74657374696e672e486973746f6772616d506172616d7312110a09" .
+ "636f72655f6c697374180d2003280512120a0a636f72655f6c696d697418" .
+ "0e2001280512180a106f746865725f636c69656e745f617069180f200128" .
+ "09122e0a0c6368616e6e656c5f6172677318102003280b32182e67727063" .
+ "2e74657374696e672e4368616e6e656c41726722380a0c436c69656e7453" .
+ "746174757312280a05737461747318012001280b32192e677270632e7465" .
+ "7374696e672e436c69656e74537461747322150a044d61726b120d0a0572" .
+ "6573657418012001280822680a0a436c69656e7441726773122b0a057365" .
+ "74757018012001280b321a2e677270632e74657374696e672e436c69656e" .
+ "74436f6e666967480012220a046d61726b18022001280b32122e67727063" .
+ "2e74657374696e672e4d61726b480042090a076172677479706522b4020a" .
+ "0c536572766572436f6e666967122d0a0b7365727665725f747970651801" .
+ "2001280e32182e677270632e74657374696e672e53657276657254797065" .
+ "12350a0f73656375726974795f706172616d7318022001280b321c2e6772" .
+ "70632e74657374696e672e5365637572697479506172616d73120c0a0470" .
+ "6f7274180420012805121c0a146173796e635f7365727665725f74687265" .
+ "61647318072001280512120a0a636f72655f6c696d697418082001280512" .
+ "330a0e7061796c6f61645f636f6e66696718092001280b321b2e67727063" .
+ "2e74657374696e672e5061796c6f6164436f6e66696712110a09636f7265" .
+ "5f6c697374180a2003280512180a106f746865725f7365727665725f6170" .
+ "69180b20012809121c0a137265736f757263655f71756f74615f73697a65" .
+ "18e9072001280522680a0a53657276657241726773122b0a057365747570" .
+ "18012001280b321a2e677270632e74657374696e672e536572766572436f" .
+ "6e666967480012220a046d61726b18022001280b32122e677270632e7465" .
+ "7374696e672e4d61726b480042090a076172677479706522550a0c536572" .
+ "76657253746174757312280a05737461747318012001280b32192e677270" .
+ "632e74657374696e672e5365727665725374617473120c0a04706f727418" .
+ "0220012805120d0a05636f726573180320012805220d0a0b436f72655265" .
+ "7175657374221d0a0c436f7265526573706f6e7365120d0a05636f726573" .
+ "18012001280522060a04566f696422fd010a085363656e6172696f120c0a" .
+ "046e616d6518012001280912310a0d636c69656e745f636f6e6669671802" .
+ "2001280b321a2e677270632e74657374696e672e436c69656e74436f6e66" .
+ "696712130a0b6e756d5f636c69656e747318032001280512310a0d736572" .
+ "7665725f636f6e66696718042001280b321a2e677270632e74657374696e" .
+ "672e536572766572436f6e66696712130a0b6e756d5f7365727665727318" .
+ "052001280512160a0e7761726d75705f7365636f6e647318062001280512" .
+ "190a1162656e63686d61726b5f7365636f6e647318072001280512200a18" .
+ "737061776e5f6c6f63616c5f776f726b65725f636f756e74180820012805" .
+ "22360a095363656e6172696f7312290a097363656e6172696f7318012003" .
+ "280b32162e677270632e74657374696e672e5363656e6172696f22f8020a" .
+ "155363656e6172696f526573756c7453756d6d617279120b0a0371707318" .
+ "0120012801121b0a137170735f7065725f7365727665725f636f72651802" .
+ "20012801121a0a127365727665725f73797374656d5f74696d6518032001" .
+ "280112180a107365727665725f757365725f74696d65180420012801121a" .
+ "0a12636c69656e745f73797374656d5f74696d6518052001280112180a10" .
+ "636c69656e745f757365725f74696d6518062001280112120a0a6c617465" .
+ "6e63795f353018072001280112120a0a6c6174656e63795f393018082001" .
+ "280112120a0a6c6174656e63795f393518092001280112120a0a6c617465" .
+ "6e63795f3939180a2001280112130a0b6c6174656e63795f393939180b20" .
+ "01280112180a107365727665725f6370755f7573616765180c2001280112" .
+ "260a1e7375636365737366756c5f72657175657374735f7065725f736563" .
+ "6f6e64180d2001280112220a1a6661696c65645f72657175657374735f70" .
+ "65725f7365636f6e64180e200128012283030a0e5363656e6172696f5265" .
+ "73756c7412280a087363656e6172696f18012001280b32162e677270632e" .
+ "74657374696e672e5363656e6172696f122e0a096c6174656e6369657318" .
+ "022001280b321b2e677270632e74657374696e672e486973746f6772616d" .
+ "44617461122f0a0c636c69656e745f737461747318032003280b32192e67" .
+ "7270632e74657374696e672e436c69656e745374617473122f0a0c736572" .
+ "7665725f737461747318042003280b32192e677270632e74657374696e67" .
+ "2e536572766572537461747312140a0c7365727665725f636f7265731805" .
+ "2003280512340a0773756d6d61727918062001280b32232e677270632e74" .
+ "657374696e672e5363656e6172696f526573756c7453756d6d6172791216" .
+ "0a0e636c69656e745f7375636365737318072003280812160a0e73657276" .
+ "65725f7375636365737318082003280812390a0f726571756573745f7265" .
+ "73756c747318092003280b32202e677270632e74657374696e672e526571" .
+ "75657374526573756c74436f756e742a410a0a436c69656e745479706512" .
+ "0f0a0b53594e435f434c49454e54100012100a0c4153594e435f434c4945" .
+ "4e54100112100a0c4f544845525f434c49454e5410022a5b0a0a53657276" .
+ "657254797065120f0a0b53594e435f534552564552100012100a0c415359" .
+ "4e435f534552564552100112180a144153594e435f47454e455249435f53" .
+ "4552564552100212100a0c4f544845525f53455256455210032a230a0752" .
+ "70635479706512090a05554e4152591000120d0a0953545245414d494e47" .
+ "1001620670726f746f33"
+ ));
+
+ static::$is_initialized = true;
+ }
+}
+
diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php
new file mode 100644
index 0000000000..c088002626
--- /dev/null
+++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php
@@ -0,0 +1,69 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace GPBMetadata\Src\Proto\Grpc\Testing;
+
+class Messages
+{
+ public static $is_initialized = false;
+
+ public static function initOnce() {
+ $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
+
+ if (static::$is_initialized == true) {
+ return;
+ }
+ $pool->internalAddGeneratedFile(hex2bin(
+ "0ad50a0a257372632f70726f746f2f677270632f74657374696e672f6d65" .
+ "7373616765732e70726f746f120c677270632e74657374696e67221a0a09" .
+ "426f6f6c56616c7565120d0a0576616c756518012001280822400a075061" .
+ "796c6f616412270a047479706518012001280e32192e677270632e746573" .
+ "74696e672e5061796c6f616454797065120c0a04626f647918022001280c" .
+ "222b0a0a4563686f537461747573120c0a04636f6465180120012805120f" .
+ "0a076d65737361676518022001280922ce020a0d53696d706c6552657175" .
+ "65737412300a0d726573706f6e73655f7479706518012001280e32192e67" .
+ "7270632e74657374696e672e5061796c6f61645479706512150a0d726573" .
+ "706f6e73655f73697a6518022001280512260a077061796c6f6164180320" .
+ "01280b32152e677270632e74657374696e672e5061796c6f616412150a0d" .
+ "66696c6c5f757365726e616d6518042001280812180a1066696c6c5f6f61" .
+ "7574685f73636f706518052001280812340a13726573706f6e73655f636f" .
+ "6d7072657373656418062001280b32172e677270632e74657374696e672e" .
+ "426f6f6c56616c756512310a0f726573706f6e73655f7374617475731807" .
+ "2001280b32182e677270632e74657374696e672e4563686f537461747573" .
+ "12320a116578706563745f636f6d7072657373656418082001280b32172e" .
+ "677270632e74657374696e672e426f6f6c56616c7565225f0a0e53696d70" .
+ "6c65526573706f6e736512260a077061796c6f616418012001280b32152e" .
+ "677270632e74657374696e672e5061796c6f616412100a08757365726e61" .
+ "6d6518022001280912130a0b6f617574685f73636f706518032001280922" .
+ "770a1953747265616d696e67496e70757443616c6c526571756573741226" .
+ "0a077061796c6f616418012001280b32152e677270632e74657374696e67" .
+ "2e5061796c6f616412320a116578706563745f636f6d7072657373656418" .
+ "022001280b32172e677270632e74657374696e672e426f6f6c56616c7565" .
+ "223d0a1a53747265616d696e67496e70757443616c6c526573706f6e7365" .
+ "121f0a17616767726567617465645f7061796c6f61645f73697a65180120" .
+ "01280522640a12526573706f6e7365506172616d6574657273120c0a0473" .
+ "697a6518012001280512130a0b696e74657276616c5f7573180220012805" .
+ "122b0a0a636f6d7072657373656418032001280b32172e677270632e7465" .
+ "7374696e672e426f6f6c56616c756522e8010a1a53747265616d696e674f" .
+ "757470757443616c6c5265717565737412300a0d726573706f6e73655f74" .
+ "79706518012001280e32192e677270632e74657374696e672e5061796c6f" .
+ "616454797065123d0a13726573706f6e73655f706172616d657465727318" .
+ "022003280b32202e677270632e74657374696e672e526573706f6e736550" .
+ "6172616d657465727312260a077061796c6f616418032001280b32152e67" .
+ "7270632e74657374696e672e5061796c6f616412310a0f726573706f6e73" .
+ "655f73746174757318072001280b32182e677270632e74657374696e672e" .
+ "4563686f53746174757322450a1b53747265616d696e674f757470757443" .
+ "616c6c526573706f6e736512260a077061796c6f616418012001280b3215" .
+ "2e677270632e74657374696e672e5061796c6f616422330a0f5265636f6e" .
+ "6e656374506172616d7312200a186d61785f7265636f6e6e6563745f6261" .
+ "636b6f66665f6d7318012001280522330a0d5265636f6e6e656374496e66" .
+ "6f120e0a0670617373656418012001280812120a0a6261636b6f66665f6d" .
+ "731802200328052a1f0a0b5061796c6f61645479706512100a0c434f4d50" .
+ "5245535341424c451000620670726f746f33"
+ ));
+
+ static::$is_initialized = true;
+ }
+}
+
diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Payloads.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Payloads.php
new file mode 100644
index 0000000000..279fe00ac8
--- /dev/null
+++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Payloads.php
@@ -0,0 +1,37 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/payloads.proto
+
+namespace GPBMetadata\Src\Proto\Grpc\Testing;
+
+class Payloads
+{
+ public static $is_initialized = false;
+
+ public static function initOnce() {
+ $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
+
+ if (static::$is_initialized == true) {
+ return;
+ }
+ $pool->internalAddGeneratedFile(hex2bin(
+ "0a93030a257372632f70726f746f2f677270632f74657374696e672f7061" .
+ "796c6f6164732e70726f746f120c677270632e74657374696e6722370a10" .
+ "42797465427566666572506172616d7312100a087265715f73697a651801" .
+ "2001280512110a09726573705f73697a6518022001280522380a1153696d" .
+ "706c6550726f746f506172616d7312100a087265715f73697a6518012001" .
+ "280512110a09726573705f73697a6518022001280522140a12436f6d706c" .
+ "657850726f746f506172616d7322ca010a0d5061796c6f6164436f6e6669" .
+ "6712380a0e627974656275665f706172616d7318012001280b321e2e6772" .
+ "70632e74657374696e672e42797465427566666572506172616d73480012" .
+ "380a0d73696d706c655f706172616d7318022001280b321f2e677270632e" .
+ "74657374696e672e53696d706c6550726f746f506172616d734800123a0a" .
+ "0e636f6d706c65785f706172616d7318032001280b32202e677270632e74" .
+ "657374696e672e436f6d706c657850726f746f506172616d73480042090a" .
+ "077061796c6f6164620670726f746f33"
+ ));
+
+ static::$is_initialized = true;
+ }
+}
+
diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/ProxyService.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/ProxyService.php
new file mode 100644
index 0000000000..e35944e1d8
--- /dev/null
+++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/ProxyService.php
@@ -0,0 +1,34 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/proxy-service.proto
+
+namespace GPBMetadata\Src\Proto\Grpc\Testing;
+
+class ProxyService
+{
+ public static $is_initialized = false;
+
+ public static function initOnce() {
+ $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
+
+ if (static::$is_initialized == true) {
+ return;
+ }
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ $pool->internalAddGeneratedFile(hex2bin(
+ "0a97020a2a7372632f70726f746f2f677270632f74657374696e672f7072" .
+ "6f78792d736572766963652e70726f746f120c677270632e74657374696e" .
+ "671a247372632f70726f746f2f677270632f74657374696e672f636f6e74" .
+ "726f6c2e70726f746f221c0a0950726f787953746174120f0a076c617465" .
+ "6e6379180120012801328e010a1250726f7879436c69656e745365727669" .
+ "6365123b0a09476574436f6e66696712122e677270632e74657374696e67" .
+ "2e566f69641a1a2e677270632e74657374696e672e436c69656e74436f6e" .
+ "666967123b0a0a5265706f727454696d6512172e677270632e7465737469" .
+ "6e672e50726f7879537461741a122e677270632e74657374696e672e566f" .
+ "69642801620670726f746f33"
+ ));
+
+ static::$is_initialized = true;
+ }
+}
+
diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Services.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Services.php
new file mode 100644
index 0000000000..7a9439a5b9
--- /dev/null
+++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Services.php
@@ -0,0 +1,45 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/services.proto
+
+namespace GPBMetadata\Src\Proto\Grpc\Testing;
+
+class Services
+{
+ public static $is_initialized = false;
+
+ public static function initOnce() {
+ $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
+
+ if (static::$is_initialized == true) {
+ return;
+ }
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ $pool->internalAddGeneratedFile(hex2bin(
+ "0ad1040a257372632f70726f746f2f677270632f74657374696e672f7365" .
+ "7276696365732e70726f746f120c677270632e74657374696e671a257372" .
+ "632f70726f746f2f677270632f74657374696e672f6d657373616765732e" .
+ "70726f746f1a247372632f70726f746f2f677270632f74657374696e672f" .
+ "636f6e74726f6c2e70726f746f32aa010a1042656e63686d61726b536572" .
+ "7669636512460a09556e61727943616c6c121b2e677270632e7465737469" .
+ "6e672e53696d706c65526571756573741a1c2e677270632e74657374696e" .
+ "672e53696d706c65526573706f6e7365124e0a0d53747265616d696e6743" .
+ "616c6c121b2e677270632e74657374696e672e53696d706c655265717565" .
+ "73741a1c2e677270632e74657374696e672e53696d706c65526573706f6e" .
+ "7365280130013297020a0d576f726b65725365727669636512450a095275" .
+ "6e53657276657212182e677270632e74657374696e672e53657276657241" .
+ "7267731a1a2e677270632e74657374696e672e5365727665725374617475" .
+ "732801300112450a0952756e436c69656e7412182e677270632e74657374" .
+ "696e672e436c69656e74417267731a1a2e677270632e74657374696e672e" .
+ "436c69656e745374617475732801300112420a09436f7265436f756e7412" .
+ "192e677270632e74657374696e672e436f7265526571756573741a1a2e67" .
+ "7270632e74657374696e672e436f7265526573706f6e736512340a0a5175" .
+ "6974576f726b657212122e677270632e74657374696e672e566f69641a12" .
+ "2e677270632e74657374696e672e566f6964620670726f746f33"
+ ));
+
+ static::$is_initialized = true;
+ }
+}
+
diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Stats.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Stats.php
new file mode 100644
index 0000000000..99c0000a52
--- /dev/null
+++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Stats.php
@@ -0,0 +1,44 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/stats.proto
+
+namespace GPBMetadata\Src\Proto\Grpc\Testing;
+
+class Stats
+{
+ public static $is_initialized = false;
+
+ public static function initOnce() {
+ $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool();
+
+ if (static::$is_initialized == true) {
+ return;
+ }
+ $pool->internalAddGeneratedFile(hex2bin(
+ "0adf040a227372632f70726f746f2f677270632f74657374696e672f7374" .
+ "6174732e70726f746f120c677270632e74657374696e67227a0a0b536572" .
+ "766572537461747312140a0c74696d655f656c6170736564180120012801" .
+ "12110a0974696d655f7573657218022001280112130a0b74696d655f7379" .
+ "7374656d18032001280112160a0e746f74616c5f6370755f74696d651804" .
+ "2001280412150a0d69646c655f6370755f74696d65180520012804223b0a" .
+ "0f486973746f6772616d506172616d7312120a0a7265736f6c7574696f6e" .
+ "18012001280112140a0c6d61785f706f737369626c651802200128012277" .
+ "0a0d486973746f6772616d44617461120e0a066275636b65741801200328" .
+ "0d12100a086d696e5f7365656e18022001280112100a086d61785f736565" .
+ "6e180320012801120b0a0373756d18042001280112160a0e73756d5f6f66" .
+ "5f73717561726573180520012801120d0a05636f756e7418062001280122" .
+ "380a1252657175657374526573756c74436f756e7412130a0b7374617475" .
+ "735f636f6465180120012805120d0a05636f756e7418022001280322b601" .
+ "0a0b436c69656e745374617473122e0a096c6174656e6369657318012001" .
+ "280b321b2e677270632e74657374696e672e486973746f6772616d446174" .
+ "6112140a0c74696d655f656c617073656418022001280112110a0974696d" .
+ "655f7573657218032001280112130a0b74696d655f73797374656d180420" .
+ "01280112390a0f726571756573745f726573756c747318052003280b3220" .
+ "2e677270632e74657374696e672e52657175657374526573756c74436f75" .
+ "6e74620670726f746f33"
+ ));
+
+ static::$is_initialized = true;
+ }
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/BenchmarkServiceClient.php b/src/php/tests/qps/generated_code/Grpc/Testing/BenchmarkServiceClient.php
new file mode 100644
index 0000000000..daf17800cd
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/BenchmarkServiceClient.php
@@ -0,0 +1,78 @@
+<?php
+// GENERATED CODE -- DO NOT EDIT!
+
+// Original file comments:
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// An integration test service that covers all the method signature permutations
+// of unary/streaming requests/responses.
+namespace Grpc\Testing {
+
+ class BenchmarkServiceClient extends \Grpc\BaseStub {
+
+ /**
+ * @param string $hostname hostname
+ * @param array $opts channel options
+ * @param Grpc\Channel $channel (optional) re-use channel object
+ */
+ public function __construct($hostname, $opts, $channel = null) {
+ parent::__construct($hostname, $opts, $channel);
+ }
+
+ /**
+ * One request followed by one response.
+ * The server returns the client payload as-is.
+ * @param \Grpc\Testing\SimpleRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function UnaryCall(\Grpc\Testing\SimpleRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/grpc.testing.BenchmarkService/UnaryCall',
+ $argument,
+ ['\Grpc\Testing\SimpleResponse', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * One request followed by one response.
+ * The server returns the client payload as-is.
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function StreamingCall($metadata = [], $options = []) {
+ return $this->_bidiRequest('/grpc.testing.BenchmarkService/StreamingCall',
+ ['\Grpc\Testing\SimpleResponse','decode'],
+ $metadata, $options);
+ }
+
+ }
+
+}
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/BoolValue.php b/src/php/tests/qps/generated_code/Grpc/Testing/BoolValue.php
new file mode 100644
index 0000000000..f0497accfb
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/BoolValue.php
@@ -0,0 +1,62 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * TODO(dgq): Go back to using well-known types once
+ * https://github.com/grpc/grpc/issues/6980 has been fixed.
+ * import "google/protobuf/wrappers.proto";
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.BoolValue</code>
+ */
+class BoolValue extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * The bool value.
+ * </pre>
+ *
+ * <code>bool value = 1;</code>
+ */
+ private $value = false;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * The bool value.
+ * </pre>
+ *
+ * <code>bool value = 1;</code>
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * <pre>
+ * The bool value.
+ * </pre>
+ *
+ * <code>bool value = 1;</code>
+ */
+ public function setValue($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->value = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ByteBufferParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/ByteBufferParams.php
new file mode 100644
index 0000000000..0057d38748
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ByteBufferParams.php
@@ -0,0 +1,65 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/payloads.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ByteBufferParams</code>
+ */
+class ByteBufferParams extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>int32 req_size = 1;</code>
+ */
+ private $req_size = 0;
+ /**
+ * <code>int32 resp_size = 2;</code>
+ */
+ private $resp_size = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>int32 req_size = 1;</code>
+ */
+ public function getReqSize()
+ {
+ return $this->req_size;
+ }
+
+ /**
+ * <code>int32 req_size = 1;</code>
+ */
+ public function setReqSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->req_size = $var;
+ }
+
+ /**
+ * <code>int32 resp_size = 2;</code>
+ */
+ public function getRespSize()
+ {
+ return $this->resp_size;
+ }
+
+ /**
+ * <code>int32 resp_size = 2;</code>
+ */
+ public function setRespSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->resp_size = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ChannelArg.php b/src/php/tests/qps/generated_code/Grpc/Testing/ChannelArg.php
new file mode 100644
index 0000000000..d2fe3ae5ff
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ChannelArg.php
@@ -0,0 +1,84 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ChannelArg</code>
+ */
+class ChannelArg extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>string name = 1;</code>
+ */
+ private $name = '';
+ protected $value;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>string name = 1;</code>
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * <code>string name = 1;</code>
+ */
+ public function setName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->name = $var;
+ }
+
+ /**
+ * <code>string str_value = 2;</code>
+ */
+ public function getStrValue()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * <code>string str_value = 2;</code>
+ */
+ public function setStrValue($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->writeOneof(2, $var);
+ }
+
+ /**
+ * <code>int32 int_value = 3;</code>
+ */
+ public function getIntValue()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * <code>int32 int_value = 3;</code>
+ */
+ public function setIntValue($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->writeOneof(3, $var);
+ }
+
+ public function getValue()
+ {
+ return $this->whichOneof("value");
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientArgs.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientArgs.php
new file mode 100644
index 0000000000..c878c5a7bc
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientArgs.php
@@ -0,0 +1,63 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ClientArgs</code>
+ */
+class ClientArgs extends \Google\Protobuf\Internal\Message
+{
+ protected $argtype;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>.grpc.testing.ClientConfig setup = 1;</code>
+ */
+ public function getSetup()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * <code>.grpc.testing.ClientConfig setup = 1;</code>
+ */
+ public function setSetup(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ClientConfig::class);
+ $this->writeOneof(1, $var);
+ }
+
+ /**
+ * <code>.grpc.testing.Mark mark = 2;</code>
+ */
+ public function getMark()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * <code>.grpc.testing.Mark mark = 2;</code>
+ */
+ public function setMark(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\Mark::class);
+ $this->writeOneof(2, $var);
+ }
+
+ public function getArgtype()
+ {
+ return $this->whichOneof("argtype");
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientConfig.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientConfig.php
new file mode 100644
index 0000000000..52d6a75fb0
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientConfig.php
@@ -0,0 +1,407 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ClientConfig</code>
+ */
+class ClientConfig extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * List of targets to connect to. At least one target needs to be specified.
+ * </pre>
+ *
+ * <code>repeated string server_targets = 1;</code>
+ */
+ private $server_targets;
+ /**
+ * <code>.grpc.testing.ClientType client_type = 2;</code>
+ */
+ private $client_type = 0;
+ /**
+ * <code>.grpc.testing.SecurityParams security_params = 3;</code>
+ */
+ private $security_params = null;
+ /**
+ * <pre>
+ * How many concurrent RPCs to start for each channel.
+ * For synchronous client, use a separate thread for each outstanding RPC.
+ * </pre>
+ *
+ * <code>int32 outstanding_rpcs_per_channel = 4;</code>
+ */
+ private $outstanding_rpcs_per_channel = 0;
+ /**
+ * <pre>
+ * Number of independent client channels to create.
+ * i-th channel will connect to server_target[i % server_targets.size()]
+ * </pre>
+ *
+ * <code>int32 client_channels = 5;</code>
+ */
+ private $client_channels = 0;
+ /**
+ * <pre>
+ * Only for async client. Number of threads to use to start/manage RPCs.
+ * </pre>
+ *
+ * <code>int32 async_client_threads = 7;</code>
+ */
+ private $async_client_threads = 0;
+ /**
+ * <code>.grpc.testing.RpcType rpc_type = 8;</code>
+ */
+ private $rpc_type = 0;
+ /**
+ * <pre>
+ * The requested load for the entire client (aggregated over all the threads).
+ * </pre>
+ *
+ * <code>.grpc.testing.LoadParams load_params = 10;</code>
+ */
+ private $load_params = null;
+ /**
+ * <code>.grpc.testing.PayloadConfig payload_config = 11;</code>
+ */
+ private $payload_config = null;
+ /**
+ * <code>.grpc.testing.HistogramParams histogram_params = 12;</code>
+ */
+ private $histogram_params = null;
+ /**
+ * <pre>
+ * Specify the cores we should run the client on, if desired
+ * </pre>
+ *
+ * <code>repeated int32 core_list = 13;</code>
+ */
+ private $core_list;
+ /**
+ * <code>int32 core_limit = 14;</code>
+ */
+ private $core_limit = 0;
+ /**
+ * <pre>
+ * If we use an OTHER_CLIENT client_type, this string gives more detail
+ * </pre>
+ *
+ * <code>string other_client_api = 15;</code>
+ */
+ private $other_client_api = '';
+ /**
+ * <code>repeated .grpc.testing.ChannelArg channel_args = 16;</code>
+ */
+ private $channel_args;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * List of targets to connect to. At least one target needs to be specified.
+ * </pre>
+ *
+ * <code>repeated string server_targets = 1;</code>
+ */
+ public function getServerTargets()
+ {
+ return $this->server_targets;
+ }
+
+ /**
+ * <pre>
+ * List of targets to connect to. At least one target needs to be specified.
+ * </pre>
+ *
+ * <code>repeated string server_targets = 1;</code>
+ */
+ public function setServerTargets(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
+ $this->server_targets = $var;
+ }
+
+ /**
+ * <code>.grpc.testing.ClientType client_type = 2;</code>
+ */
+ public function getClientType()
+ {
+ return $this->client_type;
+ }
+
+ /**
+ * <code>.grpc.testing.ClientType client_type = 2;</code>
+ */
+ public function setClientType($var)
+ {
+ GPBUtil::checkEnum($var, \Grpc\Testing\ClientType::class);
+ $this->client_type = $var;
+ }
+
+ /**
+ * <code>.grpc.testing.SecurityParams security_params = 3;</code>
+ */
+ public function getSecurityParams()
+ {
+ return $this->security_params;
+ }
+
+ /**
+ * <code>.grpc.testing.SecurityParams security_params = 3;</code>
+ */
+ public function setSecurityParams(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\SecurityParams::class);
+ $this->security_params = $var;
+ }
+
+ /**
+ * <pre>
+ * How many concurrent RPCs to start for each channel.
+ * For synchronous client, use a separate thread for each outstanding RPC.
+ * </pre>
+ *
+ * <code>int32 outstanding_rpcs_per_channel = 4;</code>
+ */
+ public function getOutstandingRpcsPerChannel()
+ {
+ return $this->outstanding_rpcs_per_channel;
+ }
+
+ /**
+ * <pre>
+ * How many concurrent RPCs to start for each channel.
+ * For synchronous client, use a separate thread for each outstanding RPC.
+ * </pre>
+ *
+ * <code>int32 outstanding_rpcs_per_channel = 4;</code>
+ */
+ public function setOutstandingRpcsPerChannel($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->outstanding_rpcs_per_channel = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of independent client channels to create.
+ * i-th channel will connect to server_target[i % server_targets.size()]
+ * </pre>
+ *
+ * <code>int32 client_channels = 5;</code>
+ */
+ public function getClientChannels()
+ {
+ return $this->client_channels;
+ }
+
+ /**
+ * <pre>
+ * Number of independent client channels to create.
+ * i-th channel will connect to server_target[i % server_targets.size()]
+ * </pre>
+ *
+ * <code>int32 client_channels = 5;</code>
+ */
+ public function setClientChannels($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->client_channels = $var;
+ }
+
+ /**
+ * <pre>
+ * Only for async client. Number of threads to use to start/manage RPCs.
+ * </pre>
+ *
+ * <code>int32 async_client_threads = 7;</code>
+ */
+ public function getAsyncClientThreads()
+ {
+ return $this->async_client_threads;
+ }
+
+ /**
+ * <pre>
+ * Only for async client. Number of threads to use to start/manage RPCs.
+ * </pre>
+ *
+ * <code>int32 async_client_threads = 7;</code>
+ */
+ public function setAsyncClientThreads($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->async_client_threads = $var;
+ }
+
+ /**
+ * <code>.grpc.testing.RpcType rpc_type = 8;</code>
+ */
+ public function getRpcType()
+ {
+ return $this->rpc_type;
+ }
+
+ /**
+ * <code>.grpc.testing.RpcType rpc_type = 8;</code>
+ */
+ public function setRpcType($var)
+ {
+ GPBUtil::checkEnum($var, \Grpc\Testing\RpcType::class);
+ $this->rpc_type = $var;
+ }
+
+ /**
+ * <pre>
+ * The requested load for the entire client (aggregated over all the threads).
+ * </pre>
+ *
+ * <code>.grpc.testing.LoadParams load_params = 10;</code>
+ */
+ public function getLoadParams()
+ {
+ return $this->load_params;
+ }
+
+ /**
+ * <pre>
+ * The requested load for the entire client (aggregated over all the threads).
+ * </pre>
+ *
+ * <code>.grpc.testing.LoadParams load_params = 10;</code>
+ */
+ public function setLoadParams(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\LoadParams::class);
+ $this->load_params = $var;
+ }
+
+ /**
+ * <code>.grpc.testing.PayloadConfig payload_config = 11;</code>
+ */
+ public function getPayloadConfig()
+ {
+ return $this->payload_config;
+ }
+
+ /**
+ * <code>.grpc.testing.PayloadConfig payload_config = 11;</code>
+ */
+ public function setPayloadConfig(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\PayloadConfig::class);
+ $this->payload_config = $var;
+ }
+
+ /**
+ * <code>.grpc.testing.HistogramParams histogram_params = 12;</code>
+ */
+ public function getHistogramParams()
+ {
+ return $this->histogram_params;
+ }
+
+ /**
+ * <code>.grpc.testing.HistogramParams histogram_params = 12;</code>
+ */
+ public function setHistogramParams(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\HistogramParams::class);
+ $this->histogram_params = $var;
+ }
+
+ /**
+ * <pre>
+ * Specify the cores we should run the client on, if desired
+ * </pre>
+ *
+ * <code>repeated int32 core_list = 13;</code>
+ */
+ public function getCoreList()
+ {
+ return $this->core_list;
+ }
+
+ /**
+ * <pre>
+ * Specify the cores we should run the client on, if desired
+ * </pre>
+ *
+ * <code>repeated int32 core_list = 13;</code>
+ */
+ public function setCoreList(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32);
+ $this->core_list = $var;
+ }
+
+ /**
+ * <code>int32 core_limit = 14;</code>
+ */
+ public function getCoreLimit()
+ {
+ return $this->core_limit;
+ }
+
+ /**
+ * <code>int32 core_limit = 14;</code>
+ */
+ public function setCoreLimit($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->core_limit = $var;
+ }
+
+ /**
+ * <pre>
+ * If we use an OTHER_CLIENT client_type, this string gives more detail
+ * </pre>
+ *
+ * <code>string other_client_api = 15;</code>
+ */
+ public function getOtherClientApi()
+ {
+ return $this->other_client_api;
+ }
+
+ /**
+ * <pre>
+ * If we use an OTHER_CLIENT client_type, this string gives more detail
+ * </pre>
+ *
+ * <code>string other_client_api = 15;</code>
+ */
+ public function setOtherClientApi($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->other_client_api = $var;
+ }
+
+ /**
+ * <code>repeated .grpc.testing.ChannelArg channel_args = 16;</code>
+ */
+ public function getChannelArgs()
+ {
+ return $this->channel_args;
+ }
+
+ /**
+ * <code>repeated .grpc.testing.ChannelArg channel_args = 16;</code>
+ */
+ public function setChannelArgs(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ChannelArg::class);
+ $this->channel_args = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientStats.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStats.php
new file mode 100644
index 0000000000..8b9a0c33a4
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStats.php
@@ -0,0 +1,164 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/stats.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ClientStats</code>
+ */
+class ClientStats extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Latency histogram. Data points are in nanoseconds.
+ * </pre>
+ *
+ * <code>.grpc.testing.HistogramData latencies = 1;</code>
+ */
+ private $latencies = null;
+ /**
+ * <pre>
+ * See ServerStats for details.
+ * </pre>
+ *
+ * <code>double time_elapsed = 2;</code>
+ */
+ private $time_elapsed = 0.0;
+ /**
+ * <code>double time_user = 3;</code>
+ */
+ private $time_user = 0.0;
+ /**
+ * <code>double time_system = 4;</code>
+ */
+ private $time_system = 0.0;
+ /**
+ * <pre>
+ * Number of failed requests (one row per status code seen)
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.RequestResultCount request_results = 5;</code>
+ */
+ private $request_results;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Latency histogram. Data points are in nanoseconds.
+ * </pre>
+ *
+ * <code>.grpc.testing.HistogramData latencies = 1;</code>
+ */
+ public function getLatencies()
+ {
+ return $this->latencies;
+ }
+
+ /**
+ * <pre>
+ * Latency histogram. Data points are in nanoseconds.
+ * </pre>
+ *
+ * <code>.grpc.testing.HistogramData latencies = 1;</code>
+ */
+ public function setLatencies(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\HistogramData::class);
+ $this->latencies = $var;
+ }
+
+ /**
+ * <pre>
+ * See ServerStats for details.
+ * </pre>
+ *
+ * <code>double time_elapsed = 2;</code>
+ */
+ public function getTimeElapsed()
+ {
+ return $this->time_elapsed;
+ }
+
+ /**
+ * <pre>
+ * See ServerStats for details.
+ * </pre>
+ *
+ * <code>double time_elapsed = 2;</code>
+ */
+ public function setTimeElapsed($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->time_elapsed = $var;
+ }
+
+ /**
+ * <code>double time_user = 3;</code>
+ */
+ public function getTimeUser()
+ {
+ return $this->time_user;
+ }
+
+ /**
+ * <code>double time_user = 3;</code>
+ */
+ public function setTimeUser($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->time_user = $var;
+ }
+
+ /**
+ * <code>double time_system = 4;</code>
+ */
+ public function getTimeSystem()
+ {
+ return $this->time_system;
+ }
+
+ /**
+ * <code>double time_system = 4;</code>
+ */
+ public function setTimeSystem($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->time_system = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of failed requests (one row per status code seen)
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.RequestResultCount request_results = 5;</code>
+ */
+ public function getRequestResults()
+ {
+ return $this->request_results;
+ }
+
+ /**
+ * <pre>
+ * Number of failed requests (one row per status code seen)
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.RequestResultCount request_results = 5;</code>
+ */
+ public function setRequestResults(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\RequestResultCount::class);
+ $this->request_results = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientStatus.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStatus.php
new file mode 100644
index 0000000000..a59f87a962
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStatus.php
@@ -0,0 +1,44 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ClientStatus</code>
+ */
+class ClientStatus extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>.grpc.testing.ClientStats stats = 1;</code>
+ */
+ private $stats = null;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>.grpc.testing.ClientStats stats = 1;</code>
+ */
+ public function getStats()
+ {
+ return $this->stats;
+ }
+
+ /**
+ * <code>.grpc.testing.ClientStats stats = 1;</code>
+ */
+ public function setStats(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ClientStats::class);
+ $this->stats = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientType.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientType.php
new file mode 100644
index 0000000000..4f59da992f
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientType.php
@@ -0,0 +1,34 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+/**
+ * Protobuf enum <code>grpc.testing.ClientType</code>
+ */
+class ClientType
+{
+ /**
+ * <pre>
+ * Many languages support a basic distinction between using
+ * sync or async client, and this allows the specification
+ * </pre>
+ *
+ * <code>SYNC_CLIENT = 0;</code>
+ */
+ const SYNC_CLIENT = 0;
+ /**
+ * <code>ASYNC_CLIENT = 1;</code>
+ */
+ const ASYNC_CLIENT = 1;
+ /**
+ * <pre>
+ * used for some language-specific variants
+ * </pre>
+ *
+ * <code>OTHER_CLIENT = 2;</code>
+ */
+ const OTHER_CLIENT = 2;
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClosedLoopParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClosedLoopParams.php
new file mode 100644
index 0000000000..53f2948af2
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClosedLoopParams.php
@@ -0,0 +1,28 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Once an RPC finishes, immediately start a new one.
+ * No configuration parameters needed.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.ClosedLoopParams</code>
+ */
+class ClosedLoopParams extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ComplexProtoParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/ComplexProtoParams.php
new file mode 100644
index 0000000000..6d990f1b06
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ComplexProtoParams.php
@@ -0,0 +1,28 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/payloads.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * TODO (vpai): Fill this in once the details of complex, representative
+ * protos are decided
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.ComplexProtoParams</code>
+ */
+class ComplexProtoParams extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/CoreRequest.php b/src/php/tests/qps/generated_code/Grpc/Testing/CoreRequest.php
new file mode 100644
index 0000000000..2e078b3fcd
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/CoreRequest.php
@@ -0,0 +1,23 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.CoreRequest</code>
+ */
+class CoreRequest extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/CoreResponse.php b/src/php/tests/qps/generated_code/Grpc/Testing/CoreResponse.php
new file mode 100644
index 0000000000..85cb3418ad
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/CoreResponse.php
@@ -0,0 +1,56 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.CoreResponse</code>
+ */
+class CoreResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Number of cores available on the server
+ * </pre>
+ *
+ * <code>int32 cores = 1;</code>
+ */
+ private $cores = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Number of cores available on the server
+ * </pre>
+ *
+ * <code>int32 cores = 1;</code>
+ */
+ public function getCores()
+ {
+ return $this->cores;
+ }
+
+ /**
+ * <pre>
+ * Number of cores available on the server
+ * </pre>
+ *
+ * <code>int32 cores = 1;</code>
+ */
+ public function setCores($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->cores = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/EchoStatus.php b/src/php/tests/qps/generated_code/Grpc/Testing/EchoStatus.php
new file mode 100644
index 0000000000..27340fb0ef
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/EchoStatus.php
@@ -0,0 +1,70 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * A protobuf representation for grpc status. This is used by test
+ * clients to specify a status that the server should attempt to return.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.EchoStatus</code>
+ */
+class EchoStatus extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>int32 code = 1;</code>
+ */
+ private $code = 0;
+ /**
+ * <code>string message = 2;</code>
+ */
+ private $message = '';
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>int32 code = 1;</code>
+ */
+ public function getCode()
+ {
+ return $this->code;
+ }
+
+ /**
+ * <code>int32 code = 1;</code>
+ */
+ public function setCode($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->code = $var;
+ }
+
+ /**
+ * <code>string message = 2;</code>
+ */
+ public function getMessage()
+ {
+ return $this->message;
+ }
+
+ /**
+ * <code>string message = 2;</code>
+ */
+ public function setMessage($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->message = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/HistogramData.php b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramData.php
new file mode 100644
index 0000000000..056da6e5de
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramData.php
@@ -0,0 +1,153 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/stats.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Histogram data based on grpc/support/histogram.c
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.HistogramData</code>
+ */
+class HistogramData extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>repeated uint32 bucket = 1;</code>
+ */
+ private $bucket;
+ /**
+ * <code>double min_seen = 2;</code>
+ */
+ private $min_seen = 0.0;
+ /**
+ * <code>double max_seen = 3;</code>
+ */
+ private $max_seen = 0.0;
+ /**
+ * <code>double sum = 4;</code>
+ */
+ private $sum = 0.0;
+ /**
+ * <code>double sum_of_squares = 5;</code>
+ */
+ private $sum_of_squares = 0.0;
+ /**
+ * <code>double count = 6;</code>
+ */
+ private $count = 0.0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>repeated uint32 bucket = 1;</code>
+ */
+ public function getBucket()
+ {
+ return $this->bucket;
+ }
+
+ /**
+ * <code>repeated uint32 bucket = 1;</code>
+ */
+ public function setBucket(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::UINT32);
+ $this->bucket = $var;
+ }
+
+ /**
+ * <code>double min_seen = 2;</code>
+ */
+ public function getMinSeen()
+ {
+ return $this->min_seen;
+ }
+
+ /**
+ * <code>double min_seen = 2;</code>
+ */
+ public function setMinSeen($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->min_seen = $var;
+ }
+
+ /**
+ * <code>double max_seen = 3;</code>
+ */
+ public function getMaxSeen()
+ {
+ return $this->max_seen;
+ }
+
+ /**
+ * <code>double max_seen = 3;</code>
+ */
+ public function setMaxSeen($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->max_seen = $var;
+ }
+
+ /**
+ * <code>double sum = 4;</code>
+ */
+ public function getSum()
+ {
+ return $this->sum;
+ }
+
+ /**
+ * <code>double sum = 4;</code>
+ */
+ public function setSum($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->sum = $var;
+ }
+
+ /**
+ * <code>double sum_of_squares = 5;</code>
+ */
+ public function getSumOfSquares()
+ {
+ return $this->sum_of_squares;
+ }
+
+ /**
+ * <code>double sum_of_squares = 5;</code>
+ */
+ public function setSumOfSquares($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->sum_of_squares = $var;
+ }
+
+ /**
+ * <code>double count = 6;</code>
+ */
+ public function getCount()
+ {
+ return $this->count;
+ }
+
+ /**
+ * <code>double count = 6;</code>
+ */
+ public function setCount($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->count = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/HistogramParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramParams.php
new file mode 100644
index 0000000000..836c94b01d
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramParams.php
@@ -0,0 +1,93 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/stats.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Histogram params based on grpc/support/histogram.c
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.HistogramParams</code>
+ */
+class HistogramParams extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * first bucket is [0, 1 + resolution)
+ * </pre>
+ *
+ * <code>double resolution = 1;</code>
+ */
+ private $resolution = 0.0;
+ /**
+ * <pre>
+ * use enough buckets to allow this value
+ * </pre>
+ *
+ * <code>double max_possible = 2;</code>
+ */
+ private $max_possible = 0.0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * first bucket is [0, 1 + resolution)
+ * </pre>
+ *
+ * <code>double resolution = 1;</code>
+ */
+ public function getResolution()
+ {
+ return $this->resolution;
+ }
+
+ /**
+ * <pre>
+ * first bucket is [0, 1 + resolution)
+ * </pre>
+ *
+ * <code>double resolution = 1;</code>
+ */
+ public function setResolution($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->resolution = $var;
+ }
+
+ /**
+ * <pre>
+ * use enough buckets to allow this value
+ * </pre>
+ *
+ * <code>double max_possible = 2;</code>
+ */
+ public function getMaxPossible()
+ {
+ return $this->max_possible;
+ }
+
+ /**
+ * <pre>
+ * use enough buckets to allow this value
+ * </pre>
+ *
+ * <code>double max_possible = 2;</code>
+ */
+ public function setMaxPossible($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->max_possible = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/LoadParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/LoadParams.php
new file mode 100644
index 0000000000..1f32e49c8a
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/LoadParams.php
@@ -0,0 +1,63 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.LoadParams</code>
+ */
+class LoadParams extends \Google\Protobuf\Internal\Message
+{
+ protected $load;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>.grpc.testing.ClosedLoopParams closed_loop = 1;</code>
+ */
+ public function getClosedLoop()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * <code>.grpc.testing.ClosedLoopParams closed_loop = 1;</code>
+ */
+ public function setClosedLoop(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ClosedLoopParams::class);
+ $this->writeOneof(1, $var);
+ }
+
+ /**
+ * <code>.grpc.testing.PoissonParams poisson = 2;</code>
+ */
+ public function getPoisson()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * <code>.grpc.testing.PoissonParams poisson = 2;</code>
+ */
+ public function setPoisson(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\PoissonParams::class);
+ $this->writeOneof(2, $var);
+ }
+
+ public function getLoad()
+ {
+ return $this->whichOneof("load");
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Mark.php b/src/php/tests/qps/generated_code/Grpc/Testing/Mark.php
new file mode 100644
index 0000000000..ce006efacd
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/Mark.php
@@ -0,0 +1,60 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Request current stats
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.Mark</code>
+ */
+class Mark extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * if true, the stats will be reset after taking their snapshot.
+ * </pre>
+ *
+ * <code>bool reset = 1;</code>
+ */
+ private $reset = false;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * if true, the stats will be reset after taking their snapshot.
+ * </pre>
+ *
+ * <code>bool reset = 1;</code>
+ */
+ public function getReset()
+ {
+ return $this->reset;
+ }
+
+ /**
+ * <pre>
+ * if true, the stats will be reset after taking their snapshot.
+ * </pre>
+ *
+ * <code>bool reset = 1;</code>
+ */
+ public function setReset($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->reset = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Payload.php b/src/php/tests/qps/generated_code/Grpc/Testing/Payload.php
new file mode 100644
index 0000000000..d17c271af7
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/Payload.php
@@ -0,0 +1,96 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * A block of data, to simply increase gRPC message size.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.Payload</code>
+ */
+class Payload extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * The type of data in body.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType type = 1;</code>
+ */
+ private $type = 0;
+ /**
+ * <pre>
+ * Primary contents of payload.
+ * </pre>
+ *
+ * <code>bytes body = 2;</code>
+ */
+ private $body = '';
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * The type of data in body.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType type = 1;</code>
+ */
+ public function getType()
+ {
+ return $this->type;
+ }
+
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * The type of data in body.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType type = 1;</code>
+ */
+ public function setType($var)
+ {
+ GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class);
+ $this->type = $var;
+ }
+
+ /**
+ * <pre>
+ * Primary contents of payload.
+ * </pre>
+ *
+ * <code>bytes body = 2;</code>
+ */
+ public function getBody()
+ {
+ return $this->body;
+ }
+
+ /**
+ * <pre>
+ * Primary contents of payload.
+ * </pre>
+ *
+ * <code>bytes body = 2;</code>
+ */
+ public function setBody($var)
+ {
+ GPBUtil::checkString($var, False);
+ $this->body = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/PayloadConfig.php b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadConfig.php
new file mode 100644
index 0000000000..a2fe7109ba
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadConfig.php
@@ -0,0 +1,80 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/payloads.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.PayloadConfig</code>
+ */
+class PayloadConfig extends \Google\Protobuf\Internal\Message
+{
+ protected $payload;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>.grpc.testing.ByteBufferParams bytebuf_params = 1;</code>
+ */
+ public function getBytebufParams()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * <code>.grpc.testing.ByteBufferParams bytebuf_params = 1;</code>
+ */
+ public function setBytebufParams(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ByteBufferParams::class);
+ $this->writeOneof(1, $var);
+ }
+
+ /**
+ * <code>.grpc.testing.SimpleProtoParams simple_params = 2;</code>
+ */
+ public function getSimpleParams()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * <code>.grpc.testing.SimpleProtoParams simple_params = 2;</code>
+ */
+ public function setSimpleParams(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\SimpleProtoParams::class);
+ $this->writeOneof(2, $var);
+ }
+
+ /**
+ * <code>.grpc.testing.ComplexProtoParams complex_params = 3;</code>
+ */
+ public function getComplexParams()
+ {
+ return $this->readOneof(3);
+ }
+
+ /**
+ * <code>.grpc.testing.ComplexProtoParams complex_params = 3;</code>
+ */
+ public function setComplexParams(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ComplexProtoParams::class);
+ $this->writeOneof(3, $var);
+ }
+
+ public function getPayload()
+ {
+ return $this->whichOneof("payload");
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/PayloadType.php b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadType.php
new file mode 100644
index 0000000000..189ef034b4
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadType.php
@@ -0,0 +1,26 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+/**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * The type of payload that should be returned.
+ * </pre>
+ *
+ * Protobuf enum <code>grpc.testing.PayloadType</code>
+ */
+class PayloadType
+{
+ /**
+ * <pre>
+ * Compressable text format.
+ * </pre>
+ *
+ * <code>COMPRESSABLE = 0;</code>
+ */
+ const COMPRESSABLE = 0;
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/PoissonParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/PoissonParams.php
new file mode 100644
index 0000000000..d64edd45f0
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/PoissonParams.php
@@ -0,0 +1,61 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Parameters of poisson process distribution, which is a good representation
+ * of activity coming in from independent identical stationary sources.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.PoissonParams</code>
+ */
+class PoissonParams extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
+ * </pre>
+ *
+ * <code>double offered_load = 1;</code>
+ */
+ private $offered_load = 0.0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
+ * </pre>
+ *
+ * <code>double offered_load = 1;</code>
+ */
+ public function getOfferedLoad()
+ {
+ return $this->offered_load;
+ }
+
+ /**
+ * <pre>
+ * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
+ * </pre>
+ *
+ * <code>double offered_load = 1;</code>
+ */
+ public function setOfferedLoad($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->offered_load = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ProxyClientServiceClient.php b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyClientServiceClient.php
new file mode 100644
index 0000000000..23c041b470
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyClientServiceClient.php
@@ -0,0 +1,72 @@
+<?php
+// GENERATED CODE -- DO NOT EDIT!
+
+// Original file comments:
+// Copyright 2017, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+namespace Grpc\Testing {
+
+ class ProxyClientServiceClient extends \Grpc\BaseStub {
+
+ /**
+ * @param string $hostname hostname
+ * @param array $opts channel options
+ * @param Grpc\Channel $channel (optional) re-use channel object
+ */
+ public function __construct($hostname, $opts, $channel = null) {
+ parent::__construct($hostname, $opts, $channel);
+ }
+
+ /**
+ * @param \Grpc\Testing\Void $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function GetConfig(\Grpc\Testing\Void $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/grpc.testing.ProxyClientService/GetConfig',
+ $argument,
+ ['\Grpc\Testing\ClientConfig', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function ReportTime($metadata = [], $options = []) {
+ return $this->_clientStreamRequest('/grpc.testing.ProxyClientService/ReportTime',
+ ['\Grpc\Testing\Void','decode'],
+ $metadata, $options);
+ }
+
+ }
+
+}
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ProxyStat.php b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyStat.php
new file mode 100644
index 0000000000..ed43be99ce
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyStat.php
@@ -0,0 +1,44 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/proxy-service.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ProxyStat</code>
+ */
+class ProxyStat extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>double latency = 1;</code>
+ */
+ private $latency = 0.0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\ProxyService::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>double latency = 1;</code>
+ */
+ public function getLatency()
+ {
+ return $this->latency;
+ }
+
+ /**
+ * <code>double latency = 1;</code>
+ */
+ public function setLatency($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->latency = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectInfo.php b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectInfo.php
new file mode 100644
index 0000000000..dfaaa606c3
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectInfo.php
@@ -0,0 +1,71 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * For reconnect interop test only.
+ * Server tells client whether its reconnects are following the spec and the
+ * reconnect backoffs it saw.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.ReconnectInfo</code>
+ */
+class ReconnectInfo extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>bool passed = 1;</code>
+ */
+ private $passed = false;
+ /**
+ * <code>repeated int32 backoff_ms = 2;</code>
+ */
+ private $backoff_ms;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>bool passed = 1;</code>
+ */
+ public function getPassed()
+ {
+ return $this->passed;
+ }
+
+ /**
+ * <code>bool passed = 1;</code>
+ */
+ public function setPassed($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->passed = $var;
+ }
+
+ /**
+ * <code>repeated int32 backoff_ms = 2;</code>
+ */
+ public function getBackoffMs()
+ {
+ return $this->backoff_ms;
+ }
+
+ /**
+ * <code>repeated int32 backoff_ms = 2;</code>
+ */
+ public function setBackoffMs(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32);
+ $this->backoff_ms = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectParams.php
new file mode 100644
index 0000000000..9715855783
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectParams.php
@@ -0,0 +1,49 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * For reconnect interop test only.
+ * Client tells server what reconnection parameters it used.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.ReconnectParams</code>
+ */
+class ReconnectParams extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>int32 max_reconnect_backoff_ms = 1;</code>
+ */
+ private $max_reconnect_backoff_ms = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>int32 max_reconnect_backoff_ms = 1;</code>
+ */
+ public function getMaxReconnectBackoffMs()
+ {
+ return $this->max_reconnect_backoff_ms;
+ }
+
+ /**
+ * <code>int32 max_reconnect_backoff_ms = 1;</code>
+ */
+ public function setMaxReconnectBackoffMs($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->max_reconnect_backoff_ms = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/RequestResultCount.php b/src/php/tests/qps/generated_code/Grpc/Testing/RequestResultCount.php
new file mode 100644
index 0000000000..1be42b2ac9
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/RequestResultCount.php
@@ -0,0 +1,65 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/stats.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.RequestResultCount</code>
+ */
+class RequestResultCount extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>int32 status_code = 1;</code>
+ */
+ private $status_code = 0;
+ /**
+ * <code>int64 count = 2;</code>
+ */
+ private $count = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>int32 status_code = 1;</code>
+ */
+ public function getStatusCode()
+ {
+ return $this->status_code;
+ }
+
+ /**
+ * <code>int32 status_code = 1;</code>
+ */
+ public function setStatusCode($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->status_code = $var;
+ }
+
+ /**
+ * <code>int64 count = 2;</code>
+ */
+ public function getCount()
+ {
+ return $this->count;
+ }
+
+ /**
+ * <code>int64 count = 2;</code>
+ */
+ public function setCount($var)
+ {
+ GPBUtil::checkInt64($var);
+ $this->count = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ResponseParameters.php b/src/php/tests/qps/generated_code/Grpc/Testing/ResponseParameters.php
new file mode 100644
index 0000000000..b7a8e5ece7
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ResponseParameters.php
@@ -0,0 +1,138 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Configuration for a particular response.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.ResponseParameters</code>
+ */
+class ResponseParameters extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Desired payload sizes in responses from the server.
+ * </pre>
+ *
+ * <code>int32 size = 1;</code>
+ */
+ private $size = 0;
+ /**
+ * <pre>
+ * Desired interval between consecutive responses in the response stream in
+ * microseconds.
+ * </pre>
+ *
+ * <code>int32 interval_us = 2;</code>
+ */
+ private $interval_us = 0;
+ /**
+ * <pre>
+ * Whether to request the server to compress the response. This field is
+ * "nullable" in order to interoperate seamlessly with clients not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the response's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue compressed = 3;</code>
+ */
+ private $compressed = null;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Desired payload sizes in responses from the server.
+ * </pre>
+ *
+ * <code>int32 size = 1;</code>
+ */
+ public function getSize()
+ {
+ return $this->size;
+ }
+
+ /**
+ * <pre>
+ * Desired payload sizes in responses from the server.
+ * </pre>
+ *
+ * <code>int32 size = 1;</code>
+ */
+ public function setSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->size = $var;
+ }
+
+ /**
+ * <pre>
+ * Desired interval between consecutive responses in the response stream in
+ * microseconds.
+ * </pre>
+ *
+ * <code>int32 interval_us = 2;</code>
+ */
+ public function getIntervalUs()
+ {
+ return $this->interval_us;
+ }
+
+ /**
+ * <pre>
+ * Desired interval between consecutive responses in the response stream in
+ * microseconds.
+ * </pre>
+ *
+ * <code>int32 interval_us = 2;</code>
+ */
+ public function setIntervalUs($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->interval_us = $var;
+ }
+
+ /**
+ * <pre>
+ * Whether to request the server to compress the response. This field is
+ * "nullable" in order to interoperate seamlessly with clients not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the response's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue compressed = 3;</code>
+ */
+ public function getCompressed()
+ {
+ return $this->compressed;
+ }
+
+ /**
+ * <pre>
+ * Whether to request the server to compress the response. This field is
+ * "nullable" in order to interoperate seamlessly with clients not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the response's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue compressed = 3;</code>
+ */
+ public function setCompressed(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class);
+ $this->compressed = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/RpcType.php b/src/php/tests/qps/generated_code/Grpc/Testing/RpcType.php
new file mode 100644
index 0000000000..2e664fff47
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/RpcType.php
@@ -0,0 +1,21 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+/**
+ * Protobuf enum <code>grpc.testing.RpcType</code>
+ */
+class RpcType
+{
+ /**
+ * <code>UNARY = 0;</code>
+ */
+ const UNARY = 0;
+ /**
+ * <code>STREAMING = 1;</code>
+ */
+ const STREAMING = 1;
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Scenario.php b/src/php/tests/qps/generated_code/Grpc/Testing/Scenario.php
new file mode 100644
index 0000000000..136ed299ea
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/Scenario.php
@@ -0,0 +1,291 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * A single performance scenario: input to qps_json_driver
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.Scenario</code>
+ */
+class Scenario extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Human readable name for this scenario
+ * </pre>
+ *
+ * <code>string name = 1;</code>
+ */
+ private $name = '';
+ /**
+ * <pre>
+ * Client configuration
+ * </pre>
+ *
+ * <code>.grpc.testing.ClientConfig client_config = 2;</code>
+ */
+ private $client_config = null;
+ /**
+ * <pre>
+ * Number of clients to start for the test
+ * </pre>
+ *
+ * <code>int32 num_clients = 3;</code>
+ */
+ private $num_clients = 0;
+ /**
+ * <pre>
+ * Server configuration
+ * </pre>
+ *
+ * <code>.grpc.testing.ServerConfig server_config = 4;</code>
+ */
+ private $server_config = null;
+ /**
+ * <pre>
+ * Number of servers to start for the test
+ * </pre>
+ *
+ * <code>int32 num_servers = 5;</code>
+ */
+ private $num_servers = 0;
+ /**
+ * <pre>
+ * Warmup period, in seconds
+ * </pre>
+ *
+ * <code>int32 warmup_seconds = 6;</code>
+ */
+ private $warmup_seconds = 0;
+ /**
+ * <pre>
+ * Benchmark time, in seconds
+ * </pre>
+ *
+ * <code>int32 benchmark_seconds = 7;</code>
+ */
+ private $benchmark_seconds = 0;
+ /**
+ * <pre>
+ * Number of workers to spawn locally (usually zero)
+ * </pre>
+ *
+ * <code>int32 spawn_local_worker_count = 8;</code>
+ */
+ private $spawn_local_worker_count = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Human readable name for this scenario
+ * </pre>
+ *
+ * <code>string name = 1;</code>
+ */
+ public function getName()
+ {
+ return $this->name;
+ }
+
+ /**
+ * <pre>
+ * Human readable name for this scenario
+ * </pre>
+ *
+ * <code>string name = 1;</code>
+ */
+ public function setName($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->name = $var;
+ }
+
+ /**
+ * <pre>
+ * Client configuration
+ * </pre>
+ *
+ * <code>.grpc.testing.ClientConfig client_config = 2;</code>
+ */
+ public function getClientConfig()
+ {
+ return $this->client_config;
+ }
+
+ /**
+ * <pre>
+ * Client configuration
+ * </pre>
+ *
+ * <code>.grpc.testing.ClientConfig client_config = 2;</code>
+ */
+ public function setClientConfig(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ClientConfig::class);
+ $this->client_config = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of clients to start for the test
+ * </pre>
+ *
+ * <code>int32 num_clients = 3;</code>
+ */
+ public function getNumClients()
+ {
+ return $this->num_clients;
+ }
+
+ /**
+ * <pre>
+ * Number of clients to start for the test
+ * </pre>
+ *
+ * <code>int32 num_clients = 3;</code>
+ */
+ public function setNumClients($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->num_clients = $var;
+ }
+
+ /**
+ * <pre>
+ * Server configuration
+ * </pre>
+ *
+ * <code>.grpc.testing.ServerConfig server_config = 4;</code>
+ */
+ public function getServerConfig()
+ {
+ return $this->server_config;
+ }
+
+ /**
+ * <pre>
+ * Server configuration
+ * </pre>
+ *
+ * <code>.grpc.testing.ServerConfig server_config = 4;</code>
+ */
+ public function setServerConfig(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ServerConfig::class);
+ $this->server_config = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of servers to start for the test
+ * </pre>
+ *
+ * <code>int32 num_servers = 5;</code>
+ */
+ public function getNumServers()
+ {
+ return $this->num_servers;
+ }
+
+ /**
+ * <pre>
+ * Number of servers to start for the test
+ * </pre>
+ *
+ * <code>int32 num_servers = 5;</code>
+ */
+ public function setNumServers($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->num_servers = $var;
+ }
+
+ /**
+ * <pre>
+ * Warmup period, in seconds
+ * </pre>
+ *
+ * <code>int32 warmup_seconds = 6;</code>
+ */
+ public function getWarmupSeconds()
+ {
+ return $this->warmup_seconds;
+ }
+
+ /**
+ * <pre>
+ * Warmup period, in seconds
+ * </pre>
+ *
+ * <code>int32 warmup_seconds = 6;</code>
+ */
+ public function setWarmupSeconds($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->warmup_seconds = $var;
+ }
+
+ /**
+ * <pre>
+ * Benchmark time, in seconds
+ * </pre>
+ *
+ * <code>int32 benchmark_seconds = 7;</code>
+ */
+ public function getBenchmarkSeconds()
+ {
+ return $this->benchmark_seconds;
+ }
+
+ /**
+ * <pre>
+ * Benchmark time, in seconds
+ * </pre>
+ *
+ * <code>int32 benchmark_seconds = 7;</code>
+ */
+ public function setBenchmarkSeconds($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->benchmark_seconds = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of workers to spawn locally (usually zero)
+ * </pre>
+ *
+ * <code>int32 spawn_local_worker_count = 8;</code>
+ */
+ public function getSpawnLocalWorkerCount()
+ {
+ return $this->spawn_local_worker_count;
+ }
+
+ /**
+ * <pre>
+ * Number of workers to spawn locally (usually zero)
+ * </pre>
+ *
+ * <code>int32 spawn_local_worker_count = 8;</code>
+ */
+ public function setSpawnLocalWorkerCount($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->spawn_local_worker_count = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResult.php b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResult.php
new file mode 100644
index 0000000000..809cd96244
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResult.php
@@ -0,0 +1,312 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Results of a single benchmark scenario.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.ScenarioResult</code>
+ */
+class ScenarioResult extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Inputs used to run the scenario.
+ * </pre>
+ *
+ * <code>.grpc.testing.Scenario scenario = 1;</code>
+ */
+ private $scenario = null;
+ /**
+ * <pre>
+ * Histograms from all clients merged into one histogram.
+ * </pre>
+ *
+ * <code>.grpc.testing.HistogramData latencies = 2;</code>
+ */
+ private $latencies = null;
+ /**
+ * <pre>
+ * Client stats for each client
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ClientStats client_stats = 3;</code>
+ */
+ private $client_stats;
+ /**
+ * <pre>
+ * Server stats for each server
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ServerStats server_stats = 4;</code>
+ */
+ private $server_stats;
+ /**
+ * <pre>
+ * Number of cores available to each server
+ * </pre>
+ *
+ * <code>repeated int32 server_cores = 5;</code>
+ */
+ private $server_cores;
+ /**
+ * <pre>
+ * An after-the-fact computed summary
+ * </pre>
+ *
+ * <code>.grpc.testing.ScenarioResultSummary summary = 6;</code>
+ */
+ private $summary = null;
+ /**
+ * <pre>
+ * Information on success or failure of each worker
+ * </pre>
+ *
+ * <code>repeated bool client_success = 7;</code>
+ */
+ private $client_success;
+ /**
+ * <code>repeated bool server_success = 8;</code>
+ */
+ private $server_success;
+ /**
+ * <pre>
+ * Number of failed requests (one row per status code seen)
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.RequestResultCount request_results = 9;</code>
+ */
+ private $request_results;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Inputs used to run the scenario.
+ * </pre>
+ *
+ * <code>.grpc.testing.Scenario scenario = 1;</code>
+ */
+ public function getScenario()
+ {
+ return $this->scenario;
+ }
+
+ /**
+ * <pre>
+ * Inputs used to run the scenario.
+ * </pre>
+ *
+ * <code>.grpc.testing.Scenario scenario = 1;</code>
+ */
+ public function setScenario(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\Scenario::class);
+ $this->scenario = $var;
+ }
+
+ /**
+ * <pre>
+ * Histograms from all clients merged into one histogram.
+ * </pre>
+ *
+ * <code>.grpc.testing.HistogramData latencies = 2;</code>
+ */
+ public function getLatencies()
+ {
+ return $this->latencies;
+ }
+
+ /**
+ * <pre>
+ * Histograms from all clients merged into one histogram.
+ * </pre>
+ *
+ * <code>.grpc.testing.HistogramData latencies = 2;</code>
+ */
+ public function setLatencies(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\HistogramData::class);
+ $this->latencies = $var;
+ }
+
+ /**
+ * <pre>
+ * Client stats for each client
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ClientStats client_stats = 3;</code>
+ */
+ public function getClientStats()
+ {
+ return $this->client_stats;
+ }
+
+ /**
+ * <pre>
+ * Client stats for each client
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ClientStats client_stats = 3;</code>
+ */
+ public function setClientStats(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ClientStats::class);
+ $this->client_stats = $var;
+ }
+
+ /**
+ * <pre>
+ * Server stats for each server
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ServerStats server_stats = 4;</code>
+ */
+ public function getServerStats()
+ {
+ return $this->server_stats;
+ }
+
+ /**
+ * <pre>
+ * Server stats for each server
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ServerStats server_stats = 4;</code>
+ */
+ public function setServerStats(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ServerStats::class);
+ $this->server_stats = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of cores available to each server
+ * </pre>
+ *
+ * <code>repeated int32 server_cores = 5;</code>
+ */
+ public function getServerCores()
+ {
+ return $this->server_cores;
+ }
+
+ /**
+ * <pre>
+ * Number of cores available to each server
+ * </pre>
+ *
+ * <code>repeated int32 server_cores = 5;</code>
+ */
+ public function setServerCores(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32);
+ $this->server_cores = $var;
+ }
+
+ /**
+ * <pre>
+ * An after-the-fact computed summary
+ * </pre>
+ *
+ * <code>.grpc.testing.ScenarioResultSummary summary = 6;</code>
+ */
+ public function getSummary()
+ {
+ return $this->summary;
+ }
+
+ /**
+ * <pre>
+ * An after-the-fact computed summary
+ * </pre>
+ *
+ * <code>.grpc.testing.ScenarioResultSummary summary = 6;</code>
+ */
+ public function setSummary(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ScenarioResultSummary::class);
+ $this->summary = $var;
+ }
+
+ /**
+ * <pre>
+ * Information on success or failure of each worker
+ * </pre>
+ *
+ * <code>repeated bool client_success = 7;</code>
+ */
+ public function getClientSuccess()
+ {
+ return $this->client_success;
+ }
+
+ /**
+ * <pre>
+ * Information on success or failure of each worker
+ * </pre>
+ *
+ * <code>repeated bool client_success = 7;</code>
+ */
+ public function setClientSuccess(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::BOOL);
+ $this->client_success = $var;
+ }
+
+ /**
+ * <code>repeated bool server_success = 8;</code>
+ */
+ public function getServerSuccess()
+ {
+ return $this->server_success;
+ }
+
+ /**
+ * <code>repeated bool server_success = 8;</code>
+ */
+ public function setServerSuccess(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::BOOL);
+ $this->server_success = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of failed requests (one row per status code seen)
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.RequestResultCount request_results = 9;</code>
+ */
+ public function getRequestResults()
+ {
+ return $this->request_results;
+ }
+
+ /**
+ * <pre>
+ * Number of failed requests (one row per status code seen)
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.RequestResultCount request_results = 9;</code>
+ */
+ public function setRequestResults(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\RequestResultCount::class);
+ $this->request_results = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResultSummary.php b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResultSummary.php
new file mode 100644
index 0000000000..7520cff78e
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResultSummary.php
@@ -0,0 +1,430 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Basic summary that can be computed from ClientStats and ServerStats
+ * once the scenario has finished.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.ScenarioResultSummary</code>
+ */
+class ScenarioResultSummary extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Total number of operations per second over all clients.
+ * </pre>
+ *
+ * <code>double qps = 1;</code>
+ */
+ private $qps = 0.0;
+ /**
+ * <pre>
+ * QPS per one server core.
+ * </pre>
+ *
+ * <code>double qps_per_server_core = 2;</code>
+ */
+ private $qps_per_server_core = 0.0;
+ /**
+ * <pre>
+ * server load based on system_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double server_system_time = 3;</code>
+ */
+ private $server_system_time = 0.0;
+ /**
+ * <pre>
+ * server load based on user_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double server_user_time = 4;</code>
+ */
+ private $server_user_time = 0.0;
+ /**
+ * <pre>
+ * client load based on system_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double client_system_time = 5;</code>
+ */
+ private $client_system_time = 0.0;
+ /**
+ * <pre>
+ * client load based on user_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double client_user_time = 6;</code>
+ */
+ private $client_user_time = 0.0;
+ /**
+ * <pre>
+ * X% latency percentiles (in nanoseconds)
+ * </pre>
+ *
+ * <code>double latency_50 = 7;</code>
+ */
+ private $latency_50 = 0.0;
+ /**
+ * <code>double latency_90 = 8;</code>
+ */
+ private $latency_90 = 0.0;
+ /**
+ * <code>double latency_95 = 9;</code>
+ */
+ private $latency_95 = 0.0;
+ /**
+ * <code>double latency_99 = 10;</code>
+ */
+ private $latency_99 = 0.0;
+ /**
+ * <code>double latency_999 = 11;</code>
+ */
+ private $latency_999 = 0.0;
+ /**
+ * <pre>
+ * server cpu usage percentage
+ * </pre>
+ *
+ * <code>double server_cpu_usage = 12;</code>
+ */
+ private $server_cpu_usage = 0.0;
+ /**
+ * <pre>
+ * Number of requests that succeeded/failed
+ * </pre>
+ *
+ * <code>double successful_requests_per_second = 13;</code>
+ */
+ private $successful_requests_per_second = 0.0;
+ /**
+ * <code>double failed_requests_per_second = 14;</code>
+ */
+ private $failed_requests_per_second = 0.0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Total number of operations per second over all clients.
+ * </pre>
+ *
+ * <code>double qps = 1;</code>
+ */
+ public function getQps()
+ {
+ return $this->qps;
+ }
+
+ /**
+ * <pre>
+ * Total number of operations per second over all clients.
+ * </pre>
+ *
+ * <code>double qps = 1;</code>
+ */
+ public function setQps($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->qps = $var;
+ }
+
+ /**
+ * <pre>
+ * QPS per one server core.
+ * </pre>
+ *
+ * <code>double qps_per_server_core = 2;</code>
+ */
+ public function getQpsPerServerCore()
+ {
+ return $this->qps_per_server_core;
+ }
+
+ /**
+ * <pre>
+ * QPS per one server core.
+ * </pre>
+ *
+ * <code>double qps_per_server_core = 2;</code>
+ */
+ public function setQpsPerServerCore($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->qps_per_server_core = $var;
+ }
+
+ /**
+ * <pre>
+ * server load based on system_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double server_system_time = 3;</code>
+ */
+ public function getServerSystemTime()
+ {
+ return $this->server_system_time;
+ }
+
+ /**
+ * <pre>
+ * server load based on system_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double server_system_time = 3;</code>
+ */
+ public function setServerSystemTime($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->server_system_time = $var;
+ }
+
+ /**
+ * <pre>
+ * server load based on user_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double server_user_time = 4;</code>
+ */
+ public function getServerUserTime()
+ {
+ return $this->server_user_time;
+ }
+
+ /**
+ * <pre>
+ * server load based on user_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double server_user_time = 4;</code>
+ */
+ public function setServerUserTime($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->server_user_time = $var;
+ }
+
+ /**
+ * <pre>
+ * client load based on system_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double client_system_time = 5;</code>
+ */
+ public function getClientSystemTime()
+ {
+ return $this->client_system_time;
+ }
+
+ /**
+ * <pre>
+ * client load based on system_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double client_system_time = 5;</code>
+ */
+ public function setClientSystemTime($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->client_system_time = $var;
+ }
+
+ /**
+ * <pre>
+ * client load based on user_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double client_user_time = 6;</code>
+ */
+ public function getClientUserTime()
+ {
+ return $this->client_user_time;
+ }
+
+ /**
+ * <pre>
+ * client load based on user_time (0.85 =&gt; 85%)
+ * </pre>
+ *
+ * <code>double client_user_time = 6;</code>
+ */
+ public function setClientUserTime($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->client_user_time = $var;
+ }
+
+ /**
+ * <pre>
+ * X% latency percentiles (in nanoseconds)
+ * </pre>
+ *
+ * <code>double latency_50 = 7;</code>
+ */
+ public function getLatency50()
+ {
+ return $this->latency_50;
+ }
+
+ /**
+ * <pre>
+ * X% latency percentiles (in nanoseconds)
+ * </pre>
+ *
+ * <code>double latency_50 = 7;</code>
+ */
+ public function setLatency50($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->latency_50 = $var;
+ }
+
+ /**
+ * <code>double latency_90 = 8;</code>
+ */
+ public function getLatency90()
+ {
+ return $this->latency_90;
+ }
+
+ /**
+ * <code>double latency_90 = 8;</code>
+ */
+ public function setLatency90($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->latency_90 = $var;
+ }
+
+ /**
+ * <code>double latency_95 = 9;</code>
+ */
+ public function getLatency95()
+ {
+ return $this->latency_95;
+ }
+
+ /**
+ * <code>double latency_95 = 9;</code>
+ */
+ public function setLatency95($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->latency_95 = $var;
+ }
+
+ /**
+ * <code>double latency_99 = 10;</code>
+ */
+ public function getLatency99()
+ {
+ return $this->latency_99;
+ }
+
+ /**
+ * <code>double latency_99 = 10;</code>
+ */
+ public function setLatency99($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->latency_99 = $var;
+ }
+
+ /**
+ * <code>double latency_999 = 11;</code>
+ */
+ public function getLatency999()
+ {
+ return $this->latency_999;
+ }
+
+ /**
+ * <code>double latency_999 = 11;</code>
+ */
+ public function setLatency999($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->latency_999 = $var;
+ }
+
+ /**
+ * <pre>
+ * server cpu usage percentage
+ * </pre>
+ *
+ * <code>double server_cpu_usage = 12;</code>
+ */
+ public function getServerCpuUsage()
+ {
+ return $this->server_cpu_usage;
+ }
+
+ /**
+ * <pre>
+ * server cpu usage percentage
+ * </pre>
+ *
+ * <code>double server_cpu_usage = 12;</code>
+ */
+ public function setServerCpuUsage($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->server_cpu_usage = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of requests that succeeded/failed
+ * </pre>
+ *
+ * <code>double successful_requests_per_second = 13;</code>
+ */
+ public function getSuccessfulRequestsPerSecond()
+ {
+ return $this->successful_requests_per_second;
+ }
+
+ /**
+ * <pre>
+ * Number of requests that succeeded/failed
+ * </pre>
+ *
+ * <code>double successful_requests_per_second = 13;</code>
+ */
+ public function setSuccessfulRequestsPerSecond($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->successful_requests_per_second = $var;
+ }
+
+ /**
+ * <code>double failed_requests_per_second = 14;</code>
+ */
+ public function getFailedRequestsPerSecond()
+ {
+ return $this->failed_requests_per_second;
+ }
+
+ /**
+ * <code>double failed_requests_per_second = 14;</code>
+ */
+ public function setFailedRequestsPerSecond($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->failed_requests_per_second = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Scenarios.php b/src/php/tests/qps/generated_code/Grpc/Testing/Scenarios.php
new file mode 100644
index 0000000000..278f555b76
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/Scenarios.php
@@ -0,0 +1,48 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * A set of scenarios to be run with qps_json_driver
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.Scenarios</code>
+ */
+class Scenarios extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>repeated .grpc.testing.Scenario scenarios = 1;</code>
+ */
+ private $scenarios;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>repeated .grpc.testing.Scenario scenarios = 1;</code>
+ */
+ public function getScenarios()
+ {
+ return $this->scenarios;
+ }
+
+ /**
+ * <code>repeated .grpc.testing.Scenario scenarios = 1;</code>
+ */
+ public function setScenarios(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\Scenario::class);
+ $this->scenarios = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/SecurityParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/SecurityParams.php
new file mode 100644
index 0000000000..27a5b95cc9
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/SecurityParams.php
@@ -0,0 +1,69 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * presence of SecurityParams implies use of TLS
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.SecurityParams</code>
+ */
+class SecurityParams extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>bool use_test_ca = 1;</code>
+ */
+ private $use_test_ca = false;
+ /**
+ * <code>string server_host_override = 2;</code>
+ */
+ private $server_host_override = '';
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>bool use_test_ca = 1;</code>
+ */
+ public function getUseTestCa()
+ {
+ return $this->use_test_ca;
+ }
+
+ /**
+ * <code>bool use_test_ca = 1;</code>
+ */
+ public function setUseTestCa($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->use_test_ca = $var;
+ }
+
+ /**
+ * <code>string server_host_override = 2;</code>
+ */
+ public function getServerHostOverride()
+ {
+ return $this->server_host_override;
+ }
+
+ /**
+ * <code>string server_host_override = 2;</code>
+ */
+ public function setServerHostOverride($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->server_host_override = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerArgs.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerArgs.php
new file mode 100644
index 0000000000..0d84b80124
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerArgs.php
@@ -0,0 +1,63 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ServerArgs</code>
+ */
+class ServerArgs extends \Google\Protobuf\Internal\Message
+{
+ protected $argtype;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>.grpc.testing.ServerConfig setup = 1;</code>
+ */
+ public function getSetup()
+ {
+ return $this->readOneof(1);
+ }
+
+ /**
+ * <code>.grpc.testing.ServerConfig setup = 1;</code>
+ */
+ public function setSetup(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ServerConfig::class);
+ $this->writeOneof(1, $var);
+ }
+
+ /**
+ * <code>.grpc.testing.Mark mark = 2;</code>
+ */
+ public function getMark()
+ {
+ return $this->readOneof(2);
+ }
+
+ /**
+ * <code>.grpc.testing.Mark mark = 2;</code>
+ */
+ public function setMark(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\Mark::class);
+ $this->writeOneof(2, $var);
+ }
+
+ public function getArgtype()
+ {
+ return $this->whichOneof("argtype");
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerConfig.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerConfig.php
new file mode 100644
index 0000000000..e2bcede48c
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerConfig.php
@@ -0,0 +1,305 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ServerConfig</code>
+ */
+class ServerConfig extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>.grpc.testing.ServerType server_type = 1;</code>
+ */
+ private $server_type = 0;
+ /**
+ * <code>.grpc.testing.SecurityParams security_params = 2;</code>
+ */
+ private $security_params = null;
+ /**
+ * <pre>
+ * Port on which to listen. Zero means pick unused port.
+ * </pre>
+ *
+ * <code>int32 port = 4;</code>
+ */
+ private $port = 0;
+ /**
+ * <pre>
+ * Only for async server. Number of threads used to serve the requests.
+ * </pre>
+ *
+ * <code>int32 async_server_threads = 7;</code>
+ */
+ private $async_server_threads = 0;
+ /**
+ * <pre>
+ * Specify the number of cores to limit server to, if desired
+ * </pre>
+ *
+ * <code>int32 core_limit = 8;</code>
+ */
+ private $core_limit = 0;
+ /**
+ * <pre>
+ * payload config, used in generic server.
+ * Note this must NOT be used in proto (non-generic) servers. For proto servers,
+ * 'response sizes' must be configured from the 'response_size' field of the
+ * 'SimpleRequest' objects in RPC requests.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadConfig payload_config = 9;</code>
+ */
+ private $payload_config = null;
+ /**
+ * <pre>
+ * Specify the cores we should run the server on, if desired
+ * </pre>
+ *
+ * <code>repeated int32 core_list = 10;</code>
+ */
+ private $core_list;
+ /**
+ * <pre>
+ * If we use an OTHER_SERVER client_type, this string gives more detail
+ * </pre>
+ *
+ * <code>string other_server_api = 11;</code>
+ */
+ private $other_server_api = '';
+ /**
+ * <pre>
+ * Buffer pool size (no buffer pool specified if unset)
+ * </pre>
+ *
+ * <code>int32 resource_quota_size = 1001;</code>
+ */
+ private $resource_quota_size = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>.grpc.testing.ServerType server_type = 1;</code>
+ */
+ public function getServerType()
+ {
+ return $this->server_type;
+ }
+
+ /**
+ * <code>.grpc.testing.ServerType server_type = 1;</code>
+ */
+ public function setServerType($var)
+ {
+ GPBUtil::checkEnum($var, \Grpc\Testing\ServerType::class);
+ $this->server_type = $var;
+ }
+
+ /**
+ * <code>.grpc.testing.SecurityParams security_params = 2;</code>
+ */
+ public function getSecurityParams()
+ {
+ return $this->security_params;
+ }
+
+ /**
+ * <code>.grpc.testing.SecurityParams security_params = 2;</code>
+ */
+ public function setSecurityParams(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\SecurityParams::class);
+ $this->security_params = $var;
+ }
+
+ /**
+ * <pre>
+ * Port on which to listen. Zero means pick unused port.
+ * </pre>
+ *
+ * <code>int32 port = 4;</code>
+ */
+ public function getPort()
+ {
+ return $this->port;
+ }
+
+ /**
+ * <pre>
+ * Port on which to listen. Zero means pick unused port.
+ * </pre>
+ *
+ * <code>int32 port = 4;</code>
+ */
+ public function setPort($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->port = $var;
+ }
+
+ /**
+ * <pre>
+ * Only for async server. Number of threads used to serve the requests.
+ * </pre>
+ *
+ * <code>int32 async_server_threads = 7;</code>
+ */
+ public function getAsyncServerThreads()
+ {
+ return $this->async_server_threads;
+ }
+
+ /**
+ * <pre>
+ * Only for async server. Number of threads used to serve the requests.
+ * </pre>
+ *
+ * <code>int32 async_server_threads = 7;</code>
+ */
+ public function setAsyncServerThreads($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->async_server_threads = $var;
+ }
+
+ /**
+ * <pre>
+ * Specify the number of cores to limit server to, if desired
+ * </pre>
+ *
+ * <code>int32 core_limit = 8;</code>
+ */
+ public function getCoreLimit()
+ {
+ return $this->core_limit;
+ }
+
+ /**
+ * <pre>
+ * Specify the number of cores to limit server to, if desired
+ * </pre>
+ *
+ * <code>int32 core_limit = 8;</code>
+ */
+ public function setCoreLimit($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->core_limit = $var;
+ }
+
+ /**
+ * <pre>
+ * payload config, used in generic server.
+ * Note this must NOT be used in proto (non-generic) servers. For proto servers,
+ * 'response sizes' must be configured from the 'response_size' field of the
+ * 'SimpleRequest' objects in RPC requests.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadConfig payload_config = 9;</code>
+ */
+ public function getPayloadConfig()
+ {
+ return $this->payload_config;
+ }
+
+ /**
+ * <pre>
+ * payload config, used in generic server.
+ * Note this must NOT be used in proto (non-generic) servers. For proto servers,
+ * 'response sizes' must be configured from the 'response_size' field of the
+ * 'SimpleRequest' objects in RPC requests.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadConfig payload_config = 9;</code>
+ */
+ public function setPayloadConfig(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\PayloadConfig::class);
+ $this->payload_config = $var;
+ }
+
+ /**
+ * <pre>
+ * Specify the cores we should run the server on, if desired
+ * </pre>
+ *
+ * <code>repeated int32 core_list = 10;</code>
+ */
+ public function getCoreList()
+ {
+ return $this->core_list;
+ }
+
+ /**
+ * <pre>
+ * Specify the cores we should run the server on, if desired
+ * </pre>
+ *
+ * <code>repeated int32 core_list = 10;</code>
+ */
+ public function setCoreList(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32);
+ $this->core_list = $var;
+ }
+
+ /**
+ * <pre>
+ * If we use an OTHER_SERVER client_type, this string gives more detail
+ * </pre>
+ *
+ * <code>string other_server_api = 11;</code>
+ */
+ public function getOtherServerApi()
+ {
+ return $this->other_server_api;
+ }
+
+ /**
+ * <pre>
+ * If we use an OTHER_SERVER client_type, this string gives more detail
+ * </pre>
+ *
+ * <code>string other_server_api = 11;</code>
+ */
+ public function setOtherServerApi($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->other_server_api = $var;
+ }
+
+ /**
+ * <pre>
+ * Buffer pool size (no buffer pool specified if unset)
+ * </pre>
+ *
+ * <code>int32 resource_quota_size = 1001;</code>
+ */
+ public function getResourceQuotaSize()
+ {
+ return $this->resource_quota_size;
+ }
+
+ /**
+ * <pre>
+ * Buffer pool size (no buffer pool specified if unset)
+ * </pre>
+ *
+ * <code>int32 resource_quota_size = 1001;</code>
+ */
+ public function setResourceQuotaSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->resource_quota_size = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerStats.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStats.php
new file mode 100644
index 0000000000..98b2af764c
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStats.php
@@ -0,0 +1,191 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/stats.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ServerStats</code>
+ */
+class ServerStats extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * wall clock time change in seconds since last reset
+ * </pre>
+ *
+ * <code>double time_elapsed = 1;</code>
+ */
+ private $time_elapsed = 0.0;
+ /**
+ * <pre>
+ * change in user time (in seconds) used by the server since last reset
+ * </pre>
+ *
+ * <code>double time_user = 2;</code>
+ */
+ private $time_user = 0.0;
+ /**
+ * <pre>
+ * change in server time (in seconds) used by the server process and all
+ * threads since last reset
+ * </pre>
+ *
+ * <code>double time_system = 3;</code>
+ */
+ private $time_system = 0.0;
+ /**
+ * <pre>
+ * change in total cpu time of the server (data from proc/stat)
+ * </pre>
+ *
+ * <code>uint64 total_cpu_time = 4;</code>
+ */
+ private $total_cpu_time = 0;
+ /**
+ * <pre>
+ * change in idle time of the server (data from proc/stat)
+ * </pre>
+ *
+ * <code>uint64 idle_cpu_time = 5;</code>
+ */
+ private $idle_cpu_time = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * wall clock time change in seconds since last reset
+ * </pre>
+ *
+ * <code>double time_elapsed = 1;</code>
+ */
+ public function getTimeElapsed()
+ {
+ return $this->time_elapsed;
+ }
+
+ /**
+ * <pre>
+ * wall clock time change in seconds since last reset
+ * </pre>
+ *
+ * <code>double time_elapsed = 1;</code>
+ */
+ public function setTimeElapsed($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->time_elapsed = $var;
+ }
+
+ /**
+ * <pre>
+ * change in user time (in seconds) used by the server since last reset
+ * </pre>
+ *
+ * <code>double time_user = 2;</code>
+ */
+ public function getTimeUser()
+ {
+ return $this->time_user;
+ }
+
+ /**
+ * <pre>
+ * change in user time (in seconds) used by the server since last reset
+ * </pre>
+ *
+ * <code>double time_user = 2;</code>
+ */
+ public function setTimeUser($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->time_user = $var;
+ }
+
+ /**
+ * <pre>
+ * change in server time (in seconds) used by the server process and all
+ * threads since last reset
+ * </pre>
+ *
+ * <code>double time_system = 3;</code>
+ */
+ public function getTimeSystem()
+ {
+ return $this->time_system;
+ }
+
+ /**
+ * <pre>
+ * change in server time (in seconds) used by the server process and all
+ * threads since last reset
+ * </pre>
+ *
+ * <code>double time_system = 3;</code>
+ */
+ public function setTimeSystem($var)
+ {
+ GPBUtil::checkDouble($var);
+ $this->time_system = $var;
+ }
+
+ /**
+ * <pre>
+ * change in total cpu time of the server (data from proc/stat)
+ * </pre>
+ *
+ * <code>uint64 total_cpu_time = 4;</code>
+ */
+ public function getTotalCpuTime()
+ {
+ return $this->total_cpu_time;
+ }
+
+ /**
+ * <pre>
+ * change in total cpu time of the server (data from proc/stat)
+ * </pre>
+ *
+ * <code>uint64 total_cpu_time = 4;</code>
+ */
+ public function setTotalCpuTime($var)
+ {
+ GPBUtil::checkUint64($var);
+ $this->total_cpu_time = $var;
+ }
+
+ /**
+ * <pre>
+ * change in idle time of the server (data from proc/stat)
+ * </pre>
+ *
+ * <code>uint64 idle_cpu_time = 5;</code>
+ */
+ public function getIdleCpuTime()
+ {
+ return $this->idle_cpu_time;
+ }
+
+ /**
+ * <pre>
+ * change in idle time of the server (data from proc/stat)
+ * </pre>
+ *
+ * <code>uint64 idle_cpu_time = 5;</code>
+ */
+ public function setIdleCpuTime($var)
+ {
+ GPBUtil::checkUint64($var);
+ $this->idle_cpu_time = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerStatus.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStatus.php
new file mode 100644
index 0000000000..d293f03fbd
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStatus.php
@@ -0,0 +1,110 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.ServerStatus</code>
+ */
+class ServerStatus extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>.grpc.testing.ServerStats stats = 1;</code>
+ */
+ private $stats = null;
+ /**
+ * <pre>
+ * the port bound by the server
+ * </pre>
+ *
+ * <code>int32 port = 2;</code>
+ */
+ private $port = 0;
+ /**
+ * <pre>
+ * Number of cores available to the server
+ * </pre>
+ *
+ * <code>int32 cores = 3;</code>
+ */
+ private $cores = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>.grpc.testing.ServerStats stats = 1;</code>
+ */
+ public function getStats()
+ {
+ return $this->stats;
+ }
+
+ /**
+ * <code>.grpc.testing.ServerStats stats = 1;</code>
+ */
+ public function setStats(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\ServerStats::class);
+ $this->stats = $var;
+ }
+
+ /**
+ * <pre>
+ * the port bound by the server
+ * </pre>
+ *
+ * <code>int32 port = 2;</code>
+ */
+ public function getPort()
+ {
+ return $this->port;
+ }
+
+ /**
+ * <pre>
+ * the port bound by the server
+ * </pre>
+ *
+ * <code>int32 port = 2;</code>
+ */
+ public function setPort($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->port = $var;
+ }
+
+ /**
+ * <pre>
+ * Number of cores available to the server
+ * </pre>
+ *
+ * <code>int32 cores = 3;</code>
+ */
+ public function getCores()
+ {
+ return $this->cores;
+ }
+
+ /**
+ * <pre>
+ * Number of cores available to the server
+ * </pre>
+ *
+ * <code>int32 cores = 3;</code>
+ */
+ public function setCores($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->cores = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerType.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerType.php
new file mode 100644
index 0000000000..605c83c3f7
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerType.php
@@ -0,0 +1,33 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+/**
+ * Protobuf enum <code>grpc.testing.ServerType</code>
+ */
+class ServerType
+{
+ /**
+ * <code>SYNC_SERVER = 0;</code>
+ */
+ const SYNC_SERVER = 0;
+ /**
+ * <code>ASYNC_SERVER = 1;</code>
+ */
+ const ASYNC_SERVER = 1;
+ /**
+ * <code>ASYNC_GENERIC_SERVER = 2;</code>
+ */
+ const ASYNC_GENERIC_SERVER = 2;
+ /**
+ * <pre>
+ * used for some language-specific variants
+ * </pre>
+ *
+ * <code>OTHER_SERVER = 3;</code>
+ */
+ const OTHER_SERVER = 3;
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/SimpleProtoParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleProtoParams.php
new file mode 100644
index 0000000000..29834a3be7
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleProtoParams.php
@@ -0,0 +1,65 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/payloads.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.SimpleProtoParams</code>
+ */
+class SimpleProtoParams extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <code>int32 req_size = 1;</code>
+ */
+ private $req_size = 0;
+ /**
+ * <code>int32 resp_size = 2;</code>
+ */
+ private $resp_size = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <code>int32 req_size = 1;</code>
+ */
+ public function getReqSize()
+ {
+ return $this->req_size;
+ }
+
+ /**
+ * <code>int32 req_size = 1;</code>
+ */
+ public function setReqSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->req_size = $var;
+ }
+
+ /**
+ * <code>int32 resp_size = 2;</code>
+ */
+ public function getRespSize()
+ {
+ return $this->resp_size;
+ }
+
+ /**
+ * <code>int32 resp_size = 2;</code>
+ */
+ public function setRespSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->resp_size = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/SimpleRequest.php b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleRequest.php
new file mode 100644
index 0000000000..f84c95319f
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleRequest.php
@@ -0,0 +1,306 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Unary request.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.SimpleRequest</code>
+ */
+class SimpleRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * Desired payload type in the response from the server.
+ * If response_type is RANDOM, server randomly chooses one from other formats.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType response_type = 1;</code>
+ */
+ private $response_type = 0;
+ /**
+ * <pre>
+ * Desired payload size in the response from the server.
+ * </pre>
+ *
+ * <code>int32 response_size = 2;</code>
+ */
+ private $response_size = 0;
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 3;</code>
+ */
+ private $payload = null;
+ /**
+ * <pre>
+ * Whether SimpleResponse should include username.
+ * </pre>
+ *
+ * <code>bool fill_username = 4;</code>
+ */
+ private $fill_username = false;
+ /**
+ * <pre>
+ * Whether SimpleResponse should include OAuth scope.
+ * </pre>
+ *
+ * <code>bool fill_oauth_scope = 5;</code>
+ */
+ private $fill_oauth_scope = false;
+ /**
+ * <pre>
+ * Whether to request the server to compress the response. This field is
+ * "nullable" in order to interoperate seamlessly with clients not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the response's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue response_compressed = 6;</code>
+ */
+ private $response_compressed = null;
+ /**
+ * <pre>
+ * Whether server should return a given status
+ * </pre>
+ *
+ * <code>.grpc.testing.EchoStatus response_status = 7;</code>
+ */
+ private $response_status = null;
+ /**
+ * <pre>
+ * Whether the server should expect this request to be compressed.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue expect_compressed = 8;</code>
+ */
+ private $expect_compressed = null;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * Desired payload type in the response from the server.
+ * If response_type is RANDOM, server randomly chooses one from other formats.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType response_type = 1;</code>
+ */
+ public function getResponseType()
+ {
+ return $this->response_type;
+ }
+
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * Desired payload type in the response from the server.
+ * If response_type is RANDOM, server randomly chooses one from other formats.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType response_type = 1;</code>
+ */
+ public function setResponseType($var)
+ {
+ GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class);
+ $this->response_type = $var;
+ }
+
+ /**
+ * <pre>
+ * Desired payload size in the response from the server.
+ * </pre>
+ *
+ * <code>int32 response_size = 2;</code>
+ */
+ public function getResponseSize()
+ {
+ return $this->response_size;
+ }
+
+ /**
+ * <pre>
+ * Desired payload size in the response from the server.
+ * </pre>
+ *
+ * <code>int32 response_size = 2;</code>
+ */
+ public function setResponseSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->response_size = $var;
+ }
+
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 3;</code>
+ */
+ public function getPayload()
+ {
+ return $this->payload;
+ }
+
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 3;</code>
+ */
+ public function setPayload(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class);
+ $this->payload = $var;
+ }
+
+ /**
+ * <pre>
+ * Whether SimpleResponse should include username.
+ * </pre>
+ *
+ * <code>bool fill_username = 4;</code>
+ */
+ public function getFillUsername()
+ {
+ return $this->fill_username;
+ }
+
+ /**
+ * <pre>
+ * Whether SimpleResponse should include username.
+ * </pre>
+ *
+ * <code>bool fill_username = 4;</code>
+ */
+ public function setFillUsername($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->fill_username = $var;
+ }
+
+ /**
+ * <pre>
+ * Whether SimpleResponse should include OAuth scope.
+ * </pre>
+ *
+ * <code>bool fill_oauth_scope = 5;</code>
+ */
+ public function getFillOauthScope()
+ {
+ return $this->fill_oauth_scope;
+ }
+
+ /**
+ * <pre>
+ * Whether SimpleResponse should include OAuth scope.
+ * </pre>
+ *
+ * <code>bool fill_oauth_scope = 5;</code>
+ */
+ public function setFillOauthScope($var)
+ {
+ GPBUtil::checkBool($var);
+ $this->fill_oauth_scope = $var;
+ }
+
+ /**
+ * <pre>
+ * Whether to request the server to compress the response. This field is
+ * "nullable" in order to interoperate seamlessly with clients not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the response's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue response_compressed = 6;</code>
+ */
+ public function getResponseCompressed()
+ {
+ return $this->response_compressed;
+ }
+
+ /**
+ * <pre>
+ * Whether to request the server to compress the response. This field is
+ * "nullable" in order to interoperate seamlessly with clients not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the response's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue response_compressed = 6;</code>
+ */
+ public function setResponseCompressed(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class);
+ $this->response_compressed = $var;
+ }
+
+ /**
+ * <pre>
+ * Whether server should return a given status
+ * </pre>
+ *
+ * <code>.grpc.testing.EchoStatus response_status = 7;</code>
+ */
+ public function getResponseStatus()
+ {
+ return $this->response_status;
+ }
+
+ /**
+ * <pre>
+ * Whether server should return a given status
+ * </pre>
+ *
+ * <code>.grpc.testing.EchoStatus response_status = 7;</code>
+ */
+ public function setResponseStatus(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\EchoStatus::class);
+ $this->response_status = $var;
+ }
+
+ /**
+ * <pre>
+ * Whether the server should expect this request to be compressed.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue expect_compressed = 8;</code>
+ */
+ public function getExpectCompressed()
+ {
+ return $this->expect_compressed;
+ }
+
+ /**
+ * <pre>
+ * Whether the server should expect this request to be compressed.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue expect_compressed = 8;</code>
+ */
+ public function setExpectCompressed(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class);
+ $this->expect_compressed = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/SimpleResponse.php b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleResponse.php
new file mode 100644
index 0000000000..ccc628ec4c
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleResponse.php
@@ -0,0 +1,129 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Unary response, as configured by the request.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.SimpleResponse</code>
+ */
+class SimpleResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Payload to increase message size.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ private $payload = null;
+ /**
+ * <pre>
+ * The user the request came from, for verifying authentication was
+ * successful when the client expected it.
+ * </pre>
+ *
+ * <code>string username = 2;</code>
+ */
+ private $username = '';
+ /**
+ * <pre>
+ * OAuth scope.
+ * </pre>
+ *
+ * <code>string oauth_scope = 3;</code>
+ */
+ private $oauth_scope = '';
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Payload to increase message size.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ public function getPayload()
+ {
+ return $this->payload;
+ }
+
+ /**
+ * <pre>
+ * Payload to increase message size.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ public function setPayload(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class);
+ $this->payload = $var;
+ }
+
+ /**
+ * <pre>
+ * The user the request came from, for verifying authentication was
+ * successful when the client expected it.
+ * </pre>
+ *
+ * <code>string username = 2;</code>
+ */
+ public function getUsername()
+ {
+ return $this->username;
+ }
+
+ /**
+ * <pre>
+ * The user the request came from, for verifying authentication was
+ * successful when the client expected it.
+ * </pre>
+ *
+ * <code>string username = 2;</code>
+ */
+ public function setUsername($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->username = $var;
+ }
+
+ /**
+ * <pre>
+ * OAuth scope.
+ * </pre>
+ *
+ * <code>string oauth_scope = 3;</code>
+ */
+ public function getOauthScope()
+ {
+ return $this->oauth_scope;
+ }
+
+ /**
+ * <pre>
+ * OAuth scope.
+ * </pre>
+ *
+ * <code>string oauth_scope = 3;</code>
+ */
+ public function setOauthScope($var)
+ {
+ GPBUtil::checkString($var, True);
+ $this->oauth_scope = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallRequest.php b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallRequest.php
new file mode 100644
index 0000000000..d7bbc70779
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallRequest.php
@@ -0,0 +1,102 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Client-streaming request.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.StreamingInputCallRequest</code>
+ */
+class StreamingInputCallRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ private $payload = null;
+ /**
+ * <pre>
+ * Whether the server should expect this request to be compressed. This field
+ * is "nullable" in order to interoperate seamlessly with servers not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the request's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue expect_compressed = 2;</code>
+ */
+ private $expect_compressed = null;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ public function getPayload()
+ {
+ return $this->payload;
+ }
+
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ public function setPayload(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class);
+ $this->payload = $var;
+ }
+
+ /**
+ * <pre>
+ * Whether the server should expect this request to be compressed. This field
+ * is "nullable" in order to interoperate seamlessly with servers not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the request's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue expect_compressed = 2;</code>
+ */
+ public function getExpectCompressed()
+ {
+ return $this->expect_compressed;
+ }
+
+ /**
+ * <pre>
+ * Whether the server should expect this request to be compressed. This field
+ * is "nullable" in order to interoperate seamlessly with servers not able to
+ * implement the full compression tests by introspecting the call to verify
+ * the request's compression status.
+ * </pre>
+ *
+ * <code>.grpc.testing.BoolValue expect_compressed = 2;</code>
+ */
+ public function setExpectCompressed(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class);
+ $this->expect_compressed = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallResponse.php b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallResponse.php
new file mode 100644
index 0000000000..fdd1d0dbf8
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallResponse.php
@@ -0,0 +1,60 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Client-streaming response.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.StreamingInputCallResponse</code>
+ */
+class StreamingInputCallResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Aggregated size of payloads received from the client.
+ * </pre>
+ *
+ * <code>int32 aggregated_payload_size = 1;</code>
+ */
+ private $aggregated_payload_size = 0;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Aggregated size of payloads received from the client.
+ * </pre>
+ *
+ * <code>int32 aggregated_payload_size = 1;</code>
+ */
+ public function getAggregatedPayloadSize()
+ {
+ return $this->aggregated_payload_size;
+ }
+
+ /**
+ * <pre>
+ * Aggregated size of payloads received from the client.
+ * </pre>
+ *
+ * <code>int32 aggregated_payload_size = 1;</code>
+ */
+ public function setAggregatedPayloadSize($var)
+ {
+ GPBUtil::checkInt32($var);
+ $this->aggregated_payload_size = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallRequest.php b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallRequest.php
new file mode 100644
index 0000000000..2aab5fadad
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallRequest.php
@@ -0,0 +1,171 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Server-streaming request.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.StreamingOutputCallRequest</code>
+ */
+class StreamingOutputCallRequest extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * Desired payload type in the response from the server.
+ * If response_type is RANDOM, the payload from each response in the stream
+ * might be of different types. This is to simulate a mixed type of payload
+ * stream.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType response_type = 1;</code>
+ */
+ private $response_type = 0;
+ /**
+ * <pre>
+ * Configuration for each expected response message.
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
+ */
+ private $response_parameters;
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 3;</code>
+ */
+ private $payload = null;
+ /**
+ * <pre>
+ * Whether server should return a given status
+ * </pre>
+ *
+ * <code>.grpc.testing.EchoStatus response_status = 7;</code>
+ */
+ private $response_status = null;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * Desired payload type in the response from the server.
+ * If response_type is RANDOM, the payload from each response in the stream
+ * might be of different types. This is to simulate a mixed type of payload
+ * stream.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType response_type = 1;</code>
+ */
+ public function getResponseType()
+ {
+ return $this->response_type;
+ }
+
+ /**
+ * <pre>
+ * DEPRECATED, don't use. To be removed shortly.
+ * Desired payload type in the response from the server.
+ * If response_type is RANDOM, the payload from each response in the stream
+ * might be of different types. This is to simulate a mixed type of payload
+ * stream.
+ * </pre>
+ *
+ * <code>.grpc.testing.PayloadType response_type = 1;</code>
+ */
+ public function setResponseType($var)
+ {
+ GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class);
+ $this->response_type = $var;
+ }
+
+ /**
+ * <pre>
+ * Configuration for each expected response message.
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
+ */
+ public function getResponseParameters()
+ {
+ return $this->response_parameters;
+ }
+
+ /**
+ * <pre>
+ * Configuration for each expected response message.
+ * </pre>
+ *
+ * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
+ */
+ public function setResponseParameters(&$var)
+ {
+ GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ResponseParameters::class);
+ $this->response_parameters = $var;
+ }
+
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 3;</code>
+ */
+ public function getPayload()
+ {
+ return $this->payload;
+ }
+
+ /**
+ * <pre>
+ * Optional input payload sent along with the request.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 3;</code>
+ */
+ public function setPayload(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class);
+ $this->payload = $var;
+ }
+
+ /**
+ * <pre>
+ * Whether server should return a given status
+ * </pre>
+ *
+ * <code>.grpc.testing.EchoStatus response_status = 7;</code>
+ */
+ public function getResponseStatus()
+ {
+ return $this->response_status;
+ }
+
+ /**
+ * <pre>
+ * Whether server should return a given status
+ * </pre>
+ *
+ * <code>.grpc.testing.EchoStatus response_status = 7;</code>
+ */
+ public function setResponseStatus(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\EchoStatus::class);
+ $this->response_status = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallResponse.php b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallResponse.php
new file mode 100644
index 0000000000..c06c78c9d8
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallResponse.php
@@ -0,0 +1,60 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/messages.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * <pre>
+ * Server-streaming response, as configured by the request and parameters.
+ * </pre>
+ *
+ * Protobuf type <code>grpc.testing.StreamingOutputCallResponse</code>
+ */
+class StreamingOutputCallResponse extends \Google\Protobuf\Internal\Message
+{
+ /**
+ * <pre>
+ * Payload to increase response size.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ private $payload = null;
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce();
+ parent::__construct();
+ }
+
+ /**
+ * <pre>
+ * Payload to increase response size.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ public function getPayload()
+ {
+ return $this->payload;
+ }
+
+ /**
+ * <pre>
+ * Payload to increase response size.
+ * </pre>
+ *
+ * <code>.grpc.testing.Payload payload = 1;</code>
+ */
+ public function setPayload(&$var)
+ {
+ GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class);
+ $this->payload = $var;
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Void.php b/src/php/tests/qps/generated_code/Grpc/Testing/Void.php
new file mode 100644
index 0000000000..38c100845a
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/Void.php
@@ -0,0 +1,23 @@
+<?php
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/control.proto
+
+namespace Grpc\Testing;
+
+use Google\Protobuf\Internal\GPBType;
+use Google\Protobuf\Internal\RepeatedField;
+use Google\Protobuf\Internal\GPBUtil;
+
+/**
+ * Protobuf type <code>grpc.testing.Void</code>
+ */
+class Void extends \Google\Protobuf\Internal\Message
+{
+
+ public function __construct() {
+ \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce();
+ parent::__construct();
+ }
+
+}
+
diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/WorkerServiceClient.php b/src/php/tests/qps/generated_code/Grpc/Testing/WorkerServiceClient.php
new file mode 100644
index 0000000000..0a68e41269
--- /dev/null
+++ b/src/php/tests/qps/generated_code/Grpc/Testing/WorkerServiceClient.php
@@ -0,0 +1,111 @@
+<?php
+// GENERATED CODE -- DO NOT EDIT!
+
+// Original file comments:
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// An integration test service that covers all the method signature permutations
+// of unary/streaming requests/responses.
+namespace Grpc\Testing {
+
+ class WorkerServiceClient extends \Grpc\BaseStub {
+
+ /**
+ * @param string $hostname hostname
+ * @param array $opts channel options
+ * @param Grpc\Channel $channel (optional) re-use channel object
+ */
+ public function __construct($hostname, $opts, $channel = null) {
+ parent::__construct($hostname, $opts, $channel);
+ }
+
+ /**
+ * Start server with specified workload.
+ * First request sent specifies the ServerConfig followed by ServerStatus
+ * response. After that, a "Mark" can be sent anytime to request the latest
+ * stats. Closing the stream will initiate shutdown of the test server
+ * and once the shutdown has finished, the OK status is sent to terminate
+ * this RPC.
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function RunServer($metadata = [], $options = []) {
+ return $this->_bidiRequest('/grpc.testing.WorkerService/RunServer',
+ ['\Grpc\Testing\ServerStatus','decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Start client with specified workload.
+ * First request sent specifies the ClientConfig followed by ClientStatus
+ * response. After that, a "Mark" can be sent anytime to request the latest
+ * stats. Closing the stream will initiate shutdown of the test client
+ * and once the shutdown has finished, the OK status is sent to terminate
+ * this RPC.
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function RunClient($metadata = [], $options = []) {
+ return $this->_bidiRequest('/grpc.testing.WorkerService/RunClient',
+ ['\Grpc\Testing\ClientStatus','decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Just return the core count - unary call
+ * @param \Grpc\Testing\CoreRequest $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function CoreCount(\Grpc\Testing\CoreRequest $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/grpc.testing.WorkerService/CoreCount',
+ $argument,
+ ['\Grpc\Testing\CoreResponse', 'decode'],
+ $metadata, $options);
+ }
+
+ /**
+ * Quit this worker
+ * @param \Grpc\Testing\Void $argument input argument
+ * @param array $metadata metadata
+ * @param array $options call options
+ */
+ public function QuitWorker(\Grpc\Testing\Void $argument,
+ $metadata = [], $options = []) {
+ return $this->_simpleRequest('/grpc.testing.WorkerService/QuitWorker',
+ $argument,
+ ['\Grpc\Testing\Void', 'decode'],
+ $metadata, $options);
+ }
+
+ }
+
+}
diff --git a/src/csharp/Grpc.Core.Tests/NUnitVersionTest.cs b/src/proto/grpc/testing/proxy-service.proto
index 1a9e441611..7b7de8d549 100644
--- a/src/csharp/Grpc.Core.Tests/NUnitVersionTest.cs
+++ b/src/proto/grpc/testing/proxy-service.proto
@@ -1,6 +1,4 @@
-#region Copyright notice and license
-
-// Copyright 2015, Google Inc.
+// Copyright 2017, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
@@ -29,49 +27,18 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#endregion
-
-using System;
-using System.Threading;
-using System.Threading.Tasks;
-using Grpc.Core;
-using Grpc.Core.Internal;
-using Grpc.Core.Utils;
-using NUnit.Framework;
+syntax = "proto3";
-namespace Grpc.Core.Tests
-{
- /// <summary>
- /// Tests if the version of nunit-console used is sufficient to run async tests.
- /// </summary>
- public class NUnitVersionTest
- {
- private int testRunCount = 0;
+import "src/proto/grpc/testing/control.proto";
- [TestFixtureTearDown]
- public void Cleanup()
- {
- if (testRunCount != 2)
- {
- Console.Error.WriteLine("You are using and old version of NUnit that doesn't support async tests and skips them instead. " +
- "This test has failed to indicate that.");
- Console.Error.Flush();
- throw new Exception("NUnitVersionTest has failed.");
- }
- }
+package grpc.testing;
- [Test]
- public void NUnitVersionTest1()
- {
- testRunCount++;
- }
+message ProxyStat {
+ double latency = 1;
+}
- // Old version of NUnit will skip this test
- [Test]
- public async Task NUnitVersionTest2()
- {
- testRunCount++;
- await Task.Delay(10);
- }
- }
+service ProxyClientService {
+ rpc GetConfig(Void) returns (ClientConfig);
+ rpc ReportTime(stream ProxyStat) returns (Void);
}
+
diff --git a/src/python/grpcio/grpc/__init__.py b/src/python/grpcio/grpc/__init__.py
index b64a708cc7..a4481b2ac3 100644
--- a/src/python/grpcio/grpc/__init__.py
+++ b/src/python/grpcio/grpc/__init__.py
@@ -1004,7 +1004,7 @@ def unary_unary_rpc_method_handler(behavior,
An RpcMethodHandler for a unary-unary RPC method constructed from the given
parameters.
"""
- from grpc import _utilities
+ from grpc import _utilities # pylint: disable=cyclic-import
return _utilities.RpcMethodHandler(False, False, request_deserializer,
response_serializer, behavior, None,
None, None)
@@ -1025,7 +1025,7 @@ def unary_stream_rpc_method_handler(behavior,
An RpcMethodHandler for a unary-stream RPC method constructed from the
given parameters.
"""
- from grpc import _utilities
+ from grpc import _utilities # pylint: disable=cyclic-import
return _utilities.RpcMethodHandler(False, True, request_deserializer,
response_serializer, None, behavior,
None, None)
@@ -1046,7 +1046,7 @@ def stream_unary_rpc_method_handler(behavior,
An RpcMethodHandler for a stream-unary RPC method constructed from the
given parameters.
"""
- from grpc import _utilities
+ from grpc import _utilities # pylint: disable=cyclic-import
return _utilities.RpcMethodHandler(True, False, request_deserializer,
response_serializer, None, None,
behavior, None)
@@ -1068,7 +1068,7 @@ def stream_stream_rpc_method_handler(behavior,
An RpcMethodHandler for a stream-stream RPC method constructed from the
given parameters.
"""
- from grpc import _utilities
+ from grpc import _utilities # pylint: disable=cyclic-import
return _utilities.RpcMethodHandler(True, True, request_deserializer,
response_serializer, None, None, None,
behavior)
@@ -1085,7 +1085,7 @@ def method_handlers_generic_handler(service, method_handlers):
Returns:
A GenericRpcHandler constructed from the given parameters.
"""
- from grpc import _utilities
+ from grpc import _utilities # pylint: disable=cyclic-import
return _utilities.DictionaryGenericHandler(service, method_handlers)
@@ -1124,7 +1124,7 @@ def metadata_call_credentials(metadata_plugin, name=None):
Returns:
A CallCredentials.
"""
- from grpc import _plugin_wrapping
+ from grpc import _plugin_wrapping # pylint: disable=cyclic-import
if name is None:
try:
effective_name = metadata_plugin.__name__
@@ -1147,7 +1147,7 @@ def access_token_call_credentials(access_token):
Returns:
A CallCredentials.
"""
- from grpc import _auth
+ from grpc import _auth # pylint: disable=cyclic-import
return metadata_call_credentials(
_auth.AccessTokenCallCredentials(access_token))
@@ -1161,7 +1161,7 @@ def composite_call_credentials(*call_credentials):
Returns:
A CallCredentials object composed of the given CallCredentials objects.
"""
- from grpc import _credential_composition
+ from grpc import _credential_composition # pylint: disable=cyclic-import
cygrpc_call_credentials = tuple(
single_call_credentials._credentials
for single_call_credentials in call_credentials)
@@ -1180,7 +1180,7 @@ def composite_channel_credentials(channel_credentials, *call_credentials):
A ChannelCredentials composed of the given ChannelCredentials and
CallCredentials objects.
"""
- from grpc import _credential_composition
+ from grpc import _credential_composition # pylint: disable=cyclic-import
cygrpc_call_credentials = tuple(
single_call_credentials._credentials
for single_call_credentials in call_credentials)
@@ -1237,7 +1237,7 @@ def channel_ready_future(channel):
A Future that matures when the given Channel has connectivity
ChannelConnectivity.READY.
"""
- from grpc import _utilities
+ from grpc import _utilities # pylint: disable=cyclic-import
return _utilities.channel_ready_future(channel)
@@ -1252,7 +1252,7 @@ def insecure_channel(target, options=None):
Returns:
A Channel to the target through which RPCs may be conducted.
"""
- from grpc import _channel
+ from grpc import _channel # pylint: disable=cyclic-import
return _channel.Channel(target, () if options is None else options, None)
@@ -1268,7 +1268,7 @@ def secure_channel(target, credentials, options=None):
Returns:
A Channel to the target through which RPCs may be conducted.
"""
- from grpc import _channel
+ from grpc import _channel # pylint: disable=cyclic-import
return _channel.Channel(target, () if options is None else options,
credentials._credentials)
@@ -1290,7 +1290,7 @@ def server(thread_pool, handlers=None, options=None):
Returns:
A Server with which RPCs can be serviced.
"""
- from grpc import _server
+ from grpc import _server # pylint: disable=cyclic-import
return _server.Server(thread_pool, () if handlers is None else handlers, ()
if options is None else options)
diff --git a/src/python/grpcio/grpc/_auth.py b/src/python/grpcio/grpc/_auth.py
index 21131f85f1..cb7c6fe4fd 100644
--- a/src/python/grpcio/grpc/_auth.py
+++ b/src/python/grpcio/grpc/_auth.py
@@ -39,6 +39,19 @@ def _sign_request(callback, token, error):
callback(metadata, error)
+def _create_get_token_callback(callback):
+
+ def get_token_callback(future):
+ try:
+ access_token = future.result().access_token
+ except Exception as exception: # pylint: disable=broad-except
+ _sign_request(callback, None, exception)
+ else:
+ _sign_request(callback, access_token, None)
+
+ return get_token_callback
+
+
class GoogleCallCredentials(grpc.AuthMetadataPlugin):
"""Metadata wrapper for GoogleCredentials from the oauth2client library."""
@@ -59,16 +72,7 @@ class GoogleCallCredentials(grpc.AuthMetadataPlugin):
additional_claims={'aud': context.service_url})
else:
future = self._pool.submit(self._credentials.get_access_token)
- future.add_done_callback(
- lambda x: self._get_token_callback(callback, x))
-
- def _get_token_callback(self, callback, future):
- try:
- access_token = future.result().access_token
- except Exception as e:
- _sign_request(callback, None, e)
- else:
- _sign_request(callback, access_token, None)
+ future.add_done_callback(_create_get_token_callback(callback))
def __del__(self):
self._pool.shutdown(wait=False)
diff --git a/src/python/grpcio/grpc/_channel.py b/src/python/grpcio/grpc/_channel.py
index af86f5eabe..4316449ac6 100644
--- a/src/python/grpcio/grpc/_channel.py
+++ b/src/python/grpcio/grpc/_channel.py
@@ -200,7 +200,7 @@ def _consume_request_iterator(request_iterator, state, call,
request = next(request_iterator)
except StopIteration:
break
- except Exception as e:
+ except Exception: # pylint: disable=broad-except
logging.exception("Exception iterating requests!")
call.cancel()
_abort(state, grpc.StatusCode.UNKNOWN,
@@ -237,7 +237,7 @@ def _consume_request_iterator(request_iterator, state, call,
cygrpc.Operations(operations), event_handler)
state.due.add(cygrpc.OperationType.send_close_from_client)
- def stop_consumption_thread(timeout):
+ def stop_consumption_thread(timeout): # pylint: disable=unused-argument
with state.condition:
if state.code is None:
call.cancel()
@@ -387,13 +387,14 @@ class _Rendezvous(grpc.RpcError, grpc.Future, grpc.Call):
with self._state.condition:
while self._state.initial_metadata is None:
self._state.condition.wait()
- return _common.application_metadata(self._state.initial_metadata)
+ return _common.to_application_metadata(self._state.initial_metadata)
def trailing_metadata(self):
with self._state.condition:
while self._state.trailing_metadata is None:
self._state.condition.wait()
- return _common.application_metadata(self._state.trailing_metadata)
+ return _common.to_application_metadata(
+ self._state.trailing_metadata)
def code(self):
with self._state.condition:
@@ -473,7 +474,7 @@ class _UnaryUnaryMultiCallable(grpc.UnaryUnaryMultiCallable):
state = _RPCState(_UNARY_UNARY_INITIAL_DUE, None, None, None, None)
operations = (
cygrpc.operation_send_initial_metadata(
- _common.cygrpc_metadata(metadata), _EMPTY_FLAGS),
+ _common.to_cygrpc_metadata(metadata), _EMPTY_FLAGS),
cygrpc.operation_send_message(serialized_request, _EMPTY_FLAGS),
cygrpc.operation_send_close_from_client(_EMPTY_FLAGS),
cygrpc.operation_receive_initial_metadata(_EMPTY_FLAGS),
@@ -563,7 +564,7 @@ class _UnaryStreamMultiCallable(grpc.UnaryStreamMultiCallable):
)), event_handler)
operations = (
cygrpc.operation_send_initial_metadata(
- _common.cygrpc_metadata(metadata),
+ _common.to_cygrpc_metadata(metadata),
_EMPTY_FLAGS), cygrpc.operation_send_message(
serialized_request, _EMPTY_FLAGS),
cygrpc.operation_send_close_from_client(_EMPTY_FLAGS),
@@ -603,7 +604,7 @@ class _StreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable):
None)
operations = (
cygrpc.operation_send_initial_metadata(
- _common.cygrpc_metadata(metadata), _EMPTY_FLAGS),
+ _common.to_cygrpc_metadata(metadata), _EMPTY_FLAGS),
cygrpc.operation_receive_message(_EMPTY_FLAGS),
cygrpc.operation_receive_status_on_client(_EMPTY_FLAGS),)
call_error = call.start_client_batch(
@@ -657,7 +658,7 @@ class _StreamUnaryMultiCallable(grpc.StreamUnaryMultiCallable):
event_handler)
operations = (
cygrpc.operation_send_initial_metadata(
- _common.cygrpc_metadata(metadata), _EMPTY_FLAGS),
+ _common.to_cygrpc_metadata(metadata), _EMPTY_FLAGS),
cygrpc.operation_receive_message(_EMPTY_FLAGS),
cygrpc.operation_receive_status_on_client(_EMPTY_FLAGS),)
call_error = call.start_client_batch(
@@ -700,7 +701,7 @@ class _StreamStreamMultiCallable(grpc.StreamStreamMultiCallable):
event_handler)
operations = (
cygrpc.operation_send_initial_metadata(
- _common.cygrpc_metadata(metadata), _EMPTY_FLAGS),
+ _common.to_cygrpc_metadata(metadata), _EMPTY_FLAGS),
cygrpc.operation_receive_status_on_client(_EMPTY_FLAGS),)
call_error = call.start_client_batch(
cygrpc.Operations(operations), event_handler)
@@ -735,7 +736,7 @@ def _run_channel_spin_thread(state):
state.managed_calls = None
return
- def stop_channel_spin(timeout):
+ def stop_channel_spin(timeout): # pylint: disable=unused-argument
with state.lock:
if state.managed_calls is not None:
for call in state.managed_calls:
@@ -876,12 +877,8 @@ def _moot(state):
def _subscribe(state, callback, try_to_connect):
with state.lock:
if not state.callbacks_and_connectivities and not state.polling:
-
- def cancel_all_subscriptions(timeout):
- _moot(state)
-
polling_thread = _common.CleanupThread(
- cancel_all_subscriptions,
+ lambda timeout: _moot(state),
target=_poll_connectivity,
args=(state, state.channel, bool(try_to_connect)))
polling_thread.start()
diff --git a/src/python/grpcio/grpc/_common.py b/src/python/grpcio/grpc/_common.py
index 6879e1780b..2e369013f5 100644
--- a/src/python/grpcio/grpc/_common.py
+++ b/src/python/grpcio/grpc/_common.py
@@ -97,22 +97,22 @@ def decode(b):
def channel_args(options):
- channel_args = []
+ cygrpc_args = []
for key, value in options:
if isinstance(value, six.string_types):
- channel_args.append(cygrpc.ChannelArg(encode(key), encode(value)))
+ cygrpc_args.append(cygrpc.ChannelArg(encode(key), encode(value)))
else:
- channel_args.append(cygrpc.ChannelArg(encode(key), value))
- return cygrpc.ChannelArgs(channel_args)
+ cygrpc_args.append(cygrpc.ChannelArg(encode(key), value))
+ return cygrpc.ChannelArgs(cygrpc_args)
-def cygrpc_metadata(application_metadata):
+def to_cygrpc_metadata(application_metadata):
return EMPTY_METADATA if application_metadata is None else cygrpc.Metadata(
cygrpc.Metadatum(encode(key), encode(value))
for key, value in application_metadata)
-def application_metadata(cygrpc_metadata):
+def to_application_metadata(cygrpc_metadata):
if cygrpc_metadata is None:
return ()
else:
diff --git a/src/python/grpcio/grpc/_plugin_wrapping.py b/src/python/grpcio/grpc/_plugin_wrapping.py
index 69c46aa546..1e44561c97 100644
--- a/src/python/grpcio/grpc/_plugin_wrapping.py
+++ b/src/python/grpcio/grpc/_plugin_wrapping.py
@@ -66,9 +66,9 @@ class _WrappedCygrpcCallback(object):
def _invoke_success(self, metadata):
try:
- cygrpc_metadata = _common.cygrpc_metadata(metadata)
- except Exception as error:
- self._invoke_failure(error)
+ cygrpc_metadata = _common.to_cygrpc_metadata(metadata)
+ except Exception as exception: # pylint: disable=broad-except
+ self._invoke_failure(exception)
return
self.cygrpc_callback(cygrpc_metadata, cygrpc.StatusCode.ok, b'')
diff --git a/src/python/grpcio/grpc/_server.py b/src/python/grpcio/grpc/_server.py
index b8e7ea17f7..84e096d4c0 100644
--- a/src/python/grpcio/grpc/_server.py
+++ b/src/python/grpcio/grpc/_server.py
@@ -142,14 +142,14 @@ def _abort(state, call, code, details):
effective_details = details if state.details is None else state.details
if state.initial_metadata_allowed:
operations = (cygrpc.operation_send_initial_metadata(
- _common.EMPTY_METADATA, _EMPTY_FLAGS),
- cygrpc.operation_send_status_from_server(
- _common.cygrpc_metadata(state.trailing_metadata),
- effective_code, effective_details, _EMPTY_FLAGS),)
+ _common.EMPTY_METADATA,
+ _EMPTY_FLAGS), cygrpc.operation_send_status_from_server(
+ _common.to_cygrpc_metadata(state.trailing_metadata),
+ effective_code, effective_details, _EMPTY_FLAGS),)
token = _SEND_INITIAL_METADATA_AND_SEND_STATUS_FROM_SERVER_TOKEN
else:
operations = (cygrpc.operation_send_status_from_server(
- _common.cygrpc_metadata(state.trailing_metadata),
+ _common.to_cygrpc_metadata(state.trailing_metadata),
effective_code, effective_details, _EMPTY_FLAGS),)
token = _SEND_STATUS_FROM_SERVER_TOKEN
call.start_server_batch(
@@ -250,7 +250,7 @@ class _Context(grpc.ServicerContext):
self._state.disable_next_compression = True
def invocation_metadata(self):
- return _common.application_metadata(self._rpc_event.request_metadata)
+ return _common.to_application_metadata(self._rpc_event.request_metadata)
def peer(self):
return _common.decode(self._rpc_event.operation_call.peer())
@@ -262,7 +262,8 @@ class _Context(grpc.ServicerContext):
else:
if self._state.initial_metadata_allowed:
operation = cygrpc.operation_send_initial_metadata(
- _common.cygrpc_metadata(initial_metadata), _EMPTY_FLAGS)
+ _common.to_cygrpc_metadata(initial_metadata),
+ _EMPTY_FLAGS)
self._rpc_event.operation_call.start_server_batch(
cygrpc.Operations((operation,)),
_send_initial_metadata(self._state))
@@ -273,7 +274,7 @@ class _Context(grpc.ServicerContext):
def set_trailing_metadata(self, trailing_metadata):
with self._state.condition:
- self._state.trailing_metadata = _common.cygrpc_metadata(
+ self._state.trailing_metadata = _common.to_cygrpc_metadata(
trailing_metadata)
def set_code(self, code):
@@ -342,7 +343,7 @@ def _unary_request(rpc_event, state, request_deserializer):
if state.client is _CANCELLED or state.statused:
return None
else:
- start_server_batch_result = rpc_event.operation_call.start_server_batch(
+ rpc_event.operation_call.start_server_batch(
cygrpc.Operations(
(cygrpc.operation_receive_message(_EMPTY_FLAGS),)),
_receive_message(state, rpc_event.operation_call,
@@ -436,7 +437,8 @@ def _send_response(rpc_event, state, serialized_response):
def _status(rpc_event, state, serialized_response):
with state.condition:
if state.client is not _CANCELLED:
- trailing_metadata = _common.cygrpc_metadata(state.trailing_metadata)
+ trailing_metadata = _common.to_cygrpc_metadata(
+ state.trailing_metadata)
code = _completion_code(state)
details = _details(state)
operations = [
diff --git a/src/python/grpcio/grpc/beta/_client_adaptations.py b/src/python/grpcio/grpc/beta/_client_adaptations.py
index b53395e2a2..3c69acc019 100644
--- a/src/python/grpcio/grpc/beta/_client_adaptations.py
+++ b/src/python/grpcio/grpc/beta/_client_adaptations.py
@@ -30,12 +30,13 @@
import grpc
from grpc import _common
-from grpc._cython import cygrpc
from grpc.beta import interfaces
from grpc.framework.common import cardinality
from grpc.framework.foundation import future
from grpc.framework.interfaces.face import face
+# pylint: disable=too-many-arguments,too-many-locals,unused-argument
+
_STATUS_CODE_TO_ABORTION_KIND_AND_ABORTION_ERROR_CLASS = {
grpc.StatusCode.CANCELLED: (face.Abortion.Kind.CANCELLED,
face.CancellationError),
@@ -621,8 +622,8 @@ class _GenericStub(face.GenericStub):
class _DynamicStub(face.DynamicStub):
- def __init__(self, generic_stub, group, cardinalities):
- self._generic_stub = generic_stub
+ def __init__(self, backing_generic_stub, group, cardinalities):
+ self._generic_stub = backing_generic_stub
self._group = group
self._cardinalities = cardinalities
diff --git a/src/python/grpcio/grpc/beta/_connectivity_channel.py b/src/python/grpcio/grpc/beta/_connectivity_channel.py
deleted file mode 100644
index bfb847f80a..0000000000
--- a/src/python/grpcio/grpc/beta/_connectivity_channel.py
+++ /dev/null
@@ -1,159 +0,0 @@
-# Copyright 2015, Google Inc.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following disclaimer
-# in the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Google Inc. nor the names of its
-# contributors may be used to endorse or promote products derived from
-# this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""Affords a connectivity-state-listenable channel."""
-
-import threading
-import time
-
-from grpc._adapter import _low
-from grpc._adapter import _types
-from grpc.beta import interfaces
-from grpc.framework.foundation import callable_util
-
-_CHANNEL_SUBSCRIPTION_CALLBACK_ERROR_LOG_MESSAGE = (
- 'Exception calling channel subscription callback!')
-
-_LOW_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY = {
- state: connectivity
- for state, connectivity in zip(_types.ConnectivityState,
- interfaces.ChannelConnectivity)
-}
-
-
-class ConnectivityChannel(object):
-
- def __init__(self, low_channel):
- self._lock = threading.Lock()
- self._low_channel = low_channel
-
- self._polling = False
- self._connectivity = None
- self._try_to_connect = False
- self._callbacks_and_connectivities = []
- self._delivering = False
-
- def _deliveries(self, connectivity):
- callbacks_needing_update = []
- for callback_and_connectivity in self._callbacks_and_connectivities:
- callback, callback_connectivity = callback_and_connectivity
- if callback_connectivity is not connectivity:
- callbacks_needing_update.append(callback)
- callback_and_connectivity[1] = connectivity
- return callbacks_needing_update
-
- def _deliver(self, initial_connectivity, initial_callbacks):
- connectivity = initial_connectivity
- callbacks = initial_callbacks
- while True:
- for callback in callbacks:
- callable_util.call_logging_exceptions(
- callback, _CHANNEL_SUBSCRIPTION_CALLBACK_ERROR_LOG_MESSAGE,
- connectivity)
- with self._lock:
- callbacks = self._deliveries(self._connectivity)
- if callbacks:
- connectivity = self._connectivity
- else:
- self._delivering = False
- return
-
- def _spawn_delivery(self, connectivity, callbacks):
- delivering_thread = threading.Thread(
- target=self._deliver, args=(connectivity, callbacks,))
- delivering_thread.start()
- self._delivering = True
-
- # TODO(issue 3064): Don't poll.
- def _poll_connectivity(self, low_channel, initial_try_to_connect):
- try_to_connect = initial_try_to_connect
- low_connectivity = low_channel.check_connectivity_state(try_to_connect)
- with self._lock:
- self._connectivity = _LOW_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY[
- low_connectivity]
- callbacks = tuple(
- callback
- for callback, unused_but_known_to_be_none_connectivity in
- self._callbacks_and_connectivities)
- for callback_and_connectivity in self._callbacks_and_connectivities:
- callback_and_connectivity[1] = self._connectivity
- if callbacks:
- self._spawn_delivery(self._connectivity, callbacks)
- completion_queue = _low.CompletionQueue()
- while True:
- low_channel.watch_connectivity_state(low_connectivity,
- time.time() + 0.2,
- completion_queue, None)
- event = completion_queue.next()
- with self._lock:
- if not self._callbacks_and_connectivities and not self._try_to_connect:
- self._polling = False
- self._connectivity = None
- completion_queue.shutdown()
- break
- try_to_connect = self._try_to_connect
- self._try_to_connect = False
- if event.success or try_to_connect:
- low_connectivity = low_channel.check_connectivity_state(
- try_to_connect)
- with self._lock:
- self._connectivity = _LOW_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY[
- low_connectivity]
- if not self._delivering:
- callbacks = self._deliveries(self._connectivity)
- if callbacks:
- self._spawn_delivery(self._connectivity, callbacks)
-
- def subscribe(self, callback, try_to_connect):
- with self._lock:
- if not self._callbacks_and_connectivities and not self._polling:
- polling_thread = threading.Thread(
- target=self._poll_connectivity,
- args=(self._low_channel, bool(try_to_connect)))
- polling_thread.start()
- self._polling = True
- self._callbacks_and_connectivities.append([callback, None])
- elif not self._delivering and self._connectivity is not None:
- self._spawn_delivery(self._connectivity, (callback,))
- self._try_to_connect |= bool(try_to_connect)
- self._callbacks_and_connectivities.append(
- [callback, self._connectivity])
- else:
- self._try_to_connect |= bool(try_to_connect)
- self._callbacks_and_connectivities.append([callback, None])
-
- def unsubscribe(self, callback):
- with self._lock:
- for index, (subscribed_callback, unused_connectivity
- ) in enumerate(self._callbacks_and_connectivities):
- if callback == subscribed_callback:
- self._callbacks_and_connectivities.pop(index)
- break
-
- def low_channel(self):
- return self._low_channel
diff --git a/src/python/grpcio/grpc/beta/_server_adaptations.py b/src/python/grpcio/grpc/beta/_server_adaptations.py
index 174af2d642..cf10c26d2f 100644
--- a/src/python/grpcio/grpc/beta/_server_adaptations.py
+++ b/src/python/grpcio/grpc/beta/_server_adaptations.py
@@ -41,6 +41,8 @@ from grpc.framework.foundation import logging_pool
from grpc.framework.foundation import stream
from grpc.framework.interfaces.face import face
+# pylint: disable=too-many-return-statements
+
_DEFAULT_POOL_SIZE = 8
@@ -78,7 +80,7 @@ class _FaceServicerContext(face.ServicerContext):
return _ServerProtocolContext(self._servicer_context)
def invocation_metadata(self):
- return _common.cygrpc_metadata(
+ return _common.to_cygrpc_metadata(
self._servicer_context.invocation_metadata())
def initial_metadata(self, initial_metadata):
@@ -179,7 +181,7 @@ def _run_request_pipe_thread(request_iterator, request_consumer,
return
request_consumer.terminate()
- def stop_request_pipe(timeout):
+ def stop_request_pipe(timeout): # pylint: disable=unused-argument
thread_joined.set()
request_pipe_thread = _common.CleanupThread(
@@ -351,27 +353,27 @@ class _GenericRpcHandler(grpc.GenericRpcHandler):
class _Server(interfaces.Server):
- def __init__(self, server):
- self._server = server
+ def __init__(self, grpc_server):
+ self._grpc_server = grpc_server
def add_insecure_port(self, address):
- return self._server.add_insecure_port(address)
+ return self._grpc_server.add_insecure_port(address)
def add_secure_port(self, address, server_credentials):
- return self._server.add_secure_port(address, server_credentials)
+ return self._grpc_server.add_secure_port(address, server_credentials)
def start(self):
- self._server.start()
+ self._grpc_server.start()
def stop(self, grace):
- return self._server.stop(grace)
+ return self._grpc_server.stop(grace)
def __enter__(self):
- self._server.start()
+ self._grpc_server.start()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
- self._server.stop(None)
+ self._grpc_server.stop(None)
return False
diff --git a/src/python/grpcio/grpc/beta/implementations.py b/src/python/grpcio/grpc/beta/implementations.py
index 7093852278..113fd38f8a 100644
--- a/src/python/grpcio/grpc/beta/implementations.py
+++ b/src/python/grpcio/grpc/beta/implementations.py
@@ -29,19 +29,20 @@
"""Entry points into the Beta API of gRPC Python."""
# threading is referenced from specification in this module.
-import abc
-import enum
import threading # pylint: disable=unused-import
-# cardinality and face are referenced from specification in this module.
+# interfaces, cardinality, and face are referenced from specification in this
+# module.
import grpc
from grpc import _auth
from grpc.beta import _client_adaptations
from grpc.beta import _server_adaptations
-from grpc.beta import interfaces
+from grpc.beta import interfaces # pylint: disable=unused-import
from grpc.framework.common import cardinality # pylint: disable=unused-import
from grpc.framework.interfaces.face import face # pylint: disable=unused-import
+# pylint: disable=too-many-arguments
+
ChannelCredentials = grpc.ChannelCredentials
ssl_channel_credentials = grpc.ssl_channel_credentials
CallCredentials = grpc.CallCredentials
@@ -218,7 +219,7 @@ def dynamic_stub(channel, service, cardinalities, options=None):
Returns:
A face.DynamicStub with which RPCs can be invoked.
"""
- effective_options = StubOptions() if options is None else options
+ effective_options = _EMPTY_STUB_OPTIONS if options is None else options
return _client_adaptations.dynamic_stub(
channel._channel, # pylint: disable=protected-access
service,
diff --git a/src/python/grpcio/grpc/framework/foundation/logging_pool.py b/src/python/grpcio/grpc/framework/foundation/logging_pool.py
index 7ee37373fa..0912fba139 100644
--- a/src/python/grpcio/grpc/framework/foundation/logging_pool.py
+++ b/src/python/grpcio/grpc/framework/foundation/logging_pool.py
@@ -39,7 +39,7 @@ def _wrap(behavior):
def _wrapping(*args, **kwargs):
try:
return behavior(*args, **kwargs)
- except Exception as e:
+ except Exception:
logging.exception(
'Unexpected exception from %s executed in logging pool!',
behavior)
diff --git a/src/python/grpcio/grpc/framework/interfaces/base/base.py b/src/python/grpcio/grpc/framework/interfaces/base/base.py
index cb3328296c..aa80e65f57 100644
--- a/src/python/grpcio/grpc/framework/interfaces/base/base.py
+++ b/src/python/grpcio/grpc/framework/interfaces/base/base.py
@@ -46,26 +46,29 @@ import six
# abandonment is referenced from specification in this module.
from grpc.framework.foundation import abandonment # pylint: disable=unused-import
+# pylint: disable=too-many-arguments
+
class NoSuchMethodError(Exception):
"""Indicates that an unrecognized operation has been called.
- Attributes:
- code: A code value to communicate to the other side of the operation along
- with indication of operation termination. May be None.
- details: A details value to communicate to the other side of the operation
- along with indication of operation termination. May be None.
- """
-
- def __init__(self, code, details):
- """Constructor.
-
- Args:
+ Attributes:
code: A code value to communicate to the other side of the operation
along with indication of operation termination. May be None.
details: A details value to communicate to the other side of the
operation along with indication of operation termination. May be None.
"""
+
+ def __init__(self, code, details):
+ """Constructor.
+
+ Args:
+ code: A code value to communicate to the other side of the operation
+ along with indication of operation termination. May be None.
+ details: A details value to communicate to the other side of the
+ operation along with indication of operation termination. May be None.
+ """
+ super(NoSuchMethodError, self).__init__()
self.code = code
self.details = details
diff --git a/src/python/grpcio/grpc/framework/interfaces/face/face.py b/src/python/grpcio/grpc/framework/interfaces/face/face.py
index 6c7e2a3af6..c6c44fe4e4 100644
--- a/src/python/grpcio/grpc/framework/interfaces/face/face.py
+++ b/src/python/grpcio/grpc/framework/interfaces/face/face.py
@@ -42,6 +42,8 @@ from grpc.framework.foundation import abandonment # pylint: disable=unused-impo
from grpc.framework.foundation import future # pylint: disable=unused-import
from grpc.framework.foundation import stream # pylint: disable=unused-import
+# pylint: disable=too-many-arguments
+
class NoSuchMethodError(Exception):
"""Raised by customer code to indicate an unrecognized method.
diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py
index a9f20e6d2a..5fc748483a 100644
--- a/src/python/grpcio/grpc_core_dependencies.py
+++ b/src/python/grpcio/grpc_core_dependencies.py
@@ -33,6 +33,7 @@ CORE_SOURCE_FILES = [
'src/core/lib/profiling/basic_timers.c',
'src/core/lib/profiling/stap_timers.c',
'src/core/lib/support/alloc.c',
+ 'src/core/lib/support/arena.c',
'src/core/lib/support/avl.c',
'src/core/lib/support/backoff.c',
'src/core/lib/support/cmdline.c',
@@ -134,6 +135,9 @@ CORE_SOURCE_FILES = [
'src/core/lib/iomgr/tcp_client_windows.c',
'src/core/lib/iomgr/tcp_posix.c',
'src/core/lib/iomgr/tcp_server_posix.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_common.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c',
+ 'src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c',
'src/core/lib/iomgr/tcp_server_uv.c',
'src/core/lib/iomgr/tcp_server_windows.c',
'src/core/lib/iomgr/tcp_uv.c',
diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py
index c197e92ca5..267d848e74 100644
--- a/src/python/grpcio/grpc_version.py
+++ b/src/python/grpcio/grpc_version.py
@@ -29,4 +29,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio/grpc_version.py.template`!!!
-VERSION='1.2.0.dev0'
+VERSION='1.3.0.dev0'
diff --git a/src/python/grpcio_health_checking/grpc_health/v1/health.py b/src/python/grpcio_health_checking/grpc_health/v1/health.py
index f0f11cf84b..e92c2659b7 100644
--- a/src/python/grpcio_health_checking/grpc_health/v1/health.py
+++ b/src/python/grpcio_health_checking/grpc_health/v1/health.py
@@ -33,9 +33,10 @@ import threading
import grpc
from grpc_health.v1 import health_pb2
+from grpc_health.v1 import health_pb2_grpc
-class HealthServicer(health_pb2.HealthServicer):
+class HealthServicer(health_pb2_grpc.HealthServicer):
"""Servicer handling RPCs for service statuses."""
def __init__(self):
diff --git a/src/python/grpcio_health_checking/grpc_version.py b/src/python/grpcio_health_checking/grpc_version.py
index c1807e9f1c..4ff5e266a1 100644
--- a/src/python/grpcio_health_checking/grpc_version.py
+++ b/src/python/grpcio_health_checking/grpc_version.py
@@ -29,4 +29,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_health_checking/grpc_version.py.template`!!!
-VERSION='1.2.0.dev0'
+VERSION='1.3.0.dev0'
diff --git a/src/python/grpcio_health_checking/setup.py b/src/python/grpcio_health_checking/setup.py
index 072c3263c6..52ee98a2d5 100644
--- a/src/python/grpcio_health_checking/setup.py
+++ b/src/python/grpcio_health_checking/setup.py
@@ -47,7 +47,7 @@ PACKAGE_DIRECTORIES = {
SETUP_REQUIRES = (
'grpcio-tools>={version}'.format(version=grpc_version.VERSION),)
-INSTALL_REQUIRES = ('protobuf>=3.0.0',
+INSTALL_REQUIRES = ('protobuf>=3.2.0',
'grpcio>={version}'.format(version=grpc_version.VERSION),)
COMMAND_CLASS = {
diff --git a/src/python/grpcio_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py
index 3778dcd3e0..8ffc08c04b 100644
--- a/src/python/grpcio_reflection/grpc_version.py
+++ b/src/python/grpcio_reflection/grpc_version.py
@@ -29,4 +29,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_reflection/grpc_version.py.template`!!!
-VERSION='1.2.0.dev0'
+VERSION='1.3.0.dev0'
diff --git a/src/python/grpcio_reflection/setup.py b/src/python/grpcio_reflection/setup.py
index 19aafe443a..e85092db57 100644
--- a/src/python/grpcio_reflection/setup.py
+++ b/src/python/grpcio_reflection/setup.py
@@ -47,7 +47,7 @@ PACKAGE_DIRECTORIES = {
SETUP_REQUIRES = (
'grpcio-tools>={version}'.format(version=grpc_version.VERSION),)
-INSTALL_REQUIRES = ('protobuf>=3.0.0',
+INSTALL_REQUIRES = ('protobuf>=3.2.0',
'grpcio>={version}'.format(version=grpc_version.VERSION),)
COMMAND_CLASS = {
diff --git a/src/python/grpcio_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py
index 33824b6b8f..ba82dce6f6 100644
--- a/src/python/grpcio_tests/grpc_version.py
+++ b/src/python/grpcio_tests/grpc_version.py
@@ -29,4 +29,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/src/python/grpcio_tests/grpc_version.py.template`!!!
-VERSION='1.2.0.dev0'
+VERSION='1.3.0.dev0'
diff --git a/src/python/grpcio_tests/setup.py b/src/python/grpcio_tests/setup.py
index b0c73fc575..b9f0264dae 100644
--- a/src/python/grpcio_tests/setup.py
+++ b/src/python/grpcio_tests/setup.py
@@ -56,7 +56,7 @@ INSTALL_REQUIRES = (
'grpcio>={version}'.format(version=grpc_version.VERSION),
'grpcio-tools>={version}'.format(version=grpc_version.VERSION),
'grpcio-health-checking>={version}'.format(version=grpc_version.VERSION),
- 'oauth2client>=1.4.7', 'protobuf>=3.0.0', 'six>=1.10',)
+ 'oauth2client>=1.4.7', 'protobuf>=3.2.0', 'six>=1.10',)
COMMAND_CLASS = {
# Run `preprocess` *before* doing any packaging!
diff --git a/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py b/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py
index 363b4c5f99..1bc8669dad 100644
--- a/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py
+++ b/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py
@@ -34,6 +34,7 @@ import grpc
from grpc.framework.foundation import logging_pool
from grpc_health.v1 import health
from grpc_health.v1 import health_pb2
+from grpc_health.v1 import health_pb2_grpc
from tests.unit.framework.common import test_constants
@@ -52,11 +53,11 @@ class HealthServicerTest(unittest.TestCase):
server_pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY)
self._server = grpc.server(server_pool)
port = self._server.add_insecure_port('[::]:0')
- health_pb2.add_HealthServicer_to_server(servicer, self._server)
+ health_pb2_grpc.add_HealthServicer_to_server(servicer, self._server)
self._server.start()
channel = grpc.insecure_channel('localhost:%d' % port)
- self._stub = health_pb2.HealthStub(channel)
+ self._stub = health_pb2_grpc.HealthStub(channel)
def test_empty_service(self):
request = health_pb2.HealthCheckRequest()
diff --git a/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py b/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py
index 58f3b364ba..3325d54375 100644
--- a/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py
+++ b/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py
@@ -32,7 +32,7 @@ from concurrent import futures
import unittest
import grpc
-from src.proto.grpc.testing import test_pb2
+from src.proto.grpc.testing import test_pb2_grpc
from tests.interop import _intraop_test_case
from tests.interop import methods
@@ -44,11 +44,11 @@ class InsecureIntraopTest(_intraop_test_case.IntraopTestCase,
def setUp(self):
self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
- test_pb2.add_TestServiceServicer_to_server(methods.TestService(),
- self.server)
+ test_pb2_grpc.add_TestServiceServicer_to_server(methods.TestService(),
+ self.server)
port = self.server.add_insecure_port('[::]:0')
self.server.start()
- self.stub = test_pb2.TestServiceStub(
+ self.stub = test_pb2_grpc.TestServiceStub(
grpc.insecure_channel('localhost:{}'.format(port)))
diff --git a/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py b/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py
index 5fe929b99e..857e00efb3 100644
--- a/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py
+++ b/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py
@@ -32,7 +32,7 @@ from concurrent import futures
import unittest
import grpc
-from src.proto.grpc.testing import test_pb2
+from src.proto.grpc.testing import test_pb2_grpc
from tests.interop import _intraop_test_case
from tests.interop import methods
@@ -45,14 +45,14 @@ class SecureIntraopTest(_intraop_test_case.IntraopTestCase, unittest.TestCase):
def setUp(self):
self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
- test_pb2.add_TestServiceServicer_to_server(methods.TestService(),
- self.server)
+ test_pb2_grpc.add_TestServiceServicer_to_server(methods.TestService(),
+ self.server)
port = self.server.add_secure_port(
'[::]:0',
grpc.ssl_server_credentials(
[(resources.private_key(), resources.certificate_chain())]))
self.server.start()
- self.stub = test_pb2.TestServiceStub(
+ self.stub = test_pb2_grpc.TestServiceStub(
grpc.secure_channel('localhost:{}'.format(port),
grpc.ssl_channel_credentials(
resources.test_root_certificates()), (
diff --git a/src/python/grpcio_tests/tests/interop/methods.py b/src/python/grpcio_tests/tests/interop/methods.py
index 662ea9ce57..e1016f7c0d 100644
--- a/src/python/grpcio_tests/tests/interop/methods.py
+++ b/src/python/grpcio_tests/tests/interop/methods.py
@@ -40,7 +40,7 @@ from grpc.beta import implementations
from src.proto.grpc.testing import empty_pb2
from src.proto.grpc.testing import messages_pb2
-from src.proto.grpc.testing import test_pb2
+from src.proto.grpc.testing import test_pb2_grpc
_INITIAL_METADATA_KEY = "x-grpc-test-echo-initial"
_TRAILING_METADATA_KEY = "x-grpc-test-echo-trailing-bin"
@@ -66,7 +66,7 @@ def _maybe_echo_status_and_message(request, servicer_context):
servicer_context.set_details(request.response_status.message)
-class TestService(test_pb2.TestServiceServicer):
+class TestService(test_pb2_grpc.TestServiceServicer):
def EmptyCall(self, request, context):
_maybe_echo_metadata(context)
diff --git a/src/python/grpcio_tests/tests/interop/server.py b/src/python/grpcio_tests/tests/interop/server.py
index 65f1604eb8..0ae2c97b42 100644
--- a/src/python/grpcio_tests/tests/interop/server.py
+++ b/src/python/grpcio_tests/tests/interop/server.py
@@ -34,7 +34,7 @@ import logging
import time
import grpc
-from src.proto.grpc.testing import test_pb2
+from src.proto.grpc.testing import test_pb2_grpc
from tests.interop import methods
from tests.interop import resources
@@ -53,7 +53,8 @@ def serve():
args = parser.parse_args()
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
- test_pb2.add_TestServiceServicer_to_server(methods.TestService(), server)
+ test_pb2_grpc.add_TestServiceServicer_to_server(methods.TestService(),
+ server)
if args.use_tls:
private_key = resources.private_key()
certificate_chain = resources.certificate_chain()
diff --git a/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py b/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py
index db938e6545..6f9269dd40 100644
--- a/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py
+++ b/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py
@@ -42,6 +42,7 @@ import sys
import tempfile
import threading
import unittest
+import platform
import grpc
from grpc_tools import protoc
@@ -150,6 +151,8 @@ class CommonTestMixin(object):
self.assertEqual(expected_response, response)
+@unittest.skipIf(platform.python_implementation() == "PyPy",
+ "Skip test if run with PyPy")
class SameSeparateTest(unittest.TestCase, SeparateTestMixin):
def setUp(self):
@@ -191,6 +194,8 @@ class SameSeparateTest(unittest.TestCase, SeparateTestMixin):
shutil.rmtree(self.directory)
+@unittest.skipIf(platform.python_implementation() == "PyPy",
+ "Skip test if run with PyPy")
class SameCommonTest(unittest.TestCase, CommonTestMixin):
def setUp(self):
@@ -228,6 +233,8 @@ class SameCommonTest(unittest.TestCase, CommonTestMixin):
shutil.rmtree(self.directory)
+@unittest.skipIf(platform.python_implementation() == "PyPy",
+ "Skip test if run with PyPy")
class SplitCommonTest(unittest.TestCase, CommonTestMixin):
def setUp(self):
@@ -277,6 +284,8 @@ class SplitCommonTest(unittest.TestCase, CommonTestMixin):
shutil.rmtree(self.directory)
+@unittest.skipIf(platform.python_implementation() == "PyPy",
+ "Skip test if run with PyPy")
class SplitSeparateTest(unittest.TestCase, SeparateTestMixin):
def setUp(self):
diff --git a/src/python/grpcio_tests/tests/qps/qps_worker.py b/src/python/grpcio_tests/tests/qps/qps_worker.py
index 025dfb9d4a..7cd53e7bd9 100644
--- a/src/python/grpcio_tests/tests/qps/qps_worker.py
+++ b/src/python/grpcio_tests/tests/qps/qps_worker.py
@@ -33,7 +33,7 @@ import time
from concurrent import futures
import grpc
-from src.proto.grpc.testing import services_pb2
+from src.proto.grpc.testing import services_pb2_grpc
from tests.qps import worker_server
@@ -41,7 +41,7 @@ from tests.qps import worker_server
def run_worker_server(port):
server = grpc.server(futures.ThreadPoolExecutor(max_workers=5))
servicer = worker_server.WorkerServer()
- services_pb2.add_WorkerServiceServicer_to_server(servicer, server)
+ services_pb2_grpc.add_WorkerServiceServicer_to_server(servicer, server)
server.add_insecure_port('[::]:{}'.format(port))
server.start()
servicer.wait_for_quit()
diff --git a/src/python/grpcio_tests/tests/qps/worker_server.py b/src/python/grpcio_tests/tests/qps/worker_server.py
index ca1a777611..de9535f46e 100644
--- a/src/python/grpcio_tests/tests/qps/worker_server.py
+++ b/src/python/grpcio_tests/tests/qps/worker_server.py
@@ -35,7 +35,7 @@ import time
from concurrent import futures
import grpc
from src.proto.grpc.testing import control_pb2
-from src.proto.grpc.testing import services_pb2
+from src.proto.grpc.testing import services_pb2_grpc
from src.proto.grpc.testing import stats_pb2
from tests.qps import benchmark_client
@@ -45,7 +45,7 @@ from tests.qps import histogram
from tests.unit import resources
-class WorkerServer(services_pb2.WorkerServiceServicer):
+class WorkerServer(services_pb2_grpc.WorkerServiceServicer):
"""Python Worker Server implementation."""
def __init__(self):
@@ -87,8 +87,8 @@ class WorkerServer(services_pb2.WorkerServiceServicer):
futures.ThreadPoolExecutor(max_workers=server_threads))
if config.server_type == control_pb2.ASYNC_SERVER:
servicer = benchmark_server.BenchmarkServer()
- services_pb2.add_BenchmarkServiceServicer_to_server(servicer,
- server)
+ services_pb2_grpc.add_BenchmarkServiceServicer_to_server(servicer,
+ server)
elif config.server_type == control_pb2.ASYNC_GENERIC_SERVER:
resp_size = config.payload_config.bytebuf_params.resp_size
servicer = benchmark_server.GenericBenchmarkServer(resp_size)
diff --git a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py
index d06ff064e2..4d73be6204 100644
--- a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py
+++ b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py
@@ -34,6 +34,7 @@ import grpc
from grpc.framework.foundation import logging_pool
from grpc_reflection.v1alpha import reflection
from grpc_reflection.v1alpha import reflection_pb2
+from grpc_reflection.v1alpha import reflection_pb2_grpc
from google.protobuf import descriptor_pool
from google.protobuf import descriptor_pb2
@@ -61,12 +62,12 @@ class ReflectionServicerTest(unittest.TestCase):
server_pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY)
self._server = grpc.server(server_pool)
port = self._server.add_insecure_port('[::]:0')
- reflection_pb2.add_ServerReflectionServicer_to_server(servicer,
- self._server)
+ reflection_pb2_grpc.add_ServerReflectionServicer_to_server(servicer,
+ self._server)
self._server.start()
channel = grpc.insecure_channel('localhost:%d' % port)
- self._stub = reflection_pb2.ServerReflectionStub(channel)
+ self._stub = reflection_pb2_grpc.ServerReflectionStub(channel)
def testFileByName(self):
requests = (reflection_pb2.ServerReflectionRequest(
diff --git a/src/python/grpcio_tests/tests/stress/client.py b/src/python/grpcio_tests/tests/stress/client.py
index b9dbe61d44..b7eb12bff8 100644
--- a/src/python/grpcio_tests/tests/stress/client.py
+++ b/src/python/grpcio_tests/tests/stress/client.py
@@ -34,7 +34,7 @@ import threading
import grpc
from six.moves import queue
-from src.proto.grpc.testing import metrics_pb2
+from src.proto.grpc.testing import metrics_pb2_grpc
from src.proto.grpc.testing import test_pb2
from tests.interop import methods
@@ -139,7 +139,7 @@ def run_test(args):
runners = []
server = grpc.server(futures.ThreadPoolExecutor(max_workers=25))
- metrics_pb2.add_MetricsServiceServicer_to_server(
+ metrics_pb2_grpc.add_MetricsServiceServicer_to_server(
metrics_server.MetricsServer(hist), server)
server.add_insecure_port('[::]:{}'.format(args.metrics_port))
server.start()
diff --git a/src/ruby/ext/grpc/extconf.rb b/src/ruby/ext/grpc/extconf.rb
index b379664bab..ecb66239b9 100644
--- a/src/ruby/ext/grpc/extconf.rb
+++ b/src/ruby/ext/grpc/extconf.rb
@@ -27,6 +27,7 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+require 'etc'
require 'mkmf'
LIBDIR = RbConfig::CONFIG['libdir']
@@ -80,7 +81,9 @@ ENV['BUILDDIR'] = output_dir
unless windows
puts 'Building internal gRPC into ' + grpc_lib_dir
- system("make -j -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config}")
+ nproc = 4
+ nproc = Etc.nprocessors * 2 if Etc.respond_to? :nprocessors
+ system("make -j#{nproc} -C #{grpc_root} #{grpc_lib_dir}/libgrpc.a CONFIG=#{grpc_config}")
exit 1 unless $? == 0
end
diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c
index 52465a4dd7..3ef6f0eb29 100644
--- a/src/ruby/ext/grpc/rb_grpc_imports.generated.c
+++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.c
@@ -296,6 +296,7 @@ gpr_ref_type gpr_ref_import;
gpr_ref_non_zero_type gpr_ref_non_zero_import;
gpr_refn_type gpr_refn_import;
gpr_unref_type gpr_unref_import;
+gpr_ref_is_unique_type gpr_ref_is_unique_import;
gpr_stats_init_type gpr_stats_init_import;
gpr_stats_inc_type gpr_stats_inc_import;
gpr_stats_read_type gpr_stats_read_import;
@@ -589,6 +590,7 @@ void grpc_rb_load_imports(HMODULE library) {
gpr_ref_non_zero_import = (gpr_ref_non_zero_type) GetProcAddress(library, "gpr_ref_non_zero");
gpr_refn_import = (gpr_refn_type) GetProcAddress(library, "gpr_refn");
gpr_unref_import = (gpr_unref_type) GetProcAddress(library, "gpr_unref");
+ gpr_ref_is_unique_import = (gpr_ref_is_unique_type) GetProcAddress(library, "gpr_ref_is_unique");
gpr_stats_init_import = (gpr_stats_init_type) GetProcAddress(library, "gpr_stats_init");
gpr_stats_inc_import = (gpr_stats_inc_type) GetProcAddress(library, "gpr_stats_inc");
gpr_stats_read_import = (gpr_stats_read_type) GetProcAddress(library, "gpr_stats_read");
diff --git a/src/ruby/ext/grpc/rb_grpc_imports.generated.h b/src/ruby/ext/grpc/rb_grpc_imports.generated.h
index b16e673878..ef9845dfe0 100644
--- a/src/ruby/ext/grpc/rb_grpc_imports.generated.h
+++ b/src/ruby/ext/grpc/rb_grpc_imports.generated.h
@@ -839,6 +839,9 @@ extern gpr_refn_type gpr_refn_import;
typedef int(*gpr_unref_type)(gpr_refcount *r);
extern gpr_unref_type gpr_unref_import;
#define gpr_unref gpr_unref_import
+typedef int(*gpr_ref_is_unique_type)(gpr_refcount *r);
+extern gpr_ref_is_unique_type gpr_ref_is_unique_import;
+#define gpr_ref_is_unique gpr_ref_is_unique_import
typedef void(*gpr_stats_init_type)(gpr_stats_counter *c, intptr_t n);
extern gpr_stats_init_type gpr_stats_init_import;
#define gpr_stats_init gpr_stats_init_import
diff --git a/src/ruby/lib/grpc/version.rb b/src/ruby/lib/grpc/version.rb
index ce0892decf..9901158e73 100644
--- a/src/ruby/lib/grpc/version.rb
+++ b/src/ruby/lib/grpc/version.rb
@@ -29,5 +29,5 @@
# GRPC contains the General RPC module.
module GRPC
- VERSION = '1.2.0.dev'
+ VERSION = '1.3.0.dev'
end
diff --git a/src/ruby/qps/proxy-worker.rb b/src/ruby/qps/proxy-worker.rb
new file mode 100755
index 0000000000..077920d1d3
--- /dev/null
+++ b/src/ruby/qps/proxy-worker.rb
@@ -0,0 +1,160 @@
+#!/usr/bin/env ruby
+
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Proxy of worker service implementation for running a PHP client
+
+this_dir = File.expand_path(File.dirname(__FILE__))
+lib_dir = File.join(File.dirname(this_dir), 'lib')
+$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
+$LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir)
+
+require 'grpc'
+require 'optparse'
+require 'histogram'
+require 'etc'
+require 'facter'
+require 'qps-common'
+require 'src/proto/grpc/testing/services_services_pb'
+require 'src/proto/grpc/testing/proxy-service_services_pb'
+
+class ProxyBenchmarkClientServiceImpl < Grpc::Testing::ProxyClientService::Service
+ def initialize(port)
+ @mytarget = "localhost:" + port.to_s
+ end
+ def setup(config)
+ @config = config
+ @histres = config.histogram_params.resolution
+ @histmax = config.histogram_params.max_possible
+ @histogram = Histogram.new(@histres, @histmax)
+ @start_time = Time.now
+ # TODO(vjpai): Support multiple client channels by spawning off a PHP client per channel
+ command = "php " + File.expand_path(File.dirname(__FILE__)) + "/../../php/tests/qps/client.php " + @mytarget
+ puts "Starting command: " + command
+ @php_pid = spawn(command)
+ end
+ def stop
+ Process.kill("TERM", @php_pid)
+ Process.wait(@php_pid)
+ end
+ def get_config(_args, _call)
+ puts "Answering get_config"
+ @config
+ end
+ def report_time(call)
+ puts "Starting a time reporting stream"
+ call.each_remote_read do |lat|
+ @histogram.add((lat.latency)*1e9)
+ end
+ Grpc::Testing::Void.new
+ end
+ def mark(reset)
+ lat = Grpc::Testing::HistogramData.new(
+ bucket: @histogram.contents,
+ min_seen: @histogram.minimum,
+ max_seen: @histogram.maximum,
+ sum: @histogram.sum,
+ sum_of_squares: @histogram.sum_of_squares,
+ count: @histogram.count
+ )
+ elapsed = Time.now-@start_time
+ if reset
+ @start_time = Time.now
+ @histogram = Histogram.new(@histres, @histmax)
+ end
+ Grpc::Testing::ClientStats.new(latencies: lat, time_elapsed: elapsed)
+ end
+end
+
+class ProxyWorkerServiceImpl < Grpc::Testing::WorkerService::Service
+ def cpu_cores
+ Facter.value('processors')['count']
+ end
+ # Leave run_server unimplemented since this proxies for a client only.
+ # If the driver tries to use this as a server, it will get an unimplemented
+ # status return value.
+ def run_client(reqs)
+ q = EnumeratorQueue.new(self)
+ Thread.new {
+ reqs.each do |req|
+ case req.argtype.to_s
+ when 'setup'
+ @bmc.setup(req.setup)
+ q.push(Grpc::Testing::ClientStatus.new(stats: @bmc.mark(false)))
+ when 'mark'
+ q.push(Grpc::Testing::ClientStatus.new(stats:
+ @bmc.mark(req.mark.reset)))
+ end
+ end
+ @bmc.stop
+ q.push(self)
+ }
+ q.each_item
+ end
+ def core_count(_args, _call)
+ Grpc::Testing::CoreResponse.new(cores: cpu_cores)
+ end
+ def quit_worker(_args, _call)
+ Thread.new {
+ sleep 3
+ @server.stop
+ }
+ Grpc::Testing::Void.new
+ end
+ def initialize(s, bmc)
+ @server = s
+ @bmc = bmc
+ end
+end
+
+def proxymain
+ options = {
+ 'driver_port' => 0
+ }
+ OptionParser.new do |opts|
+ opts.banner = 'Usage: [--driver_port <port>]'
+ opts.on('--driver_port PORT', '<port>') do |v|
+ options['driver_port'] = v
+ end
+ end.parse!
+
+ # Configure any errors with client or server child threads to surface
+ Thread.abort_on_exception = true
+
+ s = GRPC::RpcServer.new
+ port = s.add_http2_port("0.0.0.0:" + options['driver_port'].to_s,
+ :this_port_is_insecure)
+ bmc = ProxyBenchmarkClientServiceImpl.new(port)
+ s.handle(bmc)
+ s.handle(ProxyWorkerServiceImpl.new(s, bmc))
+ s.run
+end
+
+proxymain
diff --git a/src/ruby/qps/src/proto/grpc/testing/proxy-service_pb.rb b/src/ruby/qps/src/proto/grpc/testing/proxy-service_pb.rb
new file mode 100644
index 0000000000..d238198cca
--- /dev/null
+++ b/src/ruby/qps/src/proto/grpc/testing/proxy-service_pb.rb
@@ -0,0 +1,17 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: src/proto/grpc/testing/proxy-service.proto
+
+require 'google/protobuf'
+
+require 'src/proto/grpc/testing/control_pb'
+Google::Protobuf::DescriptorPool.generated_pool.build do
+ add_message "grpc.testing.ProxyStat" do
+ optional :latency, :double, 1
+ end
+end
+
+module Grpc
+ module Testing
+ ProxyStat = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.ProxyStat").msgclass
+ end
+end
diff --git a/src/ruby/qps/src/proto/grpc/testing/proxy-service_services_pb.rb b/src/ruby/qps/src/proto/grpc/testing/proxy-service_services_pb.rb
new file mode 100644
index 0000000000..37ddbf5b03
--- /dev/null
+++ b/src/ruby/qps/src/proto/grpc/testing/proxy-service_services_pb.rb
@@ -0,0 +1,55 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# Source: src/proto/grpc/testing/proxy-service.proto for package 'grpc.testing'
+# Original file comments:
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+require 'grpc'
+require 'src/proto/grpc/testing/proxy-service_pb'
+
+module Grpc
+ module Testing
+ module ProxyClientService
+ class Service
+
+ include GRPC::GenericService
+
+ self.marshal_class_method = :encode
+ self.unmarshal_class_method = :decode
+ self.service_name = 'grpc.testing.ProxyClientService'
+
+ rpc :GetConfig, Void, ClientConfig
+ rpc :ReportTime, stream(ProxyStat), Void
+ end
+
+ Stub = Service.rpc_stub_class
+ end
+ end
+end
diff --git a/src/ruby/tools/version.rb b/src/ruby/tools/version.rb
index 8f3d2ba81c..632c0100bd 100644
--- a/src/ruby/tools/version.rb
+++ b/src/ruby/tools/version.rb
@@ -29,6 +29,6 @@
module GRPC
module Tools
- VERSION = '1.2.0.dev'
+ VERSION = '1.3.0.dev'
end
end
diff --git a/templates/binding.gyp.template b/templates/binding.gyp.template
index 2290411d54..5e401e8977 100644
--- a/templates/binding.gyp.template
+++ b/templates/binding.gyp.template
@@ -45,7 +45,11 @@
# out. It can be re-enabled for one build by setting the npm config
# variable grpc_uv to true, and it can be re-enabled permanently by
# setting it to true here.
- 'grpc_uv%': 'false'
+ 'grpc_uv%': 'false',
+ # Some Node installations use the system installation of OpenSSL, and on
+ # some systems, the system OpenSSL still does not have ALPN support. This
+ # will let users recompile gRPC to work without ALPN.
+ 'grpc_alpn%': 'true'
},
'target_defaults': {
'include_dirs': [
@@ -75,10 +79,16 @@
'OPENSSL_NO_ASM'
]
}, {
- # As of the beginning of 2017, we only support versions of Node with
- # embedded versions of OpenSSL that support ALPN
- 'defines': [
- 'TSI_OPENSSL_ALPN_SUPPORT=1'
+ 'conditions': [
+ ['grpc_alpn=="true"', {
+ 'defines': [
+ 'TSI_OPENSSL_ALPN_SUPPORT=1'
+ ],
+ }, {
+ 'defines': [
+ 'TSI_OPENSSL_ALPN_SUPPORT=0'
+ ],
+ }]
],
'include_dirs': [
'<(node_root_dir)/deps/openssl/openssl/include',
diff --git a/templates/src/csharp/Grpc.Auth/project.json.template b/templates/src/csharp/Grpc.Auth/project.json.template
index 8bcac1ac74..aa233db586 100644
--- a/templates/src/csharp/Grpc.Auth/project.json.template
+++ b/templates/src/csharp/Grpc.Auth/project.json.template
@@ -24,7 +24,7 @@
},
"dependencies": {
"Grpc.Core": "${settings.csharp_version}",
- "Google.Apis.Auth": "1.16.0"
+ "Google.Apis.Auth": "1.21.0"
},
"frameworks": {
"net45": { },
diff --git a/templates/src/csharp/Grpc.Core.Tests/project.json.template b/templates/src/csharp/Grpc.Core.Tests/project.json.template
index 8a3e0755ff..b5f8190443 100644
--- a/templates/src/csharp/Grpc.Core.Tests/project.json.template
+++ b/templates/src/csharp/Grpc.Core.Tests/project.json.template
@@ -6,10 +6,10 @@
"Grpc.Core": {
"target": "project"
},
- "Newtonsoft.Json": "8.0.3",
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*",
- "NUnit.ConsoleRunner": "3.2.0",
+ "Newtonsoft.Json": "9.0.1",
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0",
+ "NUnit.ConsoleRunner": "3.6.0",
"OpenCover": "4.6.519",
"ReportGenerator": "2.4.4.0"
},
diff --git a/templates/src/csharp/Grpc.Examples.Tests/project.json.template b/templates/src/csharp/Grpc.Examples.Tests/project.json.template
index 0a9eb7c74d..da60c017a3 100644
--- a/templates/src/csharp/Grpc.Examples.Tests/project.json.template
+++ b/templates/src/csharp/Grpc.Examples.Tests/project.json.template
@@ -6,8 +6,8 @@
"Grpc.Examples": {
"target": "project"
},
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*"
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0"
},
"frameworks": {
"net45": { },
diff --git a/templates/src/csharp/Grpc.Examples/project.json.template b/templates/src/csharp/Grpc.Examples/project.json.template
index b8a8314de1..5de965cb1b 100644
--- a/templates/src/csharp/Grpc.Examples/project.json.template
+++ b/templates/src/csharp/Grpc.Examples/project.json.template
@@ -6,15 +6,10 @@
"Grpc.Core": {
"target": "project"
},
- "Google.Protobuf": "3.0.0"
+ "Google.Protobuf": "3.2.0"
},
"frameworks": {
- "net45": {
- "frameworkAssemblies": {
- "System.Runtime": "",
- "System.IO": ""
- }
- },
+ "net45": {},
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
diff --git a/templates/src/csharp/Grpc.HealthCheck.Tests/project.json.template b/templates/src/csharp/Grpc.HealthCheck.Tests/project.json.template
index c63da96db7..4a993326c3 100644
--- a/templates/src/csharp/Grpc.HealthCheck.Tests/project.json.template
+++ b/templates/src/csharp/Grpc.HealthCheck.Tests/project.json.template
@@ -6,8 +6,8 @@
"Grpc.HealthCheck": {
"target": "project"
},
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*"
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0"
},
"frameworks": {
"net45": { },
diff --git a/templates/src/csharp/Grpc.HealthCheck/project.json.template b/templates/src/csharp/Grpc.HealthCheck/project.json.template
index cba6894015..9cd0d83a9b 100644
--- a/templates/src/csharp/Grpc.HealthCheck/project.json.template
+++ b/templates/src/csharp/Grpc.HealthCheck/project.json.template
@@ -24,15 +24,10 @@
},
"dependencies": {
"Grpc.Core": "${settings.csharp_version}",
- "Google.Protobuf": "3.0.0"
+ "Google.Protobuf": "3.2.0"
},
"frameworks": {
- "net45": {
- "frameworkAssemblies": {
- "System.Runtime": "",
- "System.IO": ""
- }
- },
+ "net45": {},
"netstandard1.5": {
"dependencies": {
"NETStandard.Library": "1.6.0"
diff --git a/templates/src/csharp/Grpc.IntegrationTesting/project.json.template b/templates/src/csharp/Grpc.IntegrationTesting/project.json.template
index 3ce94e5838..74b928110f 100644
--- a/templates/src/csharp/Grpc.IntegrationTesting/project.json.template
+++ b/templates/src/csharp/Grpc.IntegrationTesting/project.json.template
@@ -9,18 +9,15 @@
"Grpc.Core": {
"target": "project"
},
- "Google.Protobuf": "3.0.0",
- "CommandLineParser.Unofficial": "2.0.275",
- "Moq": "4.6.38-alpha",
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*"
+ "Google.Protobuf": "3.2.0",
+ "CommandLineParser": "2.1.1-beta",
+ "Moq": "4.7.0",
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0"
},
"frameworks": {
"net45": {
- "frameworkAssemblies": {
- "System.Runtime": "",
- "System.IO": ""
- }
+ "frameworkAssemblies": {}
},
"netcoreapp1.0": {
"imports": [
diff --git a/templates/src/csharp/Grpc.Reflection.Tests/project.json.template b/templates/src/csharp/Grpc.Reflection.Tests/project.json.template
index 2869609138..65d200e30b 100644
--- a/templates/src/csharp/Grpc.Reflection.Tests/project.json.template
+++ b/templates/src/csharp/Grpc.Reflection.Tests/project.json.template
@@ -6,8 +6,8 @@
"Grpc.Reflection": {
"target": "project"
},
- "NUnit": "3.2.0",
- "NUnitLite": "3.2.0-*"
+ "NUnit": "3.6.0",
+ "NUnitLite": "3.6.0"
},
"frameworks": {
"net45": { },
diff --git a/templates/src/csharp/Grpc.Reflection/project.json.template b/templates/src/csharp/Grpc.Reflection/project.json.template
index 8a33e1ccc9..e6f65f8ab3 100644
--- a/templates/src/csharp/Grpc.Reflection/project.json.template
+++ b/templates/src/csharp/Grpc.Reflection/project.json.template
@@ -24,15 +24,10 @@
},
"dependencies": {
"Grpc.Core": "${settings.csharp_version}",
- "Google.Protobuf": "3.0.0"
+ "Google.Protobuf": "3.2.0"
},
"frameworks": {
- "net45": {
- "frameworkAssemblies": {
- "System.Runtime": "",
- "System.IO": ""
- }
- },
+ "net45": {},
"netstandard1.5": {
"dependencies": {
"NETStandard.Library": "1.6.0"
diff --git a/templates/tools/dockerfile/apt_get_pyenv.include b/templates/tools/dockerfile/apt_get_pyenv.include
index 816b27904f..ef0964e597 100644
--- a/templates/tools/dockerfile/apt_get_pyenv.include
+++ b/templates/tools/dockerfile/apt_get_pyenv.include
@@ -12,6 +12,9 @@ RUN apt-get update && apt-get install -y ${'\\'}
# Install Pyenv and dev Python versions 3.5 and 3.6
RUN curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
+ENV PATH /root/.pyenv/bin:$PATH
+RUN eval "$(pyenv init -)"
+RUN eval "$(pyenv virtualenv-init -)"
RUN pyenv update
RUN pyenv install 3.5-dev
RUN pyenv install 3.6-dev
diff --git a/templates/tools/dockerfile/csharp_dotnetcli_deps.include b/templates/tools/dockerfile/csharp_dotnetcli_deps.include
index 430f3fa3f2..058ce15fb5 100644
--- a/templates/tools/dockerfile/csharp_dotnetcli_deps.include
+++ b/templates/tools/dockerfile/csharp_dotnetcli_deps.include
@@ -1,7 +1,11 @@
# Install dotnet SDK based on https://www.microsoft.com/net/core#debian
RUN apt-get update && apt-get install -y curl libunwind8 gettext
-RUN curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809130
-RUN mkdir -p /opt/dotnet && tar zxf dotnet.tar.gz -C /opt/dotnet
+# dotnet-dev-1.0.0-preview2-003121
+RUN curl -sSL -o dotnet100.tar.gz https://go.microsoft.com/fwlink/?LinkID=809130
+RUN mkdir -p /opt/dotnet && tar zxf dotnet100.tar.gz -C /opt/dotnet
+# dotnet-dev-1.0.1
+RUN curl -sSL -o dotnet101.tar.gz https://go.microsoft.com/fwlink/?LinkID=843453
+RUN mkdir -p /opt/dotnet && tar zxf dotnet101.tar.gz -C /opt/dotnet
RUN ln -s /opt/dotnet/dotnet /usr/local/bin
# Trigger the population of the local package cache
diff --git a/templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template b/templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template
index 6204c3e2cb..12b9984425 100644
--- a/templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template
+++ b/templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template
@@ -33,7 +33,7 @@
<%include file="../../go_path.include"/>
<%include file="../../python_deps.include"/>
- RUN pip install twisted h2
+ RUN pip install twisted h2 hyper
# Define the default command.
CMD ["bash"]
diff --git a/templates/tools/dockerfile/python_deps.include b/templates/tools/dockerfile/python_deps.include
index 26c91f495d..2c12981418 100644
--- a/templates/tools/dockerfile/python_deps.include
+++ b/templates/tools/dockerfile/python_deps.include
@@ -11,4 +11,4 @@ RUN apt-get update && apt-get install -y ${'\\'}
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
diff --git a/templates/tools/dockerfile/test/bazel/Dockerfile.template b/templates/tools/dockerfile/test/bazel/Dockerfile.template
deleted file mode 100644
index 82f90bef68..0000000000
--- a/templates/tools/dockerfile/test/bazel/Dockerfile.template
+++ /dev/null
@@ -1,48 +0,0 @@
-%YAML 1.2
---- |
- # Copyright 2015, Google Inc.
- # All rights reserved.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions are
- # met:
- #
- # * Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # * Redistributions in binary form must reproduce the above
- # copyright notice, this list of conditions and the following disclaimer
- # in the documentation and/or other materials provided with the
- # distribution.
- # * Neither the name of Google Inc. nor the names of its
- # contributors may be used to endorse or promote products derived from
- # this software without specific prior written permission.
- #
- # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- FROM ubuntu:15.10
-
- <%include file="../../apt_get_basic.include"/>
-
- #========================
- # Bazel installation
- RUN apt-get install -y software-properties-common g++
- RUN echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" > /etc/apt/sources.list.d/bazel.list
- RUN curl https://bazel.build/bazel-release.pub.gpg | apt-key add -
- RUN apt-get -y update
- RUN apt-get -y install bazel
-
- RUN mkdir -p /var/local/jenkins
-
- # Define the default command.
- CMD ["bash"]
-
diff --git a/test/core/census/BUILD b/test/core/census/BUILD
index 9ec48bdfe2..49680ab91f 100644
--- a/test/core/census/BUILD
+++ b/test/core/census/BUILD
@@ -27,6 +27,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+licenses(["notice"]) # 3-clause BSD
+
cc_test(
name = "context_test",
srcs = ["context_test.c"],
diff --git a/test/core/channel/BUILD b/test/core/channel/BUILD
index 42cb468485..c6590465f1 100644
--- a/test/core/channel/BUILD
+++ b/test/core/channel/BUILD
@@ -27,6 +27,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+licenses(["notice"]) # 3-clause BSD
+
cc_test(
name = "channel_args_test",
srcs = ["channel_args_test.c"],
diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c
index 76bb57346c..af551c4928 100644
--- a/test/core/channel/channel_stack_test.c
+++ b/test/core/channel/channel_stack_test.c
@@ -68,7 +68,7 @@ static void channel_destroy_func(grpc_exec_ctx *exec_ctx,
static void call_destroy_func(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *ignored) {
+ grpc_closure *ignored) {
++*(int *)(elem->channel_data);
}
@@ -139,10 +139,16 @@ static void test_create_channel_stack(void) {
GPR_ASSERT(*channel_data == 0);
call_stack = gpr_malloc(channel_stack->call_stack_size);
- grpc_error *error =
- grpc_call_stack_init(&exec_ctx, channel_stack, 1, free_call, call_stack,
- NULL, NULL, path, gpr_now(GPR_CLOCK_MONOTONIC),
- gpr_inf_future(GPR_CLOCK_MONOTONIC), call_stack);
+ const grpc_call_element_args args = {
+ .call_stack = call_stack,
+ .server_transport_data = NULL,
+ .context = NULL,
+ .path = path,
+ .start_time = gpr_now(GPR_CLOCK_MONOTONIC),
+ .deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC),
+ .arena = NULL};
+ grpc_error *error = grpc_call_stack_init(&exec_ctx, channel_stack, 1,
+ free_call, call_stack, &args);
GPR_ASSERT(error == GRPC_ERROR_NONE);
GPR_ASSERT(call_stack->count == 1);
call_elem = grpc_call_stack_element(call_stack, 0);
diff --git a/test/core/client_channel/parse_address_test.c b/test/core/client_channel/parse_address_test.c
new file mode 100644
index 0000000000..37dd0fba52
--- /dev/null
+++ b/test/core/client_channel/parse_address_test.c
@@ -0,0 +1,116 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/ext/client_channel/parse_address.h"
+#include "src/core/lib/iomgr/sockaddr.h"
+
+#include <string.h>
+#ifdef GRPC_HAVE_UNIX_SOCKET
+#include <sys/un.h>
+#endif
+
+#include <grpc/support/log.h>
+
+#include "src/core/lib/iomgr/exec_ctx.h"
+#include "src/core/lib/iomgr/socket_utils.h"
+#include "test/core/util/test_config.h"
+
+#ifdef GRPC_HAVE_UNIX_SOCKET
+
+static void test_parse_unix(const char *uri_text, const char *pathname) {
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, uri_text, 0);
+ grpc_resolved_address addr;
+
+ GPR_ASSERT(1 == parse_unix(uri, &addr));
+ struct sockaddr_un *addr_un = (struct sockaddr_un *)addr.addr;
+ GPR_ASSERT(AF_UNIX == addr_un->sun_family);
+ GPR_ASSERT(0 == strcmp(addr_un->sun_path, pathname));
+
+ grpc_uri_destroy(uri);
+ grpc_exec_ctx_finish(&exec_ctx);
+}
+
+#else /* GRPC_HAVE_UNIX_SOCKET */
+
+static void test_parse_unix(const char *uri_text, const char *pathname) {}
+
+#endif /* GRPC_HAVE_UNIX_SOCKET */
+
+static void test_parse_ipv4(const char *uri_text, const char *host,
+ unsigned short port) {
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, uri_text, 0);
+ grpc_resolved_address addr;
+ char ntop_buf[INET_ADDRSTRLEN];
+
+ GPR_ASSERT(1 == parse_ipv4(uri, &addr));
+ struct sockaddr_in *addr_in = (struct sockaddr_in *)addr.addr;
+ GPR_ASSERT(AF_INET == addr_in->sin_family);
+ GPR_ASSERT(NULL != grpc_inet_ntop(AF_INET, &addr_in->sin_addr, ntop_buf,
+ sizeof(ntop_buf)));
+ GPR_ASSERT(0 == strcmp(ntop_buf, host));
+ GPR_ASSERT(ntohs(addr_in->sin_port) == port);
+
+ grpc_uri_destroy(uri);
+ grpc_exec_ctx_finish(&exec_ctx);
+}
+
+static void test_parse_ipv6(const char *uri_text, const char *host,
+ unsigned short port, uint32_t scope_id) {
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, uri_text, 0);
+ grpc_resolved_address addr;
+ char ntop_buf[INET6_ADDRSTRLEN];
+
+ GPR_ASSERT(1 == parse_ipv6(uri, &addr));
+ struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr.addr;
+ GPR_ASSERT(AF_INET6 == addr_in6->sin6_family);
+ GPR_ASSERT(NULL != grpc_inet_ntop(AF_INET6, &addr_in6->sin6_addr, ntop_buf,
+ sizeof(ntop_buf)));
+ GPR_ASSERT(0 == strcmp(ntop_buf, host));
+ GPR_ASSERT(ntohs(addr_in6->sin6_port) == port);
+ GPR_ASSERT(addr_in6->sin6_scope_id == scope_id);
+
+ grpc_uri_destroy(uri);
+ grpc_exec_ctx_finish(&exec_ctx);
+}
+
+int main(int argc, char **argv) {
+ grpc_test_init(argc, argv);
+
+ test_parse_unix("unix:/path/name", "/path/name");
+ test_parse_ipv4("ipv4:192.0.2.1:12345", "192.0.2.1", 12345);
+ test_parse_ipv6("ipv6:[2001:db8::1]:12345", "2001:db8::1", 12345, 0);
+ test_parse_ipv6("ipv6:[2001:db8::1%252]:12345", "2001:db8::1", 12345, 2);
+}
diff --git a/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
index 3e3401165c..187757d5b3 100644
--- a/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
+++ b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c
@@ -69,7 +69,7 @@ static grpc_error *my_resolve_address(const char *name, const char *addr,
static grpc_resolver *create_resolver(grpc_exec_ctx *exec_ctx,
const char *name) {
grpc_resolver_factory *factory = grpc_resolver_factory_lookup("dns");
- grpc_uri *uri = grpc_uri_parse(name, 0);
+ grpc_uri *uri = grpc_uri_parse(exec_ctx, name, 0);
GPR_ASSERT(uri);
grpc_resolver_args args;
memset(&args, 0, sizeof(args));
diff --git a/test/core/client_channel/resolvers/dns_resolver_test.c b/test/core/client_channel/resolvers/dns_resolver_test.c
index 9dd5aed091..919a85d58f 100644
--- a/test/core/client_channel/resolvers/dns_resolver_test.c
+++ b/test/core/client_channel/resolvers/dns_resolver_test.c
@@ -43,7 +43,7 @@ static grpc_combiner *g_combiner;
static void test_succeeds(grpc_resolver_factory *factory, const char *string) {
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
- grpc_uri *uri = grpc_uri_parse(string, 0);
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, string, 0);
grpc_resolver_args args;
grpc_resolver *resolver;
gpr_log(GPR_DEBUG, "test: '%s' should be valid for '%s'", string,
@@ -61,7 +61,7 @@ static void test_succeeds(grpc_resolver_factory *factory, const char *string) {
static void test_fails(grpc_resolver_factory *factory, const char *string) {
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
- grpc_uri *uri = grpc_uri_parse(string, 0);
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, string, 0);
grpc_resolver_args args;
grpc_resolver *resolver;
gpr_log(GPR_DEBUG, "test: '%s' should be invalid for '%s'", string,
diff --git a/test/core/client_channel/resolvers/sockaddr_resolver_test.c b/test/core/client_channel/resolvers/sockaddr_resolver_test.c
index 68831ab7c7..bc4f02c339 100644
--- a/test/core/client_channel/resolvers/sockaddr_resolver_test.c
+++ b/test/core/client_channel/resolvers/sockaddr_resolver_test.c
@@ -57,7 +57,7 @@ void on_resolution_cb(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
static void test_succeeds(grpc_resolver_factory *factory, const char *string) {
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
- grpc_uri *uri = grpc_uri_parse(string, 0);
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, string, 0);
grpc_resolver_args args;
grpc_resolver *resolver;
gpr_log(GPR_DEBUG, "test: '%s' should be valid for '%s'", string,
@@ -84,7 +84,7 @@ static void test_succeeds(grpc_resolver_factory *factory, const char *string) {
static void test_fails(grpc_resolver_factory *factory, const char *string) {
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
- grpc_uri *uri = grpc_uri_parse(string, 0);
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, string, 0);
grpc_resolver_args args;
grpc_resolver *resolver;
gpr_log(GPR_DEBUG, "test: '%s' should be invalid for '%s'", string,
diff --git a/test/core/client_channel/uri_fuzzer_test.c b/test/core/client_channel/uri_fuzzer_test.c
index d2e3fb40ea..baadd4fc65 100644
--- a/test/core/client_channel/uri_fuzzer_test.c
+++ b/test/core/client_channel/uri_fuzzer_test.c
@@ -38,6 +38,7 @@
#include <grpc/support/alloc.h>
#include "src/core/ext/client_channel/uri_parser.h"
+#include "src/core/lib/iomgr/exec_ctx.h"
bool squelch = true;
bool leak_check = true;
@@ -47,10 +48,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
memcpy(s, data, size);
s[size] = 0;
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_uri *x;
- if ((x = grpc_uri_parse(s, 1))) {
+ if ((x = grpc_uri_parse(&exec_ctx, s, 1))) {
grpc_uri_destroy(x);
}
+ grpc_exec_ctx_finish(&exec_ctx);
gpr_free(s);
return 0;
}
diff --git a/test/core/client_channel/uri_parser_test.c b/test/core/client_channel/uri_parser_test.c
index 5f32d3270c..8a127f72eb 100644
--- a/test/core/client_channel/uri_parser_test.c
+++ b/test/core/client_channel/uri_parser_test.c
@@ -37,29 +37,35 @@
#include <grpc/support/log.h>
+#include "src/core/lib/iomgr/exec_ctx.h"
#include "test/core/util/test_config.h"
static void test_succeeds(const char *uri_text, const char *scheme,
const char *authority, const char *path,
const char *query, const char *fragment) {
- grpc_uri *uri = grpc_uri_parse(uri_text, 0);
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, uri_text, 0);
GPR_ASSERT(uri);
GPR_ASSERT(0 == strcmp(scheme, uri->scheme));
GPR_ASSERT(0 == strcmp(authority, uri->authority));
GPR_ASSERT(0 == strcmp(path, uri->path));
GPR_ASSERT(0 == strcmp(query, uri->query));
GPR_ASSERT(0 == strcmp(fragment, uri->fragment));
+ grpc_exec_ctx_finish(&exec_ctx);
grpc_uri_destroy(uri);
}
static void test_fails(const char *uri_text) {
- GPR_ASSERT(NULL == grpc_uri_parse(uri_text, 0));
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ GPR_ASSERT(NULL == grpc_uri_parse(&exec_ctx, uri_text, 0));
+ grpc_exec_ctx_finish(&exec_ctx);
}
static void test_query_parts() {
{
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
const char *uri_text = "http://foo/path?a&b=B&c=&#frag";
- grpc_uri *uri = grpc_uri_parse(uri_text, 0);
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, uri_text, 0);
GPR_ASSERT(uri);
GPR_ASSERT(0 == strcmp("http", uri->scheme));
@@ -86,12 +92,14 @@ static void test_query_parts() {
GPR_ASSERT(NULL == grpc_uri_get_query_arg(uri, ""));
GPR_ASSERT(0 == strcmp("frag", uri->fragment));
+ grpc_exec_ctx_finish(&exec_ctx);
grpc_uri_destroy(uri);
}
{
/* test the current behavior of multiple query part values */
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
const char *uri_text = "http://auth/path?foo=bar=baz&foobar==";
- grpc_uri *uri = grpc_uri_parse(uri_text, 0);
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, uri_text, 0);
GPR_ASSERT(uri);
GPR_ASSERT(0 == strcmp("http", uri->scheme));
@@ -103,12 +111,14 @@ static void test_query_parts() {
GPR_ASSERT(0 == strcmp("bar", grpc_uri_get_query_arg(uri, "foo")));
GPR_ASSERT(0 == strcmp("", grpc_uri_get_query_arg(uri, "foobar")));
+ grpc_exec_ctx_finish(&exec_ctx);
grpc_uri_destroy(uri);
}
{
/* empty query */
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
const char *uri_text = "http://foo/path";
- grpc_uri *uri = grpc_uri_parse(uri_text, 0);
+ grpc_uri *uri = grpc_uri_parse(&exec_ctx, uri_text, 0);
GPR_ASSERT(uri);
GPR_ASSERT(0 == strcmp("http", uri->scheme));
@@ -119,6 +129,7 @@ static void test_query_parts() {
GPR_ASSERT(NULL == uri->query_parts);
GPR_ASSERT(NULL == uri->query_parts_values);
GPR_ASSERT(0 == strcmp("", uri->fragment));
+ grpc_exec_ctx_finish(&exec_ctx);
grpc_uri_destroy(uri);
}
}
@@ -142,6 +153,8 @@ int main(int argc, char **argv) {
test_succeeds("http:?legit#twice", "http", "", "", "legit", "twice");
test_succeeds("http://foo?bar#lol?", "http", "foo", "", "bar", "lol?");
test_succeeds("http://foo?bar#lol?/", "http", "foo", "", "bar", "lol?/");
+ test_succeeds("ipv6:[2001:db8::1%252]:12345", "ipv6", "",
+ "[2001:db8::1%2]:12345", "", "");
test_fails("xyz");
test_fails("http:?dangling-pct-%0");
diff --git a/test/core/compression/BUILD b/test/core/compression/BUILD
index a243a72029..9ddb4c52b4 100644
--- a/test/core/compression/BUILD
+++ b/test/core/compression/BUILD
@@ -27,6 +27,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+licenses(["notice"]) # 3-clause BSD
+
cc_test(
name = "algorithm_test",
srcs = ["algorithm_test.c"],
diff --git a/test/core/end2end/BUILD b/test/core/end2end/BUILD
index a40fb8e083..0cef7aa01d 100644
--- a/test/core/end2end/BUILD
+++ b/test/core/end2end/BUILD
@@ -63,8 +63,8 @@ cc_library(
cc_library(
name = 'http_proxy',
- hdrs = ['fixtures/http_proxy.h'],
- srcs = ['fixtures/http_proxy.c'],
+ hdrs = ['fixtures/http_proxy_fixture.h'],
+ srcs = ['fixtures/http_proxy_fixture.c'],
copts = ['-std=c99'],
deps = ['//:gpr', '//:grpc', '//test/core/util:grpc_test_util']
)
diff --git a/test/core/end2end/end2end_tests.h b/test/core/end2end/end2end_tests.h
index cb0afd9cd9..cdb26a67e9 100644
--- a/test/core/end2end/end2end_tests.h
+++ b/test/core/end2end/end2end_tests.h
@@ -39,12 +39,15 @@
typedef struct grpc_end2end_test_fixture grpc_end2end_test_fixture;
typedef struct grpc_end2end_test_config grpc_end2end_test_config;
+/* Test feature flags. */
#define FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION 1
#define FEATURE_MASK_SUPPORTS_HOSTNAME_VERIFICATION 2
#define FEATURE_MASK_SUPPORTS_PER_CALL_CREDENTIALS 4
#define FEATURE_MASK_SUPPORTS_REQUEST_PROXYING 8
#define FEATURE_MASK_SUPPORTS_CLIENT_CHANNEL 16
#define FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER 32
+#define FEATURE_MASK_DOES_NOT_SUPPORT_RESOURCE_QUOTA_SERVER 64
+#define FEATURE_MASK_DOES_NOT_SUPPORT_NETWORK_STATUS_CHANGE 128
#define FAIL_AUTH_CHECK_SERVER_ARG_NAME "fail_auth_check"
@@ -56,8 +59,12 @@ struct grpc_end2end_test_fixture {
};
struct grpc_end2end_test_config {
+ /* A descriptive name for this test fixture. */
const char *name;
+
+ /* Which features are supported by this fixture. See feature flags above. */
uint32_t feature_mask;
+
grpc_end2end_test_fixture (*create_fixture)(grpc_channel_args *client_args,
grpc_channel_args *server_args);
void (*init_client)(grpc_end2end_test_fixture *f,
diff --git a/test/core/end2end/fixtures/h2_http_proxy.c b/test/core/end2end/fixtures/h2_http_proxy.c
index 44b223664a..55c65fa70e 100644
--- a/test/core/end2end/fixtures/h2_http_proxy.c
+++ b/test/core/end2end/fixtures/h2_http_proxy.c
@@ -49,7 +49,7 @@
#include "src/core/lib/support/env.h"
#include "src/core/lib/surface/channel.h"
#include "src/core/lib/surface/server.h"
-#include "test/core/end2end/fixtures/http_proxy.h"
+#include "test/core/end2end/fixtures/http_proxy_fixture.h"
#include "test/core/util/port.h"
#include "test/core/util/test_config.h"
diff --git a/test/core/end2end/fixtures/http_proxy.c b/test/core/end2end/fixtures/http_proxy_fixture.c
index 9ccb1263ee..bcd1c9914b 100644
--- a/test/core/end2end/fixtures/http_proxy.c
+++ b/test/core/end2end/fixtures/http_proxy_fixture.c
@@ -31,7 +31,7 @@
*
*/
-#include "test/core/end2end/fixtures/http_proxy.h"
+#include "test/core/end2end/fixtures/http_proxy_fixture.h"
#include "src/core/lib/iomgr/sockaddr.h"
diff --git a/test/core/end2end/fixtures/http_proxy.h b/test/core/end2end/fixtures/http_proxy_fixture.h
index cd47b432af..cd47b432af 100644
--- a/test/core/end2end/fixtures/http_proxy.h
+++ b/test/core/end2end/fixtures/http_proxy_fixture.h
diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6520142139752448 b/test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6520142139752448
new file mode 100644
index 0000000000..49c02c2f12
--- /dev/null
+++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6520142139752448
Binary files differ
diff --git a/test/core/end2end/tests/filter_call_init_fails.c b/test/core/end2end/tests/filter_call_init_fails.c
index d2d6e82d57..65216cf19d 100644
--- a/test/core/end2end/tests/filter_call_init_fails.c
+++ b/test/core/end2end/tests/filter_call_init_fails.c
@@ -213,7 +213,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {}
+ grpc_closure *ignored) {}
static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
grpc_channel_element *elem,
diff --git a/test/core/end2end/tests/filter_causes_close.c b/test/core/end2end/tests/filter_causes_close.c
index 25e606556d..c968f30b3b 100644
--- a/test/core/end2end/tests/filter_causes_close.c
+++ b/test/core/end2end/tests/filter_causes_close.c
@@ -236,7 +236,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {}
+ grpc_closure *ignored) {}
static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx,
grpc_channel_element *elem,
diff --git a/test/core/end2end/tests/filter_latency.c b/test/core/end2end/tests/filter_latency.c
index d05e9e79a1..2428c92a42 100644
--- a/test/core/end2end/tests/filter_latency.c
+++ b/test/core/end2end/tests/filter_latency.c
@@ -267,7 +267,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx,
static void client_destroy_call_elem(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {
+ grpc_closure *ignored) {
gpr_mu_lock(&g_mu);
g_client_latency = final_info->stats.latency;
gpr_mu_unlock(&g_mu);
@@ -276,7 +276,7 @@ static void client_destroy_call_elem(grpc_exec_ctx *exec_ctx,
static void server_destroy_call_elem(grpc_exec_ctx *exec_ctx,
grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {
+ grpc_closure *ignored) {
gpr_mu_lock(&g_mu);
g_server_latency = final_info->stats.latency;
gpr_mu_unlock(&g_mu);
diff --git a/test/core/end2end/tests/network_status_change.c b/test/core/end2end/tests/network_status_change.c
index 7540ce93a1..d7a4106459 100644
--- a/test/core/end2end/tests/network_status_change.c
+++ b/test/core/end2end/tests/network_status_change.c
@@ -240,6 +240,10 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) {
}
void network_status_change(grpc_end2end_test_config config) {
+ if (config.feature_mask &
+ FEATURE_MASK_DOES_NOT_SUPPORT_NETWORK_STATUS_CHANGE) {
+ return;
+ }
test_invoke_network_status_change(config);
}
diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c
index 4f9ed7a3a1..db26b4480e 100644
--- a/test/core/end2end/tests/resource_quota_server.c
+++ b/test/core/end2end/tests/resource_quota_server.c
@@ -113,6 +113,10 @@ static grpc_slice generate_random_slice() {
}
void resource_quota_server(grpc_end2end_test_config config) {
+ if (config.feature_mask &
+ FEATURE_MASK_DOES_NOT_SUPPORT_RESOURCE_QUOTA_SERVER) {
+ return;
+ }
grpc_resource_quota *resource_quota =
grpc_resource_quota_create("test_server");
grpc_resource_quota_resize(resource_quota, 5 * 1024 * 1024);
diff --git a/test/core/end2end/tests/streaming_error_response.c b/test/core/end2end/tests/streaming_error_response.c
index 42055907c8..2b9c404b15 100644
--- a/test/core/end2end/tests/streaming_error_response.c
+++ b/test/core/end2end/tests/streaming_error_response.c
@@ -31,6 +31,9 @@
*
*/
+/** \file Verify that status ordering rules are obeyed.
+ \ref doc/status_ordering.md */
+
#include "test/core/end2end/end2end_tests.h"
#include <stdio.h>
diff --git a/test/core/fling/fling_stream_test.c b/test/core/fling/fling_stream_test.c
index 7e4daaa84f..948659ab2f 100644
--- a/test/core/fling/fling_stream_test.c
+++ b/test/core/fling/fling_stream_test.c
@@ -31,22 +31,13 @@
*
*/
-#ifndef _POSIX_SOURCE
-#define _POSIX_SOURCE
-#endif
-
-#include <assert.h>
-#include <signal.h>
#include <stdio.h>
-#include <stdlib.h>
#include <string.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
#include <grpc/support/alloc.h>
#include <grpc/support/host_port.h>
#include <grpc/support/string_util.h>
+#include <grpc/support/subprocess.h>
#include "src/core/lib/support/string.h"
#include "test/core/util/port.h"
@@ -57,10 +48,7 @@ int main(int argc, char **argv) {
int port = grpc_pick_unused_port_or_die();
char *args[10];
int status;
- pid_t svr, cli;
- /* seed rng with pid, so we don't end up with the same random numbers as a
- concurrently running test binary */
- srand((unsigned)getpid());
+ gpr_subprocess *svr, *cli;
/* figure out where we are */
if (lslash) {
memcpy(root, me, (size_t)(lslash - me));
@@ -69,45 +57,38 @@ int main(int argc, char **argv) {
strcpy(root, ".");
}
/* start the server */
- svr = fork();
- if (svr == 0) {
- gpr_asprintf(&args[0], "%s/fling_server", root);
- args[1] = "--bind";
- gpr_join_host_port(&args[2], "::", port);
- args[3] = "--no-secure";
- args[4] = 0;
- execv(args[0], args);
+ gpr_asprintf(&args[0], "%s/fling_server%s", root,
+ gpr_subprocess_binary_extension());
+ args[1] = "--bind";
+ gpr_join_host_port(&args[2], "::", port);
+ args[3] = "--no-secure";
+ svr = gpr_subprocess_create(4, (const char **)args);
+ gpr_free(args[0]);
+ gpr_free(args[2]);
- gpr_free(args[0]);
- gpr_free(args[2]);
- return 1;
- }
- /* wait a little */
- sleep(2);
/* start the client */
- cli = fork();
- if (cli == 0) {
- gpr_asprintf(&args[0], "%s/fling_client", root);
- args[1] = "--target";
- gpr_join_host_port(&args[2], "127.0.0.1", port);
- args[3] = "--scenario=ping-pong-stream";
- args[4] = "--no-secure";
- args[5] = 0;
- execv(args[0], args);
+ gpr_asprintf(&args[0], "%s/fling_client%s", root,
+ gpr_subprocess_binary_extension());
+ args[1] = "--target";
+ gpr_join_host_port(&args[2], "127.0.0.1", port);
+ args[3] = "--scenario=ping-pong-stream";
+ args[4] = "--no-secure";
+ args[5] = 0;
+ cli = gpr_subprocess_create(6, (const char **)args);
+ gpr_free(args[0]);
+ gpr_free(args[2]);
- gpr_free(args[0]);
- gpr_free(args[2]);
- return 1;
- }
/* wait for completion */
printf("waiting for client\n");
- if (waitpid(cli, &status, 0) == -1) return 2;
- if (!WIFEXITED(status)) return 4;
- if (WEXITSTATUS(status)) return WEXITSTATUS(status);
- printf("waiting for server\n");
- kill(svr, SIGINT);
- if (waitpid(svr, &status, 0) == -1) return 2;
- if (!WIFEXITED(status)) return 4;
- if (WEXITSTATUS(status)) return WEXITSTATUS(status);
- return 0;
+ if ((status = gpr_subprocess_join(cli))) {
+ gpr_subprocess_destroy(cli);
+ gpr_subprocess_destroy(svr);
+ return status;
+ }
+ gpr_subprocess_destroy(cli);
+
+ gpr_subprocess_interrupt(svr);
+ status = gpr_subprocess_join(svr);
+ gpr_subprocess_destroy(svr);
+ return status;
}
diff --git a/test/core/handshake/BUILD b/test/core/handshake/BUILD
index 864e0db00b..eb8f3a9beb 100644
--- a/test/core/handshake/BUILD
+++ b/test/core/handshake/BUILD
@@ -27,6 +27,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+licenses(["notice"]) # 3-clause BSD
+
cc_test(
name = "client_ssl",
srcs = ["client_ssl.c"],
diff --git a/test/core/iomgr/error_test.c b/test/core/iomgr/error_test.c
new file mode 100644
index 0000000000..2a6b1b17fd
--- /dev/null
+++ b/test/core/iomgr/error_test.c
@@ -0,0 +1,219 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/iomgr/error.h"
+
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/useful.h>
+
+#include <string.h>
+
+#include "test/core/util/test_config.h"
+
+static void test_set_get_int() {
+ grpc_error* error = GRPC_ERROR_CREATE("Test");
+ GPR_ASSERT(error);
+ intptr_t i = 0;
+ GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_FILE_LINE, &i));
+ GPR_ASSERT(i); // line set will never be 0
+ GPR_ASSERT(!grpc_error_get_int(error, GRPC_ERROR_INT_ERRNO, &i));
+ GPR_ASSERT(!grpc_error_get_int(error, GRPC_ERROR_INT_SIZE, &i));
+
+ intptr_t errnumber = 314;
+ error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, errnumber);
+ GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_ERRNO, &i));
+ GPR_ASSERT(i == errnumber);
+
+ intptr_t http = 2;
+ error = grpc_error_set_int(error, GRPC_ERROR_INT_HTTP2_ERROR, http);
+ GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_HTTP2_ERROR, &i));
+ GPR_ASSERT(i == http);
+
+ GRPC_ERROR_UNREF(error);
+}
+
+static void test_set_get_str() {
+ grpc_error* error = GRPC_ERROR_CREATE("Test");
+
+ GPR_ASSERT(!grpc_error_get_str(error, GRPC_ERROR_STR_SYSCALL));
+ GPR_ASSERT(!grpc_error_get_str(error, GRPC_ERROR_STR_TSI_ERROR));
+
+ const char* c = grpc_error_get_str(error, GRPC_ERROR_STR_FILE);
+ GPR_ASSERT(c);
+ GPR_ASSERT(strstr(c, "error_test.c")); // __FILE__ expands differently on
+ // Windows. All should at least
+ // contain error_test.c
+
+ c = grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION);
+ GPR_ASSERT(c);
+ GPR_ASSERT(!strcmp(c, "Test"));
+
+ error =
+ grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "longer message");
+ c = grpc_error_get_str(error, GRPC_ERROR_STR_GRPC_MESSAGE);
+ GPR_ASSERT(c);
+ GPR_ASSERT(!strcmp(c, "longer message"));
+
+ GRPC_ERROR_UNREF(error);
+}
+
+static void test_copy_and_unref() {
+ // error1 has one ref
+ grpc_error* error1 = grpc_error_set_str(
+ GRPC_ERROR_CREATE("Test"), GRPC_ERROR_STR_GRPC_MESSAGE, "message");
+ const char* c = grpc_error_get_str(error1, GRPC_ERROR_STR_GRPC_MESSAGE);
+ GPR_ASSERT(c);
+ GPR_ASSERT(!strcmp(c, "message"));
+
+ // error 1 has two refs
+ GRPC_ERROR_REF(error1);
+ // this gives error3 a ref to the new error, and decrements error1 to one ref
+ grpc_error* error3 =
+ grpc_error_set_str(error1, GRPC_ERROR_STR_SYSCALL, "syscall");
+ GPR_ASSERT(error3 != error1); // should not be the same because of extra ref
+ c = grpc_error_get_str(error3, GRPC_ERROR_STR_GRPC_MESSAGE);
+ GPR_ASSERT(c);
+ GPR_ASSERT(!strcmp(c, "message"));
+
+ // error 1 should not have a syscall but 3 should
+ GPR_ASSERT(!grpc_error_get_str(error1, GRPC_ERROR_STR_SYSCALL));
+ c = grpc_error_get_str(error3, GRPC_ERROR_STR_SYSCALL);
+ GPR_ASSERT(c);
+ GPR_ASSERT(!strcmp(c, "syscall"));
+
+ GRPC_ERROR_UNREF(error1);
+ GRPC_ERROR_UNREF(error3);
+}
+
+static void test_create_referencing() {
+ grpc_error* child = grpc_error_set_str(
+ GRPC_ERROR_CREATE("Child"), GRPC_ERROR_STR_GRPC_MESSAGE, "message");
+ grpc_error* parent = GRPC_ERROR_CREATE_REFERENCING("Parent", &child, 1);
+ GPR_ASSERT(parent);
+
+ GRPC_ERROR_UNREF(child);
+ GRPC_ERROR_UNREF(parent);
+}
+
+static void test_create_referencing_many() {
+ grpc_error* children[3];
+ children[0] = grpc_error_set_str(GRPC_ERROR_CREATE("Child1"),
+ GRPC_ERROR_STR_GRPC_MESSAGE, "message");
+ children[1] = grpc_error_set_int(GRPC_ERROR_CREATE("Child2"),
+ GRPC_ERROR_INT_HTTP2_ERROR, 5);
+ children[2] = grpc_error_set_str(GRPC_ERROR_CREATE("Child3"),
+ GRPC_ERROR_STR_GRPC_MESSAGE, "message 3");
+
+ grpc_error* parent = GRPC_ERROR_CREATE_REFERENCING("Parent", children, 3);
+ GPR_ASSERT(parent);
+
+ for (size_t i = 0; i < 3; ++i) {
+ GRPC_ERROR_UNREF(children[i]);
+ }
+ GRPC_ERROR_UNREF(parent);
+}
+
+static void print_error_string() {
+ grpc_error* error =
+ grpc_error_set_int(GRPC_ERROR_CREATE("Error"), GRPC_ERROR_INT_GRPC_STATUS,
+ GRPC_STATUS_UNIMPLEMENTED);
+ error = grpc_error_set_int(error, GRPC_ERROR_INT_SIZE, 666);
+ error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "message");
+ // gpr_log(GPR_DEBUG, "%s", grpc_error_string(error));
+ GRPC_ERROR_UNREF(error);
+}
+
+static void print_error_string_reference() {
+ grpc_error* children[2];
+ children[0] = grpc_error_set_str(
+ grpc_error_set_int(GRPC_ERROR_CREATE("1"), GRPC_ERROR_INT_GRPC_STATUS,
+ GRPC_STATUS_UNIMPLEMENTED),
+ GRPC_ERROR_STR_GRPC_MESSAGE, "message for child 1");
+ children[1] = grpc_error_set_str(
+ grpc_error_set_int(GRPC_ERROR_CREATE("2sd"), GRPC_ERROR_INT_GRPC_STATUS,
+ GRPC_STATUS_INTERNAL),
+ GRPC_ERROR_STR_GRPC_MESSAGE, "message for child 2");
+
+ grpc_error* parent = GRPC_ERROR_CREATE_REFERENCING("Parent", children, 2);
+
+ gpr_log(GPR_DEBUG, "%s", grpc_error_string(parent));
+
+ for (size_t i = 0; i < 2; ++i) {
+ GRPC_ERROR_UNREF(children[i]);
+ }
+ GRPC_ERROR_UNREF(parent);
+}
+
+static void test_os_error() {
+ int fake_errno = 5;
+ const char* syscall = "syscall name";
+ grpc_error* error = GRPC_OS_ERROR(fake_errno, syscall);
+
+ intptr_t i = 0;
+ GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_ERRNO, &i));
+ GPR_ASSERT(i == fake_errno);
+
+ const char* c = grpc_error_get_str(error, GRPC_ERROR_STR_SYSCALL);
+ GPR_ASSERT(c);
+ GPR_ASSERT(!strcmp(c, syscall));
+ GRPC_ERROR_UNREF(error);
+}
+
+static void test_special() {
+ grpc_error* error = GRPC_ERROR_NONE;
+ error = grpc_error_add_child(error, GRPC_ERROR_CREATE("test child"));
+ intptr_t i;
+ GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, &i));
+ GPR_ASSERT(i == GRPC_STATUS_OK);
+ GRPC_ERROR_UNREF(error);
+}
+
+int main(int argc, char** argv) {
+ grpc_test_init(argc, argv);
+ grpc_init();
+ test_set_get_int();
+ test_set_get_str();
+ test_copy_and_unref();
+ print_error_string();
+ print_error_string_reference();
+ test_os_error();
+ test_create_referencing();
+ test_create_referencing_many();
+ test_special();
+ grpc_shutdown();
+
+ return 0;
+}
diff --git a/test/core/iomgr/sockaddr_utils_test.c b/test/core/iomgr/sockaddr_utils_test.c
index 8569c697fe..70a6c323e5 100644
--- a/test/core/iomgr/sockaddr_utils_test.c
+++ b/test/core/iomgr/sockaddr_utils_test.c
@@ -70,6 +70,12 @@ static grpc_resolved_address make_addr6(const uint8_t *data, size_t data_len) {
return resolved_addr6;
}
+static void set_addr6_scope_id(grpc_resolved_address *addr, uint32_t scope_id) {
+ struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)addr->addr;
+ GPR_ASSERT(addr6->sin6_family == AF_INET6);
+ addr6->sin6_scope_id = scope_id;
+}
+
static const uint8_t kMapped[] = {0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0xff, 0xff, 192, 0, 2, 1};
@@ -222,6 +228,16 @@ static void test_sockaddr_to_string(void) {
expect_sockaddr_str("[2001:db8::1]:12345", &input6, 1);
expect_sockaddr_uri("ipv6:[2001:db8::1]:12345", &input6);
+ set_addr6_scope_id(&input6, 2);
+ expect_sockaddr_str("[2001:db8::1%252]:12345", &input6, 0);
+ expect_sockaddr_str("[2001:db8::1%252]:12345", &input6, 1);
+ expect_sockaddr_uri("ipv6:[2001:db8::1%252]:12345", &input6);
+
+ set_addr6_scope_id(&input6, 101);
+ expect_sockaddr_str("[2001:db8::1%25101]:12345", &input6, 0);
+ expect_sockaddr_str("[2001:db8::1%25101]:12345", &input6, 1);
+ expect_sockaddr_uri("ipv6:[2001:db8::1%25101]:12345", &input6);
+
input6 = make_addr6(kMapped, sizeof(kMapped));
expect_sockaddr_str("[::ffff:192.0.2.1]:12345", &input6, 0);
expect_sockaddr_str("192.0.2.1:12345", &input6, 1);
diff --git a/test/core/iomgr/tcp_client_uv_test.c b/test/core/iomgr/tcp_client_uv_test.c
index f8938d0abb..064119f11b 100644
--- a/test/core/iomgr/tcp_client_uv_test.c
+++ b/test/core/iomgr/tcp_client_uv_test.c
@@ -58,7 +58,7 @@ static int g_connections_complete = 0;
static grpc_endpoint *g_connecting = NULL;
static gpr_timespec test_deadline(void) {
- return GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10);
+ return grpc_timeout_seconds_to_deadline(10);
}
static void finish_connection() {
@@ -73,7 +73,8 @@ static void must_succeed(grpc_exec_ctx *exec_ctx, void *arg,
grpc_error *error) {
GPR_ASSERT(g_connecting != NULL);
GPR_ASSERT(error == GRPC_ERROR_NONE);
- grpc_endpoint_shutdown(exec_ctx, g_connecting);
+ grpc_endpoint_shutdown(exec_ctx, g_connecting,
+ GRPC_ERROR_CREATE("must_succeed called"));
grpc_endpoint_destroy(exec_ctx, g_connecting);
g_connecting = NULL;
finish_connection();
@@ -133,7 +134,7 @@ void test_succeeds(void) {
"pollset_work",
grpc_pollset_work(&exec_ctx, g_pollset, &worker,
gpr_now(GPR_CLOCK_MONOTONIC),
- GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5))));
+ grpc_timeout_seconds_to_deadline(5))));
gpr_mu_unlock(g_mu);
grpc_exec_ctx_flush(&exec_ctx);
gpr_mu_lock(g_mu);
diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c
index efadddc011..6e514324a5 100644
--- a/test/core/iomgr/tcp_server_posix_test.c
+++ b/test/core/iomgr/tcp_server_posix_test.c
@@ -454,7 +454,8 @@ int main(int argc, char **argv) {
const grpc_channel_args channel_args = {1, chan_args};
struct ifaddrs *ifa = NULL;
struct ifaddrs *ifa_it;
- test_addrs dst_addrs;
+ // Zalloc dst_addrs to avoid oversized frames.
+ test_addrs *dst_addrs = gpr_zalloc(sizeof(*dst_addrs));
grpc_test_init(argc, argv);
grpc_init();
g_pollset = gpr_zalloc(grpc_pollset_size());
@@ -469,24 +470,25 @@ int main(int argc, char **argv) {
gpr_log(GPR_ERROR, "getifaddrs: %s", strerror(errno));
return EXIT_FAILURE;
}
- dst_addrs.naddrs = 0;
- for (ifa_it = ifa; ifa_it != NULL && dst_addrs.naddrs < MAX_ADDRS;
+ dst_addrs->naddrs = 0;
+ for (ifa_it = ifa; ifa_it != NULL && dst_addrs->naddrs < MAX_ADDRS;
ifa_it = ifa_it->ifa_next) {
if (ifa_it->ifa_addr == NULL) {
continue;
} else if (ifa_it->ifa_addr->sa_family == AF_INET) {
- dst_addrs.addrs[dst_addrs.naddrs].addr.len = sizeof(struct sockaddr_in);
+ dst_addrs->addrs[dst_addrs->naddrs].addr.len = sizeof(struct sockaddr_in);
} else if (ifa_it->ifa_addr->sa_family == AF_INET6) {
- dst_addrs.addrs[dst_addrs.naddrs].addr.len = sizeof(struct sockaddr_in6);
+ dst_addrs->addrs[dst_addrs->naddrs].addr.len =
+ sizeof(struct sockaddr_in6);
} else {
continue;
}
- memcpy(dst_addrs.addrs[dst_addrs.naddrs].addr.addr, ifa_it->ifa_addr,
- dst_addrs.addrs[dst_addrs.naddrs].addr.len);
+ memcpy(dst_addrs->addrs[dst_addrs->naddrs].addr.addr, ifa_it->ifa_addr,
+ dst_addrs->addrs[dst_addrs->naddrs].addr.len);
GPR_ASSERT(
- grpc_sockaddr_set_port(&dst_addrs.addrs[dst_addrs.naddrs].addr, 0));
- test_addr_init_str(&dst_addrs.addrs[dst_addrs.naddrs]);
- ++dst_addrs.naddrs;
+ grpc_sockaddr_set_port(&dst_addrs->addrs[dst_addrs->naddrs].addr, 0));
+ test_addr_init_str(&dst_addrs->addrs[dst_addrs->naddrs]);
+ ++dst_addrs->naddrs;
}
freeifaddrs(ifa);
ifa = NULL;
@@ -495,20 +497,21 @@ int main(int argc, char **argv) {
test_connect(1, NULL, NULL, false);
test_connect(10, NULL, NULL, false);
- /* Set dst_addrs.addrs[i].len=0 for dst_addrs that are unreachable with a "::"
- listener. */
- test_connect(1, NULL, &dst_addrs, true);
+ /* Set dst_addrs->addrs[i].len=0 for dst_addrs that are unreachable with a
+ "::" listener. */
+ test_connect(1, NULL, dst_addrs, true);
/* Test connect(2) with dst_addrs. */
- test_connect(1, &channel_args, &dst_addrs, false);
+ test_connect(1, &channel_args, dst_addrs, false);
/* Test connect(2) with dst_addrs. */
- test_connect(10, &channel_args, &dst_addrs, false);
+ test_connect(10, &channel_args, dst_addrs, false);
grpc_closure_init(&destroyed, destroy_pollset, g_pollset,
grpc_schedule_on_exec_ctx);
grpc_pollset_shutdown(&exec_ctx, g_pollset, &destroyed);
grpc_exec_ctx_finish(&exec_ctx);
grpc_shutdown();
+ gpr_free(dst_addrs);
gpr_free(g_pollset);
return EXIT_SUCCESS;
}
diff --git a/test/core/iomgr/tcp_server_uv_test.c b/test/core/iomgr/tcp_server_uv_test.c
index 7b458c90f3..0fc74599ea 100644
--- a/test/core/iomgr/tcp_server_uv_test.c
+++ b/test/core/iomgr/tcp_server_uv_test.c
@@ -115,7 +115,7 @@ static void server_weak_ref_set(server_weak_ref *weak_ref,
static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp,
grpc_pollset *pollset,
grpc_tcp_server_acceptor *acceptor) {
- grpc_endpoint_shutdown(exec_ctx, tcp);
+ grpc_endpoint_shutdown(exec_ctx, tcp, GRPC_ERROR_CREATE("Connected"));
grpc_endpoint_destroy(exec_ctx, tcp);
on_connect_result temp_result;
@@ -203,7 +203,7 @@ static void close_cb(uv_handle_t *handle) { gpr_free(handle); }
static void tcp_connect(grpc_exec_ctx *exec_ctx, const struct sockaddr *remote,
socklen_t remote_len, on_connect_result *result) {
- gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10);
+ gpr_timespec deadline = grpc_timeout_seconds_to_deadline(10);
uv_tcp_t *client_handle = gpr_malloc(sizeof(uv_tcp_t));
uv_connect_t *req = gpr_malloc(sizeof(uv_connect_t));
int nconnects_before;
diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c
index d57a37b2a9..396ec959cd 100644
--- a/test/core/iomgr/udp_server_test.c
+++ b/test/core/iomgr/udp_server_test.c
@@ -62,8 +62,7 @@ static int g_number_of_writes = 0;
static int g_number_of_bytes_read = 0;
static int g_number_of_orphan_calls = 0;
-static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd,
- grpc_server *server) {
+static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, void *user_data) {
char read_buffer[512];
ssize_t byte_count;
@@ -79,7 +78,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd,
gpr_mu_unlock(g_mu);
}
-static void on_write(grpc_exec_ctx *exec_ctx, grpc_fd *emfd) {
+static void on_write(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, void *user_data) {
gpr_mu_lock(g_mu);
g_number_of_writes++;
@@ -88,7 +87,8 @@ static void on_write(grpc_exec_ctx *exec_ctx, grpc_fd *emfd) {
gpr_mu_unlock(g_mu);
}
-static void on_fd_orphaned(grpc_exec_ctx *exec_ctx, grpc_fd *emfd) {
+static void on_fd_orphaned(grpc_exec_ctx *exec_ctx, grpc_fd *emfd,
+ void *user_data) {
gpr_log(GPR_INFO, "gRPC FD about to be orphaned: %d",
grpc_fd_wrapped_fd(emfd));
g_number_of_orphan_calls++;
diff --git a/test/core/memory_usage/client.c b/test/core/memory_usage/client.c
index 09f0e2d867..107abbc1b3 100644
--- a/test/core/memory_usage/client.c
+++ b/test/core/memory_usage/client.c
@@ -43,6 +43,7 @@
#include <grpc/support/log.h>
#include <grpc/support/time.h>
#include <grpc/support/useful.h>
+#include "src/core/lib/support/env.h"
#include "src/core/lib/support/string.h"
#include "test/core/util/memory_counters.h"
#include "test/core/util/test_config.h"
@@ -310,6 +311,29 @@ int main(int argc, char **argv) {
server_calls_end.total_size_relative -
after_server_create.total_size_relative);
+ const char *csv_file = "memory_usage.csv";
+ FILE *csv = fopen(csv_file, "w");
+ if (csv) {
+ char *env_build = gpr_getenv("BUILD_NUMBER");
+ char *env_job = gpr_getenv("JOB_NAME");
+ fprintf(csv, "%f,%zi,%zi,%f,%zi,%s,%s\n",
+ (double)(client_calls_inflight.total_size_relative -
+ client_benchmark_calls_start.total_size_relative) /
+ benchmark_iterations,
+ client_channel_end.total_size_relative -
+ client_channel_start.total_size_relative,
+ after_server_create.total_size_relative -
+ before_server_create.total_size_relative,
+ (double)(server_calls_inflight.total_size_relative -
+ server_benchmark_calls_start.total_size_relative) /
+ benchmark_iterations,
+ server_calls_end.total_size_relative -
+ after_server_create.total_size_relative,
+ env_build == NULL ? "" : env_build, env_job == NULL ? "" : env_job);
+ fclose(csv);
+ gpr_log(GPR_INFO, "Summary written to %s", csv_file);
+ }
+
grpc_memory_counters_destroy();
return 0;
}
diff --git a/test/core/security/BUILD b/test/core/security/BUILD
index e750c39b7c..1cb03c5cfe 100644
--- a/test/core/security/BUILD
+++ b/test/core/security/BUILD
@@ -34,7 +34,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer")
grpc_fuzzer(
name = "ssl_server_fuzzer",
srcs = ["ssl_server_fuzzer.c"],
- deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"],
+ deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util", "//test/core/end2end:ssl_test_data"],
corpus = "corpus",
copts = ["-std=c99"],
)
diff --git a/test/core/security/ssl_server_fuzzer.c b/test/core/security/ssl_server_fuzzer.c
index f789278add..7a3612c419 100644
--- a/test/core/security/ssl_server_fuzzer.c
+++ b/test/core/security/ssl_server_fuzzer.c
@@ -38,6 +38,7 @@
#include "src/core/lib/iomgr/load_file.h"
#include "src/core/lib/security/credentials/credentials.h"
#include "src/core/lib/security/transport/security_connector.h"
+#include "test/core/end2end/data/ssl_test_data.h"
#include "test/core/util/memory_counters.h"
#include "test/core/util/mock_endpoint.h"
@@ -46,10 +47,6 @@ bool squelch = true;
// Turning this on will fail the leak check.
bool leak_check = false;
-#define SSL_CERT_PATH "src/core/lib/tsi/test_creds/server1.pem"
-#define SSL_KEY_PATH "src/core/lib/tsi/test_creds/server1.key"
-#define SSL_CA_PATH "src/core/lib/tsi/test_creds/ca.pem"
-
static void discard_write(grpc_slice slice) {}
static void dont_log(gpr_log_func_args *args) {}
@@ -88,12 +85,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// Load key pair and establish server SSL credentials.
grpc_ssl_pem_key_cert_pair pem_key_cert_pair;
grpc_slice ca_slice, cert_slice, key_slice;
- GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file",
- grpc_load_file(SSL_CA_PATH, 1, &ca_slice)));
- GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file",
- grpc_load_file(SSL_CERT_PATH, 1, &cert_slice)));
- GPR_ASSERT(GRPC_LOG_IF_ERROR("load_file",
- grpc_load_file(SSL_KEY_PATH, 1, &key_slice)));
+ ca_slice = grpc_slice_from_static_string(test_root_cert);
+ cert_slice = grpc_slice_from_static_string(test_server1_cert);
+ key_slice = grpc_slice_from_static_string(test_server1_key);
const char *ca_cert = (const char *)GRPC_SLICE_START_PTR(ca_slice);
pem_key_cert_pair.private_key = (const char *)GRPC_SLICE_START_PTR(key_slice);
pem_key_cert_pair.cert_chain = (const char *)GRPC_SLICE_START_PTR(cert_slice);
diff --git a/test/core/slice/percent_encoding_test.c b/test/core/slice/percent_encoding_test.c
index 222e695fd4..89f8154955 100644
--- a/test/core/slice/percent_encoding_test.c
+++ b/test/core/slice/percent_encoding_test.c
@@ -146,6 +146,7 @@ int main(int argc, char **argv) {
TEST_VECTOR("\x0f", "%0F", grpc_url_percent_encoding_unreserved_bytes);
TEST_VECTOR("\xff", "%FF", grpc_url_percent_encoding_unreserved_bytes);
TEST_VECTOR("\xee", "%EE", grpc_url_percent_encoding_unreserved_bytes);
+ TEST_VECTOR("%2", "%252", grpc_url_percent_encoding_unreserved_bytes);
TEST_NONCONFORMANT_VECTOR("%", "%",
grpc_url_percent_encoding_unreserved_bytes);
TEST_NONCONFORMANT_VECTOR("%A", "%A",
diff --git a/test/core/support/BUILD b/test/core/support/BUILD
index 08cee1441b..3183510db9 100644
--- a/test/core/support/BUILD
+++ b/test/core/support/BUILD
@@ -27,6 +27,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+licenses(["notice"]) # 3-clause BSD
+
cc_test(
name = "alloc_test",
srcs = ["alloc_test.c"],
diff --git a/test/core/support/arena_test.c b/test/core/support/arena_test.c
new file mode 100644
index 0000000000..35b2bbd1b1
--- /dev/null
+++ b/test/core/support/arena_test.c
@@ -0,0 +1,139 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/support/arena.h"
+
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/string_util.h>
+#include <grpc/support/sync.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/useful.h>
+#include <inttypes.h>
+#include <string.h>
+
+#include "src/core/lib/support/string.h"
+#include "test/core/util/test_config.h"
+
+static void test_noop(void) { gpr_arena_destroy(gpr_arena_create(1)); }
+
+static void test(const char *name, size_t init_size, const size_t *allocs,
+ size_t nallocs) {
+ gpr_strvec v;
+ char *s;
+ gpr_strvec_init(&v);
+ gpr_asprintf(&s, "test '%s': %" PRIdPTR " <- {", name, init_size);
+ gpr_strvec_add(&v, s);
+ for (size_t i = 0; i < nallocs; i++) {
+ gpr_asprintf(&s, "%" PRIdPTR ",", allocs[i]);
+ gpr_strvec_add(&v, s);
+ }
+ gpr_strvec_add(&v, gpr_strdup("}"));
+ s = gpr_strvec_flatten(&v, NULL);
+ gpr_strvec_destroy(&v);
+ gpr_log(GPR_INFO, "%s", s);
+ gpr_free(s);
+
+ gpr_arena *a = gpr_arena_create(init_size);
+ void **ps = gpr_zalloc(sizeof(*ps) * nallocs);
+ for (size_t i = 0; i < nallocs; i++) {
+ ps[i] = gpr_arena_alloc(a, allocs[i]);
+ // ensure no duplicate results
+ for (size_t j = 0; j < i; j++) {
+ GPR_ASSERT(ps[i] != ps[j]);
+ }
+ // ensure writable
+ memset(ps[i], 1, allocs[i]);
+ }
+ gpr_arena_destroy(a);
+ gpr_free(ps);
+}
+
+#define TEST(name, init_size, ...) \
+ static const size_t allocs_##name[] = {__VA_ARGS__}; \
+ test(#name, init_size, allocs_##name, GPR_ARRAY_SIZE(allocs_##name))
+
+#define CONCURRENT_TEST_ITERATIONS 100000
+#define CONCURRENT_TEST_THREADS 100
+
+typedef struct {
+ gpr_event ev_start;
+ gpr_arena *arena;
+} concurrent_test_args;
+
+static void concurrent_test_body(void *arg) {
+ concurrent_test_args *a = arg;
+ gpr_event_wait(&a->ev_start, gpr_inf_future(GPR_CLOCK_REALTIME));
+ for (size_t i = 0; i < CONCURRENT_TEST_ITERATIONS; i++) {
+ *(char *)gpr_arena_alloc(a->arena, 1) = (char)i;
+ }
+}
+
+static void concurrent_test(void) {
+ gpr_log(GPR_DEBUG, "concurrent_test");
+
+ concurrent_test_args args;
+ gpr_event_init(&args.ev_start);
+ args.arena = gpr_arena_create(1024);
+
+ gpr_thd_id thds[CONCURRENT_TEST_THREADS];
+
+ for (int i = 0; i < CONCURRENT_TEST_THREADS; i++) {
+ gpr_thd_options opt = gpr_thd_options_default();
+ gpr_thd_options_set_joinable(&opt);
+ gpr_thd_new(&thds[i], concurrent_test_body, &args, &opt);
+ }
+
+ gpr_event_set(&args.ev_start, (void *)1);
+
+ for (int i = 0; i < CONCURRENT_TEST_THREADS; i++) {
+ gpr_thd_join(thds[i]);
+ }
+
+ gpr_arena_destroy(args.arena);
+}
+
+int main(int argc, char *argv[]) {
+ grpc_test_init(argc, argv);
+
+ test_noop();
+ TEST(0_1, 0, 1);
+ TEST(1_1, 1, 1);
+ TEST(1_2, 1, 2);
+ TEST(1_3, 1, 3);
+ TEST(1_inc, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
+ TEST(6_123, 6, 1, 2, 3);
+ concurrent_test();
+
+ return 0;
+}
diff --git a/test/core/support/cpu_test.c b/test/core/support/cpu_test.c
index ca0fe0ccb5..7b9bf6c5e1 100644
--- a/test/core/support/cpu_test.c
+++ b/test/core/support/cpu_test.c
@@ -81,9 +81,12 @@ static void worker_thread(void *arg) {
uint32_t cpu;
unsigned r = 12345678;
unsigned i, j;
- for (i = 0; i < 1000 / grpc_test_slowdown_factor(); i++) {
+ /* Avoid repetitive division calculations */
+ int64_t max_i = 1000 / grpc_test_slowdown_factor();
+ int64_t max_j = 1000000 / grpc_test_slowdown_factor();
+ for (i = 0; i < max_i; i++) {
/* run for a bit - just calculate something random. */
- for (j = 0; j < 1000000 / grpc_test_slowdown_factor(); j++) {
+ for (j = 0; j < max_j; j++) {
r = (r * 17) & ((r - i) | (r * i));
}
cpu = gpr_cpu_current_cpu();
diff --git a/test/core/surface/BUILD b/test/core/surface/BUILD
index c158413122..3d5e26ced3 100644
--- a/test/core/surface/BUILD
+++ b/test/core/surface/BUILD
@@ -27,6 +27,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+licenses(["notice"]) # 3-clause BSD
+
cc_test(
name = "alarm_test",
srcs = ["alarm_test.c"],
diff --git a/test/core/transport/BUILD b/test/core/transport/BUILD
index 865b0c26ef..08b2fd3332 100644
--- a/test/core/transport/BUILD
+++ b/test/core/transport/BUILD
@@ -65,6 +65,13 @@ cc_test(
)
cc_test(
+ name = "stream_owned_slice_test",
+ srcs = ["stream_owned_slice_test.c"],
+ deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"],
+ copts = ['-std=c99']
+)
+
+cc_test(
name = "timeout_encoding_test",
srcs = ["timeout_encoding_test.c"],
deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"],
diff --git a/test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112 b/test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112
new file mode 100644
index 0000000000..04d48d6d76
--- /dev/null
+++ b/test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112
Binary files differ
diff --git a/test/core/transport/stream_owned_slice_test.c b/test/core/transport/stream_owned_slice_test.c
new file mode 100644
index 0000000000..97ba1083f3
--- /dev/null
+++ b/test/core/transport/stream_owned_slice_test.c
@@ -0,0 +1,58 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "src/core/lib/transport/transport.h"
+
+#include "test/core/util/test_config.h"
+
+#include <grpc/support/log.h>
+
+static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {}
+
+int main(int argc, char **argv) {
+ grpc_test_init(argc, argv);
+
+ uint8_t buffer[] = "abc123";
+ grpc_stream_refcount r;
+ GRPC_STREAM_REF_INIT(&r, 1, do_nothing, NULL, "test");
+ GPR_ASSERT(r.refs.count == 1);
+ grpc_slice slice =
+ grpc_slice_from_stream_owned_buffer(&r, buffer, sizeof(buffer));
+ GPR_ASSERT(GRPC_SLICE_START_PTR(slice) == buffer);
+ GPR_ASSERT(GRPC_SLICE_LENGTH(slice) == sizeof(buffer));
+ GPR_ASSERT(r.refs.count == 2);
+ grpc_slice_unref(slice);
+ GPR_ASSERT(r.refs.count == 1);
+
+ return 0;
+}
diff --git a/test/core/util/memory_counters.c b/test/core/util/memory_counters.c
index 7c8b620f34..c27065f260 100644
--- a/test/core/util/memory_counters.c
+++ b/test/core/util/memory_counters.c
@@ -46,17 +46,23 @@ static void *guard_malloc(size_t size);
static void *guard_realloc(void *vptr, size_t size);
static void guard_free(void *vptr);
+#ifdef GPR_LOW_LEVEL_COUNTERS
+/* hide these from the microbenchmark atomic stats */
+#define NO_BARRIER_FETCH_ADD(x, sz) \
+ __atomic_fetch_add((x), (sz), __ATOMIC_RELAXED)
+#define NO_BARRIER_LOAD(x) __atomic_load_n((x), __ATOMIC_RELAXED)
+#else
+#define NO_BARRIER_FETCH_ADD(x, sz) gpr_atm_no_barrier_fetch_add(x, sz)
+#define NO_BARRIER_LOAD(x) gpr_atm_no_barrier_load(x)
+#endif
+
static void *guard_malloc(size_t size) {
size_t *ptr;
if (!size) return NULL;
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_absolute,
- (gpr_atm)size);
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_relative,
- (gpr_atm)size);
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_allocs_absolute,
- (gpr_atm)1);
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_allocs_relative,
- (gpr_atm)1);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_absolute, (gpr_atm)size);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_relative, (gpr_atm)size);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_allocs_absolute, (gpr_atm)1);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_allocs_relative, (gpr_atm)1);
ptr = g_old_allocs.malloc_fn(size + sizeof(size));
*ptr++ = size;
return ptr;
@@ -72,14 +78,10 @@ static void *guard_realloc(void *vptr, size_t size) {
return NULL;
}
--ptr;
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_absolute,
- (gpr_atm)size);
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_relative,
- -(gpr_atm)*ptr);
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_relative,
- (gpr_atm)size);
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_allocs_absolute,
- (gpr_atm)1);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_absolute, (gpr_atm)size);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_relative, -(gpr_atm)*ptr);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_relative, (gpr_atm)size);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_allocs_absolute, (gpr_atm)1);
ptr = g_old_allocs.realloc_fn(ptr, size + sizeof(size));
*ptr++ = size;
return ptr;
@@ -89,10 +91,8 @@ static void guard_free(void *vptr) {
size_t *ptr = vptr;
if (!vptr) return;
--ptr;
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_relative,
- -(gpr_atm)*ptr);
- gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_allocs_relative,
- -(gpr_atm)1);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_relative, -(gpr_atm)*ptr);
+ NO_BARRIER_FETCH_ADD(&g_memory_counters.total_allocs_relative, -(gpr_atm)1);
g_old_allocs.free_fn(ptr);
}
@@ -112,12 +112,12 @@ void grpc_memory_counters_destroy() {
struct grpc_memory_counters grpc_memory_counters_snapshot() {
struct grpc_memory_counters counters;
counters.total_size_relative =
- gpr_atm_no_barrier_load(&g_memory_counters.total_size_relative);
+ NO_BARRIER_LOAD(&g_memory_counters.total_size_relative);
counters.total_size_absolute =
- gpr_atm_no_barrier_load(&g_memory_counters.total_size_absolute);
+ NO_BARRIER_LOAD(&g_memory_counters.total_size_absolute);
counters.total_allocs_relative =
- gpr_atm_no_barrier_load(&g_memory_counters.total_allocs_relative);
+ NO_BARRIER_LOAD(&g_memory_counters.total_allocs_relative);
counters.total_allocs_absolute =
- gpr_atm_no_barrier_load(&g_memory_counters.total_allocs_absolute);
+ NO_BARRIER_LOAD(&g_memory_counters.total_allocs_absolute);
return counters;
}
diff --git a/test/core/util/port_server_client.c b/test/core/util/port_server_client.c
index a851d01635..38054dd1e7 100644
--- a/test/core/util/port_server_client.c
+++ b/test/core/util/port_server_client.c
@@ -162,6 +162,15 @@ static void got_port_from_server(grpc_exec_ctx *exec_ctx, void *arg,
if (failed) {
grpc_httpcli_request req;
memset(&req, 0, sizeof(req));
+ if (pr->retries >= 5) {
+ gpr_mu_lock(pr->mu);
+ pr->port = 0;
+ GRPC_LOG_IF_ERROR(
+ "pollset_kick",
+ grpc_pollset_kick(grpc_polling_entity_pollset(&pr->pops), NULL));
+ gpr_mu_unlock(pr->mu);
+ return;
+ }
GPR_ASSERT(pr->retries < 10);
gpr_sleep_until(gpr_time_add(
gpr_now(GPR_CLOCK_REALTIME),
diff --git a/test/core/util/trickle_endpoint.c b/test/core/util/trickle_endpoint.c
index 7ab0488a66..0848147158 100644
--- a/test/core/util/trickle_endpoint.c
+++ b/test/core/util/trickle_endpoint.c
@@ -31,6 +31,8 @@
*
*/
+#include "src/core/lib/iomgr/sockaddr.h"
+
#include "test/core/util/passthru_endpoint.h"
#include <inttypes.h>
@@ -40,9 +42,6 @@
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include <grpc/support/useful.h>
-
-#include "src/core/lib/iomgr/sockaddr.h"
-
#include "src/core/lib/slice/slice_internal.h"
typedef struct {
diff --git a/test/cpp/codegen/compiler_test_golden b/test/cpp/codegen/compiler_test_golden
index 0b82f2a59f..fd26a17ac1 100644
--- a/test/cpp/codegen/compiler_test_golden
+++ b/test/cpp/codegen/compiler_test_golden
@@ -1,4 +1,4 @@
-// Generated by the gRPC protobuf plugin.
+// Generated by the gRPC C++ plugin.
// If you make any local change, they will be lost.
// source: src/proto/grpc/testing/compiler_test.proto
// Original file comments:
diff --git a/test/cpp/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc
index 190d32ce06..9bcc9f99f6 100644
--- a/test/cpp/common/channel_arguments_test.cc
+++ b/test/cpp/common/channel_arguments_test.cc
@@ -230,13 +230,6 @@ TEST_F(ChannelArgumentsTest, SetSocketMutator) {
EXPECT_TRUE(HasArg(arg1));
// arg0 is replaced by arg1
EXPECT_FALSE(HasArg(arg0));
-
- // arg0 is destroyed by grpc_socket_mutator_to_arg(mutator1)
- {
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
- arg1.value.pointer.vtable->destroy(&exec_ctx, arg1.value.pointer.p);
- grpc_exec_ctx_finish(&exec_ctx);
- }
}
TEST_F(ChannelArgumentsTest, SetUserAgentPrefix) {
diff --git a/test/cpp/interop/http2_client.cc b/test/cpp/interop/http2_client.cc
index 01c07823cf..38a437f39f 100644
--- a/test/cpp/interop/http2_client.cc
+++ b/test/cpp/interop/http2_client.cc
@@ -41,7 +41,7 @@
#include <grpc/support/useful.h>
#include "src/core/lib/transport/byte_stream.h"
-#include "src/proto/grpc/testing/messages.grpc.pb.h"
+#include "src/proto/grpc/testing/messages.pb.h"
#include "src/proto/grpc/testing/test.grpc.pb.h"
#include "test/cpp/interop/http2_client.h"
diff --git a/test/cpp/interop/http2_client.h b/test/cpp/interop/http2_client.h
index 12df5d26bc..e57d695205 100644
--- a/test/cpp/interop/http2_client.h
+++ b/test/cpp/interop/http2_client.h
@@ -38,7 +38,7 @@
#include <grpc++/channel.h>
#include <grpc/grpc.h>
-#include "src/proto/grpc/testing/messages.grpc.pb.h"
+#include "src/proto/grpc/testing/messages.pb.h"
#include "src/proto/grpc/testing/test.grpc.pb.h"
namespace grpc {
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index b7f2723c39..55ba324cc7 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -46,8 +46,8 @@
#include <grpc/support/useful.h>
#include "src/core/lib/transport/byte_stream.h"
-#include "src/proto/grpc/testing/empty.grpc.pb.h"
-#include "src/proto/grpc/testing/messages.grpc.pb.h"
+#include "src/proto/grpc/testing/empty.pb.h"
+#include "src/proto/grpc/testing/messages.pb.h"
#include "src/proto/grpc/testing/test.grpc.pb.h"
#include "test/cpp/interop/client_helper.h"
#include "test/cpp/interop/interop_client.h"
diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h
index 74f4db6b78..efcb7d2860 100644
--- a/test/cpp/interop/interop_client.h
+++ b/test/cpp/interop/interop_client.h
@@ -38,7 +38,7 @@
#include <grpc++/channel.h>
#include <grpc/grpc.h>
-#include "src/proto/grpc/testing/messages.grpc.pb.h"
+#include "src/proto/grpc/testing/messages.pb.h"
#include "src/proto/grpc/testing/test.grpc.pb.h"
namespace grpc {
diff --git a/test/cpp/interop/interop_server.cc b/test/cpp/interop/interop_server.cc
index 5a810b45ef..1cbca17928 100644
--- a/test/cpp/interop/interop_server.cc
+++ b/test/cpp/interop/interop_server.cc
@@ -48,8 +48,8 @@
#include "src/core/lib/support/string.h"
#include "src/core/lib/transport/byte_stream.h"
-#include "src/proto/grpc/testing/empty.grpc.pb.h"
-#include "src/proto/grpc/testing/messages.grpc.pb.h"
+#include "src/proto/grpc/testing/empty.pb.h"
+#include "src/proto/grpc/testing/messages.pb.h"
#include "src/proto/grpc/testing/test.grpc.pb.h"
#include "test/cpp/interop/server_helper.h"
#include "test/cpp/util/test_config.h"
diff --git a/test/cpp/interop/reconnect_interop_client.cc b/test/cpp/interop/reconnect_interop_client.cc
index 1c2f606637..01d985068d 100644
--- a/test/cpp/interop/reconnect_interop_client.cc
+++ b/test/cpp/interop/reconnect_interop_client.cc
@@ -40,8 +40,8 @@
#include <grpc++/support/channel_arguments.h>
#include <grpc/grpc.h>
#include <grpc/support/log.h>
-#include "src/proto/grpc/testing/empty.grpc.pb.h"
-#include "src/proto/grpc/testing/messages.grpc.pb.h"
+#include "src/proto/grpc/testing/empty.pb.h"
+#include "src/proto/grpc/testing/messages.pb.h"
#include "src/proto/grpc/testing/test.grpc.pb.h"
#include "test/cpp/util/create_test_channel.h"
#include "test/cpp/util/test_config.h"
diff --git a/test/cpp/interop/reconnect_interop_server.cc b/test/cpp/interop/reconnect_interop_server.cc
index 634d0a90fc..8d1b884af9 100644
--- a/test/cpp/interop/reconnect_interop_server.cc
+++ b/test/cpp/interop/reconnect_interop_server.cc
@@ -47,8 +47,8 @@
#include <grpc/grpc.h>
#include <grpc/support/log.h>
-#include "src/proto/grpc/testing/empty.grpc.pb.h"
-#include "src/proto/grpc/testing/messages.grpc.pb.h"
+#include "src/proto/grpc/testing/empty.pb.h"
+#include "src/proto/grpc/testing/messages.pb.h"
#include "src/proto/grpc/testing/test.grpc.pb.h"
#include "test/core/util/reconnect_server.h"
#include "test/cpp/util/test_config.h"
diff --git a/test/cpp/microbenchmarks/bm_arena.cc b/test/cpp/microbenchmarks/bm_arena.cc
new file mode 100644
index 0000000000..770c0b6d47
--- /dev/null
+++ b/test/cpp/microbenchmarks/bm_arena.cc
@@ -0,0 +1,76 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* Benchmark arenas */
+
+extern "C" {
+#include "src/core/lib/support/arena.h"
+}
+#include "test/cpp/microbenchmarks/helpers.h"
+#include "third_party/benchmark/include/benchmark/benchmark.h"
+
+static void BM_Arena_NoOp(benchmark::State& state) {
+ while (state.KeepRunning()) {
+ gpr_arena_destroy(gpr_arena_create(state.range(0)));
+ }
+}
+BENCHMARK(BM_Arena_NoOp)->Range(1, 1024 * 1024);
+
+static void BM_Arena_ManyAlloc(benchmark::State& state) {
+ gpr_arena* a = gpr_arena_create(state.range(0));
+ const size_t realloc_after =
+ 1024 * 1024 * 1024 / ((state.range(1) + 15) & 0xffffff0u);
+ while (state.KeepRunning()) {
+ gpr_arena_alloc(a, state.range(1));
+ // periodically recreate arena to avoid OOM
+ if (state.iterations() % realloc_after == 0) {
+ gpr_arena_destroy(a);
+ a = gpr_arena_create(state.range(0));
+ }
+ }
+ gpr_arena_destroy(a);
+}
+BENCHMARK(BM_Arena_ManyAlloc)->Ranges({{1, 1024 * 1024}, {1, 32 * 1024}});
+
+static void BM_Arena_Batch(benchmark::State& state) {
+ while (state.KeepRunning()) {
+ gpr_arena* a = gpr_arena_create(state.range(0));
+ for (int i = 0; i < state.range(1); i++) {
+ gpr_arena_alloc(a, state.range(2));
+ }
+ gpr_arena_destroy(a);
+ }
+}
+BENCHMARK(BM_Arena_Batch)->Ranges({{1, 64 * 1024}, {1, 64}, {1, 1024}});
+
+BENCHMARK_MAIN();
diff --git a/test/cpp/microbenchmarks/bm_call_create.cc b/test/cpp/microbenchmarks/bm_call_create.cc
index 76d5030276..5ef40abb97 100644
--- a/test/cpp/microbenchmarks/bm_call_create.cc
+++ b/test/cpp/microbenchmarks/bm_call_create.cc
@@ -37,6 +37,7 @@
#include <string.h>
#include <sstream>
+#include <grpc++/channel.h>
#include <grpc++/support/channel_arguments.h>
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
@@ -55,28 +56,106 @@ extern "C" {
#include "src/core/lib/transport/transport_impl.h"
}
+#include "src/cpp/client/create_channel_internal.h"
+#include "src/proto/grpc/testing/echo.grpc.pb.h"
+#include "test/cpp/microbenchmarks/helpers.h"
#include "third_party/benchmark/include/benchmark/benchmark.h"
-static struct Init {
- Init() { grpc_init(); }
- ~Init() { grpc_shutdown(); }
-} g_init;
+auto &force_library_initialization = Library::get();
-static void BM_InsecureChannelWithDefaults(benchmark::State &state) {
- grpc_channel *channel =
- grpc_insecure_channel_create("localhost:12345", NULL, NULL);
+void BM_Zalloc(benchmark::State &state) {
+ // speed of light for call creation is zalloc, so benchmark a few interesting
+ // sizes
+ size_t sz = state.range(0);
+ while (state.KeepRunning()) {
+ gpr_free(gpr_zalloc(sz));
+ }
+}
+BENCHMARK(BM_Zalloc)
+ ->Arg(64)
+ ->Arg(128)
+ ->Arg(256)
+ ->Arg(512)
+ ->Arg(1024)
+ ->Arg(1536)
+ ->Arg(2048)
+ ->Arg(3072)
+ ->Arg(4096)
+ ->Arg(5120)
+ ->Arg(6144)
+ ->Arg(7168);
+
+class BaseChannelFixture {
+ public:
+ BaseChannelFixture(grpc_channel *channel) : channel_(channel) {}
+ ~BaseChannelFixture() { grpc_channel_destroy(channel_); }
+
+ grpc_channel *channel() const { return channel_; }
+
+ private:
+ grpc_channel *const channel_;
+};
+
+class InsecureChannel : public BaseChannelFixture {
+ public:
+ InsecureChannel()
+ : BaseChannelFixture(
+ grpc_insecure_channel_create("localhost:1234", NULL, NULL)) {}
+};
+
+class LameChannel : public BaseChannelFixture {
+ public:
+ LameChannel()
+ : BaseChannelFixture(grpc_lame_client_channel_create(
+ "localhost:1234", GRPC_STATUS_UNAUTHENTICATED, "blah")) {}
+};
+
+template <class Fixture>
+static void BM_CallCreateDestroy(benchmark::State &state) {
+ TrackCounters track_counters;
+ Fixture fixture;
grpc_completion_queue *cq = grpc_completion_queue_create(NULL);
- grpc_slice method = grpc_slice_from_static_string("/foo/bar");
gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
+ void *method_hdl =
+ grpc_channel_register_call(fixture.channel(), "/foo/bar", NULL, NULL);
while (state.KeepRunning()) {
- grpc_call_destroy(grpc_channel_create_call(channel, NULL,
- GRPC_PROPAGATE_DEFAULTS, cq,
- method, NULL, deadline, NULL));
+ grpc_call_destroy(grpc_channel_create_registered_call(
+ fixture.channel(), NULL, GRPC_PROPAGATE_DEFAULTS, cq, method_hdl,
+ deadline, NULL));
}
- grpc_channel_destroy(channel);
grpc_completion_queue_destroy(cq);
+ track_counters.Finish(state);
+}
+
+BENCHMARK_TEMPLATE(BM_CallCreateDestroy, InsecureChannel);
+BENCHMARK_TEMPLATE(BM_CallCreateDestroy, LameChannel);
+
+static void *tag(int i) {
+ return reinterpret_cast<void *>(static_cast<intptr_t>(i));
+}
+
+static void BM_LameChannelCallCreateCpp(benchmark::State &state) {
+ TrackCounters track_counters;
+ auto stub =
+ grpc::testing::EchoTestService::NewStub(grpc::CreateChannelInternal(
+ "", grpc_lame_client_channel_create(
+ "localhost:1234", GRPC_STATUS_UNAUTHENTICATED, "blah")));
+ grpc::CompletionQueue cq;
+ grpc::testing::EchoRequest send_request;
+ grpc::testing::EchoResponse recv_response;
+ grpc::Status recv_status;
+ while (state.KeepRunning()) {
+ grpc::ClientContext cli_ctx;
+ auto reader = stub->AsyncEcho(&cli_ctx, send_request, &cq);
+ reader->Finish(&recv_response, &recv_status, tag(0));
+ void *t;
+ bool ok;
+ GPR_ASSERT(cq.Next(&t, &ok));
+ GPR_ASSERT(ok);
+ }
+ track_counters.Finish(state);
}
-BENCHMARK(BM_InsecureChannelWithDefaults);
+BENCHMARK(BM_LameChannelCallCreateCpp);
static void FilterDestroy(grpc_exec_ctx *exec_ctx, void *arg,
grpc_error *error) {
@@ -153,7 +232,7 @@ static void SetPollsetOrPollsetSet(grpc_exec_ctx *exec_ctx,
static void DestroyCallElem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
const grpc_call_final_info *final_info,
- void *and_free_memory) {}
+ grpc_closure *then_sched_closure) {}
grpc_error *InitChannelElem(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem,
grpc_channel_element_args *args) {
@@ -196,7 +275,7 @@ const char *name;
/* implementation of grpc_transport_init_stream */
int InitStream(grpc_exec_ctx *exec_ctx, grpc_transport *self,
grpc_stream *stream, grpc_stream_refcount *refcount,
- const void *server_data) {
+ const void *server_data, gpr_arena *arena) {
return 0;
}
@@ -220,7 +299,7 @@ void PerformOp(grpc_exec_ctx *exec_ctx, grpc_transport *self,
/* implementation of grpc_transport_destroy_stream */
void DestroyStream(grpc_exec_ctx *exec_ctx, grpc_transport *self,
- grpc_stream *stream, void *and_free_memory) {}
+ grpc_stream *stream, grpc_closure *then_sched_closure) {}
/* implementation of grpc_transport_destroy */
void Destroy(grpc_exec_ctx *exec_ctx, grpc_transport *self) {}
@@ -289,6 +368,7 @@ class SendEmptyMetadata {
// perform on said filter.
template <class Fixture, class TestOp>
static void BM_IsolatedFilter(benchmark::State &state) {
+ TrackCounters track_counters;
Fixture fixture;
std::ostringstream label;
@@ -314,7 +394,7 @@ static void BM_IsolatedFilter(benchmark::State &state) {
grpc_channel_stack *channel_stack =
static_cast<grpc_channel_stack *>(gpr_zalloc(channel_size));
GPR_ASSERT(GRPC_LOG_IF_ERROR(
- "call_stack_init",
+ "channel_stack_init",
grpc_channel_stack_init(&exec_ctx, 1, FilterDestroy, channel_stack,
&filters[0], filters.size(), &channel_args,
fixture.flags & REQUIRES_TRANSPORT
@@ -329,21 +409,36 @@ static void BM_IsolatedFilter(benchmark::State &state) {
grpc_slice method = grpc_slice_from_static_string("/foo/bar");
grpc_call_final_info final_info;
TestOp test_op_data;
+ grpc_call_element_args call_args;
+ call_args.call_stack = call_stack;
+ call_args.server_transport_data = NULL;
+ call_args.context = NULL;
+ call_args.path = method;
+ call_args.start_time = start_time;
+ call_args.deadline = deadline;
+ const int kArenaSize = 4096;
+ call_args.arena = gpr_arena_create(kArenaSize);
while (state.KeepRunning()) {
GRPC_ERROR_UNREF(grpc_call_stack_init(&exec_ctx, channel_stack, 1,
- DoNothing, NULL, NULL, NULL, method,
- start_time, deadline, call_stack));
+ DoNothing, NULL, &call_args));
typename TestOp::Op op(&exec_ctx, &test_op_data, call_stack);
grpc_call_stack_destroy(&exec_ctx, call_stack, &final_info, NULL);
op.Finish(&exec_ctx);
grpc_exec_ctx_flush(&exec_ctx);
+ // recreate arena every 64k iterations to avoid oom
+ if (0 == (state.iterations() & 0xffff)) {
+ gpr_arena_destroy(call_args.arena);
+ call_args.arena = gpr_arena_create(kArenaSize);
+ }
}
+ gpr_arena_destroy(call_args.arena);
grpc_channel_stack_destroy(&exec_ctx, channel_stack);
grpc_exec_ctx_finish(&exec_ctx);
gpr_free(channel_stack);
gpr_free(call_stack);
state.SetLabel(label.str());
+ track_counters.Finish(state);
}
typedef Fixture<nullptr, 0> NoFilter;
diff --git a/test/cpp/microbenchmarks/bm_chttp2_hpack.cc b/test/cpp/microbenchmarks/bm_chttp2_hpack.cc
index 5fb3f37130..563db758f7 100644
--- a/test/cpp/microbenchmarks/bm_chttp2_hpack.cc
+++ b/test/cpp/microbenchmarks/bm_chttp2_hpack.cc
@@ -42,18 +42,17 @@ extern "C" {
#include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/transport/static_metadata.h"
}
+#include "test/cpp/microbenchmarks/helpers.h"
#include "third_party/benchmark/include/benchmark/benchmark.h"
-static struct Init {
- Init() { grpc_init(); }
- ~Init() { grpc_shutdown(); }
-} g_init;
+auto &force_library_initialization = Library::get();
////////////////////////////////////////////////////////////////////////////////
// HPACK encoder
//
static void BM_HpackEncoderInitDestroy(benchmark::State &state) {
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_chttp2_hpack_compressor c;
while (state.KeepRunning()) {
@@ -62,11 +61,13 @@ static void BM_HpackEncoderInitDestroy(benchmark::State &state) {
grpc_exec_ctx_flush(&exec_ctx);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_HpackEncoderInitDestroy);
template <class Fixture>
static void BM_HpackEncoderEncodeHeader(benchmark::State &state) {
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_metadata_batch b;
@@ -102,6 +103,7 @@ static void BM_HpackEncoderEncodeHeader(benchmark::State &state) {
<< " header_bytes/iter:" << (static_cast<double>(stats.header_bytes) /
static_cast<double>(state.iterations()));
state.SetLabel(label.str());
+ track_counters.Finish(state);
}
namespace hpack_encoder_fixtures {
@@ -216,6 +218,7 @@ BENCHMARK_TEMPLATE(BM_HpackEncoderEncodeHeader,
//
static void BM_HpackParserInitDestroy(benchmark::State &state) {
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_chttp2_hpack_parser p;
while (state.KeepRunning()) {
@@ -224,6 +227,7 @@ static void BM_HpackParserInitDestroy(benchmark::State &state) {
grpc_exec_ctx_flush(&exec_ctx);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_HpackParserInitDestroy);
@@ -234,6 +238,7 @@ static void UnrefHeader(grpc_exec_ctx *exec_ctx, void *user_data,
template <class Fixture>
static void BM_HpackParserParseHeader(benchmark::State &state) {
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
std::vector<grpc_slice> init_slices = Fixture::GetInitSlices();
std::vector<grpc_slice> benchmark_slices = Fixture::GetBenchmarkSlices();
@@ -252,6 +257,7 @@ static void BM_HpackParserParseHeader(benchmark::State &state) {
}
grpc_chttp2_hpack_parser_destroy(&exec_ctx, &p);
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
namespace hpack_parser_fixtures {
diff --git a/test/cpp/microbenchmarks/bm_closure.cc b/test/cpp/microbenchmarks/bm_closure.cc
index 1f54e8c8b1..28a385b6c1 100644
--- a/test/cpp/microbenchmarks/bm_closure.cc
+++ b/test/cpp/microbenchmarks/bm_closure.cc
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2015, Google Inc.
+ * Copyright 2017, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -42,86 +42,47 @@ extern "C" {
#include "src/core/lib/support/spinlock.h"
}
+#include "test/cpp/microbenchmarks/helpers.h"
#include "third_party/benchmark/include/benchmark/benchmark.h"
-#include <sstream>
-
-#ifdef GPR_LOW_LEVEL_COUNTERS
-extern "C" gpr_atm gpr_mu_locks;
-#endif
-
-static class InitializeStuff {
- public:
- InitializeStuff() { grpc_init(); }
- ~InitializeStuff() { grpc_shutdown(); }
-} initialize_stuff;
-
-class TrackCounters {
- public:
- TrackCounters(benchmark::State& state) : state_(state) {}
-
- ~TrackCounters() {
- std::ostringstream out;
-#ifdef GPR_LOW_LEVEL_COUNTERS
- out << " locks/iter:" << ((double)(gpr_atm_no_barrier_load(&gpr_mu_locks) -
- mu_locks_at_start_) /
- (double)state_.iterations())
- << " atm_cas/iter:"
- << ((double)(gpr_atm_no_barrier_load(&gpr_counter_atm_cas) -
- atm_cas_at_start_) /
- (double)state_.iterations())
- << " atm_add/iter:"
- << ((double)(gpr_atm_no_barrier_load(&gpr_counter_atm_add) -
- atm_add_at_start_) /
- (double)state_.iterations());
-#endif
- state_.SetLabel(out.str());
- }
-
- private:
- benchmark::State& state_;
-#ifdef GPR_LOW_LEVEL_COUNTERS
- const size_t mu_locks_at_start_ = gpr_atm_no_barrier_load(&gpr_mu_locks);
- const size_t atm_cas_at_start_ =
- gpr_atm_no_barrier_load(&gpr_counter_atm_cas);
- const size_t atm_add_at_start_ =
- gpr_atm_no_barrier_load(&gpr_counter_atm_add);
-#endif
-};
+auto& force_library_initialization = Library::get();
static void BM_NoOpExecCtx(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
while (state.KeepRunning()) {
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_exec_ctx_finish(&exec_ctx);
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_NoOpExecCtx);
static void BM_WellFlushed(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
while (state.KeepRunning()) {
grpc_exec_ctx_flush(&exec_ctx);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_WellFlushed);
static void DoNothing(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) {}
static void BM_ClosureInitAgainstExecCtx(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_closure c;
while (state.KeepRunning()) {
benchmark::DoNotOptimize(
grpc_closure_init(&c, DoNothing, NULL, grpc_schedule_on_exec_ctx));
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureInitAgainstExecCtx);
static void BM_ClosureInitAgainstCombiner(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_combiner* combiner = grpc_combiner_create(NULL);
grpc_closure c;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -131,11 +92,12 @@ static void BM_ClosureInitAgainstCombiner(benchmark::State& state) {
}
GRPC_COMBINER_UNREF(&exec_ctx, combiner, "finished");
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureInitAgainstCombiner);
static void BM_ClosureRunOnExecCtx(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_closure c;
grpc_closure_init(&c, DoNothing, NULL, grpc_schedule_on_exec_ctx);
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -144,11 +106,12 @@ static void BM_ClosureRunOnExecCtx(benchmark::State& state) {
grpc_exec_ctx_flush(&exec_ctx);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureRunOnExecCtx);
static void BM_ClosureCreateAndRun(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
while (state.KeepRunning()) {
grpc_closure_run(&exec_ctx, grpc_closure_create(DoNothing, NULL,
@@ -156,11 +119,12 @@ static void BM_ClosureCreateAndRun(benchmark::State& state) {
GRPC_ERROR_NONE);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureCreateAndRun);
static void BM_ClosureInitAndRun(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_closure c;
while (state.KeepRunning()) {
@@ -169,11 +133,12 @@ static void BM_ClosureInitAndRun(benchmark::State& state) {
GRPC_ERROR_NONE);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureInitAndRun);
static void BM_ClosureSchedOnExecCtx(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_closure c;
grpc_closure_init(&c, DoNothing, NULL, grpc_schedule_on_exec_ctx);
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -182,11 +147,12 @@ static void BM_ClosureSchedOnExecCtx(benchmark::State& state) {
grpc_exec_ctx_flush(&exec_ctx);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureSchedOnExecCtx);
static void BM_ClosureSched2OnExecCtx(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_closure c1;
grpc_closure c2;
grpc_closure_init(&c1, DoNothing, NULL, grpc_schedule_on_exec_ctx);
@@ -198,11 +164,12 @@ static void BM_ClosureSched2OnExecCtx(benchmark::State& state) {
grpc_exec_ctx_flush(&exec_ctx);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureSched2OnExecCtx);
static void BM_ClosureSched3OnExecCtx(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_closure c1;
grpc_closure c2;
grpc_closure c3;
@@ -217,11 +184,12 @@ static void BM_ClosureSched3OnExecCtx(benchmark::State& state) {
grpc_exec_ctx_flush(&exec_ctx);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureSched3OnExecCtx);
static void BM_AcquireMutex(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
// for comparison with the combiner stuff below
gpr_mu mu;
gpr_mu_init(&mu);
@@ -232,11 +200,12 @@ static void BM_AcquireMutex(benchmark::State& state) {
gpr_mu_unlock(&mu);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_AcquireMutex);
static void BM_TryAcquireMutex(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
// for comparison with the combiner stuff below
gpr_mu mu;
gpr_mu_init(&mu);
@@ -250,11 +219,12 @@ static void BM_TryAcquireMutex(benchmark::State& state) {
}
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_TryAcquireMutex);
static void BM_AcquireSpinlock(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
// for comparison with the combiner stuff below
gpr_spinlock mu = GPR_SPINLOCK_INITIALIZER;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -264,11 +234,12 @@ static void BM_AcquireSpinlock(benchmark::State& state) {
gpr_spinlock_unlock(&mu);
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_AcquireSpinlock);
static void BM_TryAcquireSpinlock(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
// for comparison with the combiner stuff below
gpr_spinlock mu = GPR_SPINLOCK_INITIALIZER;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -281,11 +252,12 @@ static void BM_TryAcquireSpinlock(benchmark::State& state) {
}
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_TryAcquireSpinlock);
static void BM_ClosureSchedOnCombiner(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_combiner* combiner = grpc_combiner_create(NULL);
grpc_closure c;
grpc_closure_init(&c, DoNothing, NULL,
@@ -297,11 +269,12 @@ static void BM_ClosureSchedOnCombiner(benchmark::State& state) {
}
GRPC_COMBINER_UNREF(&exec_ctx, combiner, "finished");
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureSchedOnCombiner);
static void BM_ClosureSched2OnCombiner(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_combiner* combiner = grpc_combiner_create(NULL);
grpc_closure c1;
grpc_closure c2;
@@ -317,11 +290,12 @@ static void BM_ClosureSched2OnCombiner(benchmark::State& state) {
}
GRPC_COMBINER_UNREF(&exec_ctx, combiner, "finished");
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureSched2OnCombiner);
static void BM_ClosureSched3OnCombiner(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_combiner* combiner = grpc_combiner_create(NULL);
grpc_closure c1;
grpc_closure c2;
@@ -341,11 +315,12 @@ static void BM_ClosureSched3OnCombiner(benchmark::State& state) {
}
GRPC_COMBINER_UNREF(&exec_ctx, combiner, "finished");
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureSched3OnCombiner);
static void BM_ClosureSched2OnTwoCombiners(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_combiner* combiner1 = grpc_combiner_create(NULL);
grpc_combiner* combiner2 = grpc_combiner_create(NULL);
grpc_closure c1;
@@ -363,11 +338,12 @@ static void BM_ClosureSched2OnTwoCombiners(benchmark::State& state) {
GRPC_COMBINER_UNREF(&exec_ctx, combiner1, "finished");
GRPC_COMBINER_UNREF(&exec_ctx, combiner2, "finished");
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureSched2OnTwoCombiners);
static void BM_ClosureSched4OnTwoCombiners(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_combiner* combiner1 = grpc_combiner_create(NULL);
grpc_combiner* combiner2 = grpc_combiner_create(NULL);
grpc_closure c1;
@@ -393,6 +369,7 @@ static void BM_ClosureSched4OnTwoCombiners(benchmark::State& state) {
GRPC_COMBINER_UNREF(&exec_ctx, combiner1, "finished");
GRPC_COMBINER_UNREF(&exec_ctx, combiner2, "finished");
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureSched4OnTwoCombiners);
@@ -428,16 +405,17 @@ class Rescheduler {
};
static void BM_ClosureReschedOnExecCtx(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
Rescheduler r(state, grpc_schedule_on_exec_ctx);
r.ScheduleFirst(&exec_ctx);
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureReschedOnExecCtx);
static void BM_ClosureReschedOnCombiner(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_combiner* combiner = grpc_combiner_create(NULL);
Rescheduler r(state, grpc_combiner_scheduler(combiner, false));
@@ -445,11 +423,12 @@ static void BM_ClosureReschedOnCombiner(benchmark::State& state) {
grpc_exec_ctx_flush(&exec_ctx);
GRPC_COMBINER_UNREF(&exec_ctx, combiner, "finished");
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureReschedOnCombiner);
static void BM_ClosureReschedOnCombinerFinally(benchmark::State& state) {
- TrackCounters track_counters(state);
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_combiner* combiner = grpc_combiner_create(NULL);
Rescheduler r(state, grpc_combiner_finally_scheduler(combiner, false));
@@ -458,6 +437,7 @@ static void BM_ClosureReschedOnCombinerFinally(benchmark::State& state) {
grpc_exec_ctx_flush(&exec_ctx);
GRPC_COMBINER_UNREF(&exec_ctx, combiner, "finished");
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ClosureReschedOnCombinerFinally);
diff --git a/test/cpp/microbenchmarks/bm_cq.cc b/test/cpp/microbenchmarks/bm_cq.cc
index c017474bf4..91e6a85101 100644
--- a/test/cpp/microbenchmarks/bm_cq.cc
+++ b/test/cpp/microbenchmarks/bm_cq.cc
@@ -38,6 +38,7 @@
#include <grpc++/impl/grpc_library.h>
#include <grpc/grpc.h>
+#include "test/cpp/microbenchmarks/helpers.h"
#include "third_party/benchmark/include/benchmark/benchmark.h"
extern "C" {
@@ -47,27 +48,23 @@ extern "C" {
namespace grpc {
namespace testing {
-static class InitializeStuff {
- public:
- InitializeStuff() { init_lib_.init(); }
- ~InitializeStuff() { init_lib_.shutdown(); }
-
- private:
- internal::GrpcLibrary init_lib_;
- internal::GrpcLibraryInitializer init_;
-} initialize_stuff;
+auto& force_library_initialization = Library::get();
static void BM_CreateDestroyCpp(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
CompletionQueue cq;
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_CreateDestroyCpp);
static void BM_CreateDestroyCore(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
grpc_completion_queue_destroy(grpc_completion_queue_create(NULL));
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_CreateDestroyCore);
@@ -80,6 +77,7 @@ class DummyTag final : public CompletionQueueTag {
};
static void BM_Pass1Cpp(benchmark::State& state) {
+ TrackCounters track_counters;
CompletionQueue cq;
grpc_completion_queue* c_cq = cq.cq();
while (state.KeepRunning()) {
@@ -94,10 +92,12 @@ static void BM_Pass1Cpp(benchmark::State& state) {
bool ok;
cq.Next(&tag, &ok);
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_Pass1Cpp);
static void BM_Pass1Core(benchmark::State& state) {
+ TrackCounters track_counters;
grpc_completion_queue* cq = grpc_completion_queue_create(NULL);
gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
while (state.KeepRunning()) {
@@ -110,10 +110,12 @@ static void BM_Pass1Core(benchmark::State& state) {
grpc_completion_queue_next(cq, deadline, NULL);
}
grpc_completion_queue_destroy(cq);
+ track_counters.Finish(state);
}
BENCHMARK(BM_Pass1Core);
static void BM_Pluck1Core(benchmark::State& state) {
+ TrackCounters track_counters;
grpc_completion_queue* cq = grpc_completion_queue_create(NULL);
gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
while (state.KeepRunning()) {
@@ -126,16 +128,19 @@ static void BM_Pluck1Core(benchmark::State& state) {
grpc_completion_queue_pluck(cq, NULL, deadline, NULL);
}
grpc_completion_queue_destroy(cq);
+ track_counters.Finish(state);
}
BENCHMARK(BM_Pluck1Core);
static void BM_EmptyCore(benchmark::State& state) {
+ TrackCounters track_counters;
grpc_completion_queue* cq = grpc_completion_queue_create(NULL);
gpr_timespec deadline = gpr_inf_past(GPR_CLOCK_MONOTONIC);
while (state.KeepRunning()) {
grpc_completion_queue_next(cq, deadline, NULL);
}
grpc_completion_queue_destroy(cq);
+ track_counters.Finish(state);
}
BENCHMARK(BM_EmptyCore);
diff --git a/test/cpp/microbenchmarks/bm_error.cc b/test/cpp/microbenchmarks/bm_error.cc
index 8a4b86f281..c4f6aa19d5 100644
--- a/test/cpp/microbenchmarks/bm_error.cc
+++ b/test/cpp/microbenchmarks/bm_error.cc
@@ -40,8 +40,11 @@ extern "C" {
#include "src/core/lib/transport/error_utils.h"
}
+#include "test/cpp/microbenchmarks/helpers.h"
#include "third_party/benchmark/include/benchmark/benchmark.h"
+auto& force_library_initialization = Library::get();
+
class ErrorDeleter {
public:
void operator()(grpc_error* error) { GRPC_ERROR_UNREF(error); }
@@ -49,31 +52,74 @@ class ErrorDeleter {
typedef std::unique_ptr<grpc_error, ErrorDeleter> ErrorPtr;
static void BM_ErrorCreate(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
GRPC_ERROR_UNREF(GRPC_ERROR_CREATE("Error"));
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_ErrorCreate);
static void BM_ErrorCreateAndSetStatus(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
GRPC_ERROR_UNREF(grpc_error_set_int(GRPC_ERROR_CREATE("Error"),
GRPC_ERROR_INT_GRPC_STATUS,
GRPC_STATUS_ABORTED));
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_ErrorCreateAndSetStatus);
+static void BM_ErrorCreateAndSetIntAndStr(benchmark::State& state) {
+ TrackCounters track_counters;
+ while (state.KeepRunning()) {
+ GRPC_ERROR_UNREF(grpc_error_set_str(
+ grpc_error_set_int(GRPC_ERROR_CREATE("GOAWAY received"),
+ GRPC_ERROR_INT_HTTP2_ERROR, (intptr_t)0),
+ GRPC_ERROR_STR_RAW_BYTES, "raw bytes"));
+ }
+ track_counters.Finish(state);
+}
+BENCHMARK(BM_ErrorCreateAndSetIntAndStr);
+
+static void BM_ErrorCreateAndSetIntLoop(benchmark::State& state) {
+ TrackCounters track_counters;
+ grpc_error* error = GRPC_ERROR_CREATE("Error");
+ int n = 0;
+ while (state.KeepRunning()) {
+ error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS, n++);
+ }
+ GRPC_ERROR_UNREF(error);
+ track_counters.Finish(state);
+}
+BENCHMARK(BM_ErrorCreateAndSetIntLoop);
+
+static void BM_ErrorCreateAndSetStrLoop(benchmark::State& state) {
+ TrackCounters track_counters;
+ grpc_error* error = GRPC_ERROR_CREATE("Error");
+ const char* str = "hello";
+ while (state.KeepRunning()) {
+ error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, str);
+ }
+ GRPC_ERROR_UNREF(error);
+ track_counters.Finish(state);
+}
+BENCHMARK(BM_ErrorCreateAndSetStrLoop);
+
static void BM_ErrorRefUnref(benchmark::State& state) {
+ TrackCounters track_counters;
grpc_error* error = GRPC_ERROR_CREATE("Error");
while (state.KeepRunning()) {
GRPC_ERROR_UNREF(GRPC_ERROR_REF(error));
}
GRPC_ERROR_UNREF(error);
+ track_counters.Finish(state);
}
BENCHMARK(BM_ErrorRefUnref);
static void BM_ErrorUnrefNone(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
GRPC_ERROR_UNREF(GRPC_ERROR_NONE);
}
@@ -81,30 +127,36 @@ static void BM_ErrorUnrefNone(benchmark::State& state) {
BENCHMARK(BM_ErrorUnrefNone);
static void BM_ErrorGetIntFromNoError(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
intptr_t value;
grpc_error_get_int(GRPC_ERROR_NONE, GRPC_ERROR_INT_GRPC_STATUS, &value);
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_ErrorGetIntFromNoError);
static void BM_ErrorGetMissingInt(benchmark::State& state) {
+ TrackCounters track_counters;
ErrorPtr error(
grpc_error_set_int(GRPC_ERROR_CREATE("Error"), GRPC_ERROR_INT_INDEX, 1));
while (state.KeepRunning()) {
intptr_t value;
grpc_error_get_int(error.get(), GRPC_ERROR_INT_OFFSET, &value);
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_ErrorGetMissingInt);
static void BM_ErrorGetPresentInt(benchmark::State& state) {
+ TrackCounters track_counters;
ErrorPtr error(
grpc_error_set_int(GRPC_ERROR_CREATE("Error"), GRPC_ERROR_INT_OFFSET, 1));
while (state.KeepRunning()) {
intptr_t value;
grpc_error_get_int(error.get(), GRPC_ERROR_INT_OFFSET, &value);
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_ErrorGetPresentInt);
@@ -177,22 +229,27 @@ class ErrorWithNestedGrpcStatus {
template <class Fixture>
static void BM_ErrorStringOnNewError(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
Fixture fixture;
grpc_error_string(fixture.error());
}
+ track_counters.Finish(state);
}
template <class Fixture>
static void BM_ErrorStringRepeatedly(benchmark::State& state) {
+ TrackCounters track_counters;
Fixture fixture;
while (state.KeepRunning()) {
grpc_error_string(fixture.error());
}
+ track_counters.Finish(state);
}
template <class Fixture>
static void BM_ErrorGetStatus(benchmark::State& state) {
+ TrackCounters track_counters;
Fixture fixture;
while (state.KeepRunning()) {
grpc_status_code status;
@@ -200,34 +257,41 @@ static void BM_ErrorGetStatus(benchmark::State& state) {
grpc_error_get_status(fixture.error(), fixture.deadline(), &status, &msg,
NULL);
}
+ track_counters.Finish(state);
}
template <class Fixture>
static void BM_ErrorGetStatusCode(benchmark::State& state) {
+ TrackCounters track_counters;
Fixture fixture;
while (state.KeepRunning()) {
grpc_status_code status;
grpc_error_get_status(fixture.error(), fixture.deadline(), &status, NULL,
NULL);
}
+ track_counters.Finish(state);
}
template <class Fixture>
static void BM_ErrorHttpError(benchmark::State& state) {
+ TrackCounters track_counters;
Fixture fixture;
while (state.KeepRunning()) {
grpc_http2_error_code error;
grpc_error_get_status(fixture.error(), fixture.deadline(), NULL, NULL,
&error);
}
+ track_counters.Finish(state);
}
template <class Fixture>
static void BM_HasClearGrpcStatus(benchmark::State& state) {
+ TrackCounters track_counters;
Fixture fixture;
while (state.KeepRunning()) {
grpc_error_has_clear_grpc_status(fixture.error());
}
+ track_counters.Finish(state);
}
#define BENCHMARK_SUITE(fixture) \
diff --git a/test/cpp/microbenchmarks/bm_fullstack.cc b/test/cpp/microbenchmarks/bm_fullstack.cc
deleted file mode 100644
index 48e131f1be..0000000000
--- a/test/cpp/microbenchmarks/bm_fullstack.cc
+++ /dev/null
@@ -1,1079 +0,0 @@
-/*
- *
- * Copyright 2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-/* Benchmark gRPC end2end in various configurations */
-
-#include <sstream>
-
-#include <grpc++/channel.h>
-#include <grpc++/create_channel.h>
-#include <grpc++/impl/grpc_library.h>
-#include <grpc++/security/credentials.h>
-#include <grpc++/security/server_credentials.h>
-#include <grpc++/server.h>
-#include <grpc++/server_builder.h>
-#include <grpc/support/log.h>
-
-extern "C" {
-#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
-#include "src/core/ext/transport/chttp2/transport/internal.h"
-#include "src/core/lib/channel/channel_args.h"
-#include "src/core/lib/iomgr/endpoint.h"
-#include "src/core/lib/iomgr/endpoint_pair.h"
-#include "src/core/lib/iomgr/exec_ctx.h"
-#include "src/core/lib/iomgr/tcp_posix.h"
-#include "src/core/lib/surface/channel.h"
-#include "src/core/lib/surface/completion_queue.h"
-#include "src/core/lib/surface/server.h"
-#include "test/core/util/memory_counters.h"
-#include "test/core/util/passthru_endpoint.h"
-#include "test/core/util/port.h"
-#include "test/core/util/trickle_endpoint.h"
-}
-#include "src/core/lib/profiling/timers.h"
-#include "src/cpp/client/create_channel_internal.h"
-#include "src/proto/grpc/testing/echo.grpc.pb.h"
-#include "third_party/benchmark/include/benchmark/benchmark.h"
-
-namespace grpc {
-namespace testing {
-
-static class InitializeStuff {
- public:
- InitializeStuff() {
- grpc_memory_counters_init();
- init_lib_.init();
- rq_ = grpc_resource_quota_create("bm");
- }
-
- ~InitializeStuff() { init_lib_.shutdown(); }
-
- grpc_resource_quota* rq() { return rq_; }
-
- private:
- internal::GrpcLibrary init_lib_;
- grpc_resource_quota* rq_;
-} initialize_stuff;
-
-/*******************************************************************************
- * FIXTURES
- */
-
-static void ApplyCommonServerBuilderConfig(ServerBuilder* b) {
- b->SetMaxReceiveMessageSize(INT_MAX);
- b->SetMaxSendMessageSize(INT_MAX);
-}
-
-static void ApplyCommonChannelArguments(ChannelArguments* c) {
- c->SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, INT_MAX);
- c->SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, INT_MAX);
-}
-
-#ifdef GPR_LOW_LEVEL_COUNTERS
-extern "C" gpr_atm gpr_mu_locks;
-extern "C" gpr_atm gpr_counter_atm_cas;
-extern "C" gpr_atm gpr_counter_atm_add;
-#endif
-
-class BaseFixture {
- public:
- void Finish(benchmark::State& s) {
- std::ostringstream out;
- this->AddToLabel(out, s);
-#ifdef GPR_LOW_LEVEL_COUNTERS
- out << " locks/iter:" << ((double)(gpr_atm_no_barrier_load(&gpr_mu_locks) -
- mu_locks_at_start_) /
- (double)s.iterations())
- << " atm_cas/iter:"
- << ((double)(gpr_atm_no_barrier_load(&gpr_counter_atm_cas) -
- atm_cas_at_start_) /
- (double)s.iterations())
- << " atm_add/iter:"
- << ((double)(gpr_atm_no_barrier_load(&gpr_counter_atm_add) -
- atm_add_at_start_) /
- (double)s.iterations());
-#endif
- grpc_memory_counters counters_at_end = grpc_memory_counters_snapshot();
- out << " allocs/iter:"
- << ((double)(counters_at_end.total_allocs_absolute -
- counters_at_start_.total_allocs_absolute) /
- (double)s.iterations());
- auto label = out.str();
- if (label.length() && label[0] == ' ') {
- label = label.substr(1);
- }
- s.SetLabel(label);
- }
-
- virtual void AddToLabel(std::ostream& out, benchmark::State& s) = 0;
-
- private:
-#ifdef GPR_LOW_LEVEL_COUNTERS
- const size_t mu_locks_at_start_ = gpr_atm_no_barrier_load(&gpr_mu_locks);
- const size_t atm_cas_at_start_ =
- gpr_atm_no_barrier_load(&gpr_counter_atm_cas);
- const size_t atm_add_at_start_ =
- gpr_atm_no_barrier_load(&gpr_counter_atm_add);
-#endif
- grpc_memory_counters counters_at_start_ = grpc_memory_counters_snapshot();
-};
-
-class FullstackFixture : public BaseFixture {
- public:
- FullstackFixture(Service* service, const grpc::string& address) {
- ServerBuilder b;
- b.AddListeningPort(address, InsecureServerCredentials());
- cq_ = b.AddCompletionQueue(true);
- b.RegisterService(service);
- ApplyCommonServerBuilderConfig(&b);
- server_ = b.BuildAndStart();
- ChannelArguments args;
- ApplyCommonChannelArguments(&args);
- channel_ = CreateCustomChannel(address, InsecureChannelCredentials(), args);
- }
-
- virtual ~FullstackFixture() {
- server_->Shutdown();
- cq_->Shutdown();
- void* tag;
- bool ok;
- while (cq_->Next(&tag, &ok)) {
- }
- }
-
- ServerCompletionQueue* cq() { return cq_.get(); }
- std::shared_ptr<Channel> channel() { return channel_; }
-
- private:
- std::unique_ptr<Server> server_;
- std::unique_ptr<ServerCompletionQueue> cq_;
- std::shared_ptr<Channel> channel_;
-};
-
-class TCP : public FullstackFixture {
- public:
- TCP(Service* service) : FullstackFixture(service, MakeAddress()) {}
-
- void AddToLabel(std::ostream& out, benchmark::State& state) {}
-
- private:
- static grpc::string MakeAddress() {
- int port = grpc_pick_unused_port_or_die();
- std::stringstream addr;
- addr << "localhost:" << port;
- return addr.str();
- }
-};
-
-class UDS : public FullstackFixture {
- public:
- UDS(Service* service) : FullstackFixture(service, MakeAddress()) {}
-
- void AddToLabel(std::ostream& out, benchmark::State& state) override {}
-
- private:
- static grpc::string MakeAddress() {
- int port = grpc_pick_unused_port_or_die(); // just for a unique id - not a
- // real port
- std::stringstream addr;
- addr << "unix:/tmp/bm_fullstack." << port;
- return addr.str();
- }
-};
-
-class EndpointPairFixture : public BaseFixture {
- public:
- EndpointPairFixture(Service* service, grpc_endpoint_pair endpoints)
- : endpoint_pair_(endpoints) {
- ServerBuilder b;
- cq_ = b.AddCompletionQueue(true);
- b.RegisterService(service);
- ApplyCommonServerBuilderConfig(&b);
- server_ = b.BuildAndStart();
-
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
-
- /* add server endpoint to server_ */
- {
- const grpc_channel_args* server_args =
- grpc_server_get_channel_args(server_->c_server());
- server_transport_ = grpc_create_chttp2_transport(
- &exec_ctx, server_args, endpoints.server, 0 /* is_client */);
-
- grpc_pollset** pollsets;
- size_t num_pollsets = 0;
- grpc_server_get_pollsets(server_->c_server(), &pollsets, &num_pollsets);
-
- for (size_t i = 0; i < num_pollsets; i++) {
- grpc_endpoint_add_to_pollset(&exec_ctx, endpoints.server, pollsets[i]);
- }
-
- grpc_server_setup_transport(&exec_ctx, server_->c_server(),
- server_transport_, NULL, server_args);
- grpc_chttp2_transport_start_reading(&exec_ctx, server_transport_, NULL);
- }
-
- /* create channel */
- {
- ChannelArguments args;
- args.SetString(GRPC_ARG_DEFAULT_AUTHORITY, "test.authority");
- ApplyCommonChannelArguments(&args);
-
- grpc_channel_args c_args = args.c_channel_args();
- client_transport_ =
- grpc_create_chttp2_transport(&exec_ctx, &c_args, endpoints.client, 1);
- GPR_ASSERT(client_transport_);
- grpc_channel* channel =
- grpc_channel_create(&exec_ctx, "target", &c_args,
- GRPC_CLIENT_DIRECT_CHANNEL, client_transport_);
- grpc_chttp2_transport_start_reading(&exec_ctx, client_transport_, NULL);
-
- channel_ = CreateChannelInternal("", channel);
- }
-
- grpc_exec_ctx_finish(&exec_ctx);
- }
-
- virtual ~EndpointPairFixture() {
- server_->Shutdown();
- cq_->Shutdown();
- void* tag;
- bool ok;
- while (cq_->Next(&tag, &ok)) {
- }
- }
-
- ServerCompletionQueue* cq() { return cq_.get(); }
- std::shared_ptr<Channel> channel() { return channel_; }
-
- protected:
- grpc_endpoint_pair endpoint_pair_;
- grpc_transport* client_transport_;
- grpc_transport* server_transport_;
-
- private:
- std::unique_ptr<Server> server_;
- std::unique_ptr<ServerCompletionQueue> cq_;
- std::shared_ptr<Channel> channel_;
-};
-
-class SockPair : public EndpointPairFixture {
- public:
- SockPair(Service* service)
- : EndpointPairFixture(service, grpc_iomgr_create_endpoint_pair(
- "test", initialize_stuff.rq(), 8192)) {
- }
-
- void AddToLabel(std::ostream& out, benchmark::State& state) {}
-};
-
-class InProcessCHTTP2 : public EndpointPairFixture {
- public:
- InProcessCHTTP2(Service* service)
- : EndpointPairFixture(service, MakeEndpoints()) {}
-
- void AddToLabel(std::ostream& out, benchmark::State& state) {
- out << " writes/iter:"
- << ((double)stats_.num_writes / (double)state.iterations());
- }
-
- private:
- grpc_passthru_endpoint_stats stats_;
-
- grpc_endpoint_pair MakeEndpoints() {
- grpc_endpoint_pair p;
- grpc_passthru_endpoint_create(&p.client, &p.server, initialize_stuff.rq(),
- &stats_);
- return p;
- }
-};
-
-class TrickledCHTTP2 : public EndpointPairFixture {
- public:
- TrickledCHTTP2(Service* service, size_t megabits_per_second)
- : EndpointPairFixture(service, MakeEndpoints(megabits_per_second)) {}
-
- void AddToLabel(std::ostream& out, benchmark::State& state) {
- out << " writes/iter:"
- << ((double)stats_.num_writes / (double)state.iterations())
- << " cli_transport_stalls/iter:"
- << ((double)
- client_stats_.streams_stalled_due_to_transport_flow_control /
- (double)state.iterations())
- << " cli_stream_stalls/iter:"
- << ((double)client_stats_.streams_stalled_due_to_stream_flow_control /
- (double)state.iterations())
- << " svr_transport_stalls/iter:"
- << ((double)
- server_stats_.streams_stalled_due_to_transport_flow_control /
- (double)state.iterations())
- << " svr_stream_stalls/iter:"
- << ((double)server_stats_.streams_stalled_due_to_stream_flow_control /
- (double)state.iterations());
- }
-
- void Step() {
- grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
- size_t client_backlog =
- grpc_trickle_endpoint_trickle(&exec_ctx, endpoint_pair_.client);
- size_t server_backlog =
- grpc_trickle_endpoint_trickle(&exec_ctx, endpoint_pair_.server);
- grpc_exec_ctx_finish(&exec_ctx);
-
- UpdateStats((grpc_chttp2_transport*)client_transport_, &client_stats_,
- client_backlog);
- UpdateStats((grpc_chttp2_transport*)server_transport_, &server_stats_,
- server_backlog);
- }
-
- private:
- grpc_passthru_endpoint_stats stats_;
- struct Stats {
- int streams_stalled_due_to_stream_flow_control = 0;
- int streams_stalled_due_to_transport_flow_control = 0;
- };
- Stats client_stats_;
- Stats server_stats_;
-
- grpc_endpoint_pair MakeEndpoints(size_t kilobits) {
- grpc_endpoint_pair p;
- grpc_passthru_endpoint_create(&p.client, &p.server, initialize_stuff.rq(),
- &stats_);
- double bytes_per_second = 125.0 * kilobits;
- p.client = grpc_trickle_endpoint_create(p.client, bytes_per_second);
- p.server = grpc_trickle_endpoint_create(p.server, bytes_per_second);
- return p;
- }
-
- void UpdateStats(grpc_chttp2_transport* t, Stats* s, size_t backlog) {
- if (backlog == 0) {
- if (t->lists[GRPC_CHTTP2_LIST_STALLED_BY_STREAM].head != NULL) {
- s->streams_stalled_due_to_stream_flow_control++;
- }
- if (t->lists[GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT].head != NULL) {
- s->streams_stalled_due_to_transport_flow_control++;
- }
- }
- }
-};
-
-/*******************************************************************************
- * CONTEXT MUTATORS
- */
-
-static const int kPregenerateKeyCount = 100000;
-
-template <class F>
-auto MakeVector(size_t length, F f) -> std::vector<decltype(f())> {
- std::vector<decltype(f())> out;
- out.reserve(length);
- for (size_t i = 0; i < length; i++) {
- out.push_back(f());
- }
- return out;
-}
-
-class NoOpMutator {
- public:
- template <class ContextType>
- NoOpMutator(ContextType* context) {}
-};
-
-template <int length>
-class RandomBinaryMetadata {
- public:
- static const grpc::string& Key() { return kKey; }
-
- static const grpc::string& Value() {
- return kValues[rand() % kValues.size()];
- }
-
- private:
- static const grpc::string kKey;
- static const std::vector<grpc::string> kValues;
-
- static grpc::string GenerateOneString() {
- grpc::string s;
- s.reserve(length + 1);
- for (int i = 0; i < length; i++) {
- s += (char)rand();
- }
- return s;
- }
-};
-
-template <int length>
-const grpc::string RandomBinaryMetadata<length>::kKey = "foo-bin";
-
-template <int length>
-const std::vector<grpc::string> RandomBinaryMetadata<length>::kValues =
- MakeVector(kPregenerateKeyCount, GenerateOneString);
-
-template <int length>
-class RandomAsciiMetadata {
- public:
- static const grpc::string& Key() { return kKey; }
-
- static const grpc::string& Value() {
- return kValues[rand() % kValues.size()];
- }
-
- private:
- static const grpc::string kKey;
- static const std::vector<grpc::string> kValues;
-
- static grpc::string GenerateOneString() {
- grpc::string s;
- s.reserve(length + 1);
- for (int i = 0; i < length; i++) {
- s += (char)(rand() % 26 + 'a');
- }
- return s;
- }
-};
-
-template <int length>
-const grpc::string RandomAsciiMetadata<length>::kKey = "foo";
-
-template <int length>
-const std::vector<grpc::string> RandomAsciiMetadata<length>::kValues =
- MakeVector(kPregenerateKeyCount, GenerateOneString);
-
-template <class Generator, int kNumKeys>
-class Client_AddMetadata : public NoOpMutator {
- public:
- Client_AddMetadata(ClientContext* context) : NoOpMutator(context) {
- for (int i = 0; i < kNumKeys; i++) {
- context->AddMetadata(Generator::Key(), Generator::Value());
- }
- }
-};
-
-template <class Generator, int kNumKeys>
-class Server_AddInitialMetadata : public NoOpMutator {
- public:
- Server_AddInitialMetadata(ServerContext* context) : NoOpMutator(context) {
- for (int i = 0; i < kNumKeys; i++) {
- context->AddInitialMetadata(Generator::Key(), Generator::Value());
- }
- }
-};
-
-/*******************************************************************************
- * BENCHMARKING KERNELS
- */
-
-static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); }
-
-template <class Fixture, class ClientContextMutator, class ServerContextMutator>
-static void BM_UnaryPingPong(benchmark::State& state) {
- EchoTestService::AsyncService service;
- std::unique_ptr<Fixture> fixture(new Fixture(&service));
- EchoRequest send_request;
- EchoResponse send_response;
- EchoResponse recv_response;
- if (state.range(0) > 0) {
- send_request.set_message(std::string(state.range(0), 'a'));
- }
- if (state.range(1) > 0) {
- send_response.set_message(std::string(state.range(1), 'a'));
- }
- Status recv_status;
- struct ServerEnv {
- ServerContext ctx;
- EchoRequest recv_request;
- grpc::ServerAsyncResponseWriter<EchoResponse> response_writer;
- ServerEnv() : response_writer(&ctx) {}
- };
- uint8_t server_env_buffer[2 * sizeof(ServerEnv)];
- ServerEnv* server_env[2] = {
- reinterpret_cast<ServerEnv*>(server_env_buffer),
- reinterpret_cast<ServerEnv*>(server_env_buffer + sizeof(ServerEnv))};
- new (server_env[0]) ServerEnv;
- new (server_env[1]) ServerEnv;
- service.RequestEcho(&server_env[0]->ctx, &server_env[0]->recv_request,
- &server_env[0]->response_writer, fixture->cq(),
- fixture->cq(), tag(0));
- service.RequestEcho(&server_env[1]->ctx, &server_env[1]->recv_request,
- &server_env[1]->response_writer, fixture->cq(),
- fixture->cq(), tag(1));
- std::unique_ptr<EchoTestService::Stub> stub(
- EchoTestService::NewStub(fixture->channel()));
- while (state.KeepRunning()) {
- GPR_TIMER_SCOPE("BenchmarkCycle", 0);
- recv_response.Clear();
- ClientContext cli_ctx;
- ClientContextMutator cli_ctx_mut(&cli_ctx);
- std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
- stub->AsyncEcho(&cli_ctx, send_request, fixture->cq()));
- void* t;
- bool ok;
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- GPR_ASSERT(ok);
- GPR_ASSERT(t == tag(0) || t == tag(1));
- intptr_t slot = reinterpret_cast<intptr_t>(t);
- ServerEnv* senv = server_env[slot];
- ServerContextMutator svr_ctx_mut(&senv->ctx);
- senv->response_writer.Finish(send_response, Status::OK, tag(3));
- response_reader->Finish(&recv_response, &recv_status, tag(4));
- for (int i = (1 << 3) | (1 << 4); i != 0;) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- GPR_ASSERT(ok);
- int tagnum = (int)reinterpret_cast<intptr_t>(t);
- GPR_ASSERT(i & (1 << tagnum));
- i -= 1 << tagnum;
- }
- GPR_ASSERT(recv_status.ok());
-
- senv->~ServerEnv();
- senv = new (senv) ServerEnv();
- service.RequestEcho(&senv->ctx, &senv->recv_request, &senv->response_writer,
- fixture->cq(), fixture->cq(), tag(slot));
- }
- fixture->Finish(state);
- fixture.reset();
- server_env[0]->~ServerEnv();
- server_env[1]->~ServerEnv();
- state.SetBytesProcessed(state.range(0) * state.iterations() +
- state.range(1) * state.iterations());
-}
-
-// Repeatedly makes Streaming Bidi calls (exchanging a configurable number of
-// messages in each call) in a loop on a single channel
-//
-// First parmeter (i.e state.range(0)): Message size (in bytes) to use
-// Second parameter (i.e state.range(1)): Number of ping pong messages.
-// Note: One ping-pong means two messages (one from client to server and
-// the other from server to client):
-template <class Fixture, class ClientContextMutator, class ServerContextMutator>
-static void BM_StreamingPingPong(benchmark::State& state) {
- const int msg_size = state.range(0);
- const int max_ping_pongs = state.range(1);
-
- EchoTestService::AsyncService service;
- std::unique_ptr<Fixture> fixture(new Fixture(&service));
- {
- EchoResponse send_response;
- EchoResponse recv_response;
- EchoRequest send_request;
- EchoRequest recv_request;
-
- if (msg_size > 0) {
- send_request.set_message(std::string(msg_size, 'a'));
- send_response.set_message(std::string(msg_size, 'b'));
- }
-
- std::unique_ptr<EchoTestService::Stub> stub(
- EchoTestService::NewStub(fixture->channel()));
-
- while (state.KeepRunning()) {
- ServerContext svr_ctx;
- ServerContextMutator svr_ctx_mut(&svr_ctx);
- ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
- service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
- fixture->cq(), tag(0));
-
- ClientContext cli_ctx;
- ClientContextMutator cli_ctx_mut(&cli_ctx);
- auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
-
- // Establish async stream between client side and server side
- void* t;
- bool ok;
- int need_tags = (1 << 0) | (1 << 1);
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- GPR_ASSERT(ok);
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
-
- // Send 'max_ping_pongs' number of ping pong messages
- int ping_pong_cnt = 0;
- while (ping_pong_cnt < max_ping_pongs) {
- request_rw->Write(send_request, tag(0)); // Start client send
- response_rw.Read(&recv_request, tag(1)); // Start server recv
- request_rw->Read(&recv_response, tag(2)); // Start client recv
-
- need_tags = (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3);
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- GPR_ASSERT(ok);
- int i = (int)(intptr_t)t;
-
- // If server recv is complete, start the server send operation
- if (i == 1) {
- response_rw.Write(send_response, tag(3));
- }
-
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
-
- ping_pong_cnt++;
- }
-
- request_rw->WritesDone(tag(0));
- response_rw.Finish(Status::OK, tag(1));
-
- Status recv_status;
- request_rw->Finish(&recv_status, tag(2));
-
- need_tags = (1 << 0) | (1 << 1) | (1 << 2);
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
-
- GPR_ASSERT(recv_status.ok());
- }
- }
-
- fixture->Finish(state);
- fixture.reset();
- state.SetBytesProcessed(msg_size * state.iterations() * max_ping_pongs * 2);
-}
-
-// Repeatedly sends ping pong messages in a single streaming Bidi call in a loop
-// First parmeter (i.e state.range(0)): Message size (in bytes) to use
-template <class Fixture, class ClientContextMutator, class ServerContextMutator>
-static void BM_StreamingPingPongMsgs(benchmark::State& state) {
- const int msg_size = state.range(0);
-
- EchoTestService::AsyncService service;
- std::unique_ptr<Fixture> fixture(new Fixture(&service));
- {
- EchoResponse send_response;
- EchoResponse recv_response;
- EchoRequest send_request;
- EchoRequest recv_request;
-
- if (msg_size > 0) {
- send_request.set_message(std::string(msg_size, 'a'));
- send_response.set_message(std::string(msg_size, 'b'));
- }
-
- std::unique_ptr<EchoTestService::Stub> stub(
- EchoTestService::NewStub(fixture->channel()));
-
- ServerContext svr_ctx;
- ServerContextMutator svr_ctx_mut(&svr_ctx);
- ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
- service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
- fixture->cq(), tag(0));
-
- ClientContext cli_ctx;
- ClientContextMutator cli_ctx_mut(&cli_ctx);
- auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
-
- // Establish async stream between client side and server side
- void* t;
- bool ok;
- int need_tags = (1 << 0) | (1 << 1);
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- GPR_ASSERT(ok);
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
-
- while (state.KeepRunning()) {
- GPR_TIMER_SCOPE("BenchmarkCycle", 0);
- request_rw->Write(send_request, tag(0)); // Start client send
- response_rw.Read(&recv_request, tag(1)); // Start server recv
- request_rw->Read(&recv_response, tag(2)); // Start client recv
-
- need_tags = (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3);
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- GPR_ASSERT(ok);
- int i = (int)(intptr_t)t;
-
- // If server recv is complete, start the server send operation
- if (i == 1) {
- response_rw.Write(send_response, tag(3));
- }
-
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
- }
-
- request_rw->WritesDone(tag(0));
- response_rw.Finish(Status::OK, tag(1));
- Status recv_status;
- request_rw->Finish(&recv_status, tag(2));
-
- need_tags = (1 << 0) | (1 << 1) | (1 << 2);
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
-
- GPR_ASSERT(recv_status.ok());
- }
-
- fixture->Finish(state);
- fixture.reset();
- state.SetBytesProcessed(msg_size * state.iterations() * 2);
-}
-
-template <class Fixture>
-static void BM_PumpStreamClientToServer(benchmark::State& state) {
- EchoTestService::AsyncService service;
- std::unique_ptr<Fixture> fixture(new Fixture(&service));
- {
- EchoRequest send_request;
- EchoRequest recv_request;
- if (state.range(0) > 0) {
- send_request.set_message(std::string(state.range(0), 'a'));
- }
- Status recv_status;
- ServerContext svr_ctx;
- ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
- service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
- fixture->cq(), tag(0));
- std::unique_ptr<EchoTestService::Stub> stub(
- EchoTestService::NewStub(fixture->channel()));
- ClientContext cli_ctx;
- auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
- int need_tags = (1 << 0) | (1 << 1);
- void* t;
- bool ok;
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- GPR_ASSERT(ok);
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
- response_rw.Read(&recv_request, tag(0));
- while (state.KeepRunning()) {
- GPR_TIMER_SCOPE("BenchmarkCycle", 0);
- request_rw->Write(send_request, tag(1));
- while (true) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- if (t == tag(0)) {
- response_rw.Read(&recv_request, tag(0));
- } else if (t == tag(1)) {
- break;
- } else {
- GPR_ASSERT(false);
- }
- }
- }
- request_rw->WritesDone(tag(1));
- need_tags = (1 << 0) | (1 << 1);
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
- }
- fixture->Finish(state);
- fixture.reset();
- state.SetBytesProcessed(state.range(0) * state.iterations());
-}
-
-template <class Fixture>
-static void BM_PumpStreamServerToClient(benchmark::State& state) {
- EchoTestService::AsyncService service;
- std::unique_ptr<Fixture> fixture(new Fixture(&service));
- {
- EchoResponse send_response;
- EchoResponse recv_response;
- if (state.range(0) > 0) {
- send_response.set_message(std::string(state.range(0), 'a'));
- }
- Status recv_status;
- ServerContext svr_ctx;
- ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
- service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
- fixture->cq(), tag(0));
- std::unique_ptr<EchoTestService::Stub> stub(
- EchoTestService::NewStub(fixture->channel()));
- ClientContext cli_ctx;
- auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
- int need_tags = (1 << 0) | (1 << 1);
- void* t;
- bool ok;
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- GPR_ASSERT(ok);
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
- request_rw->Read(&recv_response, tag(0));
- while (state.KeepRunning()) {
- GPR_TIMER_SCOPE("BenchmarkCycle", 0);
- response_rw.Write(send_response, tag(1));
- while (true) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- if (t == tag(0)) {
- request_rw->Read(&recv_response, tag(0));
- } else if (t == tag(1)) {
- break;
- } else {
- GPR_ASSERT(false);
- }
- }
- }
- response_rw.Finish(Status::OK, tag(1));
- need_tags = (1 << 0) | (1 << 1);
- while (need_tags) {
- GPR_ASSERT(fixture->cq()->Next(&t, &ok));
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
- }
- fixture->Finish(state);
- fixture.reset();
- state.SetBytesProcessed(state.range(0) * state.iterations());
-}
-
-static void TrickleCQNext(TrickledCHTTP2* fixture, void** t, bool* ok) {
- while (true) {
- switch (fixture->cq()->AsyncNext(
- t, ok, gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
- gpr_time_from_micros(100, GPR_TIMESPAN)))) {
- case CompletionQueue::TIMEOUT:
- fixture->Step();
- break;
- case CompletionQueue::SHUTDOWN:
- GPR_ASSERT(false);
- break;
- case CompletionQueue::GOT_EVENT:
- return;
- }
- }
-}
-
-static void BM_PumpStreamServerToClient_Trickle(benchmark::State& state) {
- EchoTestService::AsyncService service;
- std::unique_ptr<TrickledCHTTP2> fixture(
- new TrickledCHTTP2(&service, state.range(1)));
- {
- EchoResponse send_response;
- EchoResponse recv_response;
- if (state.range(0) > 0) {
- send_response.set_message(std::string(state.range(0), 'a'));
- }
- Status recv_status;
- ServerContext svr_ctx;
- ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
- service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
- fixture->cq(), tag(0));
- std::unique_ptr<EchoTestService::Stub> stub(
- EchoTestService::NewStub(fixture->channel()));
- ClientContext cli_ctx;
- auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
- int need_tags = (1 << 0) | (1 << 1);
- void* t;
- bool ok;
- while (need_tags) {
- TrickleCQNext(fixture.get(), &t, &ok);
- GPR_ASSERT(ok);
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
- request_rw->Read(&recv_response, tag(0));
- while (state.KeepRunning()) {
- GPR_TIMER_SCOPE("BenchmarkCycle", 0);
- response_rw.Write(send_response, tag(1));
- while (true) {
- TrickleCQNext(fixture.get(), &t, &ok);
- if (t == tag(0)) {
- request_rw->Read(&recv_response, tag(0));
- } else if (t == tag(1)) {
- break;
- } else {
- GPR_ASSERT(false);
- }
- }
- }
- response_rw.Finish(Status::OK, tag(1));
- need_tags = (1 << 0) | (1 << 1);
- while (need_tags) {
- TrickleCQNext(fixture.get(), &t, &ok);
- int i = (int)(intptr_t)t;
- GPR_ASSERT(need_tags & (1 << i));
- need_tags &= ~(1 << i);
- }
- }
- fixture->Finish(state);
- fixture.reset();
- state.SetBytesProcessed(state.range(0) * state.iterations());
-}
-
-/*******************************************************************************
- * CONFIGURATIONS
- */
-
-static void SweepSizesArgs(benchmark::internal::Benchmark* b) {
- b->Args({0, 0});
- for (int i = 1; i <= 128 * 1024 * 1024; i *= 8) {
- b->Args({i, 0});
- b->Args({0, i});
- b->Args({i, i});
- }
-}
-
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, TCP, NoOpMutator, NoOpMutator)
- ->Apply(SweepSizesArgs);
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, UDS, NoOpMutator, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, SockPair, NoOpMutator, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, NoOpMutator)
- ->Apply(SweepSizesArgs);
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomBinaryMetadata<10>, 1>, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomBinaryMetadata<31>, 1>, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomBinaryMetadata<100>, 1>,
- NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomBinaryMetadata<10>, 2>, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomBinaryMetadata<31>, 2>, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomBinaryMetadata<100>, 2>,
- NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
- Server_AddInitialMetadata<RandomBinaryMetadata<10>, 1>)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
- Server_AddInitialMetadata<RandomBinaryMetadata<31>, 1>)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
- Server_AddInitialMetadata<RandomBinaryMetadata<100>, 1>)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomAsciiMetadata<10>, 1>, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomAsciiMetadata<31>, 1>, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
- Client_AddMetadata<RandomAsciiMetadata<100>, 1>, NoOpMutator)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
- Server_AddInitialMetadata<RandomAsciiMetadata<10>, 1>)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
- Server_AddInitialMetadata<RandomAsciiMetadata<31>, 1>)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
- Server_AddInitialMetadata<RandomAsciiMetadata<100>, 1>)
- ->Args({0, 0});
-BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
- Server_AddInitialMetadata<RandomAsciiMetadata<10>, 100>)
- ->Args({0, 0});
-
-BENCHMARK_TEMPLATE(BM_PumpStreamClientToServer, TCP)
- ->Range(0, 128 * 1024 * 1024);
-BENCHMARK_TEMPLATE(BM_PumpStreamClientToServer, UDS)
- ->Range(0, 128 * 1024 * 1024);
-BENCHMARK_TEMPLATE(BM_PumpStreamClientToServer, SockPair)
- ->Range(0, 128 * 1024 * 1024);
-BENCHMARK_TEMPLATE(BM_PumpStreamClientToServer, InProcessCHTTP2)
- ->Range(0, 128 * 1024 * 1024);
-BENCHMARK_TEMPLATE(BM_PumpStreamServerToClient, TCP)
- ->Range(0, 128 * 1024 * 1024);
-BENCHMARK_TEMPLATE(BM_PumpStreamServerToClient, UDS)
- ->Range(0, 128 * 1024 * 1024);
-BENCHMARK_TEMPLATE(BM_PumpStreamServerToClient, SockPair)
- ->Range(0, 128 * 1024 * 1024);
-BENCHMARK_TEMPLATE(BM_PumpStreamServerToClient, InProcessCHTTP2)
- ->Range(0, 128 * 1024 * 1024);
-
-static void TrickleArgs(benchmark::internal::Benchmark* b) {
- for (int i = 1; i <= 128 * 1024 * 1024; i *= 8) {
- for (int j = 1; j <= 128 * 1024 * 1024; j *= 8) {
- double expected_time =
- static_cast<double>(14 + i) / (125.0 * static_cast<double>(j));
- if (expected_time > 0.01) continue;
- b->Args({i, j});
- }
- }
-}
-
-BENCHMARK(BM_PumpStreamServerToClient_Trickle)->Apply(TrickleArgs);
-
-// Generate Args for StreamingPingPong benchmarks. Currently generates args for
-// only "small streams" (i.e streams with 0, 1 or 2 messages)
-static void StreamingPingPongArgs(benchmark::internal::Benchmark* b) {
- int msg_size = 0;
-
- b->Args({0, 0}); // spl case: 0 ping-pong msgs (msg_size doesn't matter here)
-
- for (msg_size = 0; msg_size <= 128 * 1024 * 1024;
- msg_size == 0 ? msg_size++ : msg_size *= 8) {
- b->Args({msg_size, 1});
- b->Args({msg_size, 2});
- }
-}
-
-BENCHMARK_TEMPLATE(BM_StreamingPingPong, InProcessCHTTP2, NoOpMutator,
- NoOpMutator)
- ->Apply(StreamingPingPongArgs);
-BENCHMARK_TEMPLATE(BM_StreamingPingPong, TCP, NoOpMutator, NoOpMutator)
- ->Apply(StreamingPingPongArgs);
-
-BENCHMARK_TEMPLATE(BM_StreamingPingPongMsgs, InProcessCHTTP2, NoOpMutator,
- NoOpMutator)
- ->Range(0, 128 * 1024 * 1024);
-BENCHMARK_TEMPLATE(BM_StreamingPingPongMsgs, TCP, NoOpMutator, NoOpMutator)
- ->Range(0, 128 * 1024 * 1024);
-
-} // namespace testing
-} // namespace grpc
-
-BENCHMARK_MAIN();
diff --git a/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc b/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc
new file mode 100644
index 0000000000..00e37f7912
--- /dev/null
+++ b/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc
@@ -0,0 +1,276 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* Benchmark gRPC end2end in various configurations */
+
+#include <sstream>
+
+#include "src/core/lib/profiling/timers.h"
+#include "src/cpp/client/create_channel_internal.h"
+#include "src/proto/grpc/testing/echo.grpc.pb.h"
+#include "test/cpp/microbenchmarks/fullstack_context_mutators.h"
+#include "test/cpp/microbenchmarks/fullstack_fixtures.h"
+#include "third_party/benchmark/include/benchmark/benchmark.h"
+
+namespace grpc {
+namespace testing {
+
+// force library initialization
+auto& force_library_initialization = Library::get();
+
+/*******************************************************************************
+ * BENCHMARKING KERNELS
+ */
+
+static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); }
+
+// Repeatedly makes Streaming Bidi calls (exchanging a configurable number of
+// messages in each call) in a loop on a single channel
+//
+// First parmeter (i.e state.range(0)): Message size (in bytes) to use
+// Second parameter (i.e state.range(1)): Number of ping pong messages.
+// Note: One ping-pong means two messages (one from client to server and
+// the other from server to client):
+template <class Fixture, class ClientContextMutator, class ServerContextMutator>
+static void BM_StreamingPingPong(benchmark::State& state) {
+ const int msg_size = state.range(0);
+ const int max_ping_pongs = state.range(1);
+
+ EchoTestService::AsyncService service;
+ std::unique_ptr<Fixture> fixture(new Fixture(&service));
+ {
+ EchoResponse send_response;
+ EchoResponse recv_response;
+ EchoRequest send_request;
+ EchoRequest recv_request;
+
+ if (msg_size > 0) {
+ send_request.set_message(std::string(msg_size, 'a'));
+ send_response.set_message(std::string(msg_size, 'b'));
+ }
+
+ std::unique_ptr<EchoTestService::Stub> stub(
+ EchoTestService::NewStub(fixture->channel()));
+
+ while (state.KeepRunning()) {
+ ServerContext svr_ctx;
+ ServerContextMutator svr_ctx_mut(&svr_ctx);
+ ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
+ service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
+ fixture->cq(), tag(0));
+
+ ClientContext cli_ctx;
+ ClientContextMutator cli_ctx_mut(&cli_ctx);
+ auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
+
+ // Establish async stream between client side and server side
+ void* t;
+ bool ok;
+ int need_tags = (1 << 0) | (1 << 1);
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ GPR_ASSERT(ok);
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+
+ // Send 'max_ping_pongs' number of ping pong messages
+ int ping_pong_cnt = 0;
+ while (ping_pong_cnt < max_ping_pongs) {
+ request_rw->Write(send_request, tag(0)); // Start client send
+ response_rw.Read(&recv_request, tag(1)); // Start server recv
+ request_rw->Read(&recv_response, tag(2)); // Start client recv
+
+ need_tags = (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3);
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ GPR_ASSERT(ok);
+ int i = (int)(intptr_t)t;
+
+ // If server recv is complete, start the server send operation
+ if (i == 1) {
+ response_rw.Write(send_response, tag(3));
+ }
+
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+
+ ping_pong_cnt++;
+ }
+
+ request_rw->WritesDone(tag(0));
+ response_rw.Finish(Status::OK, tag(1));
+
+ Status recv_status;
+ request_rw->Finish(&recv_status, tag(2));
+
+ need_tags = (1 << 0) | (1 << 1) | (1 << 2);
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+
+ GPR_ASSERT(recv_status.ok());
+ }
+ }
+
+ fixture->Finish(state);
+ fixture.reset();
+ state.SetBytesProcessed(msg_size * state.iterations() * max_ping_pongs * 2);
+}
+
+// Repeatedly sends ping pong messages in a single streaming Bidi call in a loop
+// First parmeter (i.e state.range(0)): Message size (in bytes) to use
+template <class Fixture, class ClientContextMutator, class ServerContextMutator>
+static void BM_StreamingPingPongMsgs(benchmark::State& state) {
+ const int msg_size = state.range(0);
+
+ EchoTestService::AsyncService service;
+ std::unique_ptr<Fixture> fixture(new Fixture(&service));
+ {
+ EchoResponse send_response;
+ EchoResponse recv_response;
+ EchoRequest send_request;
+ EchoRequest recv_request;
+
+ if (msg_size > 0) {
+ send_request.set_message(std::string(msg_size, 'a'));
+ send_response.set_message(std::string(msg_size, 'b'));
+ }
+
+ std::unique_ptr<EchoTestService::Stub> stub(
+ EchoTestService::NewStub(fixture->channel()));
+
+ ServerContext svr_ctx;
+ ServerContextMutator svr_ctx_mut(&svr_ctx);
+ ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
+ service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
+ fixture->cq(), tag(0));
+
+ ClientContext cli_ctx;
+ ClientContextMutator cli_ctx_mut(&cli_ctx);
+ auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
+
+ // Establish async stream between client side and server side
+ void* t;
+ bool ok;
+ int need_tags = (1 << 0) | (1 << 1);
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ GPR_ASSERT(ok);
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+
+ while (state.KeepRunning()) {
+ GPR_TIMER_SCOPE("BenchmarkCycle", 0);
+ request_rw->Write(send_request, tag(0)); // Start client send
+ response_rw.Read(&recv_request, tag(1)); // Start server recv
+ request_rw->Read(&recv_response, tag(2)); // Start client recv
+
+ need_tags = (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3);
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ GPR_ASSERT(ok);
+ int i = (int)(intptr_t)t;
+
+ // If server recv is complete, start the server send operation
+ if (i == 1) {
+ response_rw.Write(send_response, tag(3));
+ }
+
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+ }
+
+ request_rw->WritesDone(tag(0));
+ response_rw.Finish(Status::OK, tag(1));
+ Status recv_status;
+ request_rw->Finish(&recv_status, tag(2));
+
+ need_tags = (1 << 0) | (1 << 1) | (1 << 2);
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+
+ GPR_ASSERT(recv_status.ok());
+ }
+
+ fixture->Finish(state);
+ fixture.reset();
+ state.SetBytesProcessed(msg_size * state.iterations() * 2);
+}
+
+/*******************************************************************************
+ * CONFIGURATIONS
+ */
+
+// Generate Args for StreamingPingPong benchmarks. Currently generates args for
+// only "small streams" (i.e streams with 0, 1 or 2 messages)
+static void StreamingPingPongArgs(benchmark::internal::Benchmark* b) {
+ int msg_size = 0;
+
+ b->Args({0, 0}); // spl case: 0 ping-pong msgs (msg_size doesn't matter here)
+
+ for (msg_size = 0; msg_size <= 128 * 1024 * 1024;
+ msg_size == 0 ? msg_size++ : msg_size *= 8) {
+ b->Args({msg_size, 1});
+ b->Args({msg_size, 2});
+ }
+}
+
+BENCHMARK_TEMPLATE(BM_StreamingPingPong, InProcessCHTTP2, NoOpMutator,
+ NoOpMutator)
+ ->Apply(StreamingPingPongArgs);
+BENCHMARK_TEMPLATE(BM_StreamingPingPong, TCP, NoOpMutator, NoOpMutator)
+ ->Apply(StreamingPingPongArgs);
+
+BENCHMARK_TEMPLATE(BM_StreamingPingPongMsgs, InProcessCHTTP2, NoOpMutator,
+ NoOpMutator)
+ ->Range(0, 128 * 1024 * 1024);
+BENCHMARK_TEMPLATE(BM_StreamingPingPongMsgs, TCP, NoOpMutator, NoOpMutator)
+ ->Range(0, 128 * 1024 * 1024);
+
+} // namespace testing
+} // namespace grpc
+
+BENCHMARK_MAIN();
diff --git a/test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc b/test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc
new file mode 100644
index 0000000000..dc0e7d769a
--- /dev/null
+++ b/test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc
@@ -0,0 +1,197 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* Benchmark gRPC end2end in various configurations */
+
+#include <sstream>
+
+#include "src/core/lib/profiling/timers.h"
+#include "src/cpp/client/create_channel_internal.h"
+#include "src/proto/grpc/testing/echo.grpc.pb.h"
+#include "test/cpp/microbenchmarks/fullstack_context_mutators.h"
+#include "test/cpp/microbenchmarks/fullstack_fixtures.h"
+#include "third_party/benchmark/include/benchmark/benchmark.h"
+
+namespace grpc {
+namespace testing {
+
+// force library initialization
+auto& force_library_initialization = Library::get();
+
+/*******************************************************************************
+ * BENCHMARKING KERNELS
+ */
+
+static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); }
+
+template <class Fixture>
+static void BM_PumpStreamClientToServer(benchmark::State& state) {
+ EchoTestService::AsyncService service;
+ std::unique_ptr<Fixture> fixture(new Fixture(&service));
+ {
+ EchoRequest send_request;
+ EchoRequest recv_request;
+ if (state.range(0) > 0) {
+ send_request.set_message(std::string(state.range(0), 'a'));
+ }
+ Status recv_status;
+ ServerContext svr_ctx;
+ ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
+ service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
+ fixture->cq(), tag(0));
+ std::unique_ptr<EchoTestService::Stub> stub(
+ EchoTestService::NewStub(fixture->channel()));
+ ClientContext cli_ctx;
+ auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
+ int need_tags = (1 << 0) | (1 << 1);
+ void* t;
+ bool ok;
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ GPR_ASSERT(ok);
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+ response_rw.Read(&recv_request, tag(0));
+ while (state.KeepRunning()) {
+ GPR_TIMER_SCOPE("BenchmarkCycle", 0);
+ request_rw->Write(send_request, tag(1));
+ while (true) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ if (t == tag(0)) {
+ response_rw.Read(&recv_request, tag(0));
+ } else if (t == tag(1)) {
+ break;
+ } else {
+ GPR_ASSERT(false);
+ }
+ }
+ }
+ request_rw->WritesDone(tag(1));
+ need_tags = (1 << 0) | (1 << 1);
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+ }
+ fixture->Finish(state);
+ fixture.reset();
+ state.SetBytesProcessed(state.range(0) * state.iterations());
+}
+
+template <class Fixture>
+static void BM_PumpStreamServerToClient(benchmark::State& state) {
+ EchoTestService::AsyncService service;
+ std::unique_ptr<Fixture> fixture(new Fixture(&service));
+ {
+ EchoResponse send_response;
+ EchoResponse recv_response;
+ if (state.range(0) > 0) {
+ send_response.set_message(std::string(state.range(0), 'a'));
+ }
+ Status recv_status;
+ ServerContext svr_ctx;
+ ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
+ service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
+ fixture->cq(), tag(0));
+ std::unique_ptr<EchoTestService::Stub> stub(
+ EchoTestService::NewStub(fixture->channel()));
+ ClientContext cli_ctx;
+ auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
+ int need_tags = (1 << 0) | (1 << 1);
+ void* t;
+ bool ok;
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ GPR_ASSERT(ok);
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+ request_rw->Read(&recv_response, tag(0));
+ while (state.KeepRunning()) {
+ GPR_TIMER_SCOPE("BenchmarkCycle", 0);
+ response_rw.Write(send_response, tag(1));
+ while (true) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ if (t == tag(0)) {
+ request_rw->Read(&recv_response, tag(0));
+ } else if (t == tag(1)) {
+ break;
+ } else {
+ GPR_ASSERT(false);
+ }
+ }
+ }
+ response_rw.Finish(Status::OK, tag(1));
+ need_tags = (1 << 0) | (1 << 1);
+ while (need_tags) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+ }
+ fixture->Finish(state);
+ fixture.reset();
+ state.SetBytesProcessed(state.range(0) * state.iterations());
+}
+
+/*******************************************************************************
+ * CONFIGURATIONS
+ */
+
+BENCHMARK_TEMPLATE(BM_PumpStreamClientToServer, TCP)
+ ->Range(0, 128 * 1024 * 1024);
+BENCHMARK_TEMPLATE(BM_PumpStreamClientToServer, UDS)
+ ->Range(0, 128 * 1024 * 1024);
+BENCHMARK_TEMPLATE(BM_PumpStreamClientToServer, SockPair)
+ ->Range(0, 128 * 1024 * 1024);
+BENCHMARK_TEMPLATE(BM_PumpStreamClientToServer, InProcessCHTTP2)
+ ->Range(0, 128 * 1024 * 1024);
+BENCHMARK_TEMPLATE(BM_PumpStreamServerToClient, TCP)
+ ->Range(0, 128 * 1024 * 1024);
+BENCHMARK_TEMPLATE(BM_PumpStreamServerToClient, UDS)
+ ->Range(0, 128 * 1024 * 1024);
+BENCHMARK_TEMPLATE(BM_PumpStreamServerToClient, SockPair)
+ ->Range(0, 128 * 1024 * 1024);
+BENCHMARK_TEMPLATE(BM_PumpStreamServerToClient, InProcessCHTTP2)
+ ->Range(0, 128 * 1024 * 1024);
+
+} // namespace testing
+} // namespace grpc
+
+BENCHMARK_MAIN();
diff --git a/test/cpp/microbenchmarks/bm_fullstack_trickle.cc b/test/cpp/microbenchmarks/bm_fullstack_trickle.cc
new file mode 100644
index 0000000000..5011f06368
--- /dev/null
+++ b/test/cpp/microbenchmarks/bm_fullstack_trickle.cc
@@ -0,0 +1,219 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* Benchmark gRPC end2end in various configurations */
+
+#include "src/core/lib/profiling/timers.h"
+#include "src/cpp/client/create_channel_internal.h"
+#include "src/proto/grpc/testing/echo.grpc.pb.h"
+#include "test/cpp/microbenchmarks/fullstack_context_mutators.h"
+#include "test/cpp/microbenchmarks/fullstack_fixtures.h"
+#include "third_party/benchmark/include/benchmark/benchmark.h"
+extern "C" {
+#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
+#include "src/core/ext/transport/chttp2/transport/internal.h"
+#include "test/core/util/trickle_endpoint.h"
+}
+
+namespace grpc {
+namespace testing {
+
+static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); }
+
+class TrickledCHTTP2 : public EndpointPairFixture {
+ public:
+ TrickledCHTTP2(Service* service, size_t megabits_per_second)
+ : EndpointPairFixture(service, MakeEndpoints(megabits_per_second)) {}
+
+ void AddToLabel(std::ostream& out, benchmark::State& state) {
+ out << " writes/iter:"
+ << ((double)stats_.num_writes / (double)state.iterations())
+ << " cli_transport_stalls/iter:"
+ << ((double)
+ client_stats_.streams_stalled_due_to_transport_flow_control /
+ (double)state.iterations())
+ << " cli_stream_stalls/iter:"
+ << ((double)client_stats_.streams_stalled_due_to_stream_flow_control /
+ (double)state.iterations())
+ << " svr_transport_stalls/iter:"
+ << ((double)
+ server_stats_.streams_stalled_due_to_transport_flow_control /
+ (double)state.iterations())
+ << " svr_stream_stalls/iter:"
+ << ((double)server_stats_.streams_stalled_due_to_stream_flow_control /
+ (double)state.iterations());
+ }
+
+ void Step() {
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ size_t client_backlog =
+ grpc_trickle_endpoint_trickle(&exec_ctx, endpoint_pair_.client);
+ size_t server_backlog =
+ grpc_trickle_endpoint_trickle(&exec_ctx, endpoint_pair_.server);
+ grpc_exec_ctx_finish(&exec_ctx);
+
+ UpdateStats((grpc_chttp2_transport*)client_transport_, &client_stats_,
+ client_backlog);
+ UpdateStats((grpc_chttp2_transport*)server_transport_, &server_stats_,
+ server_backlog);
+ }
+
+ private:
+ grpc_passthru_endpoint_stats stats_;
+ struct Stats {
+ int streams_stalled_due_to_stream_flow_control = 0;
+ int streams_stalled_due_to_transport_flow_control = 0;
+ };
+ Stats client_stats_;
+ Stats server_stats_;
+
+ grpc_endpoint_pair MakeEndpoints(size_t kilobits) {
+ grpc_endpoint_pair p;
+ grpc_passthru_endpoint_create(&p.client, &p.server, Library::get().rq(),
+ &stats_);
+ double bytes_per_second = 125.0 * kilobits;
+ p.client = grpc_trickle_endpoint_create(p.client, bytes_per_second);
+ p.server = grpc_trickle_endpoint_create(p.server, bytes_per_second);
+ return p;
+ }
+
+ void UpdateStats(grpc_chttp2_transport* t, Stats* s, size_t backlog) {
+ if (backlog == 0) {
+ if (t->lists[GRPC_CHTTP2_LIST_STALLED_BY_STREAM].head != NULL) {
+ s->streams_stalled_due_to_stream_flow_control++;
+ }
+ if (t->lists[GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT].head != NULL) {
+ s->streams_stalled_due_to_transport_flow_control++;
+ }
+ }
+ }
+};
+
+// force library initialization
+auto& force_library_initialization = Library::get();
+
+static void TrickleCQNext(TrickledCHTTP2* fixture, void** t, bool* ok) {
+ while (true) {
+ switch (fixture->cq()->AsyncNext(
+ t, ok, gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_time_from_micros(100, GPR_TIMESPAN)))) {
+ case CompletionQueue::TIMEOUT:
+ fixture->Step();
+ break;
+ case CompletionQueue::SHUTDOWN:
+ GPR_ASSERT(false);
+ break;
+ case CompletionQueue::GOT_EVENT:
+ return;
+ }
+ }
+}
+
+static void BM_PumpStreamServerToClient_Trickle(benchmark::State& state) {
+ EchoTestService::AsyncService service;
+ std::unique_ptr<TrickledCHTTP2> fixture(
+ new TrickledCHTTP2(&service, state.range(1)));
+ {
+ EchoResponse send_response;
+ EchoResponse recv_response;
+ if (state.range(0) > 0) {
+ send_response.set_message(std::string(state.range(0), 'a'));
+ }
+ Status recv_status;
+ ServerContext svr_ctx;
+ ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx);
+ service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(),
+ fixture->cq(), tag(0));
+ std::unique_ptr<EchoTestService::Stub> stub(
+ EchoTestService::NewStub(fixture->channel()));
+ ClientContext cli_ctx;
+ auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1));
+ int need_tags = (1 << 0) | (1 << 1);
+ void* t;
+ bool ok;
+ while (need_tags) {
+ TrickleCQNext(fixture.get(), &t, &ok);
+ GPR_ASSERT(ok);
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+ request_rw->Read(&recv_response, tag(0));
+ while (state.KeepRunning()) {
+ GPR_TIMER_SCOPE("BenchmarkCycle", 0);
+ response_rw.Write(send_response, tag(1));
+ while (true) {
+ TrickleCQNext(fixture.get(), &t, &ok);
+ if (t == tag(0)) {
+ request_rw->Read(&recv_response, tag(0));
+ } else if (t == tag(1)) {
+ break;
+ } else {
+ GPR_ASSERT(false);
+ }
+ }
+ }
+ response_rw.Finish(Status::OK, tag(1));
+ need_tags = (1 << 0) | (1 << 1);
+ while (need_tags) {
+ TrickleCQNext(fixture.get(), &t, &ok);
+ int i = (int)(intptr_t)t;
+ GPR_ASSERT(need_tags & (1 << i));
+ need_tags &= ~(1 << i);
+ }
+ }
+ fixture->Finish(state);
+ fixture.reset();
+ state.SetBytesProcessed(state.range(0) * state.iterations());
+}
+
+/*******************************************************************************
+ * CONFIGURATIONS
+ */
+
+static void TrickleArgs(benchmark::internal::Benchmark* b) {
+ for (int i = 1; i <= 128 * 1024 * 1024; i *= 8) {
+ for (int j = 1; j <= 128 * 1024 * 1024; j *= 8) {
+ double expected_time =
+ static_cast<double>(14 + i) / (125.0 * static_cast<double>(j));
+ if (expected_time > 0.01) continue;
+ b->Args({i, j});
+ }
+ }
+}
+
+BENCHMARK(BM_PumpStreamServerToClient_Trickle)->Apply(TrickleArgs);
+}
+}
+
+BENCHMARK_MAIN();
diff --git a/test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc b/test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc
new file mode 100644
index 0000000000..e51d272b10
--- /dev/null
+++ b/test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc
@@ -0,0 +1,205 @@
+/*
+ *
+ * Copyright 2016, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* Benchmark gRPC end2end in various configurations */
+
+#include <sstream>
+
+#include "src/core/lib/profiling/timers.h"
+#include "src/cpp/client/create_channel_internal.h"
+#include "src/proto/grpc/testing/echo.grpc.pb.h"
+#include "test/cpp/microbenchmarks/fullstack_context_mutators.h"
+#include "test/cpp/microbenchmarks/fullstack_fixtures.h"
+#include "third_party/benchmark/include/benchmark/benchmark.h"
+
+namespace grpc {
+namespace testing {
+
+// force library initialization
+auto& force_library_initialization = Library::get();
+
+/*******************************************************************************
+ * BENCHMARKING KERNELS
+ */
+
+static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); }
+
+template <class Fixture, class ClientContextMutator, class ServerContextMutator>
+static void BM_UnaryPingPong(benchmark::State& state) {
+ EchoTestService::AsyncService service;
+ std::unique_ptr<Fixture> fixture(new Fixture(&service));
+ EchoRequest send_request;
+ EchoResponse send_response;
+ EchoResponse recv_response;
+ if (state.range(0) > 0) {
+ send_request.set_message(std::string(state.range(0), 'a'));
+ }
+ if (state.range(1) > 0) {
+ send_response.set_message(std::string(state.range(1), 'a'));
+ }
+ Status recv_status;
+ struct ServerEnv {
+ ServerContext ctx;
+ EchoRequest recv_request;
+ grpc::ServerAsyncResponseWriter<EchoResponse> response_writer;
+ ServerEnv() : response_writer(&ctx) {}
+ };
+ uint8_t server_env_buffer[2 * sizeof(ServerEnv)];
+ ServerEnv* server_env[2] = {
+ reinterpret_cast<ServerEnv*>(server_env_buffer),
+ reinterpret_cast<ServerEnv*>(server_env_buffer + sizeof(ServerEnv))};
+ new (server_env[0]) ServerEnv;
+ new (server_env[1]) ServerEnv;
+ service.RequestEcho(&server_env[0]->ctx, &server_env[0]->recv_request,
+ &server_env[0]->response_writer, fixture->cq(),
+ fixture->cq(), tag(0));
+ service.RequestEcho(&server_env[1]->ctx, &server_env[1]->recv_request,
+ &server_env[1]->response_writer, fixture->cq(),
+ fixture->cq(), tag(1));
+ std::unique_ptr<EchoTestService::Stub> stub(
+ EchoTestService::NewStub(fixture->channel()));
+ while (state.KeepRunning()) {
+ GPR_TIMER_SCOPE("BenchmarkCycle", 0);
+ recv_response.Clear();
+ ClientContext cli_ctx;
+ ClientContextMutator cli_ctx_mut(&cli_ctx);
+ std::unique_ptr<ClientAsyncResponseReader<EchoResponse>> response_reader(
+ stub->AsyncEcho(&cli_ctx, send_request, fixture->cq()));
+ void* t;
+ bool ok;
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ GPR_ASSERT(ok);
+ GPR_ASSERT(t == tag(0) || t == tag(1));
+ intptr_t slot = reinterpret_cast<intptr_t>(t);
+ ServerEnv* senv = server_env[slot];
+ ServerContextMutator svr_ctx_mut(&senv->ctx);
+ senv->response_writer.Finish(send_response, Status::OK, tag(3));
+ response_reader->Finish(&recv_response, &recv_status, tag(4));
+ for (int i = (1 << 3) | (1 << 4); i != 0;) {
+ GPR_ASSERT(fixture->cq()->Next(&t, &ok));
+ GPR_ASSERT(ok);
+ int tagnum = (int)reinterpret_cast<intptr_t>(t);
+ GPR_ASSERT(i & (1 << tagnum));
+ i -= 1 << tagnum;
+ }
+ GPR_ASSERT(recv_status.ok());
+
+ senv->~ServerEnv();
+ senv = new (senv) ServerEnv();
+ service.RequestEcho(&senv->ctx, &senv->recv_request, &senv->response_writer,
+ fixture->cq(), fixture->cq(), tag(slot));
+ }
+ fixture->Finish(state);
+ fixture.reset();
+ server_env[0]->~ServerEnv();
+ server_env[1]->~ServerEnv();
+ state.SetBytesProcessed(state.range(0) * state.iterations() +
+ state.range(1) * state.iterations());
+}
+
+/*******************************************************************************
+ * CONFIGURATIONS
+ */
+
+static void SweepSizesArgs(benchmark::internal::Benchmark* b) {
+ b->Args({0, 0});
+ for (int i = 1; i <= 128 * 1024 * 1024; i *= 8) {
+ b->Args({i, 0});
+ b->Args({0, i});
+ b->Args({i, i});
+ }
+}
+
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, TCP, NoOpMutator, NoOpMutator)
+ ->Apply(SweepSizesArgs);
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, UDS, NoOpMutator, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, SockPair, NoOpMutator, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator, NoOpMutator)
+ ->Apply(SweepSizesArgs);
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomBinaryMetadata<10>, 1>, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomBinaryMetadata<31>, 1>, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomBinaryMetadata<100>, 1>,
+ NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomBinaryMetadata<10>, 2>, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomBinaryMetadata<31>, 2>, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomBinaryMetadata<100>, 2>,
+ NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
+ Server_AddInitialMetadata<RandomBinaryMetadata<10>, 1>)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
+ Server_AddInitialMetadata<RandomBinaryMetadata<31>, 1>)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
+ Server_AddInitialMetadata<RandomBinaryMetadata<100>, 1>)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomAsciiMetadata<10>, 1>, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomAsciiMetadata<31>, 1>, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2,
+ Client_AddMetadata<RandomAsciiMetadata<100>, 1>, NoOpMutator)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
+ Server_AddInitialMetadata<RandomAsciiMetadata<10>, 1>)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
+ Server_AddInitialMetadata<RandomAsciiMetadata<31>, 1>)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
+ Server_AddInitialMetadata<RandomAsciiMetadata<100>, 1>)
+ ->Args({0, 0});
+BENCHMARK_TEMPLATE(BM_UnaryPingPong, InProcessCHTTP2, NoOpMutator,
+ Server_AddInitialMetadata<RandomAsciiMetadata<10>, 100>)
+ ->Args({0, 0});
+
+} // namespace testing
+} // namespace grpc
+
+BENCHMARK_MAIN();
diff --git a/test/cpp/microbenchmarks/bm_metadata.cc b/test/cpp/microbenchmarks/bm_metadata.cc
index 7f81fbabcc..34874b57f5 100644
--- a/test/cpp/microbenchmarks/bm_metadata.cc
+++ b/test/cpp/microbenchmarks/bm_metadata.cc
@@ -1,6 +1,6 @@
/*
*
- * Copyright 2015, Google Inc.
+ * Copyright 2017, Google Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -36,65 +36,90 @@
#include <grpc/grpc.h>
extern "C" {
+#include "src/core/lib/slice/slice_internal.h"
#include "src/core/lib/transport/metadata.h"
#include "src/core/lib/transport/static_metadata.h"
+#include "src/core/lib/transport/transport.h"
}
+#include "test/cpp/microbenchmarks/helpers.h"
#include "third_party/benchmark/include/benchmark/benchmark.h"
-static class InitializeStuff {
- public:
- InitializeStuff() { grpc_init(); }
- ~InitializeStuff() { grpc_shutdown(); }
-} initialize_stuff;
+auto& force_library_initialization = Library::get();
static void BM_SliceFromStatic(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
benchmark::DoNotOptimize(grpc_slice_from_static_string("abc"));
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_SliceFromStatic);
static void BM_SliceFromCopied(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
grpc_slice_unref(grpc_slice_from_copied_string("abc"));
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_SliceFromCopied);
+static void BM_SliceFromStreamOwnedBuffer(benchmark::State& state) {
+ grpc_stream_refcount r;
+ GRPC_STREAM_REF_INIT(&r, 1, NULL, NULL, "test");
+ char buffer[64];
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ while (state.KeepRunning()) {
+ grpc_slice_unref_internal(&exec_ctx, grpc_slice_from_stream_owned_buffer(
+ &r, buffer, sizeof(buffer)));
+ }
+ grpc_exec_ctx_finish(&exec_ctx);
+}
+BENCHMARK(BM_SliceFromStreamOwnedBuffer);
+
static void BM_SliceIntern(benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice slice = grpc_slice_from_static_string("abc");
while (state.KeepRunning()) {
grpc_slice_unref(grpc_slice_intern(slice));
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_SliceIntern);
static void BM_SliceReIntern(benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice slice = grpc_slice_intern(grpc_slice_from_static_string("abc"));
while (state.KeepRunning()) {
grpc_slice_unref(grpc_slice_intern(slice));
}
grpc_slice_unref(slice);
+ track_counters.Finish(state);
}
BENCHMARK(BM_SliceReIntern);
static void BM_SliceInternStaticMetadata(benchmark::State& state) {
+ TrackCounters track_counters;
while (state.KeepRunning()) {
grpc_slice_intern(GRPC_MDSTR_GZIP);
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_SliceInternStaticMetadata);
static void BM_SliceInternEqualToStaticMetadata(benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice slice = grpc_slice_from_static_string("gzip");
while (state.KeepRunning()) {
grpc_slice_intern(slice);
}
+ track_counters.Finish(state);
}
BENCHMARK(BM_SliceInternEqualToStaticMetadata);
static void BM_MetadataFromNonInternedSlices(benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = grpc_slice_from_static_string("key");
gpr_slice v = grpc_slice_from_static_string("value");
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -102,10 +127,12 @@ static void BM_MetadataFromNonInternedSlices(benchmark::State& state) {
GRPC_MDELEM_UNREF(&exec_ctx, grpc_mdelem_create(&exec_ctx, k, v, NULL));
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromNonInternedSlices);
static void BM_MetadataFromInternedSlices(benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = grpc_slice_intern(grpc_slice_from_static_string("key"));
gpr_slice v = grpc_slice_intern(grpc_slice_from_static_string("value"));
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -115,11 +142,13 @@ static void BM_MetadataFromInternedSlices(benchmark::State& state) {
grpc_exec_ctx_finish(&exec_ctx);
grpc_slice_unref(k);
grpc_slice_unref(v);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromInternedSlices);
static void BM_MetadataFromInternedSlicesAlreadyInIndex(
benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = grpc_slice_intern(grpc_slice_from_static_string("key"));
gpr_slice v = grpc_slice_intern(grpc_slice_from_static_string("value"));
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -131,10 +160,12 @@ static void BM_MetadataFromInternedSlicesAlreadyInIndex(
grpc_exec_ctx_finish(&exec_ctx);
grpc_slice_unref(k);
grpc_slice_unref(v);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromInternedSlicesAlreadyInIndex);
static void BM_MetadataFromInternedKey(benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = grpc_slice_intern(grpc_slice_from_static_string("key"));
gpr_slice v = grpc_slice_from_static_string("value");
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -143,11 +174,13 @@ static void BM_MetadataFromInternedKey(benchmark::State& state) {
}
grpc_exec_ctx_finish(&exec_ctx);
grpc_slice_unref(k);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromInternedKey);
static void BM_MetadataFromNonInternedSlicesWithBackingStore(
benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = grpc_slice_from_static_string("key");
gpr_slice v = grpc_slice_from_static_string("value");
char backing_store[sizeof(grpc_mdelem_data)];
@@ -159,11 +192,13 @@ static void BM_MetadataFromNonInternedSlicesWithBackingStore(
reinterpret_cast<grpc_mdelem_data*>(backing_store)));
}
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromNonInternedSlicesWithBackingStore);
static void BM_MetadataFromInternedSlicesWithBackingStore(
benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = grpc_slice_intern(grpc_slice_from_static_string("key"));
gpr_slice v = grpc_slice_intern(grpc_slice_from_static_string("value"));
char backing_store[sizeof(grpc_mdelem_data)];
@@ -177,11 +212,13 @@ static void BM_MetadataFromInternedSlicesWithBackingStore(
grpc_exec_ctx_finish(&exec_ctx);
grpc_slice_unref(k);
grpc_slice_unref(v);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromInternedSlicesWithBackingStore);
static void BM_MetadataFromInternedKeyWithBackingStore(
benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = grpc_slice_intern(grpc_slice_from_static_string("key"));
gpr_slice v = grpc_slice_from_static_string("value");
char backing_store[sizeof(grpc_mdelem_data)];
@@ -194,10 +231,12 @@ static void BM_MetadataFromInternedKeyWithBackingStore(
}
grpc_exec_ctx_finish(&exec_ctx);
grpc_slice_unref(k);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromInternedKeyWithBackingStore);
static void BM_MetadataFromStaticMetadataStrings(benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = GRPC_MDSTR_STATUS;
gpr_slice v = GRPC_MDSTR_200;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -206,11 +245,13 @@ static void BM_MetadataFromStaticMetadataStrings(benchmark::State& state) {
}
grpc_exec_ctx_finish(&exec_ctx);
grpc_slice_unref(k);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromStaticMetadataStrings);
static void BM_MetadataFromStaticMetadataStringsNotIndexed(
benchmark::State& state) {
+ TrackCounters track_counters;
gpr_slice k = GRPC_MDSTR_STATUS;
gpr_slice v = GRPC_MDSTR_GZIP;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
@@ -219,10 +260,12 @@ static void BM_MetadataFromStaticMetadataStringsNotIndexed(
}
grpc_exec_ctx_finish(&exec_ctx);
grpc_slice_unref(k);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataFromStaticMetadataStringsNotIndexed);
static void BM_MetadataRefUnrefExternal(benchmark::State& state) {
+ TrackCounters track_counters;
char backing_store[sizeof(grpc_mdelem_data)];
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_mdelem el =
@@ -234,10 +277,12 @@ static void BM_MetadataRefUnrefExternal(benchmark::State& state) {
}
GRPC_MDELEM_UNREF(&exec_ctx, el);
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataRefUnrefExternal);
static void BM_MetadataRefUnrefInterned(benchmark::State& state) {
+ TrackCounters track_counters;
char backing_store[sizeof(grpc_mdelem_data)];
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
gpr_slice k = grpc_slice_intern(grpc_slice_from_static_string("key"));
@@ -251,10 +296,12 @@ static void BM_MetadataRefUnrefInterned(benchmark::State& state) {
}
GRPC_MDELEM_UNREF(&exec_ctx, el);
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataRefUnrefInterned);
static void BM_MetadataRefUnrefAllocated(benchmark::State& state) {
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_mdelem el =
grpc_mdelem_create(&exec_ctx, grpc_slice_from_static_string("a"),
@@ -264,10 +311,12 @@ static void BM_MetadataRefUnrefAllocated(benchmark::State& state) {
}
GRPC_MDELEM_UNREF(&exec_ctx, el);
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataRefUnrefAllocated);
static void BM_MetadataRefUnrefStatic(benchmark::State& state) {
+ TrackCounters track_counters;
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
grpc_mdelem el =
grpc_mdelem_create(&exec_ctx, GRPC_MDSTR_STATUS, GRPC_MDSTR_200, NULL);
@@ -276,6 +325,7 @@ static void BM_MetadataRefUnrefStatic(benchmark::State& state) {
}
GRPC_MDELEM_UNREF(&exec_ctx, el);
grpc_exec_ctx_finish(&exec_ctx);
+ track_counters.Finish(state);
}
BENCHMARK(BM_MetadataRefUnrefStatic);
diff --git a/test/cpp/microbenchmarks/bm_pollset.cc b/test/cpp/microbenchmarks/bm_pollset.cc
new file mode 100644
index 0000000000..0f3d3cef66
--- /dev/null
+++ b/test/cpp/microbenchmarks/bm_pollset.cc
@@ -0,0 +1,254 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* Test out pollset latencies */
+
+#include <grpc/grpc.h>
+#include <grpc/support/alloc.h>
+#include <grpc/support/log.h>
+#include <grpc/support/useful.h>
+
+extern "C" {
+#include "src/core/lib/iomgr/ev_posix.h"
+#include "src/core/lib/iomgr/pollset.h"
+#include "src/core/lib/iomgr/port.h"
+#include "src/core/lib/iomgr/wakeup_fd_posix.h"
+}
+
+#include "test/cpp/microbenchmarks/helpers.h"
+#include "third_party/benchmark/include/benchmark/benchmark.h"
+
+#include <string.h>
+
+#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL
+#include <sys/epoll.h>
+#include <sys/eventfd.h>
+#include <unistd.h>
+#endif
+
+auto& force_library_initialization = Library::get();
+
+static void shutdown_ps(grpc_exec_ctx* exec_ctx, void* ps, grpc_error* error) {
+ grpc_pollset_destroy(static_cast<grpc_pollset*>(ps));
+}
+
+static void BM_CreateDestroyPollset(benchmark::State& state) {
+ TrackCounters track_counters;
+ size_t ps_sz = grpc_pollset_size();
+ grpc_pollset* ps = static_cast<grpc_pollset*>(gpr_malloc(ps_sz));
+ gpr_mu* mu;
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ grpc_closure shutdown_ps_closure;
+ grpc_closure_init(&shutdown_ps_closure, shutdown_ps, ps,
+ grpc_schedule_on_exec_ctx);
+ while (state.KeepRunning()) {
+ memset(ps, 0, ps_sz);
+ grpc_pollset_init(ps, &mu);
+ gpr_mu_lock(mu);
+ grpc_pollset_shutdown(&exec_ctx, ps, &shutdown_ps_closure);
+ gpr_mu_unlock(mu);
+ grpc_exec_ctx_flush(&exec_ctx);
+ }
+ grpc_exec_ctx_finish(&exec_ctx);
+ gpr_free(ps);
+ track_counters.Finish(state);
+}
+BENCHMARK(BM_CreateDestroyPollset);
+
+#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL
+static void BM_PollEmptyPollset_SpeedOfLight(benchmark::State& state) {
+ // equivalent to BM_PollEmptyPollset, but just use the OS primitives to guage
+ // what the speed of light would be if we abstracted perfectly
+ TrackCounters track_counters;
+ int epfd = epoll_create1(0);
+ GPR_ASSERT(epfd != -1);
+ size_t nev = state.range(0);
+ size_t nfd = state.range(1);
+ epoll_event* ev = new epoll_event[nev];
+ std::vector<int> fds;
+ for (size_t i = 0; i < nfd; i++) {
+ fds.push_back(eventfd(0, 0));
+ epoll_event ev;
+ ev.events = EPOLLIN;
+ epoll_ctl(epfd, EPOLL_CTL_ADD, fds.back(), &ev);
+ }
+ while (state.KeepRunning()) {
+ epoll_wait(epfd, ev, nev, 0);
+ }
+ for (auto fd : fds) {
+ close(fd);
+ }
+ close(epfd);
+ delete[] ev;
+ track_counters.Finish(state);
+}
+BENCHMARK(BM_PollEmptyPollset_SpeedOfLight)
+ ->Args({1, 0})
+ ->Args({1, 1})
+ ->Args({1, 10})
+ ->Args({1, 100})
+ ->Args({1, 1000})
+ ->Args({1, 10000})
+ ->Args({1, 100000})
+ ->Args({10, 1})
+ ->Args({100, 1})
+ ->Args({1000, 1});
+#endif
+
+static void BM_PollEmptyPollset(benchmark::State& state) {
+ TrackCounters track_counters;
+ size_t ps_sz = grpc_pollset_size();
+ grpc_pollset* ps = static_cast<grpc_pollset*>(gpr_zalloc(ps_sz));
+ gpr_mu* mu;
+ grpc_pollset_init(ps, &mu);
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ gpr_timespec now = gpr_time_0(GPR_CLOCK_MONOTONIC);
+ gpr_timespec deadline = gpr_inf_past(GPR_CLOCK_MONOTONIC);
+ gpr_mu_lock(mu);
+ while (state.KeepRunning()) {
+ grpc_pollset_worker* worker;
+ GRPC_ERROR_UNREF(grpc_pollset_work(&exec_ctx, ps, &worker, now, deadline));
+ }
+ grpc_closure shutdown_ps_closure;
+ grpc_closure_init(&shutdown_ps_closure, shutdown_ps, ps,
+ grpc_schedule_on_exec_ctx);
+ grpc_pollset_shutdown(&exec_ctx, ps, &shutdown_ps_closure);
+ gpr_mu_unlock(mu);
+ grpc_exec_ctx_finish(&exec_ctx);
+ gpr_free(ps);
+ track_counters.Finish(state);
+}
+BENCHMARK(BM_PollEmptyPollset);
+
+class Closure : public grpc_closure {
+ public:
+ virtual ~Closure() {}
+};
+
+template <class F>
+Closure* MakeClosure(F f, grpc_closure_scheduler* scheduler) {
+ struct C : public Closure {
+ C(F f, grpc_closure_scheduler* scheduler) : f_(f) {
+ grpc_closure_init(this, C::cbfn, this, scheduler);
+ }
+ static void cbfn(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) {
+ C* p = static_cast<C*>(arg);
+ p->f_();
+ }
+ F f_;
+ };
+ return new C(f, scheduler);
+}
+
+#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL
+static void BM_SingleThreadPollOneFd_SpeedOfLight(benchmark::State& state) {
+ // equivalent to BM_PollEmptyPollset, but just use the OS primitives to guage
+ // what the speed of light would be if we abstracted perfectly
+ TrackCounters track_counters;
+ int epfd = epoll_create1(0);
+ GPR_ASSERT(epfd != -1);
+ epoll_event ev[100];
+ int fd = eventfd(0, EFD_NONBLOCK);
+ ev[0].events = EPOLLIN;
+ epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev[0]);
+ while (state.KeepRunning()) {
+ int err;
+ do {
+ err = eventfd_write(fd, 1);
+ } while (err < 0 && errno == EINTR);
+ GPR_ASSERT(err == 0);
+ do {
+ err = epoll_wait(epfd, ev, GPR_ARRAY_SIZE(ev), 0);
+ } while (err < 0 && errno == EINTR);
+ GPR_ASSERT(err == 1);
+ eventfd_t value;
+ do {
+ err = eventfd_read(fd, &value);
+ } while (err < 0 && errno == EINTR);
+ GPR_ASSERT(err == 0);
+ }
+ close(fd);
+ close(epfd);
+ track_counters.Finish(state);
+}
+BENCHMARK(BM_SingleThreadPollOneFd_SpeedOfLight);
+#endif
+
+static void BM_SingleThreadPollOneFd(benchmark::State& state) {
+ TrackCounters track_counters;
+ size_t ps_sz = grpc_pollset_size();
+ grpc_pollset* ps = static_cast<grpc_pollset*>(gpr_zalloc(ps_sz));
+ gpr_mu* mu;
+ grpc_pollset_init(ps, &mu);
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+ gpr_timespec now = gpr_time_0(GPR_CLOCK_MONOTONIC);
+ gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC);
+ grpc_wakeup_fd wakeup_fd;
+ GRPC_ERROR_UNREF(grpc_wakeup_fd_init(&wakeup_fd));
+ grpc_fd* wakeup = grpc_fd_create(wakeup_fd.read_fd, "wakeup_read");
+ grpc_pollset_add_fd(&exec_ctx, ps, wakeup);
+ bool done = false;
+ Closure* continue_closure = MakeClosure(
+ [&]() {
+ GRPC_ERROR_UNREF(grpc_wakeup_fd_consume_wakeup(&wakeup_fd));
+ if (!state.KeepRunning()) {
+ done = true;
+ return;
+ }
+ GRPC_ERROR_UNREF(grpc_wakeup_fd_wakeup(&wakeup_fd));
+ grpc_fd_notify_on_read(&exec_ctx, wakeup, continue_closure);
+ },
+ grpc_schedule_on_exec_ctx);
+ GRPC_ERROR_UNREF(grpc_wakeup_fd_wakeup(&wakeup_fd));
+ grpc_fd_notify_on_read(&exec_ctx, wakeup, continue_closure);
+ gpr_mu_lock(mu);
+ while (!done) {
+ grpc_pollset_worker* worker;
+ GRPC_ERROR_UNREF(grpc_pollset_work(&exec_ctx, ps, &worker, now, deadline));
+ }
+ grpc_fd_orphan(&exec_ctx, wakeup, NULL, NULL, "done");
+ wakeup_fd.read_fd = 0;
+ grpc_closure shutdown_ps_closure;
+ grpc_closure_init(&shutdown_ps_closure, shutdown_ps, ps,
+ grpc_schedule_on_exec_ctx);
+ grpc_pollset_shutdown(&exec_ctx, ps, &shutdown_ps_closure);
+ gpr_mu_unlock(mu);
+ grpc_exec_ctx_finish(&exec_ctx);
+ grpc_wakeup_fd_destroy(&wakeup_fd);
+ gpr_free(ps);
+ track_counters.Finish(state);
+ delete continue_closure;
+}
+BENCHMARK(BM_SingleThreadPollOneFd);
+
+BENCHMARK_MAIN();
diff --git a/test/cpp/microbenchmarks/fullstack_context_mutators.h b/test/cpp/microbenchmarks/fullstack_context_mutators.h
new file mode 100644
index 0000000000..676f9aa1cc
--- /dev/null
+++ b/test/cpp/microbenchmarks/fullstack_context_mutators.h
@@ -0,0 +1,158 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef TEST_CPP_MICROBENCHMARKS_FULLSTACK_CONTEXT_MUTATORS_H
+#define TEST_CPP_MICROBENCHMARKS_FULLSTACK_CONTEXT_MUTATORS_H
+
+#include <grpc++/channel.h>
+#include <grpc++/create_channel.h>
+#include <grpc++/security/credentials.h>
+#include <grpc++/security/server_credentials.h>
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+#include <grpc++/server_context.h>
+#include <grpc/support/log.h>
+
+#include "test/cpp/microbenchmarks/helpers.h"
+
+namespace grpc {
+namespace testing {
+
+/*******************************************************************************
+ * CONTEXT MUTATORS
+ */
+
+static const int kPregenerateKeyCount = 100000;
+
+template <class F>
+auto MakeVector(size_t length, F f) -> std::vector<decltype(f())> {
+ std::vector<decltype(f())> out;
+ out.reserve(length);
+ for (size_t i = 0; i < length; i++) {
+ out.push_back(f());
+ }
+ return out;
+}
+
+class NoOpMutator {
+ public:
+ template <class ContextType>
+ NoOpMutator(ContextType* context) {}
+};
+
+template <int length>
+class RandomBinaryMetadata {
+ public:
+ static const grpc::string& Key() { return kKey; }
+
+ static const grpc::string& Value() {
+ return kValues[rand() % kValues.size()];
+ }
+
+ private:
+ static const grpc::string kKey;
+ static const std::vector<grpc::string> kValues;
+
+ static grpc::string GenerateOneString() {
+ grpc::string s;
+ s.reserve(length + 1);
+ for (int i = 0; i < length; i++) {
+ s += (char)rand();
+ }
+ return s;
+ }
+};
+
+template <int length>
+class RandomAsciiMetadata {
+ public:
+ static const grpc::string& Key() { return kKey; }
+
+ static const grpc::string& Value() {
+ return kValues[rand() % kValues.size()];
+ }
+
+ private:
+ static const grpc::string kKey;
+ static const std::vector<grpc::string> kValues;
+
+ static grpc::string GenerateOneString() {
+ grpc::string s;
+ s.reserve(length + 1);
+ for (int i = 0; i < length; i++) {
+ s += (char)(rand() % 26 + 'a');
+ }
+ return s;
+ }
+};
+
+template <class Generator, int kNumKeys>
+class Client_AddMetadata : public NoOpMutator {
+ public:
+ Client_AddMetadata(ClientContext* context) : NoOpMutator(context) {
+ for (int i = 0; i < kNumKeys; i++) {
+ context->AddMetadata(Generator::Key(), Generator::Value());
+ }
+ }
+};
+
+template <class Generator, int kNumKeys>
+class Server_AddInitialMetadata : public NoOpMutator {
+ public:
+ Server_AddInitialMetadata(ServerContext* context) : NoOpMutator(context) {
+ for (int i = 0; i < kNumKeys; i++) {
+ context->AddInitialMetadata(Generator::Key(), Generator::Value());
+ }
+ }
+};
+
+// static initialization
+
+template <int length>
+const grpc::string RandomBinaryMetadata<length>::kKey = "foo-bin";
+
+template <int length>
+const std::vector<grpc::string> RandomBinaryMetadata<length>::kValues =
+ MakeVector(kPregenerateKeyCount, GenerateOneString);
+
+template <int length>
+const grpc::string RandomAsciiMetadata<length>::kKey = "foo";
+
+template <int length>
+const std::vector<grpc::string> RandomAsciiMetadata<length>::kValues =
+ MakeVector(kPregenerateKeyCount, GenerateOneString);
+
+} // namespace testing
+} // namespace grpc
+
+#endif
diff --git a/test/cpp/microbenchmarks/fullstack_fixtures.h b/test/cpp/microbenchmarks/fullstack_fixtures.h
new file mode 100644
index 0000000000..dc29701059
--- /dev/null
+++ b/test/cpp/microbenchmarks/fullstack_fixtures.h
@@ -0,0 +1,244 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef TEST_CPP_MICROBENCHMARKS_FULLSTACK_FIXTURES_H
+#define TEST_CPP_MICROBENCHMARKS_FULLSTACK_FIXTURES_H
+
+#include <grpc++/channel.h>
+#include <grpc++/create_channel.h>
+#include <grpc++/security/credentials.h>
+#include <grpc++/security/server_credentials.h>
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+#include <grpc/support/log.h>
+
+extern "C" {
+#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
+#include "src/core/lib/channel/channel_args.h"
+#include "src/core/lib/iomgr/endpoint.h"
+#include "src/core/lib/iomgr/endpoint_pair.h"
+#include "src/core/lib/iomgr/exec_ctx.h"
+#include "src/core/lib/iomgr/tcp_posix.h"
+#include "src/core/lib/surface/channel.h"
+#include "src/core/lib/surface/completion_queue.h"
+#include "src/core/lib/surface/server.h"
+#include "test/core/util/passthru_endpoint.h"
+#include "test/core/util/port.h"
+}
+
+#include "test/cpp/microbenchmarks/helpers.h"
+
+namespace grpc {
+namespace testing {
+
+static void ApplyCommonServerBuilderConfig(ServerBuilder* b) {
+ b->SetMaxReceiveMessageSize(INT_MAX);
+ b->SetMaxSendMessageSize(INT_MAX);
+}
+
+static void ApplyCommonChannelArguments(ChannelArguments* c) {
+ c->SetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH, INT_MAX);
+ c->SetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH, INT_MAX);
+}
+
+class BaseFixture : public TrackCounters {};
+
+class FullstackFixture : public BaseFixture {
+ public:
+ FullstackFixture(Service* service, const grpc::string& address) {
+ ServerBuilder b;
+ b.AddListeningPort(address, InsecureServerCredentials());
+ cq_ = b.AddCompletionQueue(true);
+ b.RegisterService(service);
+ ApplyCommonServerBuilderConfig(&b);
+ server_ = b.BuildAndStart();
+ ChannelArguments args;
+ ApplyCommonChannelArguments(&args);
+ channel_ = CreateCustomChannel(address, InsecureChannelCredentials(), args);
+ }
+
+ virtual ~FullstackFixture() {
+ server_->Shutdown();
+ cq_->Shutdown();
+ void* tag;
+ bool ok;
+ while (cq_->Next(&tag, &ok)) {
+ }
+ }
+
+ ServerCompletionQueue* cq() { return cq_.get(); }
+ std::shared_ptr<Channel> channel() { return channel_; }
+
+ private:
+ std::unique_ptr<Server> server_;
+ std::unique_ptr<ServerCompletionQueue> cq_;
+ std::shared_ptr<Channel> channel_;
+};
+
+class TCP : public FullstackFixture {
+ public:
+ TCP(Service* service) : FullstackFixture(service, MakeAddress()) {}
+
+ private:
+ static grpc::string MakeAddress() {
+ int port = grpc_pick_unused_port_or_die();
+ std::stringstream addr;
+ addr << "localhost:" << port;
+ return addr.str();
+ }
+};
+
+class UDS : public FullstackFixture {
+ public:
+ UDS(Service* service) : FullstackFixture(service, MakeAddress()) {}
+
+ private:
+ static grpc::string MakeAddress() {
+ int port = grpc_pick_unused_port_or_die(); // just for a unique id - not a
+ // real port
+ std::stringstream addr;
+ addr << "unix:/tmp/bm_fullstack." << port;
+ return addr.str();
+ }
+};
+
+class EndpointPairFixture : public BaseFixture {
+ public:
+ EndpointPairFixture(Service* service, grpc_endpoint_pair endpoints)
+ : endpoint_pair_(endpoints) {
+ ServerBuilder b;
+ cq_ = b.AddCompletionQueue(true);
+ b.RegisterService(service);
+ ApplyCommonServerBuilderConfig(&b);
+ server_ = b.BuildAndStart();
+
+ grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
+
+ /* add server endpoint to server_
+ * */
+ {
+ const grpc_channel_args* server_args =
+ grpc_server_get_channel_args(server_->c_server());
+ server_transport_ = grpc_create_chttp2_transport(
+ &exec_ctx, server_args, endpoints.server, 0 /* is_client */);
+
+ grpc_pollset** pollsets;
+ size_t num_pollsets = 0;
+ grpc_server_get_pollsets(server_->c_server(), &pollsets, &num_pollsets);
+
+ for (size_t i = 0; i < num_pollsets; i++) {
+ grpc_endpoint_add_to_pollset(&exec_ctx, endpoints.server, pollsets[i]);
+ }
+
+ grpc_server_setup_transport(&exec_ctx, server_->c_server(),
+ server_transport_, NULL, server_args);
+ grpc_chttp2_transport_start_reading(&exec_ctx, server_transport_, NULL);
+ }
+
+ /* create channel */
+ {
+ ChannelArguments args;
+ args.SetString(GRPC_ARG_DEFAULT_AUTHORITY, "test.authority");
+ ApplyCommonChannelArguments(&args);
+
+ grpc_channel_args c_args = args.c_channel_args();
+ client_transport_ =
+ grpc_create_chttp2_transport(&exec_ctx, &c_args, endpoints.client, 1);
+ GPR_ASSERT(client_transport_);
+ grpc_channel* channel =
+ grpc_channel_create(&exec_ctx, "target", &c_args,
+ GRPC_CLIENT_DIRECT_CHANNEL, client_transport_);
+ grpc_chttp2_transport_start_reading(&exec_ctx, client_transport_, NULL);
+
+ channel_ = CreateChannelInternal("", channel);
+ }
+
+ grpc_exec_ctx_finish(&exec_ctx);
+ }
+
+ virtual ~EndpointPairFixture() {
+ server_->Shutdown();
+ cq_->Shutdown();
+ void* tag;
+ bool ok;
+ while (cq_->Next(&tag, &ok)) {
+ }
+ }
+
+ ServerCompletionQueue* cq() { return cq_.get(); }
+ std::shared_ptr<Channel> channel() { return channel_; }
+
+ protected:
+ grpc_endpoint_pair endpoint_pair_;
+ grpc_transport* client_transport_;
+ grpc_transport* server_transport_;
+
+ private:
+ std::unique_ptr<Server> server_;
+ std::unique_ptr<ServerCompletionQueue> cq_;
+ std::shared_ptr<Channel> channel_;
+};
+
+class SockPair : public EndpointPairFixture {
+ public:
+ SockPair(Service* service)
+ : EndpointPairFixture(service, grpc_iomgr_create_endpoint_pair(
+ "test", Library::get().rq(), 8192)) {}
+};
+
+class InProcessCHTTP2 : public EndpointPairFixture {
+ public:
+ InProcessCHTTP2(Service* service)
+ : EndpointPairFixture(service, MakeEndpoints()) {}
+
+ void AddToLabel(std::ostream& out, benchmark::State& state) {
+ EndpointPairFixture::AddToLabel(out, state);
+ out << " writes/iter:"
+ << ((double)stats_.num_writes / (double)state.iterations());
+ }
+
+ private:
+ grpc_passthru_endpoint_stats stats_;
+
+ grpc_endpoint_pair MakeEndpoints() {
+ grpc_endpoint_pair p;
+ grpc_passthru_endpoint_create(&p.client, &p.server, Library::get().rq(),
+ &stats_);
+ return p;
+ }
+};
+
+} // namespace testing
+} // namespace grpc
+
+#endif
diff --git a/test/cpp/microbenchmarks/helpers.cc b/test/cpp/microbenchmarks/helpers.cc
new file mode 100644
index 0000000000..d277c5984c
--- /dev/null
+++ b/test/cpp/microbenchmarks/helpers.cc
@@ -0,0 +1,65 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "test/cpp/microbenchmarks/helpers.h"
+
+void TrackCounters::Finish(benchmark::State &state) {
+ std::ostringstream out;
+ AddToLabel(out, state);
+ auto label = out.str();
+ if (label.length() && label[0] == ' ') {
+ label = label.substr(1);
+ }
+ state.SetLabel(label);
+}
+
+void TrackCounters::AddToLabel(std::ostream &out, benchmark::State &state) {
+#ifdef GPR_LOW_LEVEL_COUNTERS
+ grpc_memory_counters counters_at_end = grpc_memory_counters_snapshot();
+ out << " locks/iter:" << ((double)(gpr_atm_no_barrier_load(&gpr_mu_locks) -
+ mu_locks_at_start_) /
+ (double)state.iterations())
+ << " atm_cas/iter:"
+ << ((double)(gpr_atm_no_barrier_load(&gpr_counter_atm_cas) -
+ atm_cas_at_start_) /
+ (double)state.iterations())
+ << " atm_add/iter:"
+ << ((double)(gpr_atm_no_barrier_load(&gpr_counter_atm_add) -
+ atm_add_at_start_) /
+ (double)state.iterations())
+ << " allocs/iter:"
+ << ((double)(counters_at_end.total_allocs_absolute -
+ counters_at_start_.total_allocs_absolute) /
+ (double)state.iterations());
+#endif
+}
diff --git a/test/cpp/microbenchmarks/helpers.h b/test/cpp/microbenchmarks/helpers.h
new file mode 100644
index 0000000000..f44b7cf83a
--- /dev/null
+++ b/test/cpp/microbenchmarks/helpers.h
@@ -0,0 +1,93 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef TEST_CPP_MICROBENCHMARKS_COUNTERS_H
+#define TEST_CPP_MICROBENCHMARKS_COUNTERS_H
+
+#include <sstream>
+
+extern "C" {
+#include <grpc/support/port_platform.h>
+#include "test/core/util/memory_counters.h"
+}
+
+#include <grpc++/impl/grpc_library.h>
+#include "third_party/benchmark/include/benchmark/benchmark.h"
+
+class Library {
+ public:
+ static Library& get() {
+ static Library lib;
+ return lib;
+ }
+
+ grpc_resource_quota* rq() { return rq_; }
+
+ private:
+ Library() {
+#ifdef GPR_LOW_LEVEL_COUNTERS
+ grpc_memory_counters_init();
+#endif
+ init_lib_.init();
+ rq_ = grpc_resource_quota_create("bm");
+ }
+
+ ~Library() { init_lib_.shutdown(); }
+
+ grpc::internal::GrpcLibrary init_lib_;
+ grpc_resource_quota* rq_;
+};
+
+#ifdef GPR_LOW_LEVEL_COUNTERS
+extern "C" gpr_atm gpr_mu_locks;
+extern "C" gpr_atm gpr_counter_atm_cas;
+extern "C" gpr_atm gpr_counter_atm_add;
+#endif
+
+class TrackCounters {
+ public:
+ virtual void Finish(benchmark::State& state);
+ virtual void AddToLabel(std::ostream& out, benchmark::State& state);
+
+ private:
+#ifdef GPR_LOW_LEVEL_COUNTERS
+ const size_t mu_locks_at_start_ = gpr_atm_no_barrier_load(&gpr_mu_locks);
+ const size_t atm_cas_at_start_ =
+ gpr_atm_no_barrier_load(&gpr_counter_atm_cas);
+ const size_t atm_add_at_start_ =
+ gpr_atm_no_barrier_load(&gpr_counter_atm_add);
+ grpc_memory_counters counters_at_start_ = grpc_memory_counters_snapshot();
+#endif
+};
+
+#endif
diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h
index baa9304cc2..25a19a5a74 100644
--- a/test/cpp/qps/client.h
+++ b/test/cpp/qps/client.h
@@ -46,7 +46,7 @@
#include <grpc/support/log.h>
#include <grpc/support/time.h>
-#include "src/proto/grpc/testing/payloads.grpc.pb.h"
+#include "src/proto/grpc/testing/payloads.pb.h"
#include "src/proto/grpc/testing/services.grpc.pb.h"
#include "test/cpp/qps/histogram.h"
diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc
index 4032039ea1..396d308e2a 100644
--- a/test/cpp/qps/client_async.cc
+++ b/test/cpp/qps/client_async.cc
@@ -112,7 +112,9 @@ class ClientRpcContextUnaryImpl : public ClientRpcContext {
next_state_ = State::RESP_DONE;
return true;
case State::RESP_DONE:
- entry->set_value((UsageTimer::Now() - start_) * 1e9);
+ if (status_.ok()) {
+ entry->set_value((UsageTimer::Now() - start_) * 1e9);
+ }
callback_(status_, &response_, entry);
next_state_ = State::INVALID;
return false;
diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc
index 498416c64a..a944c45496 100644
--- a/test/cpp/qps/client_sync.cc
+++ b/test/cpp/qps/client_sync.cc
@@ -129,7 +129,9 @@ class SynchronousUnaryClient final : public SynchronousClient {
grpc::ClientContext context;
grpc::Status s =
stub->UnaryCall(&context, request_, &responses_[thread_idx]);
- entry->set_value((UsageTimer::Now() - start) * 1e9);
+ if (s.ok()) {
+ entry->set_value((UsageTimer::Now() - start) * 1e9);
+ }
entry->set_status(s.error_code());
return true;
}
@@ -154,7 +156,7 @@ class SynchronousStreamingClient final : public SynchronousClient {
(*stream)->WritesDone();
Status s = (*stream)->Finish();
if (!s.ok()) {
- gpr_log(GPR_ERROR, "Stream %zu received an error %s", i,
+ gpr_log(GPR_ERROR, "Stream %" PRIuPTR " received an error %s", i,
s.error_message().c_str());
}
}
@@ -170,8 +172,17 @@ class SynchronousStreamingClient final : public SynchronousClient {
if (stream_[thread_idx]->Write(request_) &&
stream_[thread_idx]->Read(&responses_[thread_idx])) {
entry->set_value((UsageTimer::Now() - start) * 1e9);
+ // don't set the status since there isn't one yet
return true;
}
+ stream_[thread_idx]->WritesDone();
+ Status s = stream_[thread_idx]->Finish();
+ // don't set the value since the stream is failed and shouldn't be timed
+ entry->set_status(s.error_code());
+ if (!s.ok()) {
+ gpr_log(GPR_ERROR, "Stream %" PRIuPTR " received an error %s", thread_idx,
+ s.error_message().c_str());
+ }
auto* stub = channels_[thread_idx % channels_.size()].get_stub();
context_[thread_idx].~ClientContext();
new (&context_[thread_idx]) ClientContext();
diff --git a/test/cpp/qps/driver.h b/test/cpp/qps/driver.h
index e72d30a4ef..dd32a16c87 100644
--- a/test/cpp/qps/driver.h
+++ b/test/cpp/qps/driver.h
@@ -36,7 +36,7 @@
#include <memory>
-#include "src/proto/grpc/testing/control.grpc.pb.h"
+#include "src/proto/grpc/testing/control.pb.h"
#include "test/cpp/qps/histogram.h"
namespace grpc {
diff --git a/test/cpp/qps/histogram.h b/test/cpp/qps/histogram.h
index acb415f0a1..470a394301 100644
--- a/test/cpp/qps/histogram.h
+++ b/test/cpp/qps/histogram.h
@@ -35,7 +35,7 @@
#define TEST_QPS_HISTOGRAM_H
#include <grpc/support/histogram.h>
-#include "src/proto/grpc/testing/stats.grpc.pb.h"
+#include "src/proto/grpc/testing/stats.pb.h"
namespace grpc {
namespace testing {
diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc
index ddaaa7ca75..bd2c1f0ec6 100644
--- a/test/cpp/qps/qps_json_driver.cc
+++ b/test/cpp/qps/qps_json_driver.cc
@@ -31,6 +31,7 @@
*
*/
+#include <iostream>
#include <memory>
#include <set>
diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h
index 821d5935be..8fbf37a095 100644
--- a/test/cpp/qps/server.h
+++ b/test/cpp/qps/server.h
@@ -38,8 +38,8 @@
#include <grpc/support/cpu.h>
#include <vector>
-#include "src/proto/grpc/testing/control.grpc.pb.h"
-#include "src/proto/grpc/testing/messages.grpc.pb.h"
+#include "src/proto/grpc/testing/control.pb.h"
+#include "src/proto/grpc/testing/messages.pb.h"
#include "test/core/end2end/data/ssl_test_data.h"
#include "test/core/util/port.h"
#include "test/cpp/qps/usage_timer.h"
diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc
index b3a06aeaf5..b58d91eea6 100644
--- a/test/cpp/qps/server_async.cc
+++ b/test/cpp/qps/server_async.cc
@@ -103,24 +103,25 @@ class AsyncQpsServerTest final : public grpc::testing::Server {
server_ = builder.BuildAndStart();
- using namespace std::placeholders;
-
auto process_rpc_bound =
- std::bind(process_rpc, config.payload_config(), _1, _2);
+ std::bind(process_rpc, config.payload_config(), std::placeholders::_1,
+ std::placeholders::_2);
for (int i = 0; i < 15000; i++) {
for (int j = 0; j < num_threads; j++) {
if (request_unary_function) {
- auto request_unary =
- std::bind(request_unary_function, &async_service_, _1, _2, _3,
- srv_cqs_[j].get(), srv_cqs_[j].get(), _4);
+ auto request_unary = std::bind(
+ request_unary_function, &async_service_, std::placeholders::_1,
+ std::placeholders::_2, std::placeholders::_3, srv_cqs_[j].get(),
+ srv_cqs_[j].get(), std::placeholders::_4);
contexts_.emplace_back(
new ServerRpcContextUnaryImpl(request_unary, process_rpc_bound));
}
if (request_streaming_function) {
- auto request_streaming =
- std::bind(request_streaming_function, &async_service_, _1, _2,
- srv_cqs_[j].get(), srv_cqs_[j].get(), _3);
+ auto request_streaming = std::bind(
+ request_streaming_function, &async_service_,
+ std::placeholders::_1, std::placeholders::_2, srv_cqs_[j].get(),
+ srv_cqs_[j].get(), std::placeholders::_3);
contexts_.emplace_back(new ServerRpcContextStreamingImpl(
request_streaming, process_rpc_bound));
}
diff --git a/test/cpp/qps/server_sync.cc b/test/cpp/qps/server_sync.cc
index 8076a4a6b9..f79284d225 100644
--- a/test/cpp/qps/server_sync.cc
+++ b/test/cpp/qps/server_sync.cc
@@ -74,7 +74,9 @@ class BenchmarkServiceImpl final : public BenchmarkService::Service {
return Status(grpc::StatusCode::INTERNAL, "Error creating payload.");
}
}
- stream->Write(response);
+ if (!stream->Write(response)) {
+ return Status(StatusCode::INTERNAL, "Server couldn't respond");
+ }
}
return Status::OK;
}
diff --git a/test/cpp/server/server_builder_test.cc b/test/cpp/server/server_builder_test.cc
new file mode 100644
index 0000000000..1d9eda17b4
--- /dev/null
+++ b/test/cpp/server/server_builder_test.cc
@@ -0,0 +1,96 @@
+/*
+ *
+ * Copyright 2017, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc++/impl/codegen/config.h>
+#include <gtest/gtest.h>
+
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+
+#include "src/proto/grpc/testing/echo.grpc.pb.h"
+#include "test/core/util/port.h"
+
+namespace grpc {
+namespace {
+
+testing::EchoTestService::Service g_service;
+
+grpc::string MakePort() {
+ std::ostringstream s;
+ int p = grpc_pick_unused_port_or_die();
+ s << "localhost:" << p;
+ return s.str();
+}
+
+grpc::string g_port = MakePort();
+
+TEST(ServerBuilderTest, NoOp) { ServerBuilder b; }
+
+TEST(ServerBuilderTest, CreateServerNoPorts) {
+ ServerBuilder().RegisterService(&g_service).BuildAndStart()->Shutdown();
+}
+
+TEST(ServerBuilderTest, CreateServerOnePort) {
+ ServerBuilder()
+ .RegisterService(&g_service)
+ .AddListeningPort(g_port, InsecureServerCredentials())
+ .BuildAndStart()
+ ->Shutdown();
+}
+
+TEST(ServerBuilderTest, CreateServerRepeatedPort) {
+ ServerBuilder()
+ .RegisterService(&g_service)
+ .AddListeningPort(g_port, InsecureServerCredentials())
+ .AddListeningPort(g_port, InsecureServerCredentials())
+ .BuildAndStart()
+ ->Shutdown();
+}
+
+TEST(ServerBuilderTest, CreateServerRepeatedPortWithDisallowedReusePort) {
+ EXPECT_EQ(ServerBuilder()
+ .RegisterService(&g_service)
+ .AddListeningPort(g_port, InsecureServerCredentials())
+ .AddListeningPort(g_port, InsecureServerCredentials())
+ .AddChannelArgument(GRPC_ARG_ALLOW_REUSEPORT, 0)
+ .BuildAndStart(),
+ nullptr);
+}
+
+} // namespace
+} // namespace grpc
+
+int main(int argc, char** argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
diff --git a/test/http2_test/http2_server_health_check.py b/test/http2_test/http2_server_health_check.py
new file mode 100644
index 0000000000..dd9402b855
--- /dev/null
+++ b/test/http2_test/http2_server_health_check.py
@@ -0,0 +1,49 @@
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import argparse
+import hyper
+import sys
+
+# Utility to healthcheck the http2 server. Used when starting the server to
+# verify that the server is live before tests begin.
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--server_host', type=str, default='localhost')
+ parser.add_argument('--server_port', type=int, default=8080)
+ args = parser.parse_args()
+ server_host = args.server_host
+ server_port = args.server_port
+ conn = hyper.HTTP20Connection('%s:%d' % (server_host, server_port))
+ conn.request('POST', '/grpc.testing.TestService/UnaryCall')
+ resp = conn.get_response()
+ if resp.headers.get('grpc-encoding') is None:
+ sys.exit(1)
+ else:
+ sys.exit(0)
diff --git a/test/http2_test/http2_test_server.py b/test/http2_test/http2_test_server.py
index abde3433ad..46c3e00d18 100644
--- a/test/http2_test/http2_test_server.py
+++ b/test/http2_test/http2_test_server.py
@@ -31,6 +31,7 @@
import argparse
import logging
+import sys
import twisted
import twisted.internet
import twisted.internet.endpoints
@@ -53,9 +54,11 @@ _TEST_CASE_MAPPING = {
'max_streams': test_max_streams.TestcaseSettingsMaxStreams,
}
+_exit_code = 0
+
class H2Factory(twisted.internet.protocol.Factory):
def __init__(self, testcase):
- logging.info('Creating H2Factory for new connection.')
+ logging.info('Creating H2Factory for new connection (%s)', testcase)
self._num_streams = 0
self._testcase = testcase
@@ -83,6 +86,17 @@ def parse_arguments():
)
return parser.parse_args()
+def listen(endpoint, test_case):
+ deferred = endpoint.listen(H2Factory(test_case))
+ def listen_error(reason):
+ # If listening fails, we stop the reactor and exit the program
+ # with exit code 1.
+ global _exit_code
+ _exit_code = 1
+ logging.error('Listening failed: %s' % reason.value)
+ twisted.internet.reactor.stop()
+ deferred.addErrback(listen_error)
+
def start_test_servers(base_port):
""" Start one server per test case on incrementing port numbers
beginning with base_port """
@@ -92,7 +106,9 @@ def start_test_servers(base_port):
logging.warning('serving on port %d : %s'%(portnum, test_case))
endpoint = twisted.internet.endpoints.TCP4ServerEndpoint(
twisted.internet.reactor, portnum, backlog=128)
- endpoint.listen(H2Factory(test_case))
+ # Wait until the reactor is running before calling endpoint.listen().
+ twisted.internet.reactor.callWhenRunning(listen, endpoint, test_case)
+
index += 1
if __name__ == '__main__':
@@ -102,3 +118,4 @@ if __name__ == '__main__':
args = parse_arguments()
start_test_servers(args.base_port)
twisted.internet.reactor.run()
+ sys.exit(_exit_code)
diff --git a/third_party/protobuf b/third_party/protobuf
-Subproject a428e42072765993ff674fda72863c9f1aa2d26
+Subproject 593e917c176b5bc5aafa57bf9f6030d749d91cd
diff --git a/tools/buildgen/plugins/make_fuzzer_tests.py b/tools/buildgen/plugins/make_fuzzer_tests.py
index ba9825acb9..5fc28ddd31 100644
--- a/tools/buildgen/plugins/make_fuzzer_tests.py
+++ b/tools/buildgen/plugins/make_fuzzer_tests.py
@@ -52,7 +52,7 @@ def mako_plugin(dictionary):
'exclude_iomgrs': ['uv'],
'exclude_configs': ['tsan'],
'uses_polling': False,
- 'platforms': ['linux'],
+ 'platforms': ['mac', 'linux'],
'ci_platforms': ['linux'],
'flaky': False,
'language': 'c',
diff --git a/tools/distrib/python/bazel_deps.sh b/tools/distrib/python/bazel_deps.sh
index de3ee07970..f6d42d29eb 100755
--- a/tools/distrib/python/bazel_deps.sh
+++ b/tools/distrib/python/bazel_deps.sh
@@ -33,14 +33,14 @@ cd $(dirname $0)/../../../
# First check if bazel is installed on the machine. If it is, then we don't need
# to invoke the docker bazel.
-if [ "bazel version" ]
+if [ -x "$(command -v bazel)" ]
then
cd third_party/protobuf
bazel query 'deps('$1')'
else
- docker build -t bazel `realpath ./tools/dockerfile/bazel/`
- docker run -v "`realpath .`:/src/grpc/" \
- -w /src/grpc/third_party/protobuf \
- bazel \
+ docker build -t bazel_local_img tools/dockerfile/test/sanity
+ docker run -v "$(realpath .):/src/grpc/:ro" \
+ -w /src/grpc/third_party/protobuf \
+ bazel_local_img \
bazel query 'deps('$1')'
fi
diff --git a/tools/distrib/python/grpcio_tools/grpc_tools/protobuf_generated_well_known_types_embed.cc b/tools/distrib/python/grpcio_tools/grpc_tools/protobuf_generated_well_known_types_embed.cc
new file mode 100644
index 0000000000..682837a27f
--- /dev/null
+++ b/tools/distrib/python/grpcio_tools/grpc_tools/protobuf_generated_well_known_types_embed.cc
@@ -0,0 +1,343 @@
+// Copyright 2017, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// HACK: Embed the generated well_known_types_js.cc to make
+// grpc-tools python package compilation easy.
+#include <google/protobuf/compiler/js/well_known_types_embed.h>
+struct FileToc well_known_types_js[] = {
+{"any.js",
+ "// Protocol Buffers - Google's data interchange format\n"
+ "// Copyright 2008 Google Inc. All rights reserved.\n"
+ "// https://developers.google.com/protocol-buffers/\n"
+ "//\n"
+ "// Redistribution and use in source and binary forms, with or without\n"
+ "// modification, are permitted provided that the following conditions are\n"
+ "// met:\n"
+ "//\n"
+ "// * Redistributions of source code must retain the above copyright\n"
+ "// notice, this list of conditions and the following disclaimer.\n"
+ "// * Redistributions in binary form must reproduce the above\n"
+ "// copyright notice, this list of conditions and the following disclaimer\n"
+ "// in the documentation and/or other materials provided with the\n"
+ "// distribution.\n"
+ "// * Neither the name of Google Inc. nor the names of its\n"
+ "// contributors may be used to endorse or promote products derived from\n"
+ "// this software without specific prior written permission.\n"
+ "//\n"
+ "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
+ "// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
+ "// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
+ "// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n"
+ "// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
+ "// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
+ "// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
+ "// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
+ "// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
+ "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
+ "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
+ "\n"
+ "/* This code will be inserted into generated code for\n"
+ " * google/protobuf/any.proto. */\n"
+ "\n"
+ "/**\n"
+ " * Returns the type name contained in this instance, if any.\n"
+ " * @return {string|undefined}\n"
+ " */\n"
+ "proto.google.protobuf.Any.prototype.getTypeName = function() {\n"
+ " return this.getTypeUrl().split('/').pop();\n"
+ "};\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * Packs the given message instance into this Any.\n"
+ " * @param {!Uint8Array} serialized The serialized data to pack.\n"
+ " * @param {string} name The type name of this message object.\n"
+ " * @param {string=} opt_typeUrlPrefix the type URL prefix.\n"
+ " */\n"
+ "proto.google.protobuf.Any.prototype.pack = function(serialized, name,\n"
+ " opt_typeUrlPrefix) {\n"
+ " if (!opt_typeUrlPrefix) {\n"
+ " opt_typeUrlPrefix = 'type.googleapis.com/';\n"
+ " }\n"
+ "\n"
+ " if (opt_typeUrlPrefix.substr(-1) != '/') {\n"
+ " this.setTypeUrl(opt_typeUrlPrefix + '/' + name);\n"
+ " } else {\n"
+ " this.setTypeUrl(opt_typeUrlPrefix + name);\n"
+ " }\n"
+ "\n"
+ " this.setValue(serialized);\n"
+ "};\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * @template T\n"
+ " * Unpacks this Any into the given message object.\n"
+ " * @param {function(Uint8Array):T} deserialize Function that will deserialize\n"
+ " * the binary data properly.\n"
+ " * @param {string} name The expected type name of this message object.\n"
+ " * @return {?T} If the name matched the expected name, returns the deserialized\n"
+ " * object, otherwise returns undefined.\n"
+ " */\n"
+ "proto.google.protobuf.Any.prototype.unpack = function(deserialize, name) {\n"
+ " if (this.getTypeName() == name) {\n"
+ " return deserialize(this.getValue_asU8());\n"
+ " } else {\n"
+ " return null;\n"
+ " }\n"
+ "};\n"
+},
+{"struct.js",
+ "// Protocol Buffers - Google's data interchange format\n"
+ "// Copyright 2008 Google Inc. All rights reserved.\n"
+ "// https://developers.google.com/protocol-buffers/\n"
+ "//\n"
+ "// Redistribution and use in source and binary forms, with or without\n"
+ "// modification, are permitted provided that the following conditions are\n"
+ "// met:\n"
+ "//\n"
+ "// * Redistributions of source code must retain the above copyright\n"
+ "// notice, this list of conditions and the following disclaimer.\n"
+ "// * Redistributions in binary form must reproduce the above\n"
+ "// copyright notice, this list of conditions and the following disclaimer\n"
+ "// in the documentation and/or other materials provided with the\n"
+ "// distribution.\n"
+ "// * Neither the name of Google Inc. nor the names of its\n"
+ "// contributors may be used to endorse or promote products derived from\n"
+ "// this software without specific prior written permission.\n"
+ "//\n"
+ "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
+ "// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
+ "// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
+ "// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n"
+ "// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
+ "// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
+ "// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
+ "// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
+ "// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
+ "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
+ "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
+ "\n"
+ "/* This code will be inserted into generated code for\n"
+ " * google/protobuf/struct.proto. */\n"
+ "\n"
+ "/**\n"
+ " * Typedef representing plain JavaScript values that can go into a\n"
+ " * Struct.\n"
+ " * @typedef {null|number|string|boolean|Array|Object}\n"
+ " */\n"
+ "proto.google.protobuf.JavaScriptValue;\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * Converts this Value object to a plain JavaScript value.\n"
+ " * @return {?proto.google.protobuf.JavaScriptValue} a plain JavaScript\n"
+ " * value representing this Struct.\n"
+ " */\n"
+ "proto.google.protobuf.Value.prototype.toJavaScript = function() {\n"
+ " var kindCase = proto.google.protobuf.Value.KindCase;\n"
+ " switch (this.getKindCase()) {\n"
+ " case kindCase.NULL_VALUE:\n"
+ " return null;\n"
+ " case kindCase.NUMBER_VALUE:\n"
+ " return this.getNumberValue();\n"
+ " case kindCase.STRING_VALUE:\n"
+ " return this.getStringValue();\n"
+ " case kindCase.BOOL_VALUE:\n"
+ " return this.getBoolValue();\n"
+ " case kindCase.STRUCT_VALUE:\n"
+ " return this.getStructValue().toJavaScript();\n"
+ " case kindCase.LIST_VALUE:\n"
+ " return this.getListValue().toJavaScript();\n"
+ " default:\n"
+ " throw new Error('Unexpected struct type');\n"
+ " }\n"
+ "};\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * Converts this JavaScript value to a new Value proto.\n"
+ " * @param {!proto.google.protobuf.JavaScriptValue} value The value to\n"
+ " * convert.\n"
+ " * @return {!proto.google.protobuf.Value} The newly constructed value.\n"
+ " */\n"
+ "proto.google.protobuf.Value.fromJavaScript = function(value) {\n"
+ " var ret = new proto.google.protobuf.Value();\n"
+ " switch (goog.typeOf(value)) {\n"
+ " case 'string':\n"
+ " ret.setStringValue(/** @type {string} */ (value));\n"
+ " break;\n"
+ " case 'number':\n"
+ " ret.setNumberValue(/** @type {number} */ (value));\n"
+ " break;\n"
+ " case 'boolean':\n"
+ " ret.setBoolValue(/** @type {boolean} */ (value));\n"
+ " break;\n"
+ " case 'null':\n"
+ " ret.setNullValue(proto.google.protobuf.NullValue.NULL_VALUE);\n"
+ " break;\n"
+ " case 'array':\n"
+ " ret.setListValue(proto.google.protobuf.ListValue.fromJavaScript(\n"
+ " /** @type{!Array} */ (value)));\n"
+ " break;\n"
+ " case 'object':\n"
+ " ret.setStructValue(proto.google.protobuf.Struct.fromJavaScript(\n"
+ " /** @type{!Object} */ (value)));\n"
+ " break;\n"
+ " default:\n"
+ " throw new Error('Unexpected struct type.');\n"
+ " }\n"
+ "\n"
+ " return ret;\n"
+ "};\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * Converts this ListValue object to a plain JavaScript array.\n"
+ " * @return {!Array} a plain JavaScript array representing this List.\n"
+ " */\n"
+ "proto.google.protobuf.ListValue.prototype.toJavaScript = function() {\n"
+ " var ret = [];\n"
+ " var values = this.getValuesList();\n"
+ "\n"
+ " for (var i = 0; i < values.length; i++) {\n"
+ " ret[i] = values[i].toJavaScript();\n"
+ " }\n"
+ "\n"
+ " return ret;\n"
+ "};\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * Constructs a ListValue protobuf from this plain JavaScript array.\n"
+ " * @param {!Array} array a plain JavaScript array\n"
+ " * @return {proto.google.protobuf.ListValue} a new ListValue object\n"
+ " */\n"
+ "proto.google.protobuf.ListValue.fromJavaScript = function(array) {\n"
+ " var ret = new proto.google.protobuf.ListValue();\n"
+ "\n"
+ " for (var i = 0; i < array.length; i++) {\n"
+ " ret.addValues(proto.google.protobuf.Value.fromJavaScript(array[i]));\n"
+ " }\n"
+ "\n"
+ " return ret;\n"
+ "};\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * Converts this Struct object to a plain JavaScript object.\n"
+ " * @return {!Object<string, !proto.google.protobuf.JavaScriptValue>} a plain\n"
+ " * JavaScript object representing this Struct.\n"
+ " */\n"
+ "proto.google.protobuf.Struct.prototype.toJavaScript = function() {\n"
+ " var ret = {};\n"
+ "\n"
+ " this.getFieldsMap().forEach(function(value, key) {\n"
+ " ret[key] = value.toJavaScript();\n"
+ " });\n"
+ "\n"
+ " return ret;\n"
+ "};\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * Constructs a Struct protobuf from this plain JavaScript object.\n"
+ " * @param {!Object} obj a plain JavaScript object\n"
+ " * @return {proto.google.protobuf.Struct} a new Struct object\n"
+ " */\n"
+ "proto.google.protobuf.Struct.fromJavaScript = function(obj) {\n"
+ " var ret = new proto.google.protobuf.Struct();\n"
+ " var map = ret.getFieldsMap();\n"
+ "\n"
+ " for (var property in obj) {\n"
+ " var val = obj[property];\n"
+ " map.set(property, proto.google.protobuf.Value.fromJavaScript(val));\n"
+ " }\n"
+ "\n"
+ " return ret;\n"
+ "};\n"
+},
+{"timestamp.js",
+ "// Protocol Buffers - Google's data interchange format\n"
+ "// Copyright 2008 Google Inc. All rights reserved.\n"
+ "// https://developers.google.com/protocol-buffers/\n"
+ "//\n"
+ "// Redistribution and use in source and binary forms, with or without\n"
+ "// modification, are permitted provided that the following conditions are\n"
+ "// met:\n"
+ "//\n"
+ "// * Redistributions of source code must retain the above copyright\n"
+ "// notice, this list of conditions and the following disclaimer.\n"
+ "// * Redistributions in binary form must reproduce the above\n"
+ "// copyright notice, this list of conditions and the following disclaimer\n"
+ "// in the documentation and/or other materials provided with the\n"
+ "// distribution.\n"
+ "// * Neither the name of Google Inc. nor the names of its\n"
+ "// contributors may be used to endorse or promote products derived from\n"
+ "// this software without specific prior written permission.\n"
+ "//\n"
+ "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n"
+ "// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n"
+ "// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n"
+ "// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n"
+ "// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n"
+ "// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n"
+ "// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n"
+ "// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n"
+ "// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n"
+ "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n"
+ "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
+ "\n"
+ "/* This code will be inserted into generated code for\n"
+ " * google/protobuf/timestamp.proto. */\n"
+ "\n"
+ "/**\n"
+ " * Returns a JavaScript 'Date' object corresponding to this Timestamp.\n"
+ " * @return {!Date}\n"
+ " */\n"
+ "proto.google.protobuf.Timestamp.prototype.toDate = function() {\n"
+ " var seconds = this.getSeconds();\n"
+ " var nanos = this.getNanos();\n"
+ "\n"
+ " return new Date((seconds * 1000) + (nanos / 1000000));\n"
+ "};\n"
+ "\n"
+ "\n"
+ "/**\n"
+ " * Sets the value of this Timestamp object to be the given Date.\n"
+ " * @param {!Date} value The value to set.\n"
+ " */\n"
+ "proto.google.protobuf.Timestamp.prototype.fromDate = function(value) {\n"
+ " var millis = value.getTime();\n"
+ " this.setSeconds(Math.floor(value.getTime() / 1000));\n"
+ " this.setNanos(value.getMilliseconds() * 1000000);\n"
+ "};\n"
+},
+ {NULL, NULL} // Terminate the list.
+};
diff --git a/tools/distrib/python/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py
index 263785b774..ad35b90bad 100644
--- a/tools/distrib/python/grpcio_tools/grpc_version.py
+++ b/tools/distrib/python/grpcio_tools/grpc_version.py
@@ -29,4 +29,4 @@
# AUTO-GENERATED FROM `$REPO_ROOT/templates/tools/distrib/python/grpcio_tools/grpc_version.py.template`!!!
-VERSION='1.2.0.dev0'
+VERSION='1.3.0.dev0'
diff --git a/tools/distrib/python/grpcio_tools/protoc_lib_deps.py b/tools/distrib/python/grpcio_tools/protoc_lib_deps.py
index 569328e57e..c2aa6198b3 100644
--- a/tools/distrib/python/grpcio_tools/protoc_lib_deps.py
+++ b/tools/distrib/python/grpcio_tools/protoc_lib_deps.py
@@ -29,7 +29,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# AUTO-GENERATED BY make_grpcio_tools.py!
-CC_FILES=['google/protobuf/compiler/zip_writer.cc', 'google/protobuf/compiler/subprocess.cc', 'google/protobuf/compiler/ruby/ruby_generator.cc', 'google/protobuf/compiler/python/python_generator.cc', 'google/protobuf/compiler/plugin.pb.cc', 'google/protobuf/compiler/plugin.cc', 'google/protobuf/compiler/php/php_generator.cc', 'google/protobuf/compiler/objectivec/objectivec_primitive_field.cc', 'google/protobuf/compiler/objectivec/objectivec_oneof.cc', 'google/protobuf/compiler/objectivec/objectivec_message_field.cc', 'google/protobuf/compiler/objectivec/objectivec_message.cc', 'google/protobuf/compiler/objectivec/objectivec_map_field.cc', 'google/protobuf/compiler/objectivec/objectivec_helpers.cc', 'google/protobuf/compiler/objectivec/objectivec_generator.cc', 'google/protobuf/compiler/objectivec/objectivec_file.cc', 'google/protobuf/compiler/objectivec/objectivec_field.cc', 'google/protobuf/compiler/objectivec/objectivec_extension.cc', 'google/protobuf/compiler/objectivec/objectivec_enum_field.cc', 'google/protobuf/compiler/objectivec/objectivec_enum.cc', 'google/protobuf/compiler/js/js_generator.cc', 'google/protobuf/compiler/javanano/javanano_primitive_field.cc', 'google/protobuf/compiler/javanano/javanano_message_field.cc', 'google/protobuf/compiler/javanano/javanano_message.cc', 'google/protobuf/compiler/javanano/javanano_map_field.cc', 'google/protobuf/compiler/javanano/javanano_helpers.cc', 'google/protobuf/compiler/javanano/javanano_generator.cc', 'google/protobuf/compiler/javanano/javanano_file.cc', 'google/protobuf/compiler/javanano/javanano_field.cc', 'google/protobuf/compiler/javanano/javanano_extension.cc', 'google/protobuf/compiler/javanano/javanano_enum_field.cc', 'google/protobuf/compiler/javanano/javanano_enum.cc', 'google/protobuf/compiler/java/java_string_field_lite.cc', 'google/protobuf/compiler/java/java_string_field.cc', 'google/protobuf/compiler/java/java_shared_code_generator.cc', 'google/protobuf/compiler/java/java_service.cc', 'google/protobuf/compiler/java/java_primitive_field_lite.cc', 'google/protobuf/compiler/java/java_primitive_field.cc', 'google/protobuf/compiler/java/java_name_resolver.cc', 'google/protobuf/compiler/java/java_message_lite.cc', 'google/protobuf/compiler/java/java_message_field_lite.cc', 'google/protobuf/compiler/java/java_message_field.cc', 'google/protobuf/compiler/java/java_message_builder_lite.cc', 'google/protobuf/compiler/java/java_message_builder.cc', 'google/protobuf/compiler/java/java_message.cc', 'google/protobuf/compiler/java/java_map_field_lite.cc', 'google/protobuf/compiler/java/java_map_field.cc', 'google/protobuf/compiler/java/java_lazy_message_field_lite.cc', 'google/protobuf/compiler/java/java_lazy_message_field.cc', 'google/protobuf/compiler/java/java_helpers.cc', 'google/protobuf/compiler/java/java_generator_factory.cc', 'google/protobuf/compiler/java/java_generator.cc', 'google/protobuf/compiler/java/java_file.cc', 'google/protobuf/compiler/java/java_field.cc', 'google/protobuf/compiler/java/java_extension_lite.cc', 'google/protobuf/compiler/java/java_extension.cc', 'google/protobuf/compiler/java/java_enum_lite.cc', 'google/protobuf/compiler/java/java_enum_field_lite.cc', 'google/protobuf/compiler/java/java_enum_field.cc', 'google/protobuf/compiler/java/java_enum.cc', 'google/protobuf/compiler/java/java_doc_comment.cc', 'google/protobuf/compiler/java/java_context.cc', 'google/protobuf/compiler/csharp/csharp_wrapper_field.cc', 'google/protobuf/compiler/csharp/csharp_source_generator_base.cc', 'google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_message_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_reflection_class.cc', 'google/protobuf/compiler/csharp/csharp_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_message_field.cc', 'google/protobuf/compiler/csharp/csharp_message.cc', 'google/protobuf/compiler/csharp/csharp_map_field.cc', 'google/protobuf/compiler/csharp/csharp_helpers.cc', 'google/protobuf/compiler/csharp/csharp_generator.cc', 'google/protobuf/compiler/csharp/csharp_field_base.cc', 'google/protobuf/compiler/csharp/csharp_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_enum.cc', 'google/protobuf/compiler/csharp/csharp_doc_comment.cc', 'google/protobuf/compiler/cpp/cpp_string_field.cc', 'google/protobuf/compiler/cpp/cpp_service.cc', 'google/protobuf/compiler/cpp/cpp_primitive_field.cc', 'google/protobuf/compiler/cpp/cpp_message_field.cc', 'google/protobuf/compiler/cpp/cpp_message.cc', 'google/protobuf/compiler/cpp/cpp_map_field.cc', 'google/protobuf/compiler/cpp/cpp_helpers.cc', 'google/protobuf/compiler/cpp/cpp_generator.cc', 'google/protobuf/compiler/cpp/cpp_file.cc', 'google/protobuf/compiler/cpp/cpp_field.cc', 'google/protobuf/compiler/cpp/cpp_extension.cc', 'google/protobuf/compiler/cpp/cpp_enum_field.cc', 'google/protobuf/compiler/cpp/cpp_enum.cc', 'google/protobuf/compiler/command_line_interface.cc', 'google/protobuf/compiler/code_generator.cc', 'google/protobuf/wrappers.pb.cc', 'google/protobuf/wire_format.cc', 'google/protobuf/util/type_resolver_util.cc', 'google/protobuf/util/time_util.cc', 'google/protobuf/util/message_differencer.cc', 'google/protobuf/util/json_util.cc', 'google/protobuf/util/internal/utility.cc', 'google/protobuf/util/internal/type_info_test_helper.cc', 'google/protobuf/util/internal/type_info.cc', 'google/protobuf/util/internal/protostream_objectwriter.cc', 'google/protobuf/util/internal/protostream_objectsource.cc', 'google/protobuf/util/internal/proto_writer.cc', 'google/protobuf/util/internal/object_writer.cc', 'google/protobuf/util/internal/json_stream_parser.cc', 'google/protobuf/util/internal/json_objectwriter.cc', 'google/protobuf/util/internal/json_escaping.cc', 'google/protobuf/util/internal/field_mask_utility.cc', 'google/protobuf/util/internal/error_listener.cc', 'google/protobuf/util/internal/default_value_objectwriter.cc', 'google/protobuf/util/internal/datapiece.cc', 'google/protobuf/util/field_mask_util.cc', 'google/protobuf/util/field_comparator.cc', 'google/protobuf/unknown_field_set.cc', 'google/protobuf/type.pb.cc', 'google/protobuf/timestamp.pb.cc', 'google/protobuf/text_format.cc', 'google/protobuf/stubs/substitute.cc', 'google/protobuf/stubs/mathlimits.cc', 'google/protobuf/struct.pb.cc', 'google/protobuf/source_context.pb.cc', 'google/protobuf/service.cc', 'google/protobuf/reflection_ops.cc', 'google/protobuf/message.cc', 'google/protobuf/map_field.cc', 'google/protobuf/io/zero_copy_stream_impl.cc', 'google/protobuf/io/tokenizer.cc', 'google/protobuf/io/strtod.cc', 'google/protobuf/io/printer.cc', 'google/protobuf/io/gzip_stream.cc', 'google/protobuf/generated_message_reflection.cc', 'google/protobuf/field_mask.pb.cc', 'google/protobuf/extension_set_heavy.cc', 'google/protobuf/empty.pb.cc', 'google/protobuf/dynamic_message.cc', 'google/protobuf/duration.pb.cc', 'google/protobuf/descriptor_database.cc', 'google/protobuf/descriptor.pb.cc', 'google/protobuf/descriptor.cc', 'google/protobuf/compiler/parser.cc', 'google/protobuf/compiler/importer.cc', 'google/protobuf/api.pb.cc', 'google/protobuf/any.pb.cc', 'google/protobuf/any.cc', 'google/protobuf/wire_format_lite.cc', 'google/protobuf/stubs/time.cc', 'google/protobuf/stubs/strutil.cc', 'google/protobuf/stubs/structurally_valid.cc', 'google/protobuf/stubs/stringprintf.cc', 'google/protobuf/stubs/stringpiece.cc', 'google/protobuf/stubs/statusor.cc', 'google/protobuf/stubs/status.cc', 'google/protobuf/stubs/once.cc', 'google/protobuf/stubs/int128.cc', 'google/protobuf/stubs/common.cc', 'google/protobuf/stubs/bytestream.cc', 'google/protobuf/stubs/atomicops_internals_x86_msvc.cc', 'google/protobuf/stubs/atomicops_internals_x86_gcc.cc', 'google/protobuf/repeated_field.cc', 'google/protobuf/message_lite.cc', 'google/protobuf/io/zero_copy_stream_impl_lite.cc', 'google/protobuf/io/zero_copy_stream.cc', 'google/protobuf/io/coded_stream.cc', 'google/protobuf/generated_message_util.cc', 'google/protobuf/extension_set.cc', 'google/protobuf/arenastring.cc', 'google/protobuf/arena.cc']
+CC_FILES=['google/protobuf/compiler/zip_writer.cc', 'google/protobuf/compiler/subprocess.cc', 'google/protobuf/compiler/ruby/ruby_generator.cc', 'google/protobuf/compiler/python/python_generator.cc', 'google/protobuf/compiler/plugin.pb.cc', 'google/protobuf/compiler/plugin.cc', 'google/protobuf/compiler/php/php_generator.cc', 'google/protobuf/compiler/objectivec/objectivec_primitive_field.cc', 'google/protobuf/compiler/objectivec/objectivec_oneof.cc', 'google/protobuf/compiler/objectivec/objectivec_message_field.cc', 'google/protobuf/compiler/objectivec/objectivec_message.cc', 'google/protobuf/compiler/objectivec/objectivec_map_field.cc', 'google/protobuf/compiler/objectivec/objectivec_helpers.cc', 'google/protobuf/compiler/objectivec/objectivec_generator.cc', 'google/protobuf/compiler/objectivec/objectivec_file.cc', 'google/protobuf/compiler/objectivec/objectivec_field.cc', 'google/protobuf/compiler/objectivec/objectivec_extension.cc', 'google/protobuf/compiler/objectivec/objectivec_enum_field.cc', 'google/protobuf/compiler/objectivec/objectivec_enum.cc', 'google/protobuf/compiler/js/well_known_types_embed.cc', 'google/protobuf/compiler/js/js_generator.cc', 'google/protobuf/compiler/javanano/javanano_primitive_field.cc', 'google/protobuf/compiler/javanano/javanano_message_field.cc', 'google/protobuf/compiler/javanano/javanano_message.cc', 'google/protobuf/compiler/javanano/javanano_map_field.cc', 'google/protobuf/compiler/javanano/javanano_helpers.cc', 'google/protobuf/compiler/javanano/javanano_generator.cc', 'google/protobuf/compiler/javanano/javanano_file.cc', 'google/protobuf/compiler/javanano/javanano_field.cc', 'google/protobuf/compiler/javanano/javanano_extension.cc', 'google/protobuf/compiler/javanano/javanano_enum_field.cc', 'google/protobuf/compiler/javanano/javanano_enum.cc', 'google/protobuf/compiler/java/java_string_field_lite.cc', 'google/protobuf/compiler/java/java_string_field.cc', 'google/protobuf/compiler/java/java_shared_code_generator.cc', 'google/protobuf/compiler/java/java_service.cc', 'google/protobuf/compiler/java/java_primitive_field_lite.cc', 'google/protobuf/compiler/java/java_primitive_field.cc', 'google/protobuf/compiler/java/java_name_resolver.cc', 'google/protobuf/compiler/java/java_message_lite.cc', 'google/protobuf/compiler/java/java_message_field_lite.cc', 'google/protobuf/compiler/java/java_message_field.cc', 'google/protobuf/compiler/java/java_message_builder_lite.cc', 'google/protobuf/compiler/java/java_message_builder.cc', 'google/protobuf/compiler/java/java_message.cc', 'google/protobuf/compiler/java/java_map_field_lite.cc', 'google/protobuf/compiler/java/java_map_field.cc', 'google/protobuf/compiler/java/java_lazy_message_field_lite.cc', 'google/protobuf/compiler/java/java_lazy_message_field.cc', 'google/protobuf/compiler/java/java_helpers.cc', 'google/protobuf/compiler/java/java_generator_factory.cc', 'google/protobuf/compiler/java/java_generator.cc', 'google/protobuf/compiler/java/java_file.cc', 'google/protobuf/compiler/java/java_field.cc', 'google/protobuf/compiler/java/java_extension_lite.cc', 'google/protobuf/compiler/java/java_extension.cc', 'google/protobuf/compiler/java/java_enum_lite.cc', 'google/protobuf/compiler/java/java_enum_field_lite.cc', 'google/protobuf/compiler/java/java_enum_field.cc', 'google/protobuf/compiler/java/java_enum.cc', 'google/protobuf/compiler/java/java_doc_comment.cc', 'google/protobuf/compiler/java/java_context.cc', 'google/protobuf/compiler/csharp/csharp_wrapper_field.cc', 'google/protobuf/compiler/csharp/csharp_source_generator_base.cc', 'google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_message_field.cc', 'google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_reflection_class.cc', 'google/protobuf/compiler/csharp/csharp_primitive_field.cc', 'google/protobuf/compiler/csharp/csharp_message_field.cc', 'google/protobuf/compiler/csharp/csharp_message.cc', 'google/protobuf/compiler/csharp/csharp_map_field.cc', 'google/protobuf/compiler/csharp/csharp_helpers.cc', 'google/protobuf/compiler/csharp/csharp_generator.cc', 'google/protobuf/compiler/csharp/csharp_field_base.cc', 'google/protobuf/compiler/csharp/csharp_enum_field.cc', 'google/protobuf/compiler/csharp/csharp_enum.cc', 'google/protobuf/compiler/csharp/csharp_doc_comment.cc', 'google/protobuf/compiler/cpp/cpp_string_field.cc', 'google/protobuf/compiler/cpp/cpp_service.cc', 'google/protobuf/compiler/cpp/cpp_primitive_field.cc', 'google/protobuf/compiler/cpp/cpp_message_field.cc', 'google/protobuf/compiler/cpp/cpp_message.cc', 'google/protobuf/compiler/cpp/cpp_map_field.cc', 'google/protobuf/compiler/cpp/cpp_helpers.cc', 'google/protobuf/compiler/cpp/cpp_generator.cc', 'google/protobuf/compiler/cpp/cpp_file.cc', 'google/protobuf/compiler/cpp/cpp_field.cc', 'google/protobuf/compiler/cpp/cpp_extension.cc', 'google/protobuf/compiler/cpp/cpp_enum_field.cc', 'google/protobuf/compiler/cpp/cpp_enum.cc', 'google/protobuf/compiler/command_line_interface.cc', 'google/protobuf/compiler/code_generator.cc', 'google/protobuf/wrappers.pb.cc', 'google/protobuf/wire_format.cc', 'google/protobuf/util/type_resolver_util.cc', 'google/protobuf/util/time_util.cc', 'google/protobuf/util/message_differencer.cc', 'google/protobuf/util/json_util.cc', 'google/protobuf/util/internal/utility.cc', 'google/protobuf/util/internal/type_info_test_helper.cc', 'google/protobuf/util/internal/type_info.cc', 'google/protobuf/util/internal/protostream_objectwriter.cc', 'google/protobuf/util/internal/protostream_objectsource.cc', 'google/protobuf/util/internal/proto_writer.cc', 'google/protobuf/util/internal/object_writer.cc', 'google/protobuf/util/internal/json_stream_parser.cc', 'google/protobuf/util/internal/json_objectwriter.cc', 'google/protobuf/util/internal/json_escaping.cc', 'google/protobuf/util/internal/field_mask_utility.cc', 'google/protobuf/util/internal/error_listener.cc', 'google/protobuf/util/internal/default_value_objectwriter.cc', 'google/protobuf/util/internal/datapiece.cc', 'google/protobuf/util/field_mask_util.cc', 'google/protobuf/util/field_comparator.cc', 'google/protobuf/unknown_field_set.cc', 'google/protobuf/type.pb.cc', 'google/protobuf/timestamp.pb.cc', 'google/protobuf/text_format.cc', 'google/protobuf/stubs/substitute.cc', 'google/protobuf/stubs/mathlimits.cc', 'google/protobuf/struct.pb.cc', 'google/protobuf/source_context.pb.cc', 'google/protobuf/service.cc', 'google/protobuf/reflection_ops.cc', 'google/protobuf/message.cc', 'google/protobuf/map_field.cc', 'google/protobuf/io/zero_copy_stream_impl.cc', 'google/protobuf/io/tokenizer.cc', 'google/protobuf/io/strtod.cc', 'google/protobuf/io/printer.cc', 'google/protobuf/io/gzip_stream.cc', 'google/protobuf/generated_message_reflection.cc', 'google/protobuf/field_mask.pb.cc', 'google/protobuf/extension_set_heavy.cc', 'google/protobuf/empty.pb.cc', 'google/protobuf/dynamic_message.cc', 'google/protobuf/duration.pb.cc', 'google/protobuf/descriptor_database.cc', 'google/protobuf/descriptor.pb.cc', 'google/protobuf/descriptor.cc', 'google/protobuf/compiler/parser.cc', 'google/protobuf/compiler/importer.cc', 'google/protobuf/api.pb.cc', 'google/protobuf/any.pb.cc', 'google/protobuf/any.cc', 'google/protobuf/wire_format_lite.cc', 'google/protobuf/stubs/time.cc', 'google/protobuf/stubs/strutil.cc', 'google/protobuf/stubs/structurally_valid.cc', 'google/protobuf/stubs/stringprintf.cc', 'google/protobuf/stubs/stringpiece.cc', 'google/protobuf/stubs/statusor.cc', 'google/protobuf/stubs/status.cc', 'google/protobuf/stubs/once.cc', 'google/protobuf/stubs/int128.cc', 'google/protobuf/stubs/common.cc', 'google/protobuf/stubs/bytestream.cc', 'google/protobuf/stubs/atomicops_internals_x86_msvc.cc', 'google/protobuf/stubs/atomicops_internals_x86_gcc.cc', 'google/protobuf/repeated_field.cc', 'google/protobuf/message_lite.cc', 'google/protobuf/io/zero_copy_stream_impl_lite.cc', 'google/protobuf/io/zero_copy_stream.cc', 'google/protobuf/io/coded_stream.cc', 'google/protobuf/generated_message_util.cc', 'google/protobuf/extension_set.cc', 'google/protobuf/arenastring.cc', 'google/protobuf/arena.cc', 'google/protobuf/compiler/js/embed.cc']
PROTO_FILES=['google/protobuf/wrappers.proto', 'google/protobuf/type.proto', 'google/protobuf/timestamp.proto', 'google/protobuf/struct.proto', 'google/protobuf/source_context.proto', 'google/protobuf/field_mask.proto', 'google/protobuf/empty.proto', 'google/protobuf/duration.proto', 'google/protobuf/descriptor.proto', 'google/protobuf/compiler/plugin.proto', 'google/protobuf/api.proto', 'google/protobuf/any.proto']
CC_INCLUDE='third_party/protobuf/src'
diff --git a/tools/distrib/python/grpcio_tools/setup.py b/tools/distrib/python/grpcio_tools/setup.py
index 502d7ef27b..ed27f1f835 100644
--- a/tools/distrib/python/grpcio_tools/setup.py
+++ b/tools/distrib/python/grpcio_tools/setup.py
@@ -157,11 +157,28 @@ def extension_modules():
plugin_sources = [os.path.join('grpc_tools', '_protoc_compiler.pyx')]
else:
plugin_sources = [os.path.join('grpc_tools', '_protoc_compiler.cpp')]
+
plugin_sources += [
os.path.join('grpc_tools', 'main.cc'),
- os.path.join('grpc_root', 'src', 'compiler', 'python_generator.cc')] + [
- os.path.join(CC_INCLUDE, cc_file)
- for cc_file in CC_FILES]
+ os.path.join('grpc_root', 'src', 'compiler', 'python_generator.cc')]
+
+ #HACK: Substitute the embed.cc, which is a JS to C++
+ # preprocessor with the generated code.
+ # The generated code should not be material
+ # to the parts of protoc we use (it affects
+ # the JavaScript code generator, supposedly),
+ # but we need to be cautious about it.
+ cc_files_clone = list(CC_FILES)
+ embed_cc_file = os.path.normpath('google/protobuf/compiler/js/embed.cc')
+ well_known_types_file = os.path.normpath(
+ 'google/protobuf/compiler/js/well_known_types_embed.cc')
+ if embed_cc_file in cc_files_clone:
+ cc_files_clone.remove(embed_cc_file)
+ if well_known_types_file in cc_files_clone:
+ cc_files_clone.remove(well_known_types_file)
+ plugin_sources += [os.path.join('grpc_tools', 'protobuf_generated_well_known_types_embed.cc')]
+ plugin_sources += [os.path.join(CC_INCLUDE, cc_file) for cc_file in cc_files_clone]
+
plugin_ext = extension.Extension(
name='grpc_tools._protoc_compiler',
sources=plugin_sources,
@@ -190,7 +207,7 @@ setuptools.setup(
ext_modules=extension_modules(),
packages=setuptools.find_packages('.'),
install_requires=[
- 'protobuf>=3.0.0',
+ 'protobuf>=3.2.0',
'grpcio>={version}'.format(version=grpc_version.VERSION),
],
package_data=package_data(),
diff --git a/tools/distrib/yapf_code.sh b/tools/distrib/yapf_code.sh
index 007b14810e..f28a1ce8ba 100755
--- a/tools/distrib/yapf_code.sh
+++ b/tools/distrib/yapf_code.sh
@@ -31,31 +31,48 @@
set -ex
# change to root directory
-cd $(dirname $0)/../..
+cd "$(dirname "${0}")/../.."
-DIRS=src/python
-EXCLUSIONS='src/python/grpcio/grpc_*.py src/python/grpcio_health_checking/grpc_*.py src/python/grpcio_reflection/grpc_*.py src/python/grpcio_tests/grpc_*.py'
+DIRS=(
+ 'src/python'
+)
+EXCLUSIONS=(
+ 'grpcio/grpc_*.py'
+ 'grpcio_health_checking/grpc_*.py'
+ 'grpcio_reflection/grpc_*.py'
+ 'grpcio_tests/grpc_*.py'
+)
-VIRTUALENV=python_format_venv
+VIRTUALENV=yapf_virtual_environment
virtualenv $VIRTUALENV
-PYTHON=`realpath $VIRTUALENV/bin/python`
-$PYTHON -m pip install futures
+PYTHON=$(realpath "${VIRTUALENV}/bin/python")
+$PYTHON -m pip install --upgrade pip
+$PYTHON -m pip install --upgrade futures
$PYTHON -m pip install yapf==0.16.0
-exclusion_args=""
-for exclusion in $EXCLUSIONS; do
- exclusion_args="$exclusion_args --exclude $exclusion"
-done
+yapf() {
+ local exclusion exclusion_args=()
+ for exclusion in "${EXCLUSIONS[@]}"; do
+ exclusion_args+=( "--exclude" "$1/${exclusion}" )
+ done
+ $PYTHON -m yapf -i -r --style=setup.cfg -p "${exclusion_args[@]}" "${1}"
+}
-script_result=0
-for dir in $DIRS; do
- tempdir=`mktemp -d`
- cp -RT $dir $tempdir
- $PYTHON -m yapf -i -r -p $exclusion_args $dir
- if ! diff -r $dir $tempdir; then
- script_result=1
- fi
- rm -rf $tempdir
-done
-exit $script_result
+if [[ -z "${TEST}" ]]; then
+ for dir in "${DIRS[@]}"; do
+ yapf "${dir}"
+ done
+else
+ ok=yes
+ for dir in "${DIRS[@]}"; do
+ tempdir=$(mktemp -d)
+ cp -RT "${dir}" "${tempdir}"
+ yapf "${tempdir}"
+ diff -ru "${dir}" "${tempdir}" || ok=no
+ rm -rf "${tempdir}"
+ done
+ if [[ ${ok} == no ]]; then
+ false
+ fi
+fi
diff --git a/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile b/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile
index 669e3557b8..3479944717 100644
--- a/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_linux_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0
##################
diff --git a/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile b/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile
index 860b8f4fb9..75d156f6d8 100644
--- a/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile
+++ b/tools/dockerfile/grpc_artifact_linux_x86/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0
##################
diff --git a/tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile
index 087cc4e2bb..14a2468abc 100644
--- a/tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_csharp/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#================
# C# dependencies
diff --git a/tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile
index efe6e39118..c26c9a2826 100644
--- a/tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#================
# C# dependencies
@@ -99,8 +99,12 @@ RUN nuget update -self
# Install dotnet SDK based on https://www.microsoft.com/net/core#debian
RUN apt-get update && apt-get install -y curl libunwind8 gettext
-RUN curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809130
-RUN mkdir -p /opt/dotnet && tar zxf dotnet.tar.gz -C /opt/dotnet
+# dotnet-dev-1.0.0-preview2-003121
+RUN curl -sSL -o dotnet100.tar.gz https://go.microsoft.com/fwlink/?LinkID=809130
+RUN mkdir -p /opt/dotnet && tar zxf dotnet100.tar.gz -C /opt/dotnet
+# dotnet-dev-1.0.1
+RUN curl -sSL -o dotnet101.tar.gz https://go.microsoft.com/fwlink/?LinkID=843453
+RUN mkdir -p /opt/dotnet && tar zxf dotnet101.tar.gz -C /opt/dotnet
RUN ln -s /opt/dotnet/dotnet /usr/local/bin
# Trigger the population of the local package cache
diff --git a/tools/dockerfile/interoptest/grpc_interop_cxx/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_cxx/Dockerfile
index aa77d5f127..2d10e3fdfe 100644
--- a/tools/dockerfile/interoptest/grpc_interop_cxx/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_cxx/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#=================
# C++ dependencies
diff --git a/tools/dockerfile/interoptest/grpc_interop_go/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_go/Dockerfile
index 05e963d1e6..d3bf071c72 100644
--- a/tools/dockerfile/interoptest/grpc_interop_go/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_go/Dockerfile
@@ -45,7 +45,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Define the default command.
CMD ["bash"]
diff --git a/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile
index 3a5e15d21b..acc984acb0 100644
--- a/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile
@@ -45,9 +45,9 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
-RUN pip install twisted h2
+RUN pip install twisted h2 hyper
# Define the default command.
CMD ["bash"]
diff --git a/tools/dockerfile/interoptest/grpc_interop_java/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_java/Dockerfile
index b5fe54f991..2023467d59 100644
--- a/tools/dockerfile/interoptest/grpc_interop_java/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_java/Dockerfile
@@ -60,7 +60,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Trigger download of as many Gradle artifacts as possible.
diff --git a/tools/dockerfile/interoptest/grpc_interop_node/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_node/Dockerfile
index d9a7501829..9945260ea4 100644
--- a/tools/dockerfile/interoptest/grpc_interop_node/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_node/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#==================
# Node dependencies
diff --git a/tools/dockerfile/interoptest/grpc_interop_python/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_python/Dockerfile
index 10a88916ad..94c17078d3 100644
--- a/tools/dockerfile/interoptest/grpc_interop_python/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_python/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
diff --git a/tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile
index dae64e5c8c..679c8ff47a 100644
--- a/tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile
+++ b/tools/dockerfile/interoptest/grpc_interop_ruby/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#==================
# Ruby dependencies
diff --git a/tools/dockerfile/push_testing_images.sh b/tools/dockerfile/push_testing_images.sh
index 9dceb29a87..973e045ffe 100755
--- a/tools/dockerfile/push_testing_images.sh
+++ b/tools/dockerfile/push_testing_images.sh
@@ -44,7 +44,7 @@ cd -
DOCKERHUB_ORGANIZATION=grpctesting
-for DOCKERFILE_DIR in tools/dockerfile/test/fuzzer tools/dockerfile/test/sanity
+for DOCKERFILE_DIR in tools/dockerfile/test/*
do
# Generate image name based on Dockerfile checksum. That works well as long
# as can count on dockerfiles being written in a way that changing the logical
diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_csharp/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_csharp/Dockerfile
index 328825392b..cd1e934341 100644
--- a/tools/dockerfile/stress_test/grpc_interop_stress_csharp/Dockerfile
+++ b/tools/dockerfile/stress_test/grpc_interop_stress_csharp/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_cxx/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_cxx/Dockerfile
index e082da648b..d0f66d9955 100644
--- a/tools/dockerfile/stress_test/grpc_interop_stress_cxx/Dockerfile
+++ b/tools/dockerfile/stress_test/grpc_interop_stress_cxx/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_go/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_go/Dockerfile
index 1e2b7d8c67..bbf7de7f91 100644
--- a/tools/dockerfile/stress_test/grpc_interop_stress_go/Dockerfile
+++ b/tools/dockerfile/stress_test/grpc_interop_stress_go/Dockerfile
@@ -47,7 +47,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Using login shell removes Go from path, so we add it.
RUN ln -s /usr/local/go/bin/go /usr/local/bin
diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_java/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_java/Dockerfile
index 0c17ff595e..229ea469c4 100644
--- a/tools/dockerfile/stress_test/grpc_interop_stress_java/Dockerfile
+++ b/tools/dockerfile/stress_test/grpc_interop_stress_java/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_node/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_node/Dockerfile
index 0594f69a5b..5fd0bc0eb2 100644
--- a/tools/dockerfile/stress_test/grpc_interop_stress_node/Dockerfile
+++ b/tools/dockerfile/stress_test/grpc_interop_stress_node/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#==================
# Node dependencies
diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile
index 0fe9c151e5..b5198b4652 100644
--- a/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile
+++ b/tools/dockerfile/stress_test/grpc_interop_stress_php/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#==================
# Ruby dependencies
diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile
index 20d2d3f57b..8e1de51f33 100644
--- a/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile
+++ b/tools/dockerfile/stress_test/grpc_interop_stress_python/Dockerfile
@@ -93,7 +93,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
RUN pip install coverage
diff --git a/tools/dockerfile/stress_test/grpc_interop_stress_ruby/Dockerfile b/tools/dockerfile/stress_test/grpc_interop_stress_ruby/Dockerfile
index f459153fe5..9d291aac58 100644
--- a/tools/dockerfile/stress_test/grpc_interop_stress_ruby/Dockerfile
+++ b/tools/dockerfile/stress_test/grpc_interop_stress_ruby/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
diff --git a/tools/dockerfile/test/csharp_coreclr_x64/Dockerfile b/tools/dockerfile/test/csharp_coreclr_x64/Dockerfile
index efe6e39118..c26c9a2826 100644
--- a/tools/dockerfile/test/csharp_coreclr_x64/Dockerfile
+++ b/tools/dockerfile/test/csharp_coreclr_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#================
# C# dependencies
@@ -99,8 +99,12 @@ RUN nuget update -self
# Install dotnet SDK based on https://www.microsoft.com/net/core#debian
RUN apt-get update && apt-get install -y curl libunwind8 gettext
-RUN curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809130
-RUN mkdir -p /opt/dotnet && tar zxf dotnet.tar.gz -C /opt/dotnet
+# dotnet-dev-1.0.0-preview2-003121
+RUN curl -sSL -o dotnet100.tar.gz https://go.microsoft.com/fwlink/?LinkID=809130
+RUN mkdir -p /opt/dotnet && tar zxf dotnet100.tar.gz -C /opt/dotnet
+# dotnet-dev-1.0.1
+RUN curl -sSL -o dotnet101.tar.gz https://go.microsoft.com/fwlink/?LinkID=843453
+RUN mkdir -p /opt/dotnet && tar zxf dotnet101.tar.gz -C /opt/dotnet
RUN ln -s /opt/dotnet/dotnet /usr/local/bin
# Trigger the population of the local package cache
diff --git a/tools/dockerfile/test/csharp_jessie_x64/Dockerfile b/tools/dockerfile/test/csharp_jessie_x64/Dockerfile
index 087cc4e2bb..14a2468abc 100644
--- a/tools/dockerfile/test/csharp_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/csharp_jessie_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#================
# C# dependencies
diff --git a/tools/dockerfile/test/cxx_jessie_x64/Dockerfile b/tools/dockerfile/test/cxx_jessie_x64/Dockerfile
index e968a0f589..4bb97c7aa9 100644
--- a/tools/dockerfile/test/cxx_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/cxx_jessie_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#=================
# C++ dependencies
diff --git a/tools/dockerfile/test/cxx_jessie_x86/Dockerfile b/tools/dockerfile/test/cxx_jessie_x86/Dockerfile
index f985480254..c4b710b5df 100644
--- a/tools/dockerfile/test/cxx_jessie_x86/Dockerfile
+++ b/tools/dockerfile/test/cxx_jessie_x86/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#=================
# C++ dependencies
diff --git a/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile b/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile
index 2b3f4af3e6..bd742dff34 100644
--- a/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile
+++ b/tools/dockerfile/test/cxx_ubuntu1404_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#=================
# C++ dependencies
diff --git a/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile b/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile
index 2d282276d3..bc46b3055a 100644
--- a/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile
+++ b/tools/dockerfile/test/cxx_ubuntu1604_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#=================
# C++ dependencies
diff --git a/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile b/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile
index f22fcacc13..f7d7f542c1 100644
--- a/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile
+++ b/tools/dockerfile/test/cxx_wheezy_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#=================
# C++ dependencies
diff --git a/tools/dockerfile/test/fuzzer/Dockerfile b/tools/dockerfile/test/fuzzer/Dockerfile
index bd04f07cea..b398b70b64 100644
--- a/tools/dockerfile/test/fuzzer/Dockerfile
+++ b/tools/dockerfile/test/fuzzer/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#=================
# C++ dependencies
diff --git a/tools/dockerfile/test/multilang_jessie_x64/Dockerfile b/tools/dockerfile/test/multilang_jessie_x64/Dockerfile
index 2540b52ec8..5d0c1686f1 100644
--- a/tools/dockerfile/test/multilang_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/multilang_jessie_x64/Dockerfile
@@ -133,7 +133,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
diff --git a/tools/dockerfile/test/node_jessie_x64/Dockerfile b/tools/dockerfile/test/node_jessie_x64/Dockerfile
index 7f93933eca..4595aa6bea 100644
--- a/tools/dockerfile/test/node_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/node_jessie_x64/Dockerfile
@@ -87,7 +87,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#==================
# Node dependencies
diff --git a/tools/dockerfile/test/php7_jessie_x64/Dockerfile b/tools/dockerfile/test/php7_jessie_x64/Dockerfile
index 221338956e..0e2c103afd 100644
--- a/tools/dockerfile/test/php7_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/php7_jessie_x64/Dockerfile
@@ -88,7 +88,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
diff --git a/tools/dockerfile/test/php_jessie_x64/Dockerfile b/tools/dockerfile/test/php_jessie_x64/Dockerfile
index 17ea36b76c..c6f3dde39a 100644
--- a/tools/dockerfile/test/php_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/php_jessie_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#=================
# PHP dependencies
diff --git a/tools/dockerfile/test/python_jessie_x64/Dockerfile b/tools/dockerfile/test/python_jessie_x64/Dockerfile
index 10a88916ad..94c17078d3 100644
--- a/tools/dockerfile/test/python_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/python_jessie_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Prepare ccache
RUN ln -s /usr/bin/ccache /usr/local/bin/gcc
diff --git a/tools/dockerfile/test/python_pyenv_x64/Dockerfile b/tools/dockerfile/test/python_pyenv_x64/Dockerfile
index ecd785a86d..435a9fdc97 100644
--- a/tools/dockerfile/test/python_pyenv_x64/Dockerfile
+++ b/tools/dockerfile/test/python_pyenv_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
# Install dependencies for pyenv
RUN apt-get update && apt-get install -y \
@@ -92,6 +92,9 @@ RUN apt-get update && apt-get install -y \
# Install Pyenv and dev Python versions 3.5 and 3.6
RUN curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
+ENV PATH /root/.pyenv/bin:$PATH
+RUN eval "$(pyenv init -)"
+RUN eval "$(pyenv virtualenv-init -)"
RUN pyenv update
RUN pyenv install 3.5-dev
RUN pyenv install 3.6-dev
diff --git a/tools/dockerfile/test/ruby_jessie_x64/Dockerfile b/tools/dockerfile/test/ruby_jessie_x64/Dockerfile
index dae64e5c8c..679c8ff47a 100644
--- a/tools/dockerfile/test/ruby_jessie_x64/Dockerfile
+++ b/tools/dockerfile/test/ruby_jessie_x64/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#==================
# Ruby dependencies
diff --git a/tools/dockerfile/test/sanity/Dockerfile b/tools/dockerfile/test/sanity/Dockerfile
index 811384fda1..0da2a1914a 100644
--- a/tools/dockerfile/test/sanity/Dockerfile
+++ b/tools/dockerfile/test/sanity/Dockerfile
@@ -76,7 +76,7 @@ RUN apt-get update && apt-get install -y \
# Install Python packages from PyPI
RUN pip install pip --upgrade
RUN pip install virtualenv
-RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.0.0a2 six==1.10.0
+RUN pip install futures==2.2.0 enum34==1.0.4 protobuf==3.2.0 six==1.10.0
#========================
# Sanity test dependencies
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index 965259746c..5e6333dc89 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.2.0-dev
+PROJECT_NUMBER = 1.3.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@@ -764,6 +764,7 @@ INPUT = doc/PROTOCOL-HTTP2.md \
doc/PROTOCOL-WEB.md \
doc/binary-logging.md \
doc/c-style-guide.md \
+doc/combiner-explainer.md \
doc/command_line_tool.md \
doc/compression.md \
doc/compression_cookbook.md \
@@ -788,6 +789,7 @@ doc/server-reflection.md \
doc/server_reflection_tutorial.md \
doc/server_side_auth.md \
doc/service_config.md \
+doc/status_ordering.md \
doc/statuscodes.md \
doc/stress_test_framework.md \
doc/wait-for-ready.md \
@@ -803,6 +805,7 @@ include/grpc++/generic/generic_stub.h \
include/grpc++/grpc++.h \
include/grpc++/health_check_service_interface.h \
include/grpc++/impl/call.h \
+include/grpc++/impl/channel_argument_option.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/codegen/async_stream.h \
include/grpc++/impl/codegen/async_unary_call.h \
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index d98475fb00..8b7ec50a93 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -40,7 +40,7 @@ PROJECT_NAME = "GRPC C++"
# could be handy for archiving the generated documentation or if some version
# control system is used.
-PROJECT_NUMBER = 1.2.0-dev
+PROJECT_NUMBER = 1.3.0-dev
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
@@ -764,6 +764,7 @@ INPUT = doc/PROTOCOL-HTTP2.md \
doc/PROTOCOL-WEB.md \
doc/binary-logging.md \
doc/c-style-guide.md \
+doc/combiner-explainer.md \
doc/command_line_tool.md \
doc/compression.md \
doc/compression_cookbook.md \
@@ -788,6 +789,7 @@ doc/server-reflection.md \
doc/server_reflection_tutorial.md \
doc/server_side_auth.md \
doc/service_config.md \
+doc/status_ordering.md \
doc/statuscodes.md \
doc/stress_test_framework.md \
doc/wait-for-ready.md \
@@ -803,6 +805,7 @@ include/grpc++/generic/generic_stub.h \
include/grpc++/grpc++.h \
include/grpc++/health_check_service_interface.h \
include/grpc++/impl/call.h \
+include/grpc++/impl/channel_argument_option.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/codegen/async_stream.h \
include/grpc++/impl/codegen/async_unary_call.h \
@@ -914,6 +917,7 @@ src/cpp/common/secure_channel_arguments.cc \
src/cpp/common/secure_create_auth_context.cc \
src/cpp/common/version_cc.cc \
src/cpp/server/async_generic_service.cc \
+src/cpp/server/channel_argument_option.cc \
src/cpp/server/create_default_thread_pool.cc \
src/cpp/server/dynamic_thread_pool.cc \
src/cpp/server/dynamic_thread_pool.h \
diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core
index 478bdb2d04..355029ec9e 100644
--- a/tools/doxygen/Doxyfile.core
+++ b/tools/doxygen/Doxyfile.core
@@ -764,6 +764,7 @@ INPUT = doc/PROTOCOL-HTTP2.md \
doc/PROTOCOL-WEB.md \
doc/binary-logging.md \
doc/c-style-guide.md \
+doc/combiner-explainer.md \
doc/command_line_tool.md \
doc/compression.md \
doc/compression_cookbook.md \
@@ -787,6 +788,7 @@ doc/server-reflection.md \
doc/server_reflection_tutorial.md \
doc/server_side_auth.md \
doc/service_config.md \
+doc/status_ordering.md \
doc/statuscodes.md \
doc/stress_test_framework.md \
doc/wait-for-ready.md \
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index a7d6aaeb9e..8922363098 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -764,6 +764,7 @@ INPUT = doc/PROTOCOL-HTTP2.md \
doc/PROTOCOL-WEB.md \
doc/binary-logging.md \
doc/c-style-guide.md \
+doc/combiner-explainer.md \
doc/command_line_tool.md \
doc/compression.md \
doc/compression_cookbook.md \
@@ -787,6 +788,7 @@ doc/server-reflection.md \
doc/server_reflection_tutorial.md \
doc/server_side_auth.md \
doc/service_config.md \
+doc/status_ordering.md \
doc/statuscodes.md \
doc/stress_test_framework.md \
doc/wait-for-ready.md \
@@ -1129,6 +1131,10 @@ src/core/lib/iomgr/tcp_posix.c \
src/core/lib/iomgr/tcp_posix.h \
src/core/lib/iomgr/tcp_server.h \
src/core/lib/iomgr/tcp_server_posix.c \
+src/core/lib/iomgr/tcp_server_utils_posix.h \
+src/core/lib/iomgr/tcp_server_utils_posix_common.c \
+src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c \
+src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c \
src/core/lib/iomgr/tcp_server_uv.c \
src/core/lib/iomgr/tcp_server_windows.c \
src/core/lib/iomgr/tcp_uv.c \
@@ -1227,6 +1233,8 @@ src/core/lib/slice/slice_internal.h \
src/core/lib/slice/slice_string_helpers.c \
src/core/lib/slice/slice_string_helpers.h \
src/core/lib/support/alloc.c \
+src/core/lib/support/arena.c \
+src/core/lib/support/arena.h \
src/core/lib/support/avl.c \
src/core/lib/support/backoff.c \
src/core/lib/support/backoff.h \
diff --git a/tools/fuzzer/options/api_fuzzer.options b/tools/fuzzer/options/api_fuzzer.options
new file mode 100644
index 0000000000..8871ae21b6
--- /dev/null
+++ b/tools/fuzzer/options/api_fuzzer.options
@@ -0,0 +1,3 @@
+[libfuzzer]
+max_len = 2048
+dict = api_fuzzer.dictionary
diff --git a/tools/fuzzer/options/client_fuzzer.options b/tools/fuzzer/options/client_fuzzer.options
new file mode 100644
index 0000000000..fd2eebf7d2
--- /dev/null
+++ b/tools/fuzzer/options/client_fuzzer.options
@@ -0,0 +1,3 @@
+[libfuzzer]
+max_len = 2048
+dict = hpack.dictionary
diff --git a/tools/fuzzer/options/fuzzer.options b/tools/fuzzer/options/fuzzer.options
new file mode 100644
index 0000000000..5d468bc6e4
--- /dev/null
+++ b/tools/fuzzer/options/fuzzer.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 512
diff --git a/tools/fuzzer/options/fuzzer_response.options b/tools/fuzzer/options/fuzzer_response.options
new file mode 100644
index 0000000000..5dcdfac7a6
--- /dev/null
+++ b/tools/fuzzer/options/fuzzer_response.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 128
diff --git a/tools/fuzzer/options/fuzzer_serverlist.options b/tools/fuzzer/options/fuzzer_serverlist.options
new file mode 100644
index 0000000000..5dcdfac7a6
--- /dev/null
+++ b/tools/fuzzer/options/fuzzer_serverlist.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 128
diff --git a/tools/fuzzer/options/hpack_parser_fuzzer_test.options b/tools/fuzzer/options/hpack_parser_fuzzer_test.options
new file mode 100644
index 0000000000..584487fafc
--- /dev/null
+++ b/tools/fuzzer/options/hpack_parser_fuzzer_test.options
@@ -0,0 +1,3 @@
+[libfuzzer]
+max_len = 512
+dict = hpack.dictionary
diff --git a/tools/fuzzer/options/percent_decode_fuzzer.options b/tools/fuzzer/options/percent_decode_fuzzer.options
new file mode 100644
index 0000000000..ea2785e110
--- /dev/null
+++ b/tools/fuzzer/options/percent_decode_fuzzer.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 32
diff --git a/tools/fuzzer/options/percent_encode_fuzzer.options b/tools/fuzzer/options/percent_encode_fuzzer.options
new file mode 100644
index 0000000000..ea2785e110
--- /dev/null
+++ b/tools/fuzzer/options/percent_encode_fuzzer.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 32
diff --git a/tools/fuzzer/options/request_fuzzer.options b/tools/fuzzer/options/request_fuzzer.options
new file mode 100644
index 0000000000..fd32ac16e1
--- /dev/null
+++ b/tools/fuzzer/options/request_fuzzer.options
@@ -0,0 +1,3 @@
+[libfuzzer]
+max_len = 2048
+
diff --git a/tools/fuzzer/options/response_fuzzer.options b/tools/fuzzer/options/response_fuzzer.options
new file mode 100644
index 0000000000..fd32ac16e1
--- /dev/null
+++ b/tools/fuzzer/options/response_fuzzer.options
@@ -0,0 +1,3 @@
+[libfuzzer]
+max_len = 2048
+
diff --git a/tools/fuzzer/options/server_fuzzer.options b/tools/fuzzer/options/server_fuzzer.options
new file mode 100644
index 0000000000..fd2eebf7d2
--- /dev/null
+++ b/tools/fuzzer/options/server_fuzzer.options
@@ -0,0 +1,3 @@
+[libfuzzer]
+max_len = 2048
+dict = hpack.dictionary
diff --git a/tools/fuzzer/options/ssl_server_fuzzer.options b/tools/fuzzer/options/ssl_server_fuzzer.options
new file mode 100644
index 0000000000..60bd9b0b2f
--- /dev/null
+++ b/tools/fuzzer/options/ssl_server_fuzzer.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 2048
diff --git a/tools/fuzzer/options/uri_fuzzer_test.options b/tools/fuzzer/options/uri_fuzzer_test.options
new file mode 100644
index 0000000000..5dcdfac7a6
--- /dev/null
+++ b/tools/fuzzer/options/uri_fuzzer_test.options
@@ -0,0 +1,2 @@
+[libfuzzer]
+max_len = 128
diff --git a/tools/gcp/utils/gcr_upload.py b/tools/gcp/utils/gcr_upload.py
new file mode 100755
index 0000000000..b22f8731f6
--- /dev/null
+++ b/tools/gcp/utils/gcr_upload.py
@@ -0,0 +1,119 @@
+#!/usr/bin/env python2.7
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Upload docker images to Google Container Registry."""
+
+from __future__ import print_function
+
+import argparse
+import atexit
+import os
+import shutil
+import subprocess
+import tempfile
+
+argp = argparse.ArgumentParser(description='Run interop tests.')
+argp.add_argument('--gcr_path',
+ default='gcr.io/grpc-testing',
+ help='Path of docker images in Google Container Registry')
+
+argp.add_argument('--gcr_tag',
+ default='latest',
+ help='the tag string for the images to upload')
+
+argp.add_argument('--with_files',
+ default=[],
+ nargs='+',
+ help='additional files to include in the docker image')
+
+argp.add_argument('--with_file_dest',
+ default='/var/local/image_info',
+ help='Destination directory for with_files inside docker image')
+
+argp.add_argument('--images',
+ default=[],
+ nargs='+',
+ help='local docker images in the form of repo:tag ' +
+ '(i.e. grpc_interop_java:26328ad8) to upload')
+
+argp.add_argument('--keep',
+ action='store_true',
+ help='keep the created local images after uploading to GCR')
+
+
+args = argp.parse_args()
+
+def upload_to_gcr(image):
+ """Tags and Pushes a docker image in Google Containger Registry.
+
+ image: docker image name, i.e. grpc_interop_java:26328ad8
+
+ A docker image image_foo:tag_old will be uploaded as
+ <gcr_path>/image_foo:<gcr_tag>
+ after inserting extra with_files under with_file_dest in the image. The
+ original image name will be stored as label original_name:"image_foo:tag_old".
+ """
+ tag_idx = image.find(':')
+ if tag_idx == -1:
+ print('Failed to parse docker image name %s' % image)
+ return False
+ new_tag = '%s/%s:%s' % (args.gcr_path, image[:tag_idx], args.gcr_tag)
+
+ lines = ['FROM ' + image]
+ lines.append('LABEL original_name="%s"' % image)
+
+ temp_dir = tempfile.mkdtemp()
+ atexit.register(lambda: subprocess.call(['rm', '-rf', temp_dir]))
+
+ # Copy with_files inside the tmp directory, which will be the docker build
+ # context.
+ for f in args.with_files:
+ shutil.copy(f, temp_dir)
+ lines.append('COPY %s %s/' % (os.path.basename(f), args.with_file_dest))
+
+ # Create a Dockerfile.
+ with open(os.path.join(temp_dir, 'Dockerfile'), 'w') as f:
+ f.write('\n'.join(lines))
+
+ build_cmd = ['docker', 'build', '--rm', '--tag', new_tag, temp_dir]
+ subprocess.check_output(build_cmd)
+
+ if not args.keep:
+ atexit.register(lambda: subprocess.call(['docker', 'rmi', new_tag]))
+
+ # Upload to GCR.
+ if args.gcr_path:
+ subprocess.call(['gcloud', 'docker', '--', 'push', new_tag])
+
+ return True
+
+
+for image in args.images:
+ upload_to_gcr(image)
diff --git a/tools/internal_ci/linux/grpc_master.cfg b/tools/internal_ci/linux/grpc_master.cfg
index 7536a91a67..6c94c3b4d8 100644
--- a/tools/internal_ci/linux/grpc_master.cfg
+++ b/tools/internal_ci/linux/grpc_master.cfg
@@ -34,6 +34,6 @@ build_file: "grpc/tools/internal_ci/linux/grpc_master.sh"
timeout_mins: 240
action {
define_artifacts {
- regex: "**/sponge_log.xml"
+ regex: "**/*sponge_log.xml"
}
}
diff --git a/tools/internal_ci/linux/grpc_master.sh b/tools/internal_ci/linux/grpc_master.sh
index d01d6375e9..9ecf123959 100755
--- a/tools/internal_ci/linux/grpc_master.sh
+++ b/tools/internal_ci/linux/grpc_master.sh
@@ -45,6 +45,8 @@ ulimit -n 2000
git submodule update --init
+# download docker images from dockerhub
+export DOCKERHUB_ORGANIZATION=grpctesting
tools/run_tests/run_tests.py -l c -t -x sponge_log.xml || FAILED="true"
# kill port_server.py to prevent the build from hanging
diff --git a/tools/internal_ci/linux/grpc_master_sanitizers.cfg b/tools/internal_ci/linux/grpc_master_sanitizers.cfg
new file mode 100644
index 0000000000..a2a9407128
--- /dev/null
+++ b/tools/internal_ci/linux/grpc_master_sanitizers.cfg
@@ -0,0 +1,39 @@
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Config file for the internal CI (in protobuf text format)
+
+# Location of the continuous shell script in repository.
+build_file: "grpc/tools/internal_ci/linux/grpc_master_sanitizers.sh"
+timeout_mins: 1440
+action {
+ define_artifacts {
+ regex: "**/*sponge_log.xml"
+ }
+}
diff --git a/tools/dockerfile/bazel/Dockerfile b/tools/internal_ci/linux/grpc_master_sanitizers.sh
index 2a80a4d4d5..d22387fb20 100644..100755
--- a/tools/dockerfile/bazel/Dockerfile
+++ b/tools/internal_ci/linux/grpc_master_sanitizers.sh
@@ -1,4 +1,5 @@
-# Copyright 2015, Google Inc.
+#!/bin/bash
+# Copyright 2017, Google Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
@@ -27,26 +28,13 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-FROM ubuntu:wily
-RUN apt-get update
-RUN apt-get -y install software-properties-common python-software-properties
-RUN add-apt-repository ppa:webupd8team/java
-RUN apt-get update
-RUN apt-get -y install \
- vim \
- wget \
- openjdk-8-jdk \
- pkg-config \
- zip \
- g++ \
- zlib1g-dev \
- unzip \
- git
+set -ex
-RUN git clone https://github.com/bazelbuild/bazel.git /bazel
-RUN cd /bazel && ./compile.sh
+# change to grpc repo root
+cd $(dirname $0)/../../..
-RUN ln -s /bazel/output/bazel /bin/
+git submodule update --init
-# ensure the installation has been extracted
-RUN bazel
+# download docker images from dockerhub
+export DOCKERHUB_ORGANIZATION=grpctesting
+tools/run_tests/run_tests_matrix.py -f sanitizers linux
diff --git a/tools/internal_ci/linux/grpc_portability.cfg b/tools/internal_ci/linux/grpc_portability.cfg
new file mode 100644
index 0000000000..5cc49f1046
--- /dev/null
+++ b/tools/internal_ci/linux/grpc_portability.cfg
@@ -0,0 +1,39 @@
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Config file for the internal CI (in protobuf text format)
+
+# Location of the continuous shell script in repository.
+build_file: "grpc/tools/internal_ci/linux/grpc_portability.sh"
+timeout_mins: 720
+action {
+ define_artifacts {
+ regex: "**/*sponge_log.xml"
+ }
+}
diff --git a/tools/internal_ci/linux/grpc_portability.sh b/tools/internal_ci/linux/grpc_portability.sh
new file mode 100755
index 0000000000..58d3c58e70
--- /dev/null
+++ b/tools/internal_ci/linux/grpc_portability.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set -ex
+
+# change to grpc repo root
+cd $(dirname $0)/../../..
+
+git submodule update --init
+
+# download docker images from dockerhub
+export DOCKERHUB_ORGANIZATION=grpctesting
+tools/run_tests/run_tests_matrix.py -f portability linux
diff --git a/tools/internal_ci/linux/grpc_portability_build_only.cfg b/tools/internal_ci/linux/grpc_portability_build_only.cfg
index ce5be5abe9..4d3dda4082 100644
--- a/tools/internal_ci/linux/grpc_portability_build_only.cfg
+++ b/tools/internal_ci/linux/grpc_portability_build_only.cfg
@@ -34,6 +34,6 @@ build_file: "grpc/tools/internal_ci/linux/grpc_portability_build_only.sh"
timeout_mins: 180
action {
define_artifacts {
- regex: "**report**.xml"
+ regex: "**/*sponge_log.xml"
}
}
diff --git a/tools/internal_ci/linux/grpc_portability_build_only.sh b/tools/internal_ci/linux/grpc_portability_build_only.sh
index ebdc0e82d7..80b5c4cb96 100644..100755
--- a/tools/internal_ci/linux/grpc_portability_build_only.sh
+++ b/tools/internal_ci/linux/grpc_portability_build_only.sh
@@ -37,5 +37,4 @@ git submodule update --init
# download docker images from dockerhub
export DOCKERHUB_ORGANIZATION=grpctesting
-
-tools/jenkins/run_jenkins_matrix.sh -f portability linux --build_only
+tools/run_tests/run_tests_matrix.py -f portability linux --build_only
diff --git a/tools/internal_ci/linux/grpc_pull_request_sanity.cfg b/tools/internal_ci/linux/grpc_pull_request_sanity.cfg
index 511f2d6b35..1abf6ac600 100644
--- a/tools/internal_ci/linux/grpc_pull_request_sanity.cfg
+++ b/tools/internal_ci/linux/grpc_pull_request_sanity.cfg
@@ -34,6 +34,6 @@ build_file: "grpc/tools/internal_ci/linux/grpc_sanity.sh"
timeout_mins: 30
action {
define_artifacts {
- regex: "**/sponge_log.xml"
+ regex: "**/*sponge_log.xml"
}
}
diff --git a/tools/internal_ci/windows/grpc_master.cfg b/tools/internal_ci/windows/grpc_master.cfg
index f90af11308..21a9d6a985 100644
--- a/tools/internal_ci/windows/grpc_master.cfg
+++ b/tools/internal_ci/windows/grpc_master.cfg
@@ -34,6 +34,6 @@ build_file: "grpc/tools/internal_ci/windows/grpc_master.bat"
timeout_mins: 360
action {
define_artifacts {
- regex: "**sponge_log.xml"
+ regex: "**/*sponge_log.xml"
}
}
diff --git a/tools/internal_ci/windows/grpc_portability_master.bat b/tools/internal_ci/windows/grpc_portability_master.bat
new file mode 100644
index 0000000000..b98c70146c
--- /dev/null
+++ b/tools/internal_ci/windows/grpc_portability_master.bat
@@ -0,0 +1,43 @@
+@rem Copyright 2017, Google Inc.
+@rem All rights reserved.
+@rem
+@rem Redistribution and use in source and binary forms, with or without
+@rem modification, are permitted provided that the following conditions are
+@rem met:
+@rem
+@rem * Redistributions of source code must retain the above copyright
+@rem notice, this list of conditions and the following disclaimer.
+@rem * Redistributions in binary form must reproduce the above
+@rem copyright notice, this list of conditions and the following disclaimer
+@rem in the documentation and/or other materials provided with the
+@rem distribution.
+@rem * Neither the name of Google Inc. nor the names of its
+@rem contributors may be used to endorse or promote products derived from
+@rem this software without specific prior written permission.
+@rem
+@rem THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+@rem "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+@rem LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+@rem A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+@rem OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+@rem SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+@rem LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+@rem DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+@rem THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+@rem (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+@rem OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+@rem make sure msys binaries are preferred over cygwin binaries
+@rem set path to python 2.7
+set PATH=C:\tools\msys64\usr\bin;C:\Python27;%PATH%
+
+@rem enter repo root
+cd /d %~dp0\..\..\..
+
+git submodule update --init
+
+python tools/run_tests/run_tests_matrix.py -f portability windows -j 1 --inner_jobs 8 || goto :error
+goto :EOF
+
+:error
+exit /b %errorlevel%
diff --git a/tools/internal_ci/windows/grpc_portability_master.cfg b/tools/internal_ci/windows/grpc_portability_master.cfg
new file mode 100644
index 0000000000..10d8e98591
--- /dev/null
+++ b/tools/internal_ci/windows/grpc_portability_master.cfg
@@ -0,0 +1,39 @@
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Config file for the internal CI (in protobuf text format)
+
+# Location of the continuous shell script in repository.
+build_file: "grpc/tools/internal_ci/windows/grpc_portability_master.bat"
+timeout_mins: 360
+action {
+ define_artifacts {
+ regex: "**/*sponge_log.xml"
+ }
+}
diff --git a/tools/jenkins/run_full_performance_released.sh b/tools/jenkins/run_full_performance_released.sh
new file mode 100755
index 0000000000..ae2289e32c
--- /dev/null
+++ b/tools/jenkins/run_full_performance_released.sh
@@ -0,0 +1,73 @@
+#!/usr/bin/env bash
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# A frozen version of run_full_performance.sh that runs full performance test
+# suite for the latest released stable version of gRPC.
+set -ex
+
+# Enter the gRPC repo root
+cd $(dirname $0)/../..
+
+# run 8core client vs 8core server
+tools/run_tests/run_performance_tests.py \
+ -l c++ csharp node ruby java python go node_express \
+ --netperf \
+ --category scalable \
+ --bq_result_table performance_released.performance_experiment \
+ --remote_worker_host grpc-performance-server-8core grpc-performance-client-8core grpc-performance-client2-8core \
+ --xml_report report_8core.xml \
+ || EXIT_CODE=1
+
+# prevent pushing leftover build files to remote hosts in the next step.
+git clean -fdxq --exclude='report*.xml'
+
+# scalability with 32cores (and upload to a different BQ table)
+tools/run_tests/run_performance_tests.py \
+ -l c++ java csharp go \
+ --netperf \
+ --category scalable \
+ --bq_result_table performance_released.performance_experiment_32core \
+ --remote_worker_host grpc-performance-server-32core grpc-performance-client-32core grpc-performance-client2-32core \
+ --xml_report report_32core.xml \
+ || EXIT_CODE=1
+
+# prevent pushing leftover build files to remote hosts in the next step.
+git clean -fdxq --exclude='report*.xml'
+
+# selected scenarios on Windows
+tools/run_tests/run_performance_tests.py \
+ -l csharp \
+ --category scalable \
+ --bq_result_table performance_released.performance_experiment_windows \
+ --remote_worker_host grpc-performance-windows1 grpc-performance-windows2 \
+ --xml_report report_windows.xml \
+ || EXIT_CODE=1
+
+exit $EXIT_CODE
diff --git a/tools/profiling/latency_profile/run_latency_profile.sh b/tools/profiling/latency_profile/run_latency_profile.sh
index e9baee0957..41423fc3c1 100755
--- a/tools/profiling/latency_profile/run_latency_profile.sh
+++ b/tools/profiling/latency_profile/run_latency_profile.sh
@@ -44,4 +44,9 @@ else
PYTHON=python2.7
fi
+make CONFIG=opt memory_profile_test memory_profile_client memory_profile_server
+bins/opt/memory_profile_test
+bq load microbenchmarks.memory memory_usage.csv
+
$PYTHON tools/run_tests/run_microbenchmark.py --collect summary perf latency --bigquery_upload
+
diff --git a/tools/profiling/microbenchmarks/bm2bq.py b/tools/profiling/microbenchmarks/bm2bq.py
index 76ed0fef0d..ffb11f57d8 100755
--- a/tools/profiling/microbenchmarks/bm2bq.py
+++ b/tools/profiling/microbenchmarks/bm2bq.py
@@ -36,7 +36,7 @@
import sys
import json
import csv
-import os
+import bm_json
columns = [
('jenkins_build', 'integer'),
@@ -73,6 +73,14 @@ columns = [
('framing_bytes_per_iteration', 'float'),
]
+SANITIZE = {
+ 'integer': int,
+ 'float': float,
+ 'boolean': bool,
+ 'string': str,
+ 'timestamp': str,
+}
+
if sys.argv[1] == '--schema':
print ',\n'.join('%s:%s' % (k, t.upper()) for k, t in columns)
sys.exit(0)
@@ -88,143 +96,11 @@ else:
writer = csv.DictWriter(sys.stdout, [c for c,t in columns])
-bm_specs = {
- 'BM_UnaryPingPong': {
- 'tpl': ['fixture', 'client_mutator', 'server_mutator'],
- 'dyn': ['request_size', 'response_size'],
- },
- 'BM_PumpStreamClientToServer': {
- 'tpl': ['fixture'],
- 'dyn': ['request_size'],
- },
- 'BM_PumpStreamServerToClient': {
- 'tpl': ['fixture'],
- 'dyn': ['request_size'],
- },
- 'BM_StreamingPingPong': {
- 'tpl': ['fixture', 'client_mutator', 'server_mutator'],
- 'dyn': ['request_size', 'request_count'],
- },
- 'BM_StreamingPingPongMsgs': {
- 'tpl': ['fixture', 'client_mutator', 'server_mutator'],
- 'dyn': ['request_size'],
- },
- 'BM_PumpStreamServerToClient_Trickle': {
- 'tpl': [],
- 'dyn': ['request_size', 'bandwidth_kilobits'],
- },
- 'BM_ErrorStringOnNewError': {
- 'tpl': ['fixture'],
- 'dyn': [],
- },
- 'BM_ErrorStringRepeatedly': {
- 'tpl': ['fixture'],
- 'dyn': [],
- },
- 'BM_ErrorGetStatus': {
- 'tpl': ['fixture'],
- 'dyn': [],
- },
- 'BM_ErrorGetStatusCode': {
- 'tpl': ['fixture'],
- 'dyn': [],
- },
- 'BM_ErrorHttpError': {
- 'tpl': ['fixture'],
- 'dyn': [],
- },
- 'BM_HasClearGrpcStatus': {
- 'tpl': ['fixture'],
- 'dyn': [],
- },
- 'BM_IsolatedFilter' : {
- 'tpl': ['fixture', 'client_mutator'],
- 'dyn': [],
- },
- 'BM_HpackEncoderEncodeHeader' : {
- 'tpl': ['fixture'],
- 'dyn': ['end_of_stream', 'request_size'],
- },
- 'BM_HpackParserParseHeader' : {
- 'tpl': ['fixture'],
- 'dyn': [],
- },
-}
-
-def numericalize(s):
- if not s: return ''
- if s[-1] == 'k':
- return int(s[:-1]) * 1024
- if s[-1] == 'M':
- return int(s[:-1]) * 1024 * 1024
- if 0 <= (ord(s[-1]) - ord('0')) <= 9:
- return int(s)
- assert 'not a number: %s' % s
-
-def parse_name(name):
- if '<' not in name and '/' not in name and name not in bm_specs:
- return {'name': name}
- rest = name
- out = {}
- tpl_args = []
- dyn_args = []
- if '<' in rest:
- tpl_bit = rest[rest.find('<') + 1 : rest.rfind('>')]
- arg = ''
- nesting = 0
- for c in tpl_bit:
- if c == '<':
- nesting += 1
- arg += c
- elif c == '>':
- nesting -= 1
- arg += c
- elif c == ',':
- if nesting == 0:
- tpl_args.append(arg.strip())
- arg = ''
- else:
- arg += c
- else:
- arg += c
- tpl_args.append(arg.strip())
- rest = rest[:rest.find('<')] + rest[rest.rfind('>') + 1:]
- if '/' in rest:
- s = rest.split('/')
- rest = s[0]
- dyn_args = s[1:]
- name = rest
- assert name in bm_specs, 'bm_specs needs to be expanded for %s' % name
- assert len(dyn_args) == len(bm_specs[name]['dyn'])
- assert len(tpl_args) == len(bm_specs[name]['tpl'])
- out['name'] = name
- out.update(dict((k, numericalize(v)) for k, v in zip(bm_specs[name]['dyn'], dyn_args)))
- out.update(dict(zip(bm_specs[name]['tpl'], tpl_args)))
- return out
+for row in bm_json.expand_json(js, js2):
+ sane_row = {}
+ for name, sql_type in columns:
+ if name in row:
+ if row[name] == '': continue
+ sane_row[name] = SANITIZE[sql_type](row[name])
+ writer.writerow(sane_row)
-for bm in js['benchmarks']:
- context = js['context']
- if 'label' in bm:
- labels_list = [s.split(':') for s in bm['label'].strip().split(' ') if len(s) and s[0] != '#']
- for el in labels_list:
- el[0] = el[0].replace('/iter', '_per_iteration')
- labels = dict(labels_list)
- else:
- labels = {}
- row = {
- 'jenkins_build': os.environ.get('BUILD_NUMBER', ''),
- 'jenkins_job': os.environ.get('JOB_NAME', ''),
- }
- row.update(context)
- row.update(bm)
- row.update(parse_name(row['name']))
- row.update(labels)
- if 'label' in row:
- del row['label']
- if js2:
- for bm2 in js2['benchmarks']:
- if bm['name'] == bm2['name']:
- row['cpu_time'] = bm2['cpu_time']
- row['real_time'] = bm2['real_time']
- row['iterations'] = bm2['iterations']
- writer.writerow(row)
diff --git a/tools/profiling/microbenchmarks/bm_diff.py b/tools/profiling/microbenchmarks/bm_diff.py
new file mode 100755
index 0000000000..14ea24f65e
--- /dev/null
+++ b/tools/profiling/microbenchmarks/bm_diff.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python2.7
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import sys
+import json
+import bm_json
+import tabulate
+import argparse
+
+def changed_ratio(n, o):
+ if float(o) <= .0001: o = 0
+ if float(n) <= .0001: n = 0
+ if o == 0 and n == 0: return 0
+ if o == 0: return 100
+ return (float(n)-float(o))/float(o)
+
+def min_change(pct):
+ return lambda n, o: abs(changed_ratio(n,o)) > pct/100.0
+
+_INTERESTING = {
+ 'cpu_time': min_change(10),
+ 'real_time': min_change(10),
+ 'locks_per_iteration': min_change(5),
+ 'allocs_per_iteration': min_change(5),
+ 'writes_per_iteration': min_change(5),
+ 'atm_cas_per_iteration': min_change(1),
+ 'atm_add_per_iteration': min_change(5),
+}
+
+argp = argparse.ArgumentParser(description='Perform diff on microbenchmarks')
+argp.add_argument('-t', '--track',
+ choices=sorted(_INTERESTING.keys()),
+ nargs='+',
+ default=sorted(_INTERESTING.keys()),
+ help='Which metrics to track')
+argp.add_argument('files', metavar='bm_file.json', type=str, nargs=4,
+ help='files to diff. ')
+args = argp.parse_args()
+
+with open(args.files[0]) as f:
+ js_new_ctr = json.loads(f.read())
+with open(args.files[1]) as f:
+ js_new_opt = json.loads(f.read())
+with open(args.files[2]) as f:
+ js_old_ctr = json.loads(f.read())
+with open(args.files[3]) as f:
+ js_old_opt = json.loads(f.read())
+
+new = {}
+old = {}
+
+for row in bm_json.expand_json(js_new_ctr, js_new_opt):
+ new[row['cpp_name']] = row
+for row in bm_json.expand_json(js_old_ctr, js_old_opt):
+ old[row['cpp_name']] = row
+
+changed = []
+for fld in args.track:
+ chk = _INTERESTING[fld]
+ for bm in new.keys():
+ if bm not in old: continue
+ n = new[bm]
+ o = old[bm]
+ if fld not in n or fld not in o: continue
+ if chk(n[fld], o[fld]):
+ changed.append((fld, chk))
+ break
+
+headers = ['Benchmark'] + [c[0] for c in changed] + ['Details']
+rows = []
+for bm in sorted(new.keys()):
+ if bm not in old: continue
+ row = [bm]
+ any_changed = False
+ n = new[bm]
+ o = old[bm]
+ details = ''
+ for fld in args.track:
+ chk = _INTERESTING[fld]
+ if fld not in n or fld not in o: continue
+ if chk(n[fld], o[fld]):
+ row.append(changed_ratio(n[fld], o[fld]))
+ if details: details += ', '
+ details += '%s:%r-->%r' % (fld, float(o[fld]), float(n[fld]))
+ any_changed = True
+ else:
+ row.append('')
+ if any_changed:
+ row.append(details)
+ rows.append(row)
+print tabulate.tabulate(rows, headers=headers, floatfmt='+.2f')
diff --git a/tools/profiling/microbenchmarks/bm_json.py b/tools/profiling/microbenchmarks/bm_json.py
new file mode 100644
index 0000000000..4695f829f4
--- /dev/null
+++ b/tools/profiling/microbenchmarks/bm_json.py
@@ -0,0 +1,184 @@
+# Copyright 2017, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import os
+
+_BM_SPECS = {
+ 'BM_UnaryPingPong': {
+ 'tpl': ['fixture', 'client_mutator', 'server_mutator'],
+ 'dyn': ['request_size', 'response_size'],
+ },
+ 'BM_PumpStreamClientToServer': {
+ 'tpl': ['fixture'],
+ 'dyn': ['request_size'],
+ },
+ 'BM_PumpStreamServerToClient': {
+ 'tpl': ['fixture'],
+ 'dyn': ['request_size'],
+ },
+ 'BM_StreamingPingPong': {
+ 'tpl': ['fixture', 'client_mutator', 'server_mutator'],
+ 'dyn': ['request_size', 'request_count'],
+ },
+ 'BM_StreamingPingPongMsgs': {
+ 'tpl': ['fixture', 'client_mutator', 'server_mutator'],
+ 'dyn': ['request_size'],
+ },
+ 'BM_PumpStreamServerToClient_Trickle': {
+ 'tpl': [],
+ 'dyn': ['request_size', 'bandwidth_kilobits'],
+ },
+ 'BM_ErrorStringOnNewError': {
+ 'tpl': ['fixture'],
+ 'dyn': [],
+ },
+ 'BM_ErrorStringRepeatedly': {
+ 'tpl': ['fixture'],
+ 'dyn': [],
+ },
+ 'BM_ErrorGetStatus': {
+ 'tpl': ['fixture'],
+ 'dyn': [],
+ },
+ 'BM_ErrorGetStatusCode': {
+ 'tpl': ['fixture'],
+ 'dyn': [],
+ },
+ 'BM_ErrorHttpError': {
+ 'tpl': ['fixture'],
+ 'dyn': [],
+ },
+ 'BM_HasClearGrpcStatus': {
+ 'tpl': ['fixture'],
+ 'dyn': [],
+ },
+ 'BM_IsolatedFilter': {
+ 'tpl': ['fixture', 'client_mutator'],
+ 'dyn': [],
+ },
+ 'BM_HpackEncoderEncodeHeader': {
+ 'tpl': ['fixture'],
+ 'dyn': ['end_of_stream', 'request_size'],
+ },
+ 'BM_HpackParserParseHeader': {
+ 'tpl': ['fixture'],
+ 'dyn': [],
+ },
+ 'BM_CallCreateDestroy': {
+ 'tpl': ['fixture'],
+ 'dyn': [],
+ },
+ 'BM_Zalloc': {
+ 'tpl': [],
+ 'dyn': ['request_size'],
+ },
+ 'BM_PollEmptyPollset_SpeedOfLight': {
+ 'tpl': [],
+ 'dyn': ['request_size', 'request_count'],
+ }
+}
+
+def numericalize(s):
+ if not s: return ''
+ if s[-1] == 'k':
+ return float(s[:-1]) * 1024
+ if s[-1] == 'M':
+ return float(s[:-1]) * 1024 * 1024
+ if 0 <= (ord(s[-1]) - ord('0')) <= 9:
+ return float(s)
+ assert 'not a number: %s' % s
+
+def parse_name(name):
+ cpp_name = name
+ if '<' not in name and '/' not in name and name not in _BM_SPECS:
+ return {'name': name, 'cpp_name': name}
+ rest = name
+ out = {}
+ tpl_args = []
+ dyn_args = []
+ if '<' in rest:
+ tpl_bit = rest[rest.find('<') + 1 : rest.rfind('>')]
+ arg = ''
+ nesting = 0
+ for c in tpl_bit:
+ if c == '<':
+ nesting += 1
+ arg += c
+ elif c == '>':
+ nesting -= 1
+ arg += c
+ elif c == ',':
+ if nesting == 0:
+ tpl_args.append(arg.strip())
+ arg = ''
+ else:
+ arg += c
+ else:
+ arg += c
+ tpl_args.append(arg.strip())
+ rest = rest[:rest.find('<')] + rest[rest.rfind('>') + 1:]
+ if '/' in rest:
+ s = rest.split('/')
+ rest = s[0]
+ dyn_args = s[1:]
+ name = rest
+ assert name in _BM_SPECS, '_BM_SPECS needs to be expanded for %s' % name
+ assert len(dyn_args) == len(_BM_SPECS[name]['dyn'])
+ assert len(tpl_args) == len(_BM_SPECS[name]['tpl'])
+ out['name'] = name
+ out['cpp_name'] = cpp_name
+ out.update(dict((k, numericalize(v)) for k, v in zip(_BM_SPECS[name]['dyn'], dyn_args)))
+ out.update(dict(zip(_BM_SPECS[name]['tpl'], tpl_args)))
+ return out
+
+def expand_json(js, js2 = None):
+ for bm in js['benchmarks']:
+ context = js['context']
+ if 'label' in bm:
+ labels_list = [s.split(':') for s in bm['label'].strip().split(' ') if len(s) and s[0] != '#']
+ for el in labels_list:
+ el[0] = el[0].replace('/iter', '_per_iteration')
+ labels = dict(labels_list)
+ else:
+ labels = {}
+ row = {
+ 'jenkins_build': os.environ.get('BUILD_NUMBER', ''),
+ 'jenkins_job': os.environ.get('JOB_NAME', ''),
+ }
+ row.update(context)
+ row.update(bm)
+ row.update(parse_name(row['name']))
+ row.update(labels)
+ if js2:
+ for bm2 in js2['benchmarks']:
+ if bm['name'] == bm2['name']:
+ row['cpu_time'] = bm2['cpu_time']
+ row['real_time'] = bm2['real_time']
+ row['iterations'] = bm2['iterations']
+ yield row
diff --git a/tools/run_tests/artifacts/artifact_targets.py b/tools/run_tests/artifacts/artifact_targets.py
index e0658f4678..04702bacca 100644
--- a/tools/run_tests/artifacts/artifact_targets.py
+++ b/tools/run_tests/artifacts/artifact_targets.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
#
diff --git a/tools/run_tests/artifacts/distribtest_targets.py b/tools/run_tests/artifacts/distribtest_targets.py
index a7535b3852..90bbde83cf 100644
--- a/tools/run_tests/artifacts/distribtest_targets.py
+++ b/tools/run_tests/artifacts/distribtest_targets.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
#
diff --git a/tools/run_tests/artifacts/package_targets.py b/tools/run_tests/artifacts/package_targets.py
index d490f571c3..2547f2073c 100644
--- a/tools/run_tests/artifacts/package_targets.py
+++ b/tools/run_tests/artifacts/package_targets.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
#
diff --git a/tools/run_tests/generated/configs.json b/tools/run_tests/generated/configs.json
index 9173bd7c19..69e0f44774 100644
--- a/tools/run_tests/generated/configs.json
+++ b/tools/run_tests/generated/configs.json
@@ -58,7 +58,7 @@
{
"config": "ubsan",
"environ": {
- "UBSAN_OPTIONS": "halt_on_error=1:print_stacktrace=1"
+ "UBSAN_OPTIONS": "halt_on_error=1:print_stacktrace=1:suppressions=tools/ubsan_suppressions.txt"
}
},
{
diff --git a/tools/run_tests/generated/sources_and_headers.json b/tools/run_tests/generated/sources_and_headers.json
index ba48994c8e..9160b0d9d6 100644
--- a/tools/run_tests/generated/sources_and_headers.json
+++ b/tools/run_tests/generated/sources_and_headers.json
@@ -87,6 +87,21 @@
{
"deps": [
"gpr",
+ "gpr_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c",
+ "name": "arena_test",
+ "src": [
+ "test/core/support/arena_test.c"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
"gpr_test_util",
"grpc",
"grpc_test_util",
@@ -431,6 +446,23 @@
"headers": [],
"is_filegroup": false,
"language": "c",
+ "name": "error_test",
+ "src": [
+ "test/core/iomgr/error_test.c"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c",
"name": "ev_epoll_linux_test",
"src": [
"test/core/iomgr/ev_epoll_linux_test.c"
@@ -1667,6 +1699,23 @@
"headers": [],
"is_filegroup": false,
"language": "c",
+ "name": "parse_address_test",
+ "src": [
+ "test/core/client_channel/parse_address_test.c"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c",
"name": "percent_decode_fuzzer",
"src": [
"test/core/slice/percent_decode_fuzzer.c"
@@ -2042,6 +2091,23 @@
"headers": [],
"is_filegroup": false,
"language": "c",
+ "name": "stream_owned_slice_test",
+ "src": [
+ "test/core/transport/stream_owned_slice_test.c"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c",
"name": "tcp_client_posix_test",
"src": [
"test/core/iomgr/tcp_client_posix_test.c"
@@ -2386,6 +2452,28 @@
"grpc",
"grpc++",
"grpc++_test_util",
+ "grpc_benchmark",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "bm_arena",
+ "src": [
+ "test/cpp/microbenchmarks/bm_arena.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "benchmark",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc++",
+ "grpc++_test_util",
+ "grpc_benchmark",
"grpc_test_util"
],
"headers": [],
@@ -2406,6 +2494,7 @@
"grpc",
"grpc++",
"grpc++_test_util",
+ "grpc_benchmark",
"grpc_test_util"
],
"headers": [],
@@ -2426,6 +2515,7 @@
"grpc",
"grpc++",
"grpc++_test_util",
+ "grpc_benchmark",
"grpc_test_util"
],
"headers": [],
@@ -2446,6 +2536,7 @@
"grpc",
"grpc++",
"grpc++_test_util",
+ "grpc_benchmark",
"grpc_test_util"
],
"headers": [],
@@ -2466,6 +2557,7 @@
"grpc",
"grpc++",
"grpc++_test_util",
+ "grpc_benchmark",
"grpc_test_util"
],
"headers": [],
@@ -2486,14 +2578,36 @@
"grpc",
"grpc++",
"grpc++_test_util",
+ "grpc_benchmark",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "bm_fullstack_streaming_ping_pong",
+ "src": [
+ "test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "benchmark",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc++",
+ "grpc++_test_util",
+ "grpc_benchmark",
"grpc_test_util"
],
"headers": [],
"is_filegroup": false,
"language": "c++",
- "name": "bm_fullstack",
+ "name": "bm_fullstack_streaming_pump",
"src": [
- "test/cpp/microbenchmarks/bm_fullstack.cc"
+ "test/cpp/microbenchmarks/bm_fullstack_streaming_pump.cc"
],
"third_party": false,
"type": "target"
@@ -2504,6 +2618,51 @@
"gpr",
"gpr_test_util",
"grpc",
+ "grpc++",
+ "grpc++_test_util",
+ "grpc_benchmark",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "bm_fullstack_trickle",
+ "src": [
+ "test/cpp/microbenchmarks/bm_fullstack_trickle.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "benchmark",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc++",
+ "grpc++_test_util",
+ "grpc_benchmark",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "bm_fullstack_unary_ping_pong",
+ "src": [
+ "test/cpp/microbenchmarks/bm_fullstack_unary_ping_pong.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "benchmark",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc++",
+ "grpc++_test_util",
+ "grpc_benchmark",
"grpc_test_util"
],
"headers": [],
@@ -2518,6 +2677,27 @@
},
{
"deps": [
+ "benchmark",
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc++",
+ "grpc++_test_util",
+ "grpc_benchmark",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "bm_pollset",
+ "src": [
+ "test/cpp/microbenchmarks/bm_pollset.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
"gpr",
"grpc",
"grpc++"
@@ -3461,6 +3641,30 @@
"gpr_test_util",
"grpc",
"grpc++",
+ "grpc++_test_util",
+ "grpc_test_util"
+ ],
+ "headers": [
+ "src/proto/grpc/testing/echo.grpc.pb.h",
+ "src/proto/grpc/testing/echo.pb.h",
+ "src/proto/grpc/testing/echo_messages.grpc.pb.h",
+ "src/proto/grpc/testing/echo_messages.pb.h"
+ ],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "server_builder_test",
+ "src": [
+ "test/cpp/server/server_builder_test.cc"
+ ],
+ "third_party": false,
+ "type": "target"
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc++",
"grpc++_test",
"grpc_test_util"
],
@@ -5709,6 +5913,30 @@
},
{
"deps": [
+ "benchmark",
+ "grpc",
+ "grpc++",
+ "grpc_test_util"
+ ],
+ "headers": [
+ "test/cpp/microbenchmarks/fullstack_context_mutators.h",
+ "test/cpp/microbenchmarks/fullstack_fixtures.h",
+ "test/cpp/microbenchmarks/helpers.h"
+ ],
+ "is_filegroup": false,
+ "language": "c++",
+ "name": "grpc_benchmark",
+ "src": [
+ "test/cpp/microbenchmarks/fullstack_context_mutators.h",
+ "test/cpp/microbenchmarks/fullstack_fixtures.h",
+ "test/cpp/microbenchmarks/helpers.cc",
+ "test/cpp/microbenchmarks/helpers.h"
+ ],
+ "third_party": false,
+ "type": "lib"
+ },
+ {
+ "deps": [
"grpc++",
"grpc++_config_proto",
"grpc++_proto_reflection_desc_db",
@@ -7072,6 +7300,7 @@
"include/grpc/support/tls_pthread.h",
"include/grpc/support/useful.h",
"src/core/lib/profiling/timers.h",
+ "src/core/lib/support/arena.h",
"src/core/lib/support/backoff.h",
"src/core/lib/support/block_annotate.h",
"src/core/lib/support/env.h",
@@ -7119,6 +7348,8 @@
"src/core/lib/profiling/stap_timers.c",
"src/core/lib/profiling/timers.h",
"src/core/lib/support/alloc.c",
+ "src/core/lib/support/arena.c",
+ "src/core/lib/support/arena.h",
"src/core/lib/support/avl.c",
"src/core/lib/support/backoff.c",
"src/core/lib/support/backoff.h",
@@ -7285,6 +7516,7 @@
"src/core/lib/iomgr/tcp_client_posix.h",
"src/core/lib/iomgr/tcp_posix.h",
"src/core/lib/iomgr/tcp_server.h",
+ "src/core/lib/iomgr/tcp_server_utils_posix.h",
"src/core/lib/iomgr/tcp_uv.h",
"src/core/lib/iomgr/tcp_windows.h",
"src/core/lib/iomgr/time_averaged_stats.h",
@@ -7465,6 +7697,10 @@
"src/core/lib/iomgr/tcp_posix.h",
"src/core/lib/iomgr/tcp_server.h",
"src/core/lib/iomgr/tcp_server_posix.c",
+ "src/core/lib/iomgr/tcp_server_utils_posix.h",
+ "src/core/lib/iomgr/tcp_server_utils_posix_common.c",
+ "src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c",
+ "src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c",
"src/core/lib/iomgr/tcp_server_uv.c",
"src/core/lib/iomgr/tcp_server_windows.c",
"src/core/lib/iomgr/tcp_uv.c",
@@ -7912,7 +8148,7 @@
"headers": [
"test/core/end2end/cq_verifier.h",
"test/core/end2end/fake_resolver.h",
- "test/core/end2end/fixtures/http_proxy.h",
+ "test/core/end2end/fixtures/http_proxy_fixture.h",
"test/core/end2end/fixtures/proxy.h",
"test/core/iomgr/endpoint_tests.h",
"test/core/util/debugger_macros.h",
@@ -7934,8 +8170,8 @@
"test/core/end2end/cq_verifier.h",
"test/core/end2end/fake_resolver.c",
"test/core/end2end/fake_resolver.h",
- "test/core/end2end/fixtures/http_proxy.c",
- "test/core/end2end/fixtures/http_proxy.h",
+ "test/core/end2end/fixtures/http_proxy_fixture.c",
+ "test/core/end2end/fixtures/http_proxy_fixture.h",
"test/core/end2end/fixtures/proxy.c",
"test/core/end2end/fixtures/proxy.h",
"test/core/iomgr/endpoint_tests.c",
@@ -8251,6 +8487,7 @@
"include/grpc++/grpc++.h",
"include/grpc++/health_check_service_interface.h",
"include/grpc++/impl/call.h",
+ "include/grpc++/impl/channel_argument_option.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/codegen/core_codegen.h",
"include/grpc++/impl/grpc_library.h",
@@ -8307,6 +8544,7 @@
"include/grpc++/grpc++.h",
"include/grpc++/health_check_service_interface.h",
"include/grpc++/impl/call.h",
+ "include/grpc++/impl/channel_argument_option.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/codegen/core_codegen.h",
"include/grpc++/impl/grpc_library.h",
@@ -8356,6 +8594,7 @@
"src/cpp/common/rpc_method.cc",
"src/cpp/common/version_cc.cc",
"src/cpp/server/async_generic_service.cc",
+ "src/cpp/server/channel_argument_option.cc",
"src/cpp/server/create_default_thread_pool.cc",
"src/cpp/server/dynamic_thread_pool.cc",
"src/cpp/server/dynamic_thread_pool.h",
diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json
index ab7938d0ca..1af05162b4 100644
--- a/tools/run_tests/generated/tests.json
+++ b/tools/run_tests/generated/tests.json
@@ -99,6 +99,28 @@
],
"cpu_cost": 1.0,
"exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": false,
+ "language": "c",
+ "name": "arena_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "args": [],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
"exclude_iomgrs": [
"uv"
],
@@ -518,6 +540,28 @@
{
"args": [],
"ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "cpu_cost": 30,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": false,
+ "language": "c",
+ "name": "error_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "args": [],
+ "ci_platforms": [
"linux"
],
"cpu_cost": 1.0,
@@ -1733,6 +1777,28 @@
"flaky": false,
"gtest": false,
"language": "c",
+ "name": "parse_address_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "args": [],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": false,
+ "language": "c",
"name": "percent_encoding_test",
"platforms": [
"linux",
@@ -1768,7 +1834,9 @@
],
"cpu_cost": 1.0,
"exclude_configs": [],
- "exclude_iomgrs": [],
+ "exclude_iomgrs": [
+ "uv"
+ ],
"flaky": false,
"gtest": false,
"language": "c",
@@ -2120,6 +2188,28 @@
"ci_platforms": [
"linux",
"mac",
+ "posix",
+ "windows"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": false,
+ "language": "c",
+ "name": "stream_owned_slice_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "args": [],
+ "ci_platforms": [
+ "linux",
+ "mac",
"posix"
],
"cpu_cost": 0.5,
@@ -2554,6 +2644,28 @@
"flaky": false,
"gtest": false,
"language": "c++",
+ "name": "bm_arena",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ]
+ },
+ {
+ "args": [
+ "--benchmark_min_time=0"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": false,
+ "language": "c++",
"name": "bm_call_create",
"platforms": [
"linux",
@@ -2668,7 +2780,88 @@
"flaky": false,
"gtest": false,
"language": "c++",
- "name": "bm_fullstack",
+ "name": "bm_fullstack_streaming_ping_pong",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "timeout_seconds": 1200
+ },
+ {
+ "args": [
+ "--benchmark_min_time=0"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "excluded_poll_engines": [
+ "poll",
+ "poll-cv"
+ ],
+ "flaky": false,
+ "gtest": false,
+ "language": "c++",
+ "name": "bm_fullstack_streaming_pump",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "timeout_seconds": 1200
+ },
+ {
+ "args": [
+ "--benchmark_min_time=0"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "excluded_poll_engines": [
+ "poll",
+ "poll-cv"
+ ],
+ "flaky": false,
+ "gtest": false,
+ "language": "c++",
+ "name": "bm_fullstack_trickle",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "timeout_seconds": 1200
+ },
+ {
+ "args": [
+ "--benchmark_min_time=0"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "excluded_poll_engines": [
+ "poll",
+ "poll-cv"
+ ],
+ "flaky": false,
+ "gtest": false,
+ "language": "c++",
+ "name": "bm_fullstack_unary_ping_pong",
"platforms": [
"linux",
"mac",
@@ -2699,6 +2892,28 @@
]
},
{
+ "args": [
+ "--benchmark_min_time=0"
+ ],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": false,
+ "language": "c++",
+ "name": "bm_pollset",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix"
+ ]
+ },
+ {
"args": [],
"ci_platforms": [
"linux",
@@ -3366,6 +3581,28 @@
"flaky": false,
"gtest": true,
"language": "c++",
+ "name": "server_builder_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "args": [],
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "cpu_cost": 1.0,
+ "exclude_configs": [],
+ "exclude_iomgrs": [],
+ "flaky": false,
+ "gtest": true,
+ "language": "c++",
"name": "server_context_test_spouse_test",
"platforms": [
"linux",
@@ -39470,31 +39707,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": 1024,
- "defaults": "boringssl",
- "exclude_configs": [
- "tsan",
- "asan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -39545,31 +39757,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": "capacity",
- "defaults": "boringssl",
- "exclude_configs": [
- "tsan",
- "asan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -39620,31 +39807,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": 1024,
- "defaults": "boringssl",
- "exclude_configs": [
- "tsan",
- "asan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -39695,31 +39857,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": "capacity",
- "defaults": "boringssl",
- "exclude_configs": [
- "tsan",
- "asan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -39899,31 +40036,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": 1024,
- "defaults": "boringssl",
- "exclude_configs": [
- "tsan",
- "asan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -39974,31 +40086,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": "capacity",
- "defaults": "boringssl",
- "exclude_configs": [
- "tsan",
- "asan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -40049,31 +40136,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": 1024,
- "defaults": "boringssl",
- "exclude_configs": [
- "tsan",
- "asan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -40124,31 +40186,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": "capacity",
- "defaults": "boringssl",
- "exclude_configs": [
- "tsan",
- "asan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -40405,42 +40442,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": 64,
- "defaults": "boringssl",
- "exclude_configs": [
- "asan-noleaks",
- "asan-trace-cmp",
- "basicprof",
- "counters",
- "dbg",
- "gcov",
- "helgrind",
- "memcheck",
- "msan",
- "mutrace",
- "opt",
- "stapprof",
- "ubsan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota_low_thread_count",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -40513,42 +40514,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": "capacity",
- "defaults": "boringssl",
- "exclude_configs": [
- "asan-noleaks",
- "asan-trace-cmp",
- "basicprof",
- "counters",
- "dbg",
- "gcov",
- "helgrind",
- "memcheck",
- "msan",
- "mutrace",
- "opt",
- "stapprof",
- "ubsan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota_low_thread_count",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -40621,42 +40586,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": 64,
- "defaults": "boringssl",
- "exclude_configs": [
- "asan-noleaks",
- "asan-trace-cmp",
- "basicprof",
- "counters",
- "dbg",
- "gcov",
- "helgrind",
- "memcheck",
- "msan",
- "mutrace",
- "opt",
- "stapprof",
- "ubsan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota_low_thread_count",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -40729,42 +40658,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": "capacity",
- "defaults": "boringssl",
- "exclude_configs": [
- "asan-noleaks",
- "asan-trace-cmp",
- "basicprof",
- "counters",
- "dbg",
- "gcov",
- "helgrind",
- "memcheck",
- "msan",
- "mutrace",
- "opt",
- "stapprof",
- "ubsan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota_low_thread_count",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -41021,42 +40914,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": 64,
- "defaults": "boringssl",
- "exclude_configs": [
- "asan-noleaks",
- "asan-trace-cmp",
- "basicprof",
- "counters",
- "dbg",
- "gcov",
- "helgrind",
- "memcheck",
- "msan",
- "mutrace",
- "opt",
- "stapprof",
- "ubsan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -41129,42 +40986,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": "capacity",
- "defaults": "boringssl",
- "exclude_configs": [
- "asan-noleaks",
- "asan-trace-cmp",
- "basicprof",
- "counters",
- "dbg",
- "gcov",
- "helgrind",
- "memcheck",
- "msan",
- "mutrace",
- "opt",
- "stapprof",
- "ubsan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -41237,42 +41058,6 @@
{
"args": [
"--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": 64,
- "defaults": "boringssl",
- "exclude_configs": [
- "asan-noleaks",
- "asan-trace-cmp",
- "basicprof",
- "counters",
- "dbg",
- "gcov",
- "helgrind",
- "memcheck",
- "msan",
- "mutrace",
- "opt",
- "stapprof",
- "ubsan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count",
- "timeout_seconds": 360
- },
- {
- "args": [
- "--scenarios_json",
"{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
],
"boringssl": true,
@@ -41344,42 +41129,6 @@
},
{
"args": [
- "--scenarios_json",
- "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}"
- ],
- "boringssl": true,
- "ci_platforms": [
- "linux"
- ],
- "cpu_cost": "capacity",
- "defaults": "boringssl",
- "exclude_configs": [
- "asan-noleaks",
- "asan-trace-cmp",
- "basicprof",
- "counters",
- "dbg",
- "gcov",
- "helgrind",
- "memcheck",
- "msan",
- "mutrace",
- "opt",
- "stapprof",
- "ubsan"
- ],
- "excluded_poll_engines": [],
- "flaky": false,
- "language": "c++",
- "name": "json_run_localhost",
- "platforms": [
- "linux"
- ],
- "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count",
- "timeout_seconds": 360
- },
- {
- "args": [
"test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin"
],
"ci_platforms": [
@@ -41396,6 +41145,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41418,6 +41168,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41440,6 +41191,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41462,6 +41214,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41484,6 +41237,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41506,6 +41260,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41528,6 +41283,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41550,6 +41306,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41572,6 +41329,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41594,6 +41352,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41616,6 +41375,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41638,6 +41398,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41660,6 +41421,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41682,6 +41444,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41704,6 +41467,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41726,6 +41490,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41748,6 +41513,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41770,6 +41536,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41792,6 +41559,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41814,6 +41582,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41836,6 +41605,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41858,6 +41628,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41880,6 +41651,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41902,6 +41674,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41924,6 +41697,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41946,6 +41720,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41968,6 +41743,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -41990,6 +41766,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42012,6 +41789,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42034,6 +41812,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42056,6 +41835,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42078,6 +41858,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42100,6 +41881,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42122,6 +41904,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42144,6 +41927,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42166,6 +41950,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42188,6 +41973,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42210,6 +41996,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42232,6 +42019,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42254,6 +42042,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42276,6 +42065,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42298,6 +42088,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42320,6 +42111,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42342,6 +42134,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42364,6 +42157,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42386,6 +42180,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42408,6 +42203,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42430,6 +42226,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42452,6 +42249,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42474,6 +42272,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42496,6 +42295,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42518,6 +42318,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42540,6 +42341,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42562,6 +42364,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42584,6 +42387,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42606,6 +42410,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42628,6 +42433,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42650,6 +42456,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42672,6 +42479,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42694,6 +42502,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42716,6 +42525,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42738,6 +42548,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42760,6 +42571,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42782,6 +42594,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42804,6 +42617,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42826,6 +42640,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42848,6 +42663,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42870,6 +42686,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42892,6 +42709,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42914,6 +42732,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42936,6 +42755,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42958,6 +42778,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -42980,6 +42801,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43002,6 +42824,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43024,6 +42847,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43046,6 +42870,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43068,6 +42893,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43090,6 +42916,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43112,6 +42939,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43134,6 +42962,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43156,6 +42985,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43178,6 +43008,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43200,6 +43031,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43222,6 +43054,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43244,6 +43077,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43266,6 +43100,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43288,6 +43123,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43310,6 +43146,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43332,6 +43169,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43354,6 +43192,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43376,6 +43215,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43398,6 +43238,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43420,6 +43261,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43442,6 +43284,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43464,6 +43307,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43486,6 +43330,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43508,6 +43353,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43530,6 +43376,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43552,6 +43399,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43574,6 +43422,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43596,6 +43445,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43618,6 +43468,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43640,6 +43491,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43662,6 +43514,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43684,6 +43537,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43706,6 +43560,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43728,6 +43583,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43750,6 +43606,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43772,6 +43629,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43794,6 +43652,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43816,6 +43675,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43838,6 +43698,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43860,6 +43721,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43882,6 +43744,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43904,6 +43767,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43926,6 +43790,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43948,6 +43813,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43970,6 +43836,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -43992,6 +43859,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44014,6 +43882,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44036,6 +43905,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44058,6 +43928,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44080,6 +43951,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44102,6 +43974,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44124,6 +43997,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44146,6 +44020,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44168,6 +44043,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44190,6 +44066,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44212,6 +44089,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44234,6 +44112,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44256,6 +44135,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44278,6 +44158,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44300,6 +44181,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44322,6 +44204,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44344,6 +44227,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44366,6 +44250,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44388,6 +44273,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44410,6 +44296,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44432,6 +44319,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44454,6 +44342,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44476,6 +44365,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44498,6 +44388,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44520,6 +44411,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44542,6 +44434,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44564,6 +44457,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44586,6 +44480,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44608,6 +44503,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44630,6 +44526,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44652,6 +44549,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44674,6 +44572,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44696,6 +44595,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44718,6 +44618,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44740,6 +44641,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44762,6 +44664,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44784,6 +44687,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44806,6 +44710,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44828,6 +44733,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44850,6 +44756,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44872,6 +44779,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44894,6 +44802,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44916,6 +44825,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44938,6 +44848,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44960,6 +44871,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -44982,6 +44894,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45004,6 +44917,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45026,6 +44940,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45048,6 +44963,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45070,6 +44986,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45092,6 +45009,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45114,6 +45032,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45136,6 +45055,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45158,6 +45078,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45180,6 +45101,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45202,6 +45124,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45224,6 +45147,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45246,6 +45170,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45268,6 +45193,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45290,6 +45216,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45312,6 +45239,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45334,6 +45262,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45356,6 +45285,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45378,6 +45308,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45400,6 +45331,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45422,6 +45354,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45444,6 +45377,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45466,6 +45400,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45488,6 +45423,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45510,6 +45446,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45532,6 +45469,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45554,6 +45492,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45576,6 +45515,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45598,6 +45538,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45620,6 +45561,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45642,6 +45584,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45664,6 +45607,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45686,6 +45630,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45708,6 +45653,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45730,6 +45676,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45752,6 +45699,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45774,6 +45722,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45796,6 +45745,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45818,6 +45768,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45840,6 +45791,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45862,6 +45814,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45884,6 +45837,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45906,6 +45860,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45928,6 +45883,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45950,6 +45906,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45972,6 +45929,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -45994,6 +45952,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46016,6 +45975,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46038,6 +45998,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46060,6 +46021,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46082,6 +46044,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46104,6 +46067,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46126,6 +46090,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46148,6 +46113,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46170,6 +46136,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46192,6 +46159,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46214,6 +46182,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46236,6 +46205,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46258,6 +46228,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46280,6 +46251,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46302,6 +46274,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46324,6 +46297,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46346,6 +46320,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46368,6 +46343,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46390,6 +46366,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46412,6 +46389,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46434,6 +46412,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46456,6 +46435,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46478,6 +46458,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46500,6 +46481,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46522,6 +46504,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46544,6 +46527,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46566,6 +46550,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46588,6 +46573,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46610,6 +46596,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46632,6 +46619,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46654,6 +46642,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46676,6 +46665,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46698,6 +46688,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46720,6 +46711,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46742,6 +46734,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46764,6 +46757,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46786,6 +46780,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46808,6 +46803,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46830,6 +46826,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46852,6 +46849,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46874,6 +46872,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46896,6 +46895,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46918,6 +46918,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46940,6 +46941,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46962,6 +46964,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -46984,6 +46987,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47006,6 +47010,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47028,6 +47033,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47050,6 +47056,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47072,6 +47079,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47094,6 +47102,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47116,6 +47125,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47138,6 +47148,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47160,6 +47171,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47182,6 +47194,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47204,6 +47217,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47226,6 +47240,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47248,6 +47263,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47270,6 +47286,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47292,6 +47309,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47314,6 +47332,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47336,6 +47355,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47358,6 +47378,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47380,6 +47401,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47402,6 +47424,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47424,6 +47447,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47446,6 +47470,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47468,6 +47493,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47490,6 +47516,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47512,6 +47539,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47534,6 +47562,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47556,6 +47585,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47578,6 +47608,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47600,6 +47631,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47622,6 +47654,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47644,6 +47677,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47666,6 +47700,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47688,6 +47723,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47710,6 +47746,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47732,6 +47769,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47754,6 +47792,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47776,6 +47815,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47798,6 +47838,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47820,6 +47861,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47842,6 +47884,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47864,6 +47907,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47886,6 +47930,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47908,6 +47953,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47930,6 +47976,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47952,6 +47999,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47974,6 +48022,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -47996,6 +48045,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48018,6 +48068,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48040,6 +48091,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48062,6 +48114,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48084,6 +48137,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48106,6 +48160,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48128,6 +48183,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48150,6 +48206,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48172,6 +48229,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48194,6 +48252,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48216,6 +48275,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48238,6 +48298,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48260,6 +48321,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48282,6 +48344,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48304,6 +48367,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48326,6 +48390,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48348,6 +48413,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48370,6 +48436,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48392,6 +48459,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48414,6 +48482,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48436,6 +48505,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48458,6 +48528,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48480,6 +48551,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48502,6 +48574,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48524,6 +48597,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48546,6 +48620,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48568,6 +48643,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48590,6 +48666,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48612,6 +48689,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48634,6 +48712,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48656,6 +48735,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48678,6 +48758,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48700,6 +48781,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48722,6 +48804,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48744,6 +48827,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48766,6 +48850,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48788,6 +48873,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48810,6 +48896,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48832,6 +48919,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48854,6 +48942,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48876,6 +48965,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48898,6 +48988,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48920,6 +49011,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48942,6 +49034,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48964,6 +49057,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -48986,6 +49080,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49008,6 +49103,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49030,6 +49126,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49052,6 +49149,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49074,6 +49172,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49096,6 +49195,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49118,6 +49218,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49140,6 +49241,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49162,6 +49264,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49184,6 +49287,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49206,6 +49310,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49228,6 +49333,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49250,6 +49356,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49272,6 +49379,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49294,6 +49402,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49316,6 +49425,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49338,6 +49448,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49360,6 +49471,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49382,6 +49494,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49404,6 +49517,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49426,6 +49540,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49448,6 +49563,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49470,6 +49586,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49492,6 +49609,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49514,6 +49632,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49536,6 +49655,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49558,6 +49678,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49580,6 +49701,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49602,6 +49724,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49624,6 +49747,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49646,6 +49770,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49668,6 +49793,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49690,6 +49816,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49712,6 +49839,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49734,6 +49862,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49756,6 +49885,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49778,6 +49908,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49800,6 +49931,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49822,6 +49954,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49844,6 +49977,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49866,6 +50000,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49888,6 +50023,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49910,6 +50046,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49932,6 +50069,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49954,6 +50092,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49976,6 +50115,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -49998,6 +50138,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50020,6 +50161,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50042,6 +50184,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50064,6 +50207,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50086,6 +50230,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50108,6 +50253,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50130,6 +50276,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50152,6 +50299,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50174,6 +50322,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50196,6 +50345,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50218,6 +50368,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50240,6 +50391,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50262,6 +50414,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50284,6 +50437,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50306,6 +50460,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50328,6 +50483,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50350,6 +50506,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50372,6 +50529,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50394,6 +50552,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50416,6 +50575,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50438,6 +50598,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50460,6 +50621,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50482,6 +50644,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50504,6 +50667,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50526,6 +50690,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50548,6 +50713,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50570,6 +50736,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50592,6 +50759,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50614,6 +50782,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50636,6 +50805,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50658,6 +50828,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50680,6 +50851,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50702,6 +50874,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50724,6 +50897,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50746,6 +50920,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50768,6 +50943,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50790,6 +50966,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50812,6 +50989,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50834,6 +51012,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50856,6 +51035,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50878,6 +51058,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50900,6 +51081,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50922,6 +51104,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50944,6 +51127,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50966,6 +51150,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -50988,6 +51173,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51010,6 +51196,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51032,6 +51219,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51054,6 +51242,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51076,6 +51265,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51098,6 +51288,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51120,6 +51311,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51142,6 +51334,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51164,6 +51357,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51186,6 +51380,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51208,6 +51403,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51230,6 +51426,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51252,6 +51449,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51274,6 +51472,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51296,6 +51495,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51318,6 +51518,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51340,6 +51541,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51362,6 +51564,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51384,6 +51587,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51406,6 +51610,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51428,6 +51633,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51450,6 +51656,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51472,6 +51679,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51494,6 +51702,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51516,6 +51725,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51538,6 +51748,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51560,6 +51771,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51582,6 +51794,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51604,6 +51817,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51626,6 +51840,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51648,6 +51863,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51670,6 +51886,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51692,6 +51909,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51714,6 +51932,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51736,6 +51955,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51758,6 +51978,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51780,6 +52001,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51802,6 +52024,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51824,6 +52047,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51846,6 +52070,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51868,6 +52093,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51890,6 +52116,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51912,6 +52139,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51934,6 +52162,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51956,6 +52185,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -51978,6 +52208,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52000,6 +52231,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52022,6 +52254,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52044,6 +52277,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52066,6 +52300,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52088,6 +52323,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52110,6 +52346,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52132,6 +52369,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52154,6 +52392,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52176,6 +52415,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52198,6 +52438,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52220,6 +52461,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52242,6 +52484,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52264,6 +52507,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52286,6 +52530,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52308,6 +52553,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52330,6 +52576,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52352,6 +52599,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52374,6 +52622,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52396,6 +52645,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52418,6 +52668,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52440,6 +52691,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52462,6 +52714,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52484,6 +52737,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52506,6 +52760,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52528,6 +52783,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52550,6 +52806,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52572,6 +52829,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52594,6 +52852,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52616,6 +52875,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52638,6 +52898,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52660,6 +52921,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52682,6 +52944,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52704,6 +52967,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52726,6 +52990,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52748,6 +53013,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52770,6 +53036,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52792,6 +53059,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52814,6 +53082,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52836,6 +53105,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52858,6 +53128,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52880,6 +53151,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52902,6 +53174,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52924,6 +53197,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52946,6 +53220,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52968,6 +53243,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -52990,6 +53266,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53012,6 +53289,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53034,6 +53312,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53056,6 +53335,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53078,6 +53358,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53100,6 +53381,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53122,6 +53404,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53144,6 +53427,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53166,6 +53450,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53188,6 +53473,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53210,6 +53496,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53232,6 +53519,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53254,6 +53542,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53276,6 +53565,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53298,6 +53588,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53320,6 +53611,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53342,6 +53634,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53364,6 +53657,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53386,6 +53680,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53408,6 +53703,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53430,6 +53726,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53452,6 +53749,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53474,6 +53772,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53496,6 +53795,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53518,6 +53818,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53540,6 +53841,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53562,6 +53864,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53584,6 +53887,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53606,6 +53910,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53628,6 +53933,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53650,6 +53956,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53672,6 +53979,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53694,6 +54002,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53716,6 +54025,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53738,6 +54048,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53760,6 +54071,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53782,6 +54094,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53804,6 +54117,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53826,6 +54140,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53848,6 +54163,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53870,6 +54186,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53892,6 +54209,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53914,6 +54232,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53936,6 +54255,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53958,6 +54278,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -53980,6 +54301,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54002,6 +54324,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54024,6 +54347,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54046,6 +54370,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54068,6 +54393,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54090,6 +54416,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54112,6 +54439,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54134,6 +54462,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54156,6 +54485,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54178,6 +54508,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54200,6 +54531,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54222,6 +54554,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54244,6 +54577,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54266,6 +54600,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54288,6 +54623,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54310,6 +54646,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54332,6 +54669,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54354,6 +54692,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54376,6 +54715,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54398,6 +54738,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54420,6 +54761,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54442,6 +54784,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54464,6 +54807,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54486,6 +54830,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54508,6 +54853,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54530,6 +54876,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54552,6 +54899,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54574,6 +54922,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54596,6 +54945,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54618,6 +54968,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54640,6 +54991,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54662,6 +55014,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54684,6 +55037,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54706,6 +55060,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54728,6 +55083,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54750,6 +55106,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54772,6 +55129,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54794,6 +55152,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54816,6 +55175,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54838,6 +55198,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54860,6 +55221,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54882,6 +55244,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54904,6 +55267,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54926,6 +55290,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54948,6 +55313,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54970,6 +55336,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -54992,6 +55359,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55014,6 +55382,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55036,6 +55405,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55058,6 +55428,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55080,6 +55451,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55102,6 +55474,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55124,6 +55497,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55146,6 +55520,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55168,6 +55543,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55190,6 +55566,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55212,6 +55589,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55234,6 +55612,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55256,6 +55635,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55278,6 +55658,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55300,6 +55681,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55322,6 +55704,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55344,6 +55727,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55366,6 +55750,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55388,6 +55773,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55410,6 +55796,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55432,6 +55819,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55454,6 +55842,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55476,6 +55865,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55498,6 +55888,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55520,6 +55911,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55542,6 +55934,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55564,6 +55957,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55586,6 +55980,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55608,6 +56003,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55630,6 +56026,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55652,6 +56049,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55674,6 +56072,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55696,6 +56095,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55718,6 +56118,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55740,6 +56141,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55762,6 +56164,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55784,6 +56187,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55806,6 +56210,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55828,6 +56233,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55850,6 +56256,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55872,6 +56279,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55894,6 +56302,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55916,6 +56325,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55938,6 +56348,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55960,6 +56371,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -55982,6 +56394,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56004,6 +56417,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56026,6 +56440,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56048,6 +56463,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56070,6 +56486,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56092,6 +56509,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56114,6 +56532,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56136,6 +56555,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56158,6 +56578,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56180,6 +56601,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56202,6 +56624,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56224,6 +56647,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56246,6 +56670,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56268,6 +56693,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56290,6 +56716,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56312,6 +56739,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56334,6 +56762,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56356,6 +56785,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56378,6 +56808,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56400,6 +56831,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56422,6 +56854,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56444,6 +56877,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56466,6 +56900,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56488,6 +56923,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56510,6 +56946,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56532,6 +56969,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56554,6 +56992,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56576,6 +57015,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56598,6 +57038,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56620,6 +57061,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56642,6 +57084,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56664,6 +57107,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56686,6 +57130,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56708,6 +57153,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56730,6 +57176,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56752,6 +57199,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56774,6 +57222,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56796,6 +57245,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56818,6 +57268,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56840,6 +57291,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56862,6 +57314,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56884,6 +57337,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56906,6 +57360,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56928,6 +57383,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56950,6 +57406,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56972,6 +57429,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -56994,6 +57452,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57016,6 +57475,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57038,6 +57498,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57060,6 +57521,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57082,6 +57544,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57104,6 +57567,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57126,6 +57590,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57148,6 +57613,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57170,6 +57636,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57192,6 +57659,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57214,6 +57682,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57236,6 +57705,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57258,6 +57728,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57280,6 +57751,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57302,6 +57774,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57324,6 +57797,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57346,6 +57820,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57368,6 +57843,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57390,6 +57866,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57412,6 +57889,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57434,6 +57912,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57456,6 +57935,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57478,6 +57958,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57500,6 +57981,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57522,6 +58004,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57544,6 +58027,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57566,6 +58050,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57588,6 +58073,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57610,6 +58096,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57632,6 +58119,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57654,6 +58142,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57676,6 +58165,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57698,6 +58188,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57720,6 +58211,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57742,6 +58234,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57764,6 +58257,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57786,6 +58280,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57808,6 +58303,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57830,6 +58326,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57852,6 +58349,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57874,6 +58372,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57896,6 +58395,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57918,6 +58418,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57940,6 +58441,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57962,6 +58464,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -57984,6 +58487,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58006,6 +58510,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58028,6 +58533,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58050,6 +58556,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58072,6 +58579,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58094,6 +58602,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58116,6 +58625,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58138,6 +58648,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58160,6 +58671,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58182,6 +58694,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58204,6 +58717,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58226,6 +58740,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58248,6 +58763,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58270,6 +58786,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58292,6 +58809,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58314,6 +58832,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58336,6 +58855,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58358,6 +58878,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58380,6 +58901,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58402,6 +58924,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58424,6 +58947,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58446,6 +58970,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58468,6 +58993,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58490,6 +59016,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58512,6 +59039,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58534,6 +59062,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58556,6 +59085,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58578,6 +59108,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58600,6 +59131,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58622,6 +59154,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58644,6 +59177,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58666,6 +59200,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58688,6 +59223,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58710,6 +59246,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58732,6 +59269,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58754,6 +59292,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58776,6 +59315,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58798,6 +59338,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58820,6 +59361,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58842,6 +59384,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58864,6 +59407,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58886,6 +59430,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58908,6 +59453,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58930,6 +59476,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58952,6 +59499,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58974,6 +59522,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -58996,6 +59545,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59018,6 +59568,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59040,6 +59591,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59062,6 +59614,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59084,6 +59637,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59106,6 +59660,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59128,6 +59683,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59150,6 +59706,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59172,6 +59729,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59194,6 +59752,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59216,6 +59775,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59238,6 +59798,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59260,6 +59821,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59282,6 +59844,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59304,6 +59867,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59326,6 +59890,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59348,6 +59913,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59370,6 +59936,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59392,6 +59959,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59414,6 +59982,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59436,6 +60005,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59458,6 +60028,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59480,6 +60051,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59502,6 +60074,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59524,6 +60097,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59546,6 +60120,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59568,6 +60143,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59590,6 +60166,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59612,6 +60189,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59634,6 +60212,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59656,6 +60235,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59678,6 +60258,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59700,6 +60281,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59722,6 +60304,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59744,6 +60327,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59766,6 +60350,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59788,6 +60373,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59810,6 +60396,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59832,6 +60419,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59854,6 +60442,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59876,6 +60465,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59898,6 +60488,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59920,6 +60511,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59942,6 +60534,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59964,6 +60557,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -59986,6 +60580,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60008,6 +60603,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60030,6 +60626,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60052,6 +60649,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60074,6 +60672,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60096,6 +60695,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60118,6 +60718,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60140,6 +60741,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60162,6 +60764,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60184,6 +60787,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60206,6 +60810,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60228,6 +60833,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60250,6 +60856,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60272,6 +60879,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60294,6 +60902,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60316,6 +60925,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60338,6 +60948,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60360,6 +60971,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60382,6 +60994,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60404,6 +61017,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60426,6 +61040,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60448,6 +61063,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60470,6 +61086,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60492,6 +61109,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60514,6 +61132,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60536,6 +61155,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60558,6 +61178,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60580,6 +61201,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60602,6 +61224,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60624,6 +61247,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60646,6 +61270,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60668,6 +61293,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60690,6 +61316,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60712,6 +61339,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60734,6 +61362,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60756,6 +61385,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60778,6 +61408,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60800,6 +61431,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60822,6 +61454,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60844,6 +61477,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60866,6 +61500,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60888,6 +61523,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60910,6 +61546,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60932,6 +61569,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60954,6 +61592,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60976,6 +61615,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -60998,6 +61638,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61020,6 +61661,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61042,6 +61684,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61064,6 +61707,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61086,6 +61730,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61108,6 +61753,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61130,6 +61776,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61152,6 +61799,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61174,6 +61822,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61196,6 +61845,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61218,6 +61868,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61240,6 +61891,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61262,6 +61914,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61284,6 +61937,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61306,6 +61960,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61328,6 +61983,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61350,6 +62006,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61372,6 +62029,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61394,6 +62052,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61416,6 +62075,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61438,6 +62098,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61460,6 +62121,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61482,6 +62144,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61504,6 +62167,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61526,6 +62190,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61548,6 +62213,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61570,6 +62236,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61592,6 +62259,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61614,6 +62282,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61636,6 +62305,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61658,6 +62328,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61680,6 +62351,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61702,6 +62374,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61724,6 +62397,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61746,6 +62420,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61768,6 +62443,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61790,6 +62466,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61812,6 +62489,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61834,6 +62512,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61856,6 +62535,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61878,6 +62558,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61900,6 +62581,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61922,6 +62604,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61944,6 +62627,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61966,6 +62650,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -61988,6 +62673,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62010,6 +62696,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62032,6 +62719,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62054,6 +62742,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62076,6 +62765,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62098,6 +62788,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62120,6 +62811,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62142,6 +62834,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62164,6 +62857,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62186,6 +62880,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62208,6 +62903,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62230,6 +62926,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62252,6 +62949,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62274,6 +62972,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62296,6 +62995,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62318,6 +63018,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62340,6 +63041,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62362,6 +63064,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62384,6 +63087,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62406,6 +63110,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62428,6 +63133,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62450,6 +63156,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62472,6 +63179,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62494,6 +63202,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62516,6 +63225,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62538,6 +63248,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62560,6 +63271,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62582,6 +63294,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62604,6 +63317,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62626,6 +63340,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62648,6 +63363,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62670,6 +63386,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62692,6 +63409,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62714,6 +63432,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62736,6 +63455,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62758,6 +63478,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62780,6 +63501,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62802,6 +63524,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62824,6 +63547,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62846,6 +63570,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62868,6 +63593,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62890,6 +63616,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62912,6 +63639,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62934,6 +63662,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62956,6 +63685,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -62978,6 +63708,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63000,6 +63731,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63022,6 +63754,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63044,6 +63777,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63066,6 +63800,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63088,6 +63823,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63110,6 +63846,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63132,6 +63869,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63154,6 +63892,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63176,6 +63915,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63198,6 +63938,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63220,6 +63961,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63242,6 +63984,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63264,6 +64007,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63286,6 +64030,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63308,6 +64053,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63330,6 +64076,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63352,6 +64099,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63374,6 +64122,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63396,6 +64145,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63418,6 +64168,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63440,6 +64191,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63462,6 +64214,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63484,6 +64237,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63506,6 +64260,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63528,6 +64283,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63550,6 +64306,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63572,6 +64329,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63594,6 +64352,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63616,6 +64375,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63638,6 +64398,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63660,6 +64421,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63682,6 +64444,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63704,6 +64467,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63726,6 +64490,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63748,6 +64513,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63770,6 +64536,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63792,6 +64559,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63814,6 +64582,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63836,6 +64605,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63858,6 +64628,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63880,6 +64651,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63902,6 +64674,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63924,6 +64697,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63946,6 +64720,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63968,6 +64743,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -63990,6 +64766,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64012,6 +64789,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64034,6 +64812,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64056,6 +64835,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64078,6 +64858,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64100,6 +64881,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64122,6 +64904,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64144,6 +64927,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64166,6 +64950,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64188,6 +64973,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64210,6 +64996,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64232,6 +65019,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64254,6 +65042,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64276,6 +65065,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64298,6 +65088,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64320,6 +65111,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64342,6 +65134,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64364,6 +65157,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64386,6 +65180,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64408,6 +65203,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64430,6 +65226,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64452,6 +65249,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64474,6 +65272,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64496,6 +65295,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64518,6 +65318,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64540,6 +65341,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64562,6 +65364,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64584,6 +65387,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64606,6 +65410,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64628,6 +65433,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64650,6 +65456,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64672,6 +65479,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64694,6 +65502,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64716,6 +65525,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64738,6 +65548,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64760,6 +65571,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64782,6 +65594,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64804,6 +65617,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64826,6 +65640,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64848,6 +65663,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64870,6 +65686,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64892,6 +65709,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64914,6 +65732,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64936,6 +65755,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64958,6 +65778,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -64980,6 +65801,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65002,6 +65824,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65024,6 +65847,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65046,6 +65870,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65068,6 +65893,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65090,6 +65916,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65112,6 +65939,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65134,6 +65962,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65156,6 +65985,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65178,6 +66008,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65200,6 +66031,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65222,6 +66054,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65244,6 +66077,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65266,6 +66100,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65288,6 +66123,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65310,6 +66146,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65332,6 +66169,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65354,6 +66192,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65376,6 +66215,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65398,6 +66238,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65420,6 +66261,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65442,6 +66284,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65464,6 +66307,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65486,6 +66330,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65508,6 +66353,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65530,6 +66376,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65552,6 +66399,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65574,6 +66422,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65596,6 +66445,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65618,6 +66468,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65640,6 +66491,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65662,6 +66514,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65684,6 +66537,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65706,6 +66560,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65728,6 +66583,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65750,6 +66606,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65772,6 +66629,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65794,6 +66652,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65816,6 +66675,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65838,6 +66698,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65860,6 +66721,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65882,6 +66744,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65904,6 +66767,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65926,6 +66790,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65948,6 +66813,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65970,6 +66836,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -65992,6 +66859,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66014,6 +66882,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66036,6 +66905,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66058,6 +66928,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66080,6 +66951,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66102,6 +66974,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66124,6 +66997,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66146,6 +67020,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66168,6 +67043,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66190,6 +67066,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66212,6 +67089,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66234,6 +67112,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66256,6 +67135,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66278,6 +67158,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66300,6 +67181,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66322,6 +67204,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66344,6 +67227,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66366,6 +67250,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66388,6 +67273,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66410,6 +67296,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66432,6 +67319,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66454,6 +67342,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66476,6 +67365,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66498,6 +67388,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66520,6 +67411,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66542,6 +67434,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66564,6 +67457,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66586,6 +67480,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66608,6 +67503,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66630,6 +67526,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66652,6 +67549,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66674,6 +67572,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66696,6 +67595,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66718,6 +67618,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66740,6 +67641,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66762,6 +67664,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66784,6 +67687,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66806,6 +67710,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66828,6 +67733,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66850,6 +67756,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66872,6 +67779,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66894,6 +67802,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66916,6 +67825,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66938,6 +67848,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66960,6 +67871,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -66982,6 +67894,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67004,6 +67917,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67026,6 +67940,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67048,6 +67963,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67070,6 +67986,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67092,6 +68009,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67114,6 +68032,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67136,6 +68055,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67158,6 +68078,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67180,6 +68101,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67202,6 +68124,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67224,6 +68147,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67246,6 +68170,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67268,6 +68193,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67290,6 +68216,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67312,6 +68239,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67334,6 +68262,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67356,6 +68285,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67378,6 +68308,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67400,6 +68331,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67422,6 +68354,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67444,6 +68377,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67466,6 +68400,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67488,6 +68423,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67510,6 +68446,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67532,6 +68469,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67554,6 +68492,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67576,6 +68515,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67598,6 +68538,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67620,6 +68561,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67642,6 +68584,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67664,6 +68607,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67686,6 +68630,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67708,6 +68653,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67730,6 +68676,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67752,6 +68699,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67774,6 +68722,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67796,6 +68745,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67818,6 +68768,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67840,6 +68791,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67862,6 +68814,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67884,6 +68837,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67906,6 +68860,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67928,6 +68883,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67950,6 +68906,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67972,6 +68929,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -67994,6 +68952,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68016,6 +68975,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68038,6 +68998,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68060,6 +69021,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68082,6 +69044,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68104,6 +69067,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68126,6 +69090,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68148,6 +69113,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68170,6 +69136,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68192,6 +69159,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68214,6 +69182,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68236,6 +69205,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68258,6 +69228,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68280,6 +69251,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68302,6 +69274,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68324,6 +69297,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68346,6 +69320,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68368,6 +69343,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68390,6 +69366,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68412,6 +69389,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68434,6 +69412,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68456,6 +69435,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68478,6 +69458,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68500,6 +69481,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68522,6 +69504,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68544,6 +69527,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68566,6 +69550,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68588,6 +69573,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68610,6 +69596,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68632,6 +69619,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68654,6 +69642,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68676,6 +69665,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68698,6 +69688,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68720,6 +69711,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68742,6 +69734,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68764,6 +69757,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68786,6 +69780,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68808,6 +69803,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68830,6 +69826,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68852,6 +69849,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68874,6 +69872,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68896,6 +69895,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68918,6 +69918,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68940,6 +69941,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68962,6 +69964,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -68984,6 +69987,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69006,6 +70010,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69028,6 +70033,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69050,6 +70056,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69072,6 +70079,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69094,6 +70102,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69116,6 +70125,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69138,6 +70148,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69160,6 +70171,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69182,6 +70194,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69204,6 +70217,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69226,6 +70240,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69248,6 +70263,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69270,6 +70286,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69292,6 +70309,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69314,6 +70332,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69336,6 +70355,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69358,6 +70378,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69380,6 +70401,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69402,6 +70424,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69424,6 +70447,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69446,6 +70470,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69468,6 +70493,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69490,6 +70516,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69512,6 +70539,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69534,6 +70562,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69556,6 +70585,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69578,6 +70608,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69600,6 +70631,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69622,6 +70654,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69644,6 +70677,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69666,6 +70700,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69688,6 +70723,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69710,6 +70746,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69732,6 +70769,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69754,6 +70792,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69776,6 +70815,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69798,6 +70838,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69820,6 +70861,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69842,6 +70884,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69864,6 +70907,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69886,6 +70930,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69908,6 +70953,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69930,6 +70976,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69952,6 +70999,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69974,6 +71022,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -69996,6 +71045,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70018,6 +71068,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70040,6 +71091,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70062,6 +71114,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70084,6 +71137,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70106,6 +71160,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70128,6 +71183,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70150,6 +71206,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70172,6 +71229,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70194,6 +71252,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70216,6 +71275,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70238,6 +71298,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70260,6 +71321,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70282,6 +71344,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70304,6 +71367,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70326,6 +71390,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70348,6 +71413,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70370,6 +71436,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70392,6 +71459,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70414,6 +71482,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70436,6 +71505,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70458,6 +71528,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70480,6 +71551,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70502,6 +71574,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70524,6 +71597,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70546,6 +71620,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70568,6 +71643,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70590,6 +71666,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70612,6 +71689,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70634,6 +71712,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70656,6 +71735,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70678,6 +71758,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70700,6 +71781,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70722,6 +71804,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70744,6 +71827,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70766,6 +71850,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70788,6 +71873,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70810,6 +71896,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70832,6 +71919,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70854,6 +71942,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70876,6 +71965,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70898,6 +71988,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70920,6 +72011,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70942,6 +72034,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70964,6 +72057,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -70986,6 +72080,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71008,6 +72103,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71030,6 +72126,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71052,6 +72149,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71074,6 +72172,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71096,6 +72195,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71118,6 +72218,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71140,6 +72241,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71162,6 +72264,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71184,6 +72287,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71206,6 +72310,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71228,6 +72333,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71250,6 +72356,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71272,6 +72379,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71294,6 +72402,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71316,6 +72425,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71338,6 +72448,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71360,6 +72471,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71382,6 +72494,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71404,6 +72517,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71426,6 +72540,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71448,6 +72563,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71470,6 +72586,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71492,6 +72609,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71514,6 +72632,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71536,6 +72655,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71558,6 +72678,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71580,6 +72701,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71602,6 +72724,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71624,6 +72747,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71646,6 +72770,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71668,6 +72793,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71690,6 +72816,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71712,6 +72839,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71734,6 +72862,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71756,6 +72885,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71778,6 +72908,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71800,6 +72931,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71822,6 +72954,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71844,6 +72977,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71866,6 +73000,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71888,6 +73023,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71910,6 +73046,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71932,6 +73069,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71954,6 +73092,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71976,6 +73115,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -71998,6 +73138,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72020,6 +73161,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72042,6 +73184,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72064,6 +73207,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72086,6 +73230,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72108,6 +73253,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72130,6 +73276,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72152,6 +73299,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72174,6 +73322,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72196,6 +73345,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72218,6 +73368,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72240,6 +73391,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72262,6 +73414,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72284,6 +73437,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72306,6 +73460,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72328,6 +73483,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72350,6 +73506,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72372,6 +73529,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72394,6 +73552,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72416,6 +73575,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72438,6 +73598,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72460,6 +73621,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72482,6 +73644,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72504,6 +73667,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72526,6 +73690,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72548,6 +73713,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72570,6 +73736,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72592,6 +73759,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72614,6 +73782,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72636,6 +73805,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72658,6 +73828,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72680,6 +73851,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72702,6 +73874,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72724,6 +73897,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72746,6 +73920,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72768,6 +73943,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72790,6 +73966,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72812,6 +73989,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72834,6 +74012,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72856,6 +74035,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72878,6 +74058,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72900,6 +74081,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72922,6 +74104,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72944,6 +74127,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72966,6 +74150,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -72988,6 +74173,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73010,6 +74196,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73032,6 +74219,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73054,6 +74242,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73076,6 +74265,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73098,6 +74288,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73120,6 +74311,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73142,6 +74334,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73164,6 +74357,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73186,6 +74380,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73208,6 +74403,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73230,6 +74426,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73252,6 +74449,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73274,6 +74472,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73296,6 +74495,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73318,6 +74518,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73340,6 +74541,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73362,6 +74564,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73384,6 +74587,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73406,6 +74610,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73428,6 +74633,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73450,6 +74656,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73472,6 +74679,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73494,6 +74702,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73516,6 +74725,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73538,6 +74748,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73560,6 +74771,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73582,6 +74794,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73604,6 +74817,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73626,6 +74840,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73648,6 +74863,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73670,6 +74886,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73692,6 +74909,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73714,6 +74932,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73736,6 +74955,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73758,6 +74978,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73780,6 +75001,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73802,6 +75024,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73824,6 +75047,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73846,6 +75070,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73868,6 +75093,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73890,6 +75116,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73912,6 +75139,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73934,6 +75162,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73956,6 +75185,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -73978,6 +75208,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74000,6 +75231,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74022,6 +75254,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74044,6 +75277,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74066,6 +75300,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74088,6 +75323,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74110,6 +75346,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74132,6 +75369,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74154,6 +75392,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74176,6 +75415,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74198,6 +75438,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74220,6 +75461,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74242,6 +75484,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74264,6 +75507,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74286,6 +75530,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74308,6 +75553,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74330,6 +75576,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74352,6 +75599,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74374,6 +75622,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74396,6 +75645,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74418,6 +75668,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74440,6 +75691,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74462,6 +75714,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74484,6 +75737,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74506,6 +75760,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74528,6 +75783,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74550,6 +75806,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74572,6 +75829,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74594,6 +75852,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74616,6 +75875,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74638,6 +75898,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74660,6 +75921,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74682,6 +75944,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74704,6 +75967,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74726,6 +75990,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74748,6 +76013,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74770,6 +76036,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74792,6 +76059,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74814,6 +76082,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74836,6 +76105,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74858,6 +76128,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74880,6 +76151,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74902,6 +76174,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74924,6 +76197,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74946,6 +76220,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74968,6 +76243,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -74990,6 +76266,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75012,6 +76289,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75034,6 +76312,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75056,6 +76335,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75078,6 +76358,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75100,6 +76381,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75122,6 +76404,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75144,6 +76427,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75166,6 +76450,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75188,6 +76473,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75210,6 +76496,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75232,6 +76519,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75254,6 +76542,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75276,6 +76565,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75298,6 +76588,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75320,6 +76611,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75342,6 +76634,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75364,6 +76657,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75386,6 +76680,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75408,6 +76703,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75430,6 +76726,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75452,6 +76749,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75474,6 +76772,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75496,6 +76795,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75518,6 +76818,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75540,6 +76841,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75562,6 +76864,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75584,6 +76887,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75606,6 +76910,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75628,6 +76933,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75650,6 +76956,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75672,6 +76979,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75694,6 +77002,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75716,6 +77025,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75738,6 +77048,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75760,6 +77071,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75782,6 +77094,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75804,6 +77117,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75826,6 +77140,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75848,6 +77163,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75870,6 +77186,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75892,6 +77209,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75914,6 +77232,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75936,6 +77255,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75958,6 +77278,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -75980,6 +77301,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76002,6 +77324,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76024,6 +77347,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76046,6 +77370,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76068,6 +77393,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76090,6 +77416,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76112,6 +77439,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76134,6 +77462,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76156,6 +77485,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76178,6 +77508,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76200,6 +77531,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76222,6 +77554,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76244,6 +77577,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76266,6 +77600,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76288,6 +77623,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76310,6 +77646,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76332,6 +77669,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76354,6 +77692,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76376,6 +77715,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76398,6 +77738,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76420,6 +77761,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76442,6 +77784,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76464,6 +77807,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76486,6 +77830,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76508,6 +77853,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76530,6 +77876,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76552,6 +77899,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76574,6 +77922,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76596,6 +77945,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76618,6 +77968,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76640,6 +77991,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76662,6 +78014,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76684,6 +78037,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76706,6 +78060,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76728,6 +78083,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76750,6 +78106,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76772,6 +78129,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76794,6 +78152,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76816,6 +78175,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76838,6 +78198,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76860,6 +78221,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76882,6 +78244,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76904,6 +78267,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76926,6 +78290,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76948,6 +78313,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76970,6 +78336,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -76992,6 +78359,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77014,6 +78382,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77036,6 +78405,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77058,6 +78428,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77080,6 +78451,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77102,6 +78474,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77124,6 +78497,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77146,6 +78520,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77168,6 +78543,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77190,6 +78566,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77212,6 +78589,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77234,6 +78612,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77256,6 +78635,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77278,6 +78658,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77300,6 +78681,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77322,6 +78704,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77344,6 +78727,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77366,6 +78750,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77388,6 +78773,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77410,6 +78796,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77432,6 +78819,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77454,6 +78842,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77476,6 +78865,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77498,6 +78888,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77520,6 +78911,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77542,6 +78934,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77564,6 +78957,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77586,6 +78980,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77608,6 +79003,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77630,6 +79026,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77652,6 +79049,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77674,6 +79072,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77696,6 +79095,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77718,6 +79118,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77740,6 +79141,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77762,6 +79164,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77784,6 +79187,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77806,6 +79210,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77828,6 +79233,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77850,6 +79256,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77872,6 +79279,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77894,6 +79302,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77916,6 +79325,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77938,6 +79348,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77960,6 +79371,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -77982,6 +79394,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78004,6 +79417,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78026,6 +79440,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78048,6 +79463,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78070,6 +79486,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78092,6 +79509,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78114,6 +79532,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78136,6 +79555,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78158,6 +79578,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78180,6 +79601,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78202,6 +79624,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78224,6 +79647,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78246,6 +79670,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78268,6 +79693,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78290,6 +79716,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78312,6 +79739,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78334,6 +79762,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78356,6 +79785,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78378,6 +79808,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78400,6 +79831,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78422,6 +79854,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78444,6 +79877,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78466,6 +79900,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78488,6 +79923,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78510,6 +79946,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78532,6 +79969,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78554,6 +79992,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78576,6 +80015,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78598,6 +80038,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78620,6 +80061,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78642,6 +80084,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78664,6 +80107,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78686,6 +80130,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78708,6 +80153,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78730,6 +80176,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78752,6 +80199,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78774,6 +80222,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78796,6 +80245,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78818,6 +80268,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78840,6 +80291,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78862,6 +80314,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78884,6 +80337,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78906,6 +80360,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78928,6 +80383,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78950,6 +80406,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78972,6 +80429,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -78994,6 +80452,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79016,6 +80475,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79038,6 +80498,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79060,6 +80521,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79082,6 +80544,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79104,6 +80567,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79126,6 +80590,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79148,6 +80613,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79170,6 +80636,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79192,6 +80659,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79214,6 +80682,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79236,6 +80705,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79258,6 +80728,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79280,6 +80751,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79302,6 +80774,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79324,6 +80797,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79346,6 +80820,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79368,6 +80843,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79390,6 +80866,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79412,6 +80889,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79434,6 +80912,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79456,6 +80935,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79478,6 +80958,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79500,6 +80981,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79522,6 +81004,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79544,6 +81027,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79566,6 +81050,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79588,6 +81073,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79610,6 +81096,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79632,6 +81119,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79654,6 +81142,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79676,6 +81165,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79698,6 +81188,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79720,6 +81211,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79742,6 +81234,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79764,6 +81257,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79786,6 +81280,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79808,6 +81303,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79830,6 +81326,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79852,6 +81349,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79874,6 +81372,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79896,6 +81395,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79918,6 +81418,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79940,6 +81441,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79962,6 +81464,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -79984,6 +81487,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80006,6 +81510,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80028,6 +81533,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80050,6 +81556,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80072,6 +81579,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80094,6 +81602,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80116,6 +81625,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80138,6 +81648,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80160,6 +81671,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80182,6 +81694,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80204,6 +81717,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80226,6 +81740,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80248,6 +81763,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80270,6 +81786,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80292,6 +81809,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80314,6 +81832,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80336,6 +81855,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80358,6 +81878,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80380,6 +81901,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80402,6 +81924,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80424,6 +81947,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80446,6 +81970,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80468,6 +81993,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80490,6 +82016,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80512,6 +82039,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80534,6 +82062,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80556,6 +82085,30 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
+ "linux"
+ ],
+ "uses_polling": false
+ },
+ {
+ "args": [
+ "test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6520142139752448"
+ ],
+ "ci_platforms": [
+ "linux"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [
+ "tsan"
+ ],
+ "exclude_iomgrs": [
+ "uv"
+ ],
+ "flaky": false,
+ "language": "c",
+ "name": "api_fuzzer_one_entry",
+ "platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80578,6 +82131,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80600,6 +82154,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80622,6 +82177,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80644,6 +82200,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80666,6 +82223,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80688,6 +82246,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80710,6 +82269,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80732,6 +82292,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80754,6 +82315,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80776,6 +82338,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80798,6 +82361,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80820,6 +82384,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80842,6 +82407,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80864,6 +82430,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80886,6 +82453,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80908,6 +82476,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80930,6 +82499,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80952,6 +82522,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80974,6 +82545,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -80996,6 +82568,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81018,6 +82591,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81040,6 +82614,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81062,6 +82637,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81084,6 +82660,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81106,6 +82683,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81128,6 +82706,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81150,6 +82729,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81172,6 +82752,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81194,6 +82775,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81216,6 +82798,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81238,6 +82821,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81260,6 +82844,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81282,6 +82867,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81304,6 +82890,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81326,6 +82913,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81348,6 +82936,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81370,6 +82959,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81392,6 +82982,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81414,6 +83005,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81436,6 +83028,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81458,6 +83051,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81480,6 +83074,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81502,6 +83097,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81524,6 +83120,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81546,6 +83143,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81568,6 +83166,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81590,6 +83189,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81612,6 +83212,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81634,6 +83235,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81656,6 +83258,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81678,6 +83281,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81700,6 +83304,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81722,6 +83327,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81744,6 +83350,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81766,6 +83373,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81788,6 +83396,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81810,6 +83419,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81832,6 +83442,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81854,6 +83465,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81876,6 +83488,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81898,6 +83511,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81920,6 +83534,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81942,6 +83557,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81964,6 +83580,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -81986,6 +83603,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82008,6 +83626,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82030,6 +83649,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82052,6 +83672,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82074,6 +83695,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82096,6 +83718,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82118,6 +83741,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82140,6 +83764,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82162,6 +83787,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82184,6 +83810,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82206,6 +83833,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82228,6 +83856,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82250,6 +83879,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82272,6 +83902,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82294,6 +83925,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82316,6 +83948,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82338,6 +83971,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82360,6 +83994,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82382,6 +84017,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82404,6 +84040,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82426,6 +84063,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82448,6 +84086,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82470,6 +84109,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82492,6 +84132,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82514,6 +84155,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82536,6 +84178,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82558,6 +84201,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82580,6 +84224,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82602,6 +84247,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82624,6 +84270,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82646,6 +84293,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82668,6 +84316,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82690,6 +84339,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82712,6 +84362,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82734,6 +84385,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82756,6 +84408,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82778,6 +84431,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82800,6 +84454,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82822,6 +84477,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82844,6 +84500,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82866,6 +84523,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82888,6 +84546,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82910,6 +84569,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82932,6 +84592,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82954,6 +84615,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82976,6 +84638,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -82998,6 +84661,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83020,6 +84684,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83042,6 +84707,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83064,6 +84730,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83086,6 +84753,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83108,6 +84776,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83130,6 +84799,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83152,6 +84822,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83174,6 +84845,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83196,6 +84868,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83218,6 +84891,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83240,6 +84914,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83262,6 +84937,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83284,6 +84960,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83306,6 +84983,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83328,6 +85006,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83350,6 +85029,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83372,6 +85052,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83394,6 +85075,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83416,6 +85098,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83438,6 +85121,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83460,6 +85144,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83482,6 +85167,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83504,6 +85190,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83526,6 +85213,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83548,6 +85236,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83570,6 +85259,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83592,6 +85282,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83614,6 +85305,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83636,6 +85328,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83658,6 +85351,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83680,6 +85374,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83702,6 +85397,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83724,6 +85420,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83746,6 +85443,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83768,6 +85466,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83790,6 +85489,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83812,6 +85512,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83834,6 +85535,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83856,6 +85558,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83878,6 +85581,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83900,6 +85604,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83922,6 +85627,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83944,6 +85650,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83966,6 +85673,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -83988,6 +85696,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84010,6 +85719,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84032,6 +85742,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84054,6 +85765,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84076,6 +85788,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84098,6 +85811,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84120,6 +85834,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84142,6 +85857,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84164,6 +85880,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84186,6 +85903,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84208,6 +85926,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84230,6 +85949,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84252,6 +85972,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84274,6 +85995,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84296,6 +86018,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84318,6 +86041,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84340,6 +86064,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84362,6 +86087,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84384,6 +86110,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84406,6 +86133,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84428,6 +86156,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84450,6 +86179,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84472,6 +86202,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84494,6 +86225,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84516,6 +86248,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84538,6 +86271,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84560,6 +86294,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84582,6 +86317,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84604,6 +86340,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84626,6 +86363,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84648,6 +86386,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84670,6 +86409,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84692,6 +86432,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84714,6 +86455,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84736,6 +86478,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84758,6 +86501,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84780,6 +86524,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84802,6 +86547,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84824,6 +86570,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84846,6 +86593,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84868,6 +86616,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84890,6 +86639,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84912,6 +86662,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84934,6 +86685,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84956,6 +86708,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -84978,6 +86731,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85000,6 +86754,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85022,6 +86777,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85044,6 +86800,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85066,6 +86823,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85088,6 +86846,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85110,6 +86869,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85132,6 +86892,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85154,6 +86915,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85176,6 +86938,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85198,6 +86961,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85220,6 +86984,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85242,6 +87007,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85264,6 +87030,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85286,6 +87053,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85308,6 +87076,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85330,6 +87099,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85352,6 +87122,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85374,6 +87145,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85396,6 +87168,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85418,6 +87191,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85440,6 +87214,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85462,6 +87237,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85484,6 +87260,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85506,6 +87283,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85528,6 +87306,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85550,6 +87329,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85572,6 +87352,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85594,6 +87375,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85616,6 +87398,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85638,6 +87421,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85660,6 +87444,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85682,6 +87467,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85704,6 +87490,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85726,6 +87513,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85748,6 +87536,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85770,6 +87559,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85792,6 +87582,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85814,6 +87605,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85836,6 +87628,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85858,6 +87651,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85880,6 +87674,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85902,6 +87697,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85924,6 +87720,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85946,6 +87743,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85968,6 +87766,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -85990,6 +87789,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86012,6 +87812,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86034,6 +87835,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86056,6 +87858,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86078,6 +87881,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86100,6 +87904,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86122,6 +87927,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86144,6 +87950,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86166,6 +87973,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86188,6 +87996,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86210,6 +88019,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86232,6 +88042,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86254,6 +88065,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86276,6 +88088,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86298,6 +88111,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86320,6 +88134,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86342,6 +88157,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86364,6 +88180,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86386,6 +88203,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86408,6 +88226,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86430,6 +88249,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86452,6 +88272,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86474,6 +88295,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86496,6 +88318,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86518,6 +88341,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86540,6 +88364,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86562,6 +88387,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86584,6 +88410,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86606,6 +88433,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86628,6 +88456,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86650,6 +88479,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86672,6 +88502,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86694,6 +88525,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86716,6 +88548,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86738,6 +88571,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86760,6 +88594,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86782,6 +88617,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86804,6 +88640,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86826,6 +88663,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86848,6 +88686,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86870,6 +88709,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86892,6 +88732,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86914,6 +88755,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86936,6 +88778,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86958,6 +88801,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -86980,6 +88824,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87002,6 +88847,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87024,6 +88870,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87046,6 +88893,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87068,6 +88916,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87090,6 +88939,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87112,6 +88962,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87134,6 +88985,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87156,6 +89008,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87178,6 +89031,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87200,6 +89054,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87222,6 +89077,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87244,6 +89100,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87266,6 +89123,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87288,6 +89146,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87310,6 +89169,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87332,6 +89192,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87354,6 +89215,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87376,6 +89238,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87398,6 +89261,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87420,6 +89284,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87442,6 +89307,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87464,6 +89330,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87486,6 +89353,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87508,6 +89376,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87530,6 +89399,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87552,6 +89422,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87574,6 +89445,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87596,6 +89468,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87618,6 +89491,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87640,6 +89514,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87662,6 +89537,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87684,6 +89560,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87706,6 +89583,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87728,6 +89606,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87750,6 +89629,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87772,6 +89652,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87794,6 +89675,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87816,6 +89698,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87838,6 +89721,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87860,6 +89744,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87882,6 +89767,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87904,6 +89790,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87926,6 +89813,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87948,6 +89836,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87970,6 +89859,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -87992,6 +89882,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88014,6 +89905,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88036,6 +89928,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88058,6 +89951,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88080,6 +89974,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88102,6 +89997,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88124,6 +90020,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88146,6 +90043,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88168,6 +90066,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88190,6 +90089,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88212,6 +90112,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88234,6 +90135,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88256,6 +90158,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88278,6 +90181,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88300,6 +90204,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88322,6 +90227,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88344,6 +90250,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88366,6 +90273,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88388,6 +90296,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88410,6 +90319,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88432,6 +90342,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88454,6 +90365,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88476,6 +90388,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88498,6 +90411,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88520,6 +90434,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88542,6 +90457,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88564,6 +90480,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88586,6 +90503,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88608,6 +90526,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88630,6 +90549,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88652,6 +90572,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88674,6 +90595,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88696,6 +90618,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88718,6 +90641,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88740,6 +90664,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88762,6 +90687,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88784,6 +90710,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88806,6 +90733,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88828,6 +90756,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88850,6 +90779,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88872,6 +90802,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88894,6 +90825,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88916,6 +90848,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88938,6 +90871,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88960,6 +90894,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -88982,6 +90917,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89004,6 +90940,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89026,6 +90963,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89048,6 +90986,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89070,6 +91009,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89092,6 +91032,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89114,6 +91055,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89136,6 +91078,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89158,6 +91101,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89180,6 +91124,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89202,6 +91147,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89224,6 +91170,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89246,6 +91193,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89268,6 +91216,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89290,6 +91239,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89312,6 +91262,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89334,6 +91285,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89356,6 +91308,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89378,6 +91331,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89400,6 +91354,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89422,6 +91377,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89444,6 +91400,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89466,6 +91423,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89488,6 +91446,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89510,6 +91469,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89532,6 +91492,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89554,6 +91515,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89576,6 +91538,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89598,6 +91561,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89620,6 +91584,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89642,6 +91607,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89664,6 +91630,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89686,6 +91653,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89708,6 +91676,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89730,6 +91699,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89752,6 +91722,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89774,6 +91745,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89796,6 +91768,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89818,6 +91791,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89840,6 +91814,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89862,6 +91837,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89884,6 +91860,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89906,6 +91883,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89928,6 +91906,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89950,6 +91929,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89972,6 +91952,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -89994,6 +91975,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90016,6 +91998,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90038,6 +92021,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90060,6 +92044,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90082,6 +92067,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90104,6 +92090,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90126,6 +92113,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90148,6 +92136,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90170,6 +92159,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90192,6 +92182,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90214,6 +92205,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90236,6 +92228,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90258,6 +92251,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90280,6 +92274,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90302,6 +92297,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90324,6 +92320,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90346,6 +92343,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90368,6 +92366,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90390,6 +92389,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90412,6 +92412,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90434,6 +92435,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90456,6 +92458,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90478,6 +92481,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90500,6 +92504,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90522,6 +92527,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90544,6 +92550,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90566,6 +92573,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90588,6 +92596,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90610,6 +92619,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90632,6 +92642,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90654,6 +92665,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90676,6 +92688,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90698,6 +92711,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90720,6 +92734,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90742,6 +92757,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90764,6 +92780,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90786,6 +92803,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90808,6 +92826,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90830,6 +92849,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90852,6 +92872,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90874,6 +92895,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90896,6 +92918,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90918,6 +92941,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90940,6 +92964,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90962,6 +92987,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -90984,6 +93010,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91006,6 +93033,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91028,6 +93056,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91050,6 +93079,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91072,6 +93102,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91094,6 +93125,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91116,6 +93148,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91138,6 +93171,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91160,6 +93194,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91182,6 +93217,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91204,6 +93240,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91226,6 +93263,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91248,6 +93286,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91270,6 +93309,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91292,6 +93332,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91314,6 +93355,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91336,6 +93378,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91358,6 +93401,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91380,6 +93424,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91402,6 +93447,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91424,6 +93470,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91446,6 +93493,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91468,6 +93516,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91490,6 +93539,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91512,6 +93562,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91534,6 +93585,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91556,6 +93608,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91578,6 +93631,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91600,6 +93654,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91622,6 +93677,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91644,6 +93700,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91666,6 +93723,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91688,6 +93746,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91710,6 +93769,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91732,6 +93792,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91754,6 +93815,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91776,6 +93838,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91798,6 +93861,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91820,6 +93884,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91842,6 +93907,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91864,6 +93930,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91886,6 +93953,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91908,6 +93976,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91930,6 +93999,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91952,6 +94022,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91974,6 +94045,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -91996,6 +94068,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92018,6 +94091,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92040,6 +94114,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92062,6 +94137,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92084,6 +94160,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92106,6 +94183,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92128,6 +94206,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92150,6 +94229,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92172,6 +94252,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92194,6 +94275,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92216,6 +94298,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92238,6 +94321,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92260,6 +94344,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92282,6 +94367,7 @@
"language": "c",
"name": "api_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92304,6 +94390,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92326,6 +94413,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92348,6 +94436,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92370,6 +94459,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92392,6 +94482,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92414,6 +94505,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92436,6 +94528,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92458,6 +94551,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92480,6 +94574,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92502,6 +94597,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92524,6 +94620,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92546,6 +94643,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92568,6 +94666,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92590,6 +94689,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92612,6 +94712,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92634,6 +94735,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92656,6 +94758,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92678,6 +94781,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92700,6 +94804,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92722,6 +94827,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92744,6 +94850,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92766,6 +94873,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92788,6 +94896,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92810,6 +94919,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92832,6 +94942,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92854,6 +94965,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92876,6 +94988,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92898,6 +95011,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92920,6 +95034,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92942,6 +95057,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92964,6 +95080,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -92986,6 +95103,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93008,6 +95126,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93030,6 +95149,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93052,6 +95172,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93074,6 +95195,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93096,6 +95218,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93118,6 +95241,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93140,6 +95264,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93162,6 +95287,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93184,6 +95310,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93206,6 +95333,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93228,6 +95356,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93250,6 +95379,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93272,6 +95402,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93294,6 +95425,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93316,6 +95448,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93338,6 +95471,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93360,6 +95494,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93382,6 +95517,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93404,6 +95540,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93426,6 +95563,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93448,6 +95586,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93470,6 +95609,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93492,6 +95632,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93514,6 +95655,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93536,6 +95678,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93558,6 +95701,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93580,6 +95724,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93602,6 +95747,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93624,6 +95770,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93646,6 +95793,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93668,6 +95816,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93690,6 +95839,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93712,6 +95862,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93734,6 +95885,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93756,6 +95908,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93778,6 +95931,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93800,6 +95954,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93822,6 +95977,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93844,6 +96000,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93866,6 +96023,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93888,6 +96046,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93910,6 +96069,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93932,6 +96092,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93954,6 +96115,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93976,6 +96138,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -93998,6 +96161,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94020,6 +96184,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94042,6 +96207,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94064,6 +96230,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94086,6 +96253,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94108,6 +96276,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94130,6 +96299,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94152,6 +96322,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94174,6 +96345,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94196,6 +96368,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94218,6 +96391,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94240,6 +96414,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94262,6 +96437,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94284,6 +96460,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94306,6 +96483,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94328,6 +96506,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94350,6 +96529,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94372,6 +96552,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94394,6 +96575,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94416,6 +96598,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94438,6 +96621,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94460,6 +96644,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94482,6 +96667,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94504,6 +96690,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94526,6 +96713,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94548,6 +96736,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94570,6 +96759,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94592,6 +96782,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94614,6 +96805,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94636,6 +96828,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94658,6 +96851,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94680,6 +96874,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94702,6 +96897,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94724,6 +96920,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94746,6 +96943,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94768,6 +96966,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94790,6 +96989,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94812,6 +97012,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94834,6 +97035,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94856,6 +97058,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94878,6 +97081,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94900,6 +97104,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94922,6 +97127,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94944,6 +97150,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94966,6 +97173,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -94988,6 +97196,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95010,6 +97219,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95032,6 +97242,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95054,6 +97265,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95076,6 +97288,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95098,6 +97311,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95120,6 +97334,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95142,6 +97357,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95164,6 +97380,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95186,6 +97403,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95208,6 +97426,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95230,6 +97449,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95252,6 +97472,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95274,6 +97495,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95296,6 +97518,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95318,6 +97541,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95340,6 +97564,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95362,6 +97587,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95384,6 +97610,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95406,6 +97633,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95428,6 +97656,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95450,6 +97679,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95472,6 +97702,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95494,6 +97725,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95516,6 +97748,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95538,6 +97771,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95560,6 +97794,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95582,6 +97817,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95604,6 +97840,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95626,6 +97863,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95648,6 +97886,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95670,6 +97909,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95692,6 +97932,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95714,6 +97955,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95736,6 +97978,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95758,6 +98001,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95780,6 +98024,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95802,6 +98047,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95824,6 +98070,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95846,6 +98093,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95868,6 +98116,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95890,6 +98139,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95912,6 +98162,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95934,6 +98185,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95956,6 +98208,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -95978,6 +98231,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96000,6 +98254,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96022,6 +98277,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96044,6 +98300,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96066,6 +98323,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96088,6 +98346,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96110,6 +98369,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96132,6 +98392,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96154,6 +98415,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96176,6 +98438,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96198,6 +98461,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96220,6 +98484,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96242,6 +98507,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96264,6 +98530,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96286,6 +98553,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96308,6 +98576,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96330,6 +98599,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96352,6 +98622,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96374,6 +98645,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96396,6 +98668,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96418,6 +98691,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96440,6 +98714,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96462,6 +98737,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96484,6 +98760,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96506,6 +98783,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96528,6 +98806,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96550,6 +98829,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96572,6 +98852,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96594,6 +98875,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96616,6 +98898,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96638,6 +98921,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96660,6 +98944,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96682,6 +98967,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96704,6 +98990,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96726,6 +99013,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96748,6 +99036,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96770,6 +99059,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96792,6 +99082,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96814,6 +99105,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96836,6 +99128,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96858,6 +99151,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96880,6 +99174,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96902,6 +99197,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96924,6 +99220,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96946,6 +99243,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96968,6 +99266,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -96990,6 +99289,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97012,6 +99312,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97034,6 +99335,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97056,6 +99358,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97078,6 +99381,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97100,6 +99404,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97122,6 +99427,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97144,6 +99450,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97166,6 +99473,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97188,6 +99496,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97210,6 +99519,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97232,6 +99542,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97254,6 +99565,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97276,6 +99588,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97298,6 +99611,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97320,6 +99634,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97342,6 +99657,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97364,6 +99680,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97386,6 +99703,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97408,6 +99726,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97430,6 +99749,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97452,6 +99772,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97474,6 +99795,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97496,6 +99818,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97518,6 +99841,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97540,6 +99864,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97562,6 +99887,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97584,6 +99910,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97606,6 +99933,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97628,6 +99956,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97650,6 +99979,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97672,6 +100002,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97694,6 +100025,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97716,6 +100048,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97738,6 +100071,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97760,6 +100094,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97782,6 +100117,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97804,6 +100140,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97826,6 +100163,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97848,6 +100186,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97870,6 +100209,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97892,6 +100232,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97914,6 +100255,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97936,6 +100278,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97958,6 +100301,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -97980,6 +100324,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98002,6 +100347,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98024,6 +100370,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98046,6 +100393,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98068,6 +100416,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98090,6 +100439,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98112,6 +100462,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98134,6 +100485,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98156,6 +100508,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98178,6 +100531,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98200,6 +100554,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98222,6 +100577,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98244,6 +100600,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98266,6 +100623,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98288,6 +100646,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98310,6 +100669,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98332,6 +100692,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98354,6 +100715,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98376,6 +100738,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98398,6 +100761,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98420,6 +100784,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98442,6 +100807,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98464,6 +100830,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98486,6 +100853,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98508,6 +100876,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98530,6 +100899,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98552,6 +100922,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98574,6 +100945,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98596,6 +100968,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98618,6 +100991,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98640,6 +101014,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98662,6 +101037,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98684,6 +101060,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98706,6 +101083,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98728,6 +101106,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98750,6 +101129,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98772,6 +101152,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98794,6 +101175,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98816,6 +101198,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98838,6 +101221,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98860,6 +101244,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98882,6 +101267,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98904,6 +101290,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98926,6 +101313,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98948,6 +101336,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98970,6 +101359,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -98992,6 +101382,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99014,6 +101405,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99036,6 +101428,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99058,6 +101451,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99080,6 +101474,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99102,6 +101497,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99124,6 +101520,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99146,6 +101543,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99168,6 +101566,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99190,6 +101589,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99212,6 +101612,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99234,6 +101635,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99256,6 +101658,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99278,6 +101681,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99300,6 +101704,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99322,6 +101727,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99344,6 +101750,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99366,6 +101773,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99388,6 +101796,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99410,6 +101819,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99432,6 +101842,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99454,6 +101865,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99476,6 +101888,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99498,6 +101911,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99520,6 +101934,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99542,6 +101957,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99564,6 +101980,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99586,6 +102003,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99608,6 +102026,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99630,6 +102049,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99652,6 +102072,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99674,6 +102095,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99696,6 +102118,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99718,6 +102141,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99740,6 +102164,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99762,6 +102187,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99784,6 +102210,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99806,6 +102233,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99828,6 +102256,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99850,6 +102279,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99872,6 +102302,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99894,6 +102325,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99916,6 +102348,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99938,6 +102371,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99960,6 +102394,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -99982,6 +102417,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100004,6 +102440,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100026,6 +102463,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100048,6 +102486,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100070,6 +102509,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100092,6 +102532,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100114,6 +102555,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100136,6 +102578,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100158,6 +102601,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100180,6 +102624,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100202,6 +102647,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100224,6 +102670,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100246,6 +102693,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100268,6 +102716,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100290,6 +102739,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100312,6 +102762,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100334,6 +102785,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100356,6 +102808,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100378,6 +102831,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100400,6 +102854,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100422,6 +102877,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100444,6 +102900,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100466,6 +102923,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100488,6 +102946,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100510,6 +102969,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100532,6 +102992,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100554,6 +103015,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100576,6 +103038,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100598,6 +103061,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100620,6 +103084,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100642,6 +103107,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100664,6 +103130,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100686,6 +103153,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100708,6 +103176,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100730,6 +103199,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100752,6 +103222,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100774,6 +103245,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100796,6 +103268,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100818,6 +103291,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100840,6 +103314,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100862,6 +103337,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100884,6 +103360,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100906,6 +103383,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100928,6 +103406,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100950,6 +103429,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100972,6 +103452,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -100994,6 +103475,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101016,6 +103498,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101038,6 +103521,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101060,6 +103544,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101082,6 +103567,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101104,6 +103590,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101126,6 +103613,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101148,6 +103636,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101170,6 +103659,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101192,6 +103682,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101214,6 +103705,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101236,6 +103728,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101258,6 +103751,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101280,6 +103774,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101302,6 +103797,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101324,6 +103820,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101346,6 +103843,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101368,6 +103866,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101390,6 +103889,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101412,6 +103912,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101434,6 +103935,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101456,6 +103958,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101478,6 +103981,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101500,6 +104004,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101522,6 +104027,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101544,6 +104050,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101566,6 +104073,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101588,6 +104096,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101610,6 +104119,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101632,6 +104142,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101654,6 +104165,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101676,6 +104188,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101698,6 +104211,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101720,6 +104234,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101742,6 +104257,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101764,6 +104280,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101786,6 +104303,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101808,6 +104326,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101830,6 +104349,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101852,6 +104372,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101874,6 +104395,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101896,6 +104418,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101918,6 +104441,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101940,6 +104464,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101962,6 +104487,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -101984,6 +104510,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102006,6 +104533,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102028,6 +104556,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102050,6 +104579,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102072,6 +104602,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102094,6 +104625,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102116,6 +104648,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102138,6 +104671,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102160,6 +104694,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102182,6 +104717,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102204,6 +104740,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102226,6 +104763,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102248,6 +104786,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102270,6 +104809,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102292,6 +104832,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102314,6 +104855,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102336,6 +104878,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102358,6 +104901,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102380,6 +104924,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102402,6 +104947,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102424,6 +104970,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102446,6 +104993,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102468,6 +105016,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102490,6 +105039,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102512,6 +105062,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102534,6 +105085,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102556,6 +105108,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102578,6 +105131,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102600,6 +105154,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102622,6 +105177,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102644,6 +105200,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102666,6 +105223,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102688,6 +105246,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102710,6 +105269,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102732,6 +105292,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102754,6 +105315,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102776,6 +105338,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102798,6 +105361,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102820,6 +105384,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102842,6 +105407,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102864,6 +105430,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102886,6 +105453,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102908,6 +105476,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102930,6 +105499,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102952,6 +105522,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102974,6 +105545,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -102996,6 +105568,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103018,6 +105591,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103040,6 +105614,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103062,6 +105637,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103084,6 +105660,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103106,6 +105683,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103128,6 +105706,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103150,6 +105729,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103172,6 +105752,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103194,6 +105775,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103216,6 +105798,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103238,6 +105821,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103260,6 +105844,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103282,6 +105867,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103304,6 +105890,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103326,6 +105913,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103348,6 +105936,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103370,6 +105959,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103392,6 +105982,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103414,6 +106005,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103436,6 +106028,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103458,6 +106051,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103480,6 +106074,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103502,6 +106097,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103524,6 +106120,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103546,6 +106143,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103568,6 +106166,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103590,6 +106189,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103612,6 +106212,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103634,6 +106235,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103656,6 +106258,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103678,6 +106281,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103700,6 +106304,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103722,6 +106327,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103744,6 +106350,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103766,6 +106373,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103788,6 +106396,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103810,6 +106419,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103832,6 +106442,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103854,6 +106465,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103876,6 +106488,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103898,6 +106511,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103920,6 +106534,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103942,6 +106557,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103964,6 +106580,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -103986,6 +106603,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104008,6 +106626,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104030,6 +106649,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104052,6 +106672,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104074,6 +106695,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104096,6 +106718,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104118,6 +106741,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104140,6 +106764,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104162,6 +106787,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104184,6 +106810,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104206,6 +106833,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104228,6 +106856,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104250,6 +106879,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104272,6 +106902,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104294,6 +106925,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104316,6 +106948,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104338,6 +106971,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104360,6 +106994,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104382,6 +107017,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104404,6 +107040,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104426,6 +107063,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104448,6 +107086,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104470,6 +107109,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104492,6 +107132,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104514,6 +107155,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104536,6 +107178,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104558,6 +107201,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104580,6 +107224,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104602,6 +107247,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104624,6 +107270,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104646,6 +107293,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104668,6 +107316,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104690,6 +107339,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104712,6 +107362,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104734,6 +107385,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104756,6 +107408,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104778,6 +107431,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104800,6 +107454,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104822,6 +107477,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104844,6 +107500,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104866,6 +107523,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104888,6 +107546,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104910,6 +107569,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104932,6 +107592,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104954,6 +107615,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104976,6 +107638,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -104998,6 +107661,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105020,6 +107684,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105042,6 +107707,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105064,6 +107730,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105086,6 +107753,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105108,6 +107776,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105130,6 +107799,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105152,6 +107822,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105174,6 +107845,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105196,6 +107868,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105218,6 +107891,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105240,6 +107914,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105262,6 +107937,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105284,6 +107960,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105306,6 +107983,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105328,6 +108006,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105350,6 +108029,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105372,6 +108052,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105394,6 +108075,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105416,6 +108098,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105438,6 +108121,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105460,6 +108144,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105482,6 +108167,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105504,6 +108190,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105526,6 +108213,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105548,6 +108236,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105570,6 +108259,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105592,6 +108282,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105614,6 +108305,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105636,6 +108328,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105658,6 +108351,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105680,6 +108374,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105702,6 +108397,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105724,6 +108420,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105746,6 +108443,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105768,6 +108466,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105790,6 +108489,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105812,6 +108512,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105834,6 +108535,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105856,6 +108558,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105878,6 +108581,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105900,6 +108604,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105922,6 +108627,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105944,6 +108650,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105966,6 +108673,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -105988,6 +108696,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106010,6 +108719,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106032,6 +108742,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106054,6 +108765,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106076,6 +108788,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106098,6 +108811,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106120,6 +108834,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106142,6 +108857,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106164,6 +108880,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106186,6 +108903,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106208,6 +108926,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106230,6 +108949,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106252,6 +108972,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106274,6 +108995,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106296,6 +109018,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106318,6 +109041,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106340,6 +109064,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106362,6 +109087,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106384,6 +109110,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106406,6 +109133,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106428,6 +109156,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106450,6 +109179,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106472,6 +109202,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106494,6 +109225,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106516,6 +109248,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106538,6 +109271,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106560,6 +109294,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106582,6 +109317,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106604,6 +109340,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106626,6 +109363,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106648,6 +109386,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106670,6 +109409,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106692,6 +109432,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106714,6 +109455,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106736,6 +109478,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106758,6 +109501,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106780,6 +109524,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106802,6 +109547,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106824,6 +109570,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106846,6 +109593,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106868,6 +109616,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106890,6 +109639,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106912,6 +109662,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106934,6 +109685,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106956,6 +109708,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -106978,6 +109731,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107000,6 +109754,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107022,6 +109777,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107044,6 +109800,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107066,6 +109823,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107088,6 +109846,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107110,6 +109869,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107132,6 +109892,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107154,6 +109915,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107176,6 +109938,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107198,6 +109961,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107220,6 +109984,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107242,6 +110007,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107264,6 +110030,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107286,6 +110053,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107308,6 +110076,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107330,6 +110099,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107352,6 +110122,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107374,6 +110145,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107396,6 +110168,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107418,6 +110191,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107440,6 +110214,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107462,6 +110237,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107484,6 +110260,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107506,6 +110283,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107528,6 +110306,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107550,6 +110329,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107572,6 +110352,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107594,6 +110375,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107616,6 +110398,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107638,6 +110421,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107660,6 +110444,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107682,6 +110467,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107704,6 +110490,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107726,6 +110513,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107748,6 +110536,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107770,6 +110559,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107792,6 +110582,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107814,6 +110605,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107836,6 +110628,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107858,6 +110651,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107880,6 +110674,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107902,6 +110697,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107924,6 +110720,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107946,6 +110743,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107968,6 +110766,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -107990,6 +110789,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108012,6 +110812,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108034,6 +110835,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108056,6 +110858,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108078,6 +110881,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108100,6 +110904,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108122,6 +110927,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108144,6 +110950,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108166,6 +110973,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108188,6 +110996,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108210,6 +111019,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108232,6 +111042,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108254,6 +111065,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108276,6 +111088,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108298,6 +111111,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108320,6 +111134,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108342,6 +111157,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108364,6 +111180,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108386,6 +111203,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108408,6 +111226,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108430,6 +111249,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108452,6 +111272,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108474,6 +111295,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108496,6 +111318,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108518,6 +111341,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108540,6 +111364,7 @@
"language": "c",
"name": "client_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108562,6 +111387,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108584,6 +111410,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108606,6 +111433,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108628,6 +111456,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108650,6 +111479,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108672,6 +111502,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108694,6 +111525,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108716,6 +111548,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108738,6 +111571,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108760,6 +111594,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108782,6 +111617,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108804,6 +111640,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108826,6 +111663,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108848,6 +111686,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108870,6 +111709,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108892,6 +111732,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108914,6 +111755,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108936,6 +111778,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108958,6 +111801,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -108980,6 +111824,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109002,6 +111847,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109024,6 +111870,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109046,6 +111893,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109068,6 +111916,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109090,6 +111939,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109112,6 +111962,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109134,6 +111985,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109156,6 +112008,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109178,6 +112031,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109200,6 +112054,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109222,6 +112077,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109244,6 +112100,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109266,6 +112123,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109288,6 +112146,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109310,6 +112169,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109332,6 +112192,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109354,6 +112215,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109376,6 +112238,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109398,6 +112261,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109420,6 +112284,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109442,6 +112307,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109464,6 +112330,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109486,6 +112353,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109508,6 +112376,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109530,6 +112399,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109552,6 +112422,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109574,6 +112445,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109596,6 +112468,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109618,6 +112491,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109640,6 +112514,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109662,6 +112537,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109684,6 +112560,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109706,6 +112583,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109728,6 +112606,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109750,6 +112629,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109772,6 +112652,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109794,6 +112675,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109816,6 +112698,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109838,6 +112721,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109860,6 +112744,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109882,6 +112767,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109904,6 +112790,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109926,6 +112813,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109948,6 +112836,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109970,6 +112859,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -109992,6 +112882,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110014,6 +112905,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110036,6 +112928,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110058,6 +112951,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110080,6 +112974,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110102,6 +112997,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110124,6 +113020,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110146,6 +113043,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110168,6 +113066,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110190,6 +113089,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110212,6 +113112,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110234,6 +113135,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110256,6 +113158,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110278,6 +113181,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110300,6 +113204,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110322,6 +113227,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110344,6 +113250,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110366,6 +113273,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110388,6 +113296,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110410,6 +113319,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110432,6 +113342,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110454,6 +113365,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110476,6 +113388,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110498,6 +113411,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110520,6 +113434,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110542,6 +113457,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110564,6 +113480,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110586,6 +113503,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110608,6 +113526,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110630,6 +113549,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110652,6 +113572,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110674,6 +113595,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110696,6 +113618,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110718,6 +113641,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110740,6 +113664,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110762,6 +113687,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110784,6 +113710,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110806,6 +113733,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110828,6 +113756,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110850,6 +113779,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110872,6 +113802,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110894,6 +113825,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110916,6 +113848,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110938,6 +113871,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110960,6 +113894,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -110982,6 +113917,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111004,6 +113940,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111026,6 +113963,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111048,6 +113986,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111070,6 +114009,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111092,6 +114032,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111114,6 +114055,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111136,6 +114078,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111158,6 +114101,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111180,6 +114124,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111202,6 +114147,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111224,6 +114170,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111246,6 +114193,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111268,6 +114216,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111290,6 +114239,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111312,6 +114262,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111334,6 +114285,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111356,6 +114308,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111378,6 +114331,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111400,6 +114354,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111422,6 +114377,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111444,6 +114400,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111466,6 +114423,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111488,6 +114446,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111510,6 +114469,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111532,6 +114492,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111554,6 +114515,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111576,6 +114538,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111598,6 +114561,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111620,6 +114584,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111642,6 +114607,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111664,6 +114630,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111686,6 +114653,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111708,6 +114676,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111730,6 +114699,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111752,6 +114722,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111774,6 +114745,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111796,6 +114768,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111818,6 +114791,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111840,6 +114814,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111862,6 +114837,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111884,6 +114860,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111906,6 +114883,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111928,6 +114906,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111950,6 +114929,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111972,6 +114952,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -111994,6 +114975,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112016,6 +114998,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112038,6 +115021,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112060,6 +115044,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112082,6 +115067,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112104,6 +115090,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112126,6 +115113,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112148,6 +115136,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112170,6 +115159,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112192,6 +115182,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112214,6 +115205,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112236,6 +115228,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112258,6 +115251,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112280,6 +115274,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112302,6 +115297,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112324,6 +115320,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112346,6 +115343,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112368,6 +115366,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112390,6 +115389,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112412,6 +115412,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112434,6 +115435,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112456,6 +115458,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112478,6 +115481,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112500,6 +115504,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112522,6 +115527,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112544,6 +115550,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112566,6 +115573,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112588,6 +115596,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112610,6 +115619,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112632,6 +115642,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112654,6 +115665,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112676,6 +115688,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112698,6 +115711,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112720,6 +115734,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112742,6 +115757,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112764,6 +115780,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112786,6 +115803,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112808,6 +115826,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112830,6 +115849,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112852,6 +115872,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112874,6 +115895,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112896,6 +115918,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112918,6 +115941,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112940,6 +115964,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112962,6 +115987,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -112984,6 +116010,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113006,6 +116033,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113028,6 +116056,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113050,6 +116079,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113072,6 +116102,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113094,6 +116125,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113116,6 +116148,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113138,6 +116171,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113160,6 +116194,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113182,6 +116217,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113204,6 +116240,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113226,6 +116263,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113248,6 +116286,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113270,6 +116309,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113292,6 +116332,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113314,6 +116355,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113336,6 +116378,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113358,6 +116401,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113380,6 +116424,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113402,6 +116447,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113424,6 +116470,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113446,6 +116493,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113468,6 +116516,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113490,6 +116539,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113512,6 +116562,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113534,6 +116585,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113556,6 +116608,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113578,6 +116631,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113600,6 +116654,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113622,6 +116677,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113644,6 +116700,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113666,6 +116723,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113688,6 +116746,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113710,6 +116769,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113732,6 +116792,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113754,6 +116815,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113776,6 +116838,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113798,6 +116861,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113820,6 +116884,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113842,6 +116907,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113864,6 +116930,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113886,6 +116953,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113908,6 +116976,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113930,6 +116999,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113952,6 +117022,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113974,6 +117045,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -113996,6 +117068,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114018,6 +117091,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114040,6 +117114,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114062,6 +117137,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114084,6 +117160,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114106,6 +117183,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114128,6 +117206,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114150,6 +117229,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114172,6 +117252,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114194,6 +117275,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114216,6 +117298,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114238,6 +117321,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114260,6 +117344,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114282,6 +117367,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114304,6 +117390,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114326,6 +117413,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114348,6 +117436,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114370,6 +117459,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114392,6 +117482,29 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
+ "linux"
+ ],
+ "uses_polling": false
+ },
+ {
+ "args": [
+ "test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112"
+ ],
+ "ci_platforms": [
+ "linux"
+ ],
+ "cpu_cost": 0.1,
+ "exclude_configs": [
+ "tsan"
+ ],
+ "exclude_iomgrs": [
+ "uv"
+ ],
+ "flaky": false,
+ "language": "c",
+ "name": "hpack_parser_fuzzer_test_one_entry",
+ "platforms": [
"linux"
],
"uses_polling": false
@@ -114414,6 +117527,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114436,6 +117550,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114458,6 +117573,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114480,6 +117596,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114502,6 +117619,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114524,6 +117642,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114546,6 +117665,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114568,6 +117688,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114590,6 +117711,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114612,6 +117734,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114634,6 +117757,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114656,6 +117780,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114678,6 +117803,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114700,6 +117826,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114722,6 +117849,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114744,6 +117872,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114766,6 +117895,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114788,6 +117918,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114810,6 +117941,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114832,6 +117964,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114854,6 +117987,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114876,6 +118010,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114898,6 +118033,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114920,6 +118056,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114942,6 +118079,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114964,6 +118102,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -114986,6 +118125,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115008,6 +118148,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115030,6 +118171,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115052,6 +118194,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115074,6 +118217,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115096,6 +118240,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115118,6 +118263,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115140,6 +118286,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115162,6 +118309,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115184,6 +118332,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115206,6 +118355,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115228,6 +118378,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115250,6 +118401,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115272,6 +118424,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115294,6 +118447,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115316,6 +118470,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115338,6 +118493,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115360,6 +118516,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115382,6 +118539,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115404,6 +118562,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115426,6 +118585,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115448,6 +118608,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115470,6 +118631,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115492,6 +118654,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115514,6 +118677,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115536,6 +118700,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115558,6 +118723,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115580,6 +118746,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115602,6 +118769,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115624,6 +118792,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115646,6 +118815,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115668,6 +118838,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115690,6 +118861,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115712,6 +118884,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115734,6 +118907,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115756,6 +118930,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115778,6 +118953,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115800,6 +118976,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115822,6 +118999,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115844,6 +119022,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115866,6 +119045,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115888,6 +119068,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115910,6 +119091,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115932,6 +119114,7 @@
"language": "c",
"name": "hpack_parser_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115954,6 +119137,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115976,6 +119160,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -115998,6 +119183,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116020,6 +119206,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116042,6 +119229,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116064,6 +119252,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116086,6 +119275,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116108,6 +119298,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116130,6 +119321,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116152,6 +119344,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116174,6 +119367,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116196,6 +119390,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116218,6 +119413,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116240,6 +119436,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116262,6 +119459,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116284,6 +119482,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116306,6 +119505,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116328,6 +119528,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116350,6 +119551,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116372,6 +119574,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116394,6 +119597,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116416,6 +119620,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116438,6 +119643,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116460,6 +119666,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116482,6 +119689,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116504,6 +119712,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116526,6 +119735,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116548,6 +119758,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116570,6 +119781,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116592,6 +119804,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116614,6 +119827,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116636,6 +119850,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116658,6 +119873,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116680,6 +119896,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116702,6 +119919,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116724,6 +119942,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116746,6 +119965,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116768,6 +119988,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116790,6 +120011,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116812,6 +120034,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116834,6 +120057,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116856,6 +120080,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116878,6 +120103,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116900,6 +120126,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116922,6 +120149,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116944,6 +120172,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116966,6 +120195,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -116988,6 +120218,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117010,6 +120241,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117032,6 +120264,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117054,6 +120287,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117076,6 +120310,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117098,6 +120333,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117120,6 +120356,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117142,6 +120379,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117164,6 +120402,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117186,6 +120425,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117208,6 +120448,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117230,6 +120471,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117252,6 +120494,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117274,6 +120517,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117296,6 +120540,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117318,6 +120563,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117340,6 +120586,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117362,6 +120609,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117384,6 +120632,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117406,6 +120655,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117428,6 +120678,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117450,6 +120701,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117472,6 +120724,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117494,6 +120747,7 @@
"language": "c",
"name": "http_request_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117516,6 +120770,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117538,6 +120793,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117560,6 +120816,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117582,6 +120839,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117604,6 +120862,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117626,6 +120885,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117648,6 +120908,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117670,6 +120931,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117692,6 +120954,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117714,6 +120977,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117736,6 +121000,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117758,6 +121023,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117780,6 +121046,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117802,6 +121069,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117824,6 +121092,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117846,6 +121115,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117868,6 +121138,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117890,6 +121161,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117912,6 +121184,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117934,6 +121207,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117956,6 +121230,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -117978,6 +121253,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118000,6 +121276,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118022,6 +121299,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118044,6 +121322,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118066,6 +121345,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118088,6 +121368,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118110,6 +121391,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118132,6 +121414,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118154,6 +121437,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118176,6 +121460,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118198,6 +121483,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118220,6 +121506,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118242,6 +121529,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118264,6 +121552,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118286,6 +121575,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118308,6 +121598,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118330,6 +121621,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118352,6 +121644,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118374,6 +121667,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118396,6 +121690,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118418,6 +121713,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118440,6 +121736,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118462,6 +121759,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118484,6 +121782,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118506,6 +121805,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118528,6 +121828,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118550,6 +121851,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118572,6 +121874,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118594,6 +121897,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118616,6 +121920,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118638,6 +121943,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118660,6 +121966,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118682,6 +121989,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118704,6 +122012,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118726,6 +122035,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118748,6 +122058,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118770,6 +122081,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118792,6 +122104,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118814,6 +122127,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118836,6 +122150,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118858,6 +122173,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118880,6 +122196,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118902,6 +122219,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118924,6 +122242,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118946,6 +122265,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118968,6 +122288,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -118990,6 +122311,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119012,6 +122334,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119034,6 +122357,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119056,6 +122380,7 @@
"language": "c",
"name": "http_response_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119078,6 +122403,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119100,6 +122426,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119122,6 +122449,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119144,6 +122472,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119166,6 +122495,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119188,6 +122518,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119210,6 +122541,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119232,6 +122564,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119254,6 +122587,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119276,6 +122610,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119298,6 +122633,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119320,6 +122656,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119342,6 +122679,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119364,6 +122702,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119386,6 +122725,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119408,6 +122748,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119430,6 +122771,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119452,6 +122794,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119474,6 +122817,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119496,6 +122840,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119518,6 +122863,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119540,6 +122886,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119562,6 +122909,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119584,6 +122932,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119606,6 +122955,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119628,6 +122978,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119650,6 +123001,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119672,6 +123024,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119694,6 +123047,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119716,6 +123070,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119738,6 +123093,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119760,6 +123116,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119782,6 +123139,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119804,6 +123162,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119826,6 +123185,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119848,6 +123208,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119870,6 +123231,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119892,6 +123254,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119914,6 +123277,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119936,6 +123300,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119958,6 +123323,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -119980,6 +123346,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120002,6 +123369,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120024,6 +123392,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120046,6 +123415,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120068,6 +123438,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120090,6 +123461,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120112,6 +123484,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120134,6 +123507,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120156,6 +123530,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120178,6 +123553,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120200,6 +123576,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120222,6 +123599,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120244,6 +123622,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120266,6 +123645,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120288,6 +123668,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120310,6 +123691,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120332,6 +123714,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120354,6 +123737,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120376,6 +123760,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120398,6 +123783,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120420,6 +123806,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120442,6 +123829,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120464,6 +123852,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120486,6 +123875,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120508,6 +123898,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120530,6 +123921,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120552,6 +123944,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120574,6 +123967,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120596,6 +123990,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120618,6 +124013,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120640,6 +124036,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120662,6 +124059,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120684,6 +124082,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120706,6 +124105,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120728,6 +124128,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120750,6 +124151,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120772,6 +124174,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120794,6 +124197,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120816,6 +124220,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120838,6 +124243,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120860,6 +124266,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120882,6 +124289,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120904,6 +124312,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120926,6 +124335,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120948,6 +124358,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120970,6 +124381,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -120992,6 +124404,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121014,6 +124427,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121036,6 +124450,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121058,6 +124473,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121080,6 +124496,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121102,6 +124519,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121124,6 +124542,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121146,6 +124565,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121168,6 +124588,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121190,6 +124611,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121212,6 +124634,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121234,6 +124657,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121256,6 +124680,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121278,6 +124703,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121300,6 +124726,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121322,6 +124749,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121344,6 +124772,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121366,6 +124795,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121388,6 +124818,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121410,6 +124841,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121432,6 +124864,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121454,6 +124887,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121476,6 +124910,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121498,6 +124933,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121520,6 +124956,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121542,6 +124979,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121564,6 +125002,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121586,6 +125025,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121608,6 +125048,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121630,6 +125071,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121652,6 +125094,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121674,6 +125117,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121696,6 +125140,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121718,6 +125163,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121740,6 +125186,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121762,6 +125209,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121784,6 +125232,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121806,6 +125255,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121828,6 +125278,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121850,6 +125301,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121872,6 +125324,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121894,6 +125347,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121916,6 +125370,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121938,6 +125393,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121960,6 +125416,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -121982,6 +125439,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122004,6 +125462,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122026,6 +125485,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122048,6 +125508,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122070,6 +125531,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122092,6 +125554,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122114,6 +125577,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122136,6 +125600,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122158,6 +125623,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122180,6 +125646,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122202,6 +125669,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122224,6 +125692,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122246,6 +125715,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122268,6 +125738,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122290,6 +125761,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122312,6 +125784,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122334,6 +125807,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122356,6 +125830,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122378,6 +125853,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122400,6 +125876,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122422,6 +125899,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122444,6 +125922,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122466,6 +125945,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122488,6 +125968,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122510,6 +125991,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122532,6 +126014,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122554,6 +126037,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122576,6 +126060,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122598,6 +126083,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122620,6 +126106,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122642,6 +126129,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122664,6 +126152,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122686,6 +126175,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122708,6 +126198,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122730,6 +126221,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122752,6 +126244,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122774,6 +126267,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122796,6 +126290,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122818,6 +126313,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122840,6 +126336,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122862,6 +126359,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122884,6 +126382,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122906,6 +126405,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122928,6 +126428,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122950,6 +126451,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122972,6 +126474,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -122994,6 +126497,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123016,6 +126520,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123038,6 +126543,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123060,6 +126566,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123082,6 +126589,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123104,6 +126612,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123126,6 +126635,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123148,6 +126658,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123170,6 +126681,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123192,6 +126704,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123214,6 +126727,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123236,6 +126750,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123258,6 +126773,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123280,6 +126796,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123302,6 +126819,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123324,6 +126842,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123346,6 +126865,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123368,6 +126888,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123390,6 +126911,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123412,6 +126934,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123434,6 +126957,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123456,6 +126980,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123478,6 +127003,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123500,6 +127026,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123522,6 +127049,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123544,6 +127072,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123566,6 +127095,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123588,6 +127118,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123610,6 +127141,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123632,6 +127164,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123654,6 +127187,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123676,6 +127210,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123698,6 +127233,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123720,6 +127256,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123742,6 +127279,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123764,6 +127302,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123786,6 +127325,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123808,6 +127348,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123830,6 +127371,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123852,6 +127394,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123874,6 +127417,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123896,6 +127440,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123918,6 +127463,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123940,6 +127486,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123962,6 +127509,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -123984,6 +127532,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124006,6 +127555,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124028,6 +127578,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124050,6 +127601,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124072,6 +127624,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124094,6 +127647,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124116,6 +127670,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124138,6 +127693,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124160,6 +127716,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124182,6 +127739,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124204,6 +127762,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124226,6 +127785,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124248,6 +127808,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124270,6 +127831,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124292,6 +127854,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124314,6 +127877,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124336,6 +127900,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124358,6 +127923,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124380,6 +127946,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124402,6 +127969,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124424,6 +127992,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124446,6 +128015,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124468,6 +128038,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124490,6 +128061,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124512,6 +128084,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124534,6 +128107,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124556,6 +128130,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124578,6 +128153,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124600,6 +128176,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124622,6 +128199,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124644,6 +128222,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124666,6 +128245,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124688,6 +128268,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124710,6 +128291,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124732,6 +128314,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124754,6 +128337,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124776,6 +128360,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124798,6 +128383,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124820,6 +128406,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124842,6 +128429,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124864,6 +128452,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124886,6 +128475,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124908,6 +128498,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124930,6 +128521,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124952,6 +128544,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124974,6 +128567,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -124996,6 +128590,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125018,6 +128613,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125040,6 +128636,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125062,6 +128659,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125084,6 +128682,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125106,6 +128705,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125128,6 +128728,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125150,6 +128751,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125172,6 +128774,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125194,6 +128797,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125216,6 +128820,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125238,6 +128843,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125260,6 +128866,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125282,6 +128889,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125304,6 +128912,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125326,6 +128935,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125348,6 +128958,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125370,6 +128981,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125392,6 +129004,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125414,6 +129027,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125436,6 +129050,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125458,6 +129073,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125480,6 +129096,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125502,6 +129119,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125524,6 +129142,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125546,6 +129165,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125568,6 +129188,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125590,6 +129211,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125612,6 +129234,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125634,6 +129257,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125656,6 +129280,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125678,6 +129303,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125700,6 +129326,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125722,6 +129349,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125744,6 +129372,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125766,6 +129395,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125788,6 +129418,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125810,6 +129441,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125832,6 +129464,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125854,6 +129487,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125876,6 +129510,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125898,6 +129533,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125920,6 +129556,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125942,6 +129579,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125964,6 +129602,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -125986,6 +129625,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126008,6 +129648,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126030,6 +129671,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126052,6 +129694,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126074,6 +129717,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126096,6 +129740,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126118,6 +129763,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126140,6 +129786,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126162,6 +129809,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126184,6 +129832,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126206,6 +129855,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126228,6 +129878,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126250,6 +129901,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126272,6 +129924,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126294,6 +129947,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126316,6 +129970,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126338,6 +129993,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126360,6 +130016,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126382,6 +130039,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126404,6 +130062,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126426,6 +130085,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126448,6 +130108,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126470,6 +130131,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126492,6 +130154,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126514,6 +130177,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126536,6 +130200,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126558,6 +130223,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126580,6 +130246,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126602,6 +130269,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126624,6 +130292,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126646,6 +130315,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126668,6 +130338,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126690,6 +130361,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126712,6 +130384,7 @@
"language": "c",
"name": "json_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126734,6 +130407,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126756,6 +130430,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126778,6 +130453,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126800,6 +130476,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126822,6 +130499,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126844,6 +130522,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126866,6 +130545,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126888,6 +130568,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126910,6 +130591,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126932,6 +130614,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126954,6 +130637,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126976,6 +130660,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -126998,6 +130683,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127020,6 +130706,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127042,6 +130729,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127064,6 +130752,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127086,6 +130775,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127108,6 +130798,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127130,6 +130821,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127152,6 +130844,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127174,6 +130867,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127196,6 +130890,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127218,6 +130913,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127240,6 +130936,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127262,6 +130959,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127284,6 +130982,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127306,6 +131005,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127328,6 +131028,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127350,6 +131051,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127372,6 +131074,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127394,6 +131097,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127416,6 +131120,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127438,6 +131143,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127460,6 +131166,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127482,6 +131189,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127504,6 +131212,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127526,6 +131235,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127548,6 +131258,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127570,6 +131281,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127592,6 +131304,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127614,6 +131327,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127636,6 +131350,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127658,6 +131373,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127680,6 +131396,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127702,6 +131419,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127724,6 +131442,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127746,6 +131465,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127768,6 +131488,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127790,6 +131511,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127812,6 +131534,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127834,6 +131557,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127856,6 +131580,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127878,6 +131603,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127900,6 +131626,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127922,6 +131649,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127944,6 +131672,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127966,6 +131695,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -127988,6 +131718,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128010,6 +131741,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128032,6 +131764,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128054,6 +131787,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128076,6 +131810,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128098,6 +131833,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128120,6 +131856,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128142,6 +131879,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128164,6 +131902,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128186,6 +131925,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128208,6 +131948,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128230,6 +131971,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128252,6 +131994,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128274,6 +132017,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128296,6 +132040,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128318,6 +132063,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128340,6 +132086,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128362,6 +132109,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128384,6 +132132,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128406,6 +132155,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128428,6 +132178,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128450,6 +132201,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128472,6 +132224,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128494,6 +132247,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128516,6 +132270,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128538,6 +132293,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128560,6 +132316,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128582,6 +132339,7 @@
"language": "c",
"name": "nanopb_fuzzer_response_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128604,6 +132362,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128626,6 +132385,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128648,6 +132408,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128670,6 +132431,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128692,6 +132454,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128714,6 +132477,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128736,6 +132500,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128758,6 +132523,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128780,6 +132546,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128802,6 +132569,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128824,6 +132592,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128846,6 +132615,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128868,6 +132638,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128890,6 +132661,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128912,6 +132684,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128934,6 +132707,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128956,6 +132730,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -128978,6 +132753,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129000,6 +132776,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129022,6 +132799,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129044,6 +132822,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129066,6 +132845,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129088,6 +132868,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129110,6 +132891,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129132,6 +132914,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129154,6 +132937,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129176,6 +132960,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129198,6 +132983,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129220,6 +133006,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129242,6 +133029,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129264,6 +133052,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129286,6 +133075,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129308,6 +133098,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129330,6 +133121,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129352,6 +133144,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129374,6 +133167,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129396,6 +133190,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129418,6 +133213,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129440,6 +133236,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129462,6 +133259,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129484,6 +133282,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129506,6 +133305,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129528,6 +133328,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129550,6 +133351,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129572,6 +133374,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129594,6 +133397,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129616,6 +133420,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129638,6 +133443,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129660,6 +133466,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129682,6 +133489,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129704,6 +133512,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129726,6 +133535,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129748,6 +133558,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129770,6 +133581,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129792,6 +133604,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129814,6 +133627,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129836,6 +133650,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129858,6 +133673,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129880,6 +133696,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129902,6 +133719,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129924,6 +133742,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129946,6 +133765,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129968,6 +133788,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -129990,6 +133811,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130012,6 +133834,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130034,6 +133857,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130056,6 +133880,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130078,6 +133903,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130100,6 +133926,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130122,6 +133949,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130144,6 +133972,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130166,6 +133995,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130188,6 +134018,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130210,6 +134041,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130232,6 +134064,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130254,6 +134087,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130276,6 +134110,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130298,6 +134133,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130320,6 +134156,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130342,6 +134179,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130364,6 +134202,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130386,6 +134225,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130408,6 +134248,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130430,6 +134271,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130452,6 +134294,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130474,6 +134317,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130496,6 +134340,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130518,6 +134363,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130540,6 +134386,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130562,6 +134409,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130584,6 +134432,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130606,6 +134455,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130628,6 +134478,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130650,6 +134501,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130672,6 +134524,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130694,6 +134547,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130716,6 +134570,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130738,6 +134593,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130760,6 +134616,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130782,6 +134639,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130804,6 +134662,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130826,6 +134685,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130848,6 +134708,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130870,6 +134731,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130892,6 +134754,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130914,6 +134777,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130936,6 +134800,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130958,6 +134823,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -130980,6 +134846,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131002,6 +134869,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131024,6 +134892,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131046,6 +134915,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131068,6 +134938,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131090,6 +134961,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131112,6 +134984,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131134,6 +135007,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131156,6 +135030,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131178,6 +135053,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131200,6 +135076,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131222,6 +135099,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131244,6 +135122,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131266,6 +135145,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131288,6 +135168,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131310,6 +135191,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131332,6 +135214,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131354,6 +135237,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131376,6 +135260,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131398,6 +135283,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131420,6 +135306,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131442,6 +135329,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131464,6 +135352,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131486,6 +135375,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131508,6 +135398,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131530,6 +135421,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131552,6 +135444,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131574,6 +135467,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131596,6 +135490,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131618,6 +135513,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131640,6 +135536,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131662,6 +135559,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131684,6 +135582,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131706,6 +135605,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131728,6 +135628,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131750,6 +135651,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131772,6 +135674,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131794,6 +135697,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131816,6 +135720,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131838,6 +135743,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131860,6 +135766,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131882,6 +135789,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131904,6 +135812,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131926,6 +135835,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131948,6 +135858,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131970,6 +135881,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -131992,6 +135904,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132014,6 +135927,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132036,6 +135950,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132058,6 +135973,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132080,6 +135996,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132102,6 +136019,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132124,6 +136042,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132146,6 +136065,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132168,6 +136088,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132190,6 +136111,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132212,6 +136134,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132234,6 +136157,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132256,6 +136180,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132278,6 +136203,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132300,6 +136226,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132322,6 +136249,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132344,6 +136272,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132366,6 +136295,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132388,6 +136318,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132410,6 +136341,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132432,6 +136364,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132454,6 +136387,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132476,6 +136410,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132498,6 +136433,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132520,6 +136456,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132542,6 +136479,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132564,6 +136502,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132586,6 +136525,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132608,6 +136548,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132630,6 +136571,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132652,6 +136594,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132674,6 +136617,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132696,6 +136640,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132718,6 +136663,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132740,6 +136686,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132762,6 +136709,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132784,6 +136732,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132806,6 +136755,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132828,6 +136778,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132850,6 +136801,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132872,6 +136824,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132894,6 +136847,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132916,6 +136870,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132938,6 +136893,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132960,6 +136916,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -132982,6 +136939,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133004,6 +136962,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133026,6 +136985,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133048,6 +137008,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133070,6 +137031,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133092,6 +137054,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133114,6 +137077,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133136,6 +137100,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133158,6 +137123,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133180,6 +137146,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133202,6 +137169,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133224,6 +137192,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133246,6 +137215,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133268,6 +137238,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133290,6 +137261,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133312,6 +137284,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133334,6 +137307,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133356,6 +137330,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133378,6 +137353,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133400,6 +137376,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133422,6 +137399,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133444,6 +137422,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133466,6 +137445,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133488,6 +137468,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133510,6 +137491,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133532,6 +137514,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133554,6 +137537,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133576,6 +137560,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133598,6 +137583,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133620,6 +137606,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133642,6 +137629,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133664,6 +137652,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133686,6 +137675,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133708,6 +137698,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133730,6 +137721,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133752,6 +137744,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133774,6 +137767,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133796,6 +137790,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133818,6 +137813,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133840,6 +137836,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133862,6 +137859,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133884,6 +137882,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133906,6 +137905,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133928,6 +137928,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133950,6 +137951,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133972,6 +137974,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -133994,6 +137997,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134016,6 +138020,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134038,6 +138043,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134060,6 +138066,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134082,6 +138089,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134104,6 +138112,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134126,6 +138135,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134148,6 +138158,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134170,6 +138181,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134192,6 +138204,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134214,6 +138227,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134236,6 +138250,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134258,6 +138273,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134280,6 +138296,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134302,6 +138319,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134324,6 +138342,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134346,6 +138365,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134368,6 +138388,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134390,6 +138411,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134412,6 +138434,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134434,6 +138457,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134456,6 +138480,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134478,6 +138503,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134500,6 +138526,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134522,6 +138549,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134544,6 +138572,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134566,6 +138595,7 @@
"language": "c",
"name": "nanopb_fuzzer_serverlist_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134588,6 +138618,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134610,6 +138641,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134632,6 +138664,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134654,6 +138687,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134676,6 +138710,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134698,6 +138733,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134720,6 +138756,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134742,6 +138779,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134764,6 +138802,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134786,6 +138825,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134808,6 +138848,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134830,6 +138871,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134852,6 +138894,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134874,6 +138917,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134896,6 +138940,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134918,6 +138963,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134940,6 +138986,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134962,6 +139009,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -134984,6 +139032,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135006,6 +139055,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135028,6 +139078,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135050,6 +139101,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135072,6 +139124,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135094,6 +139147,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135116,6 +139170,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135138,6 +139193,7 @@
"language": "c",
"name": "percent_decode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135160,6 +139216,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135182,6 +139239,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135204,6 +139262,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135226,6 +139285,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135248,6 +139308,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135270,6 +139331,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135292,6 +139354,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135314,6 +139377,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135336,6 +139400,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135358,6 +139423,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135380,6 +139446,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135402,6 +139469,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135424,6 +139492,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135446,6 +139515,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135468,6 +139538,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135490,6 +139561,7 @@
"language": "c",
"name": "percent_encode_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135512,6 +139584,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135534,6 +139607,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135556,6 +139630,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135578,6 +139653,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135600,6 +139676,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135622,6 +139699,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135644,6 +139722,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135666,6 +139745,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135688,6 +139768,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135710,6 +139791,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135732,6 +139814,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135754,6 +139837,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135776,6 +139860,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135798,6 +139883,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135820,6 +139906,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135842,6 +139929,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135864,6 +139952,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135886,6 +139975,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135908,6 +139998,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135930,6 +140021,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135952,6 +140044,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135974,6 +140067,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -135996,6 +140090,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136018,6 +140113,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136040,6 +140136,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136062,6 +140159,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136084,6 +140182,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136106,6 +140205,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136128,6 +140228,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136150,6 +140251,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136172,6 +140274,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136194,6 +140297,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136216,6 +140320,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136238,6 +140343,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136260,6 +140366,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136282,6 +140389,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136304,6 +140412,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136326,6 +140435,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136348,6 +140458,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136370,6 +140481,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136392,6 +140504,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136414,6 +140527,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136436,6 +140550,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136458,6 +140573,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136480,6 +140596,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136502,6 +140619,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136524,6 +140642,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136546,6 +140665,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136568,6 +140688,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136590,6 +140711,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136612,6 +140734,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136634,6 +140757,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136656,6 +140780,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136678,6 +140803,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136700,6 +140826,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136722,6 +140849,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136744,6 +140872,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136766,6 +140895,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136788,6 +140918,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136810,6 +140941,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136832,6 +140964,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136854,6 +140987,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136876,6 +141010,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136898,6 +141033,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136920,6 +141056,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136942,6 +141079,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136964,6 +141102,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -136986,6 +141125,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137008,6 +141148,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137030,6 +141171,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137052,6 +141194,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137074,6 +141217,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137096,6 +141240,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137118,6 +141263,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137140,6 +141286,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137162,6 +141309,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137184,6 +141332,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137206,6 +141355,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137228,6 +141378,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137250,6 +141401,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137272,6 +141424,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137294,6 +141447,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137316,6 +141470,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137338,6 +141493,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137360,6 +141516,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137382,6 +141539,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137404,6 +141562,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137426,6 +141585,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137448,6 +141608,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137470,6 +141631,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137492,6 +141654,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137514,6 +141677,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137536,6 +141700,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137558,6 +141723,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137580,6 +141746,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137602,6 +141769,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137624,6 +141792,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137646,6 +141815,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137668,6 +141838,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137690,6 +141861,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137712,6 +141884,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137734,6 +141907,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137756,6 +141930,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137778,6 +141953,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137800,6 +141976,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137822,6 +141999,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137844,6 +142022,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137866,6 +142045,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137888,6 +142068,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137910,6 +142091,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137932,6 +142114,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137954,6 +142137,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137976,6 +142160,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -137998,6 +142183,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138020,6 +142206,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138042,6 +142229,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138064,6 +142252,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138086,6 +142275,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138108,6 +142298,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138130,6 +142321,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138152,6 +142344,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138174,6 +142367,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138196,6 +142390,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138218,6 +142413,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138240,6 +142436,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138262,6 +142459,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138284,6 +142482,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138306,6 +142505,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138328,6 +142528,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138350,6 +142551,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138372,6 +142574,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138394,6 +142597,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138416,6 +142620,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138438,6 +142643,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138460,6 +142666,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138482,6 +142689,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138504,6 +142712,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138526,6 +142735,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138548,6 +142758,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138570,6 +142781,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138592,6 +142804,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138614,6 +142827,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138636,6 +142850,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138658,6 +142873,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138680,6 +142896,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138702,6 +142919,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138724,6 +142942,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138746,6 +142965,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138768,6 +142988,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138790,6 +143011,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138812,6 +143034,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138834,6 +143057,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138856,6 +143080,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138878,6 +143103,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138900,6 +143126,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138922,6 +143149,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138944,6 +143172,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138966,6 +143195,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -138988,6 +143218,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139010,6 +143241,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139032,6 +143264,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139054,6 +143287,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139076,6 +143310,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139098,6 +143333,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139120,6 +143356,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139142,6 +143379,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139164,6 +143402,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139186,6 +143425,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139208,6 +143448,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139230,6 +143471,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139252,6 +143494,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139274,6 +143517,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139296,6 +143540,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139318,6 +143563,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139340,6 +143586,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139362,6 +143609,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139384,6 +143632,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139406,6 +143655,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139428,6 +143678,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139450,6 +143701,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139472,6 +143724,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139494,6 +143747,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139516,6 +143770,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139538,6 +143793,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139560,6 +143816,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139582,6 +143839,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139604,6 +143862,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139626,6 +143885,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139648,6 +143908,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139670,6 +143931,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139692,6 +143954,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139714,6 +143977,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139736,6 +144000,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139758,6 +144023,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139780,6 +144046,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139802,6 +144069,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139824,6 +144092,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139846,6 +144115,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139868,6 +144138,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139890,6 +144161,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139912,6 +144184,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139934,6 +144207,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139956,6 +144230,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -139978,6 +144253,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140000,6 +144276,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140022,6 +144299,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140044,6 +144322,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140066,6 +144345,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140088,6 +144368,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140110,6 +144391,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140132,6 +144414,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140154,6 +144437,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140176,6 +144460,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140198,6 +144483,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140220,6 +144506,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140242,6 +144529,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140264,6 +144552,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140286,6 +144575,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140308,6 +144598,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140330,6 +144621,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140352,6 +144644,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140374,6 +144667,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140396,6 +144690,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140418,6 +144713,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140440,6 +144736,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140462,6 +144759,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140484,6 +144782,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140506,6 +144805,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140528,6 +144828,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140550,6 +144851,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140572,6 +144874,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140594,6 +144897,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140616,6 +144920,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140638,6 +144943,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140660,6 +144966,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140682,6 +144989,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140704,6 +145012,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140726,6 +145035,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140748,6 +145058,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140770,6 +145081,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140792,6 +145104,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140814,6 +145127,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140836,6 +145150,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140858,6 +145173,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140880,6 +145196,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140902,6 +145219,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140924,6 +145242,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140946,6 +145265,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140968,6 +145288,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -140990,6 +145311,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141012,6 +145334,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141034,6 +145357,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141056,6 +145380,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141078,6 +145403,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141100,6 +145426,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141122,6 +145449,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141144,6 +145472,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141166,6 +145495,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141188,6 +145518,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141210,6 +145541,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141232,6 +145564,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141254,6 +145587,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141276,6 +145610,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141298,6 +145633,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141320,6 +145656,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141342,6 +145679,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141364,6 +145702,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141386,6 +145725,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141408,6 +145748,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141430,6 +145771,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141452,6 +145794,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141474,6 +145817,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141496,6 +145840,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141518,6 +145863,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141540,6 +145886,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141562,6 +145909,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141584,6 +145932,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141606,6 +145955,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141628,6 +145978,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141650,6 +146001,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141672,6 +146024,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141694,6 +146047,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141716,6 +146070,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141738,6 +146093,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141760,6 +146116,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141782,6 +146139,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141804,6 +146162,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141826,6 +146185,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141848,6 +146208,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141870,6 +146231,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141892,6 +146254,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141914,6 +146277,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141936,6 +146300,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141958,6 +146323,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -141980,6 +146346,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142002,6 +146369,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142024,6 +146392,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142046,6 +146415,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142068,6 +146438,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142090,6 +146461,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142112,6 +146484,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142134,6 +146507,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142156,6 +146530,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142178,6 +146553,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142200,6 +146576,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142222,6 +146599,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142244,6 +146622,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142266,6 +146645,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142288,6 +146668,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142310,6 +146691,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142332,6 +146714,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142354,6 +146737,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142376,6 +146760,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142398,6 +146783,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142420,6 +146806,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142442,6 +146829,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142464,6 +146852,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142486,6 +146875,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142508,6 +146898,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142530,6 +146921,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142552,6 +146944,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142574,6 +146967,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142596,6 +146990,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142618,6 +147013,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142640,6 +147036,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142662,6 +147059,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142684,6 +147082,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142706,6 +147105,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142728,6 +147128,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142750,6 +147151,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142772,6 +147174,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142794,6 +147197,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142816,6 +147220,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142838,6 +147243,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142860,6 +147266,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142882,6 +147289,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142904,6 +147312,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142926,6 +147335,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142948,6 +147358,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142970,6 +147381,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -142992,6 +147404,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143014,6 +147427,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143036,6 +147450,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143058,6 +147473,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143080,6 +147496,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143102,6 +147519,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143124,6 +147542,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143146,6 +147565,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143168,6 +147588,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143190,6 +147611,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143212,6 +147634,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143234,6 +147657,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143256,6 +147680,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143278,6 +147703,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143300,6 +147726,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143322,6 +147749,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143344,6 +147772,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143366,6 +147795,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143388,6 +147818,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143410,6 +147841,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143432,6 +147864,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143454,6 +147887,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143476,6 +147910,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143498,6 +147933,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143520,6 +147956,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143542,6 +147979,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143564,6 +148002,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143586,6 +148025,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143608,6 +148048,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143630,6 +148071,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143652,6 +148094,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143674,6 +148117,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143696,6 +148140,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143718,6 +148163,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143740,6 +148186,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143762,6 +148209,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143784,6 +148232,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143806,6 +148255,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143828,6 +148278,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143850,6 +148301,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143872,6 +148324,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143894,6 +148347,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143916,6 +148370,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143938,6 +148393,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143960,6 +148416,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -143982,6 +148439,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144004,6 +148462,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144026,6 +148485,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144048,6 +148508,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144070,6 +148531,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144092,6 +148554,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144114,6 +148577,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144136,6 +148600,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144158,6 +148623,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144180,6 +148646,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144202,6 +148669,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144224,6 +148692,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144246,6 +148715,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144268,6 +148738,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144290,6 +148761,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144312,6 +148784,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144334,6 +148807,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144356,6 +148830,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144378,6 +148853,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144400,6 +148876,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144422,6 +148899,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144444,6 +148922,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144466,6 +148945,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144488,6 +148968,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144510,6 +148991,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144532,6 +149014,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144554,6 +149037,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144576,6 +149060,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144598,6 +149083,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144620,6 +149106,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144642,6 +149129,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144664,6 +149152,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144686,6 +149175,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144708,6 +149198,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144730,6 +149221,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144752,6 +149244,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144774,6 +149267,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144796,6 +149290,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144818,6 +149313,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144840,6 +149336,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144862,6 +149359,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144884,6 +149382,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144906,6 +149405,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144928,6 +149428,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144950,6 +149451,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144972,6 +149474,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -144994,6 +149497,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145016,6 +149520,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145038,6 +149543,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145060,6 +149566,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145082,6 +149589,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145104,6 +149612,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145126,6 +149635,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145148,6 +149658,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145170,6 +149681,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145192,6 +149704,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145214,6 +149727,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145236,6 +149750,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145258,6 +149773,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145280,6 +149796,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145302,6 +149819,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145324,6 +149842,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145346,6 +149865,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145368,6 +149888,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145390,6 +149911,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145412,6 +149934,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145434,6 +149957,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145456,6 +149980,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145478,6 +150003,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145500,6 +150026,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145522,6 +150049,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145544,6 +150072,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145566,6 +150095,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145588,6 +150118,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145610,6 +150141,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145632,6 +150164,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145654,6 +150187,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145676,6 +150210,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145698,6 +150233,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145720,6 +150256,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145742,6 +150279,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145764,6 +150302,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145786,6 +150325,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145808,6 +150348,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145830,6 +150371,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145852,6 +150394,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145874,6 +150417,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145896,6 +150440,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145918,6 +150463,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145940,6 +150486,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145962,6 +150509,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -145984,6 +150532,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146006,6 +150555,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146028,6 +150578,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146050,6 +150601,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146072,6 +150624,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146094,6 +150647,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146116,6 +150670,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146138,6 +150693,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146160,6 +150716,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146182,6 +150739,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146204,6 +150762,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146226,6 +150785,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146248,6 +150808,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146270,6 +150831,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146292,6 +150854,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146314,6 +150877,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146336,6 +150900,7 @@
"language": "c",
"name": "server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146358,6 +150923,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146380,6 +150946,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146402,6 +150969,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146424,6 +150992,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146446,6 +151015,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146468,6 +151038,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146490,6 +151061,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146512,6 +151084,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146534,6 +151107,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146556,6 +151130,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146578,6 +151153,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146600,6 +151176,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146622,6 +151199,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146644,6 +151222,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146666,6 +151245,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146688,6 +151268,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146710,6 +151291,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146732,6 +151314,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146754,6 +151337,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146776,6 +151360,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146798,6 +151383,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146820,6 +151406,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146842,6 +151429,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146864,6 +151452,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146886,6 +151475,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146908,6 +151498,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146930,6 +151521,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146952,6 +151544,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146974,6 +151567,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -146996,6 +151590,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147018,6 +151613,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147040,6 +151636,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147062,6 +151659,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147084,6 +151682,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147106,6 +151705,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147128,6 +151728,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147150,6 +151751,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147172,6 +151774,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147194,6 +151797,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147216,6 +151820,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147238,6 +151843,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147260,6 +151866,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147282,6 +151889,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147304,6 +151912,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147326,6 +151935,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147348,6 +151958,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147370,6 +151981,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147392,6 +152004,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147414,6 +152027,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147436,6 +152050,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147458,6 +152073,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147480,6 +152096,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147502,6 +152119,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147524,6 +152142,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147546,6 +152165,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147568,6 +152188,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147590,6 +152211,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147612,6 +152234,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147634,6 +152257,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147656,6 +152280,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147678,6 +152303,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147700,6 +152326,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147722,6 +152349,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147744,6 +152372,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147766,6 +152395,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147788,6 +152418,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147810,6 +152441,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147832,6 +152464,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147854,6 +152487,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147876,6 +152510,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147898,6 +152533,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147920,6 +152556,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147942,6 +152579,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147964,6 +152602,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -147986,6 +152625,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148008,6 +152648,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148030,6 +152671,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148052,6 +152694,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148074,6 +152717,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148096,6 +152740,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148118,6 +152763,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148140,6 +152786,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148162,6 +152809,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148184,6 +152832,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148206,6 +152855,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148228,6 +152878,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148250,6 +152901,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148272,6 +152924,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148294,6 +152947,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148316,6 +152970,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148338,6 +152993,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148360,6 +153016,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148382,6 +153039,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148404,6 +153062,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148426,6 +153085,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148448,6 +153108,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148470,6 +153131,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148492,6 +153154,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148514,6 +153177,7 @@
"language": "c",
"name": "ssl_server_fuzzer_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148536,6 +153200,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148558,6 +153223,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148580,6 +153246,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148602,6 +153269,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148624,6 +153292,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148646,6 +153315,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148668,6 +153338,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148690,6 +153361,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148712,6 +153384,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148734,6 +153407,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148756,6 +153430,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148778,6 +153453,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148800,6 +153476,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148822,6 +153499,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148844,6 +153522,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148866,6 +153545,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148888,6 +153568,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148910,6 +153591,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148932,6 +153614,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148954,6 +153637,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148976,6 +153660,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -148998,6 +153683,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149020,6 +153706,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149042,6 +153729,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149064,6 +153752,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149086,6 +153775,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149108,6 +153798,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149130,6 +153821,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149152,6 +153844,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149174,6 +153867,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149196,6 +153890,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149218,6 +153913,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149240,6 +153936,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149262,6 +153959,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149284,6 +153982,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149306,6 +154005,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149328,6 +154028,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149350,6 +154051,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149372,6 +154074,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149394,6 +154097,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149416,6 +154120,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149438,6 +154143,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149460,6 +154166,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149482,6 +154189,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149504,6 +154212,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149526,6 +154235,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149548,6 +154258,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149570,6 +154281,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149592,6 +154304,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149614,6 +154327,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149636,6 +154350,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149658,6 +154373,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149680,6 +154396,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149702,6 +154419,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149724,6 +154442,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149746,6 +154465,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149768,6 +154488,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149790,6 +154511,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149812,6 +154534,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149834,6 +154557,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149856,6 +154580,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149878,6 +154603,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
@@ -149900,6 +154626,7 @@
"language": "c",
"name": "uri_fuzzer_test_one_entry",
"platforms": [
+ "mac",
"linux"
],
"uses_polling": false
diff --git a/tools/run_tests/helper_scripts/pre_build_csharp.bat b/tools/run_tests/helper_scripts/pre_build_csharp.bat
index f37f63b584..99df1c6626 100644
--- a/tools/run_tests/helper_scripts/pre_build_csharp.bat
+++ b/tools/run_tests/helper_scripts/pre_build_csharp.bat
@@ -89,18 +89,6 @@ if exist %NUGET% (
%NUGET% restore -PackagesDirectory ../packages || goto :error
cd ..
- cd Grpc.IntegrationTesting.Client || goto :error
- %NUGET% restore -PackagesDirectory ../packages || goto :error
- cd ..
-
- cd Grpc.IntegrationTesting.QpsWorker || goto :error
- %NUGET% restore -PackagesDirectory ../packages || goto :error
- cd ..
-
- cd Grpc.IntegrationTesting.StressClient || goto :error
- %NUGET% restore -PackagesDirectory ../packages || goto :error
- cd ..
-
cd Grpc.IntegrationTesting || goto :error
%NUGET% restore -PackagesDirectory ../packages || goto :error
diff --git a/tools/run_tests/helper_scripts/pre_build_csharp.sh b/tools/run_tests/helper_scripts/pre_build_csharp.sh
index 1f808556f4..d7665e15af 100755
--- a/tools/run_tests/helper_scripts/pre_build_csharp.sh
+++ b/tools/run_tests/helper_scripts/pre_build_csharp.sh
@@ -73,18 +73,6 @@ then
nuget restore -PackagesDirectory ../packages
cd ..
- cd Grpc.IntegrationTesting.Client
- nuget restore -PackagesDirectory ../packages
- cd ..
-
- cd Grpc.IntegrationTesting.QpsWorker
- nuget restore -PackagesDirectory ../packages
- cd ..
-
- cd Grpc.IntegrationTesting.StressClient
- nuget restore -PackagesDirectory ../packages
- cd ..
-
cd Grpc.IntegrationTesting
nuget restore -PackagesDirectory ../packages
cd ..
diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py
index 89d2a9b320..3bac1199a7 100755
--- a/tools/run_tests/performance/bq_upload_result.py
+++ b/tools/run_tests/performance/bq_upload_result.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
#
@@ -30,6 +30,8 @@
# Uploads performance benchmark result file to bigquery.
+from __future__ import print_function
+
import argparse
import calendar
import json
@@ -70,7 +72,7 @@ def _upload_netperf_latency_csv_to_bigquery(dataset_id, table_id, result_file):
_create_results_table(bq, dataset_id, table_id)
if not _insert_result(bq, dataset_id, table_id, scenario_result, flatten=False):
- print 'Error uploading result to bigquery.'
+ print('Error uploading result to bigquery.')
sys.exit(1)
@@ -82,7 +84,7 @@ def _upload_scenario_result_to_bigquery(dataset_id, table_id, result_file):
_create_results_table(bq, dataset_id, table_id)
if not _insert_result(bq, dataset_id, table_id, scenario_result):
- print 'Error uploading result to bigquery.'
+ print('Error uploading result to bigquery.')
sys.exit(1)
@@ -179,4 +181,4 @@ if args.file_format == 'netperf_latency_csv':
_upload_netperf_latency_csv_to_bigquery(dataset_id, table_id, args.file_to_upload)
else:
_upload_scenario_result_to_bigquery(dataset_id, table_id, args.file_to_upload)
-print 'Successfully uploaded %s to BigQuery.\n' % args.file_to_upload
+print('Successfully uploaded %s to BigQuery.\n' % args.file_to_upload)
diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py
index 865125fcd7..1d91b61ba4 100644
--- a/tools/run_tests/performance/scenario_config.py
+++ b/tools/run_tests/performance/scenario_config.py
@@ -275,15 +275,18 @@ class CXXLanguage:
secure=secure,
categories=smoketest_categories+[SCALABLE])
- yield _ping_pong_scenario(
- 'cpp_protobuf_%s_%s_qps_unconstrained_%s_500kib_resource_quota' % (synchronicity, rpc_type, secstr),
- rpc_type=rpc_type.upper(),
- client_type='%s_CLIENT' % synchronicity.upper(),
- server_type='%s_SERVER' % synchronicity.upper(),
- unconstrained_client=synchronicity,
- secure=secure,
- categories=smoketest_categories+[SCALABLE],
- resource_quota_size=500*1024)
+ # TODO(vjpai): Re-enable this test. It has a lot of timeouts
+ # and hasn't yet been conclusively identified as a test failure
+ # or race in the library
+ # yield _ping_pong_scenario(
+ # 'cpp_protobuf_%s_%s_qps_unconstrained_%s_500kib_resource_quota' % (synchronicity, rpc_type, secstr),
+ # rpc_type=rpc_type.upper(),
+ # client_type='%s_CLIENT' % synchronicity.upper(),
+ # server_type='%s_SERVER' % synchronicity.upper(),
+ # unconstrained_client=synchronicity,
+ # secure=secure,
+ # categories=smoketest_categories+[SCALABLE],
+ # resource_quota_size=500*1024)
for channels in geometric_progression(1, 20000, math.sqrt(10)):
for outstanding in geometric_progression(1, 200000, math.sqrt(10)):
@@ -413,11 +416,12 @@ class NodeLanguage:
client_type='ASYNC_CLIENT', server_type='async_server',
client_language='c++')
- yield _ping_pong_scenario(
- 'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY',
- client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
- unconstrained_client='async',
- categories=[SCALABLE, SMOKETEST])
+ # TODO(murgatroid99): fix bugs with this scenario and re-enable it
+ # yield _ping_pong_scenario(
+ # 'node_protobuf_async_unary_qps_unconstrained', rpc_type='UNARY',
+ # client_type='ASYNC_CLIENT', server_type='ASYNC_SERVER',
+ # unconstrained_client='async',
+ # categories=[SCALABLE, SMOKETEST])
# TODO(jtattermusch): make this scenario work
#yield _ping_pong_scenario(
diff --git a/tools/run_tests/python_utils/antagonist.py b/tools/run_tests/python_utils/antagonist.py
index 857addfb38..111839ccf9 100755
--- a/tools/run_tests/python_utils/antagonist.py
+++ b/tools/run_tests/python_utils/antagonist.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2015, Google Inc.
# All rights reserved.
#
diff --git a/tools/run_tests/python_utils/dockerjob.py b/tools/run_tests/python_utils/dockerjob.py
index 0869c5cee9..709fc121a9 100755
--- a/tools/run_tests/python_utils/dockerjob.py
+++ b/tools/run_tests/python_utils/dockerjob.py
@@ -70,6 +70,23 @@ def docker_mapped_port(cid, port, timeout_seconds=15):
(port, cid))
+def wait_for_healthy(cid, shortname, timeout_seconds):
+ """Wait timeout_seconds for the container to become healthy"""
+ started = time.time()
+ while time.time() - started < timeout_seconds:
+ try:
+ output = subprocess.check_output(
+ ['docker', 'inspect', '--format="{{.State.Health.Status}}"', cid],
+ stderr=_DEVNULL)
+ if output.strip('\n') == 'healthy':
+ return
+ except subprocess.CalledProcessError as e:
+ pass
+ time.sleep(1)
+ raise Exception('Timed out waiting for %s (%s) to pass health check' %
+ (shortname, cid))
+
+
def finish_jobs(jobs):
"""Kills given docker containers and waits for corresponding jobs to finish"""
for job in jobs:
@@ -113,6 +130,9 @@ class DockerJob:
def mapped_port(self, port):
return docker_mapped_port(self._container_name, port)
+ def wait_for_healthy(self, timeout_seconds):
+ wait_for_healthy(self._container_name, self._spec.shortname, timeout_seconds)
+
def kill(self, suppress_failure=False):
"""Sends kill signal to the container."""
if suppress_failure:
diff --git a/tools/run_tests/python_utils/filter_pull_request_tests.py b/tools/run_tests/python_utils/filter_pull_request_tests.py
index 3734f025d5..e013376295 100644
--- a/tools/run_tests/python_utils/filter_pull_request_tests.py
+++ b/tools/run_tests/python_utils/filter_pull_request_tests.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2015, Google Inc.
# All rights reserved.
#
@@ -30,7 +30,10 @@
"""Filter out tests based on file differences compared to merge target branch"""
+from __future__ import print_function
+
import re
+import six
from subprocess import check_output
@@ -125,7 +128,7 @@ _WHITELIST_DICT = {
}
# Add all triggers to their respective test suites
-for trigger, test_suites in _WHITELIST_DICT.iteritems():
+for trigger, test_suites in six.iteritems(_WHITELIST_DICT):
for test_suite in test_suites:
test_suite.add_trigger(trigger)
diff --git a/tools/run_tests/python_utils/jobset.py b/tools/run_tests/python_utils/jobset.py
index f3047431e2..5d812f28ee 100755
--- a/tools/run_tests/python_utils/jobset.py
+++ b/tools/run_tests/python_utils/jobset.py
@@ -476,13 +476,13 @@ def run(cmdlines,
skip_jobs=False,
quiet_success=False):
if skip_jobs:
- results = {}
+ resultset = {}
skipped_job_result = JobResult()
skipped_job_result.state = 'SKIPPED'
for job in cmdlines:
message('SKIPPED', job.shortname, do_newline=True)
- results[job.shortname] = [skipped_job_result]
- return results
+ resultset[job.shortname] = [skipped_job_result]
+ return 0, resultset
js = Jobset(check_cancelled,
maxjobs if maxjobs is not None else _DEFAULT_MAX_JOBS,
newline_on_success, travis, stop_on_failure, add_env,
diff --git a/tools/run_tests/python_utils/port_server.py b/tools/run_tests/python_utils/port_server.py
index e9b3f7ff79..dbd32efc0e 100755
--- a/tools/run_tests/python_utils/port_server.py
+++ b/tools/run_tests/python_utils/port_server.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2015, Google Inc.
# All rights reserved.
#
diff --git a/tools/run_tests/python_utils/report_utils.py b/tools/run_tests/python_utils/report_utils.py
index 9dad60408f..131772f55f 100644
--- a/tools/run_tests/python_utils/report_utils.py
+++ b/tools/run_tests/python_utils/report_utils.py
@@ -40,6 +40,7 @@ except (ImportError):
import os
import string
import xml.etree.cElementTree as ET
+import six
def _filter_msg(msg, output_format):
@@ -63,7 +64,7 @@ def render_junit_xml_report(resultset, xml_report, suite_package='grpc',
root = ET.Element('testsuites')
testsuite = ET.SubElement(root, 'testsuite', id='1', package=suite_package,
name=suite_name)
- for shortname, results in resultset.iteritems():
+ for shortname, results in six.iteritems(resultset):
for result in results:
xml_test = ET.SubElement(testsuite, 'testcase', name=shortname)
if result.elapsed_time:
diff --git a/tools/run_tests/run_build_statistics.py b/tools/run_tests/run_build_statistics.py
index 654cf95a38..dd11a45e78 100755
--- a/tools/run_tests/run_build_statistics.py
+++ b/tools/run_tests/run_build_statistics.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
#
@@ -30,6 +30,8 @@
"""Tool to get build statistics from Jenkins and upload to BigQuery."""
+from __future__ import print_function
+
import argparse
import jenkinsapi
from jenkinsapi.custom_exceptions import JenkinsAPIException
@@ -243,6 +245,6 @@ for build_name in _BUILDS.keys() if 'all' in args.builds else args.builds:
rows = [big_query_utils.make_row(build_number, build_result)]
if not big_query_utils.insert_rows(bq, _PROJECT_ID, _DATASET_ID, build_name,
rows):
- print '====> Error uploading result to bigquery.'
+ print('====> Error uploading result to bigquery.')
sys.exit(1)
diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py
index 0d5bec1d67..ce4dfb863e 100755
--- a/tools/run_tests/run_interop_tests.py
+++ b/tools/run_tests/run_interop_tests.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2015, Google Inc.
# All rights reserved.
#
@@ -44,6 +44,7 @@ import sys
import tempfile
import time
import uuid
+import six
import python_utils.dockerjob as dockerjob
import python_utils.jobset as jobset
@@ -501,6 +502,28 @@ def docker_run_cmdline(cmdline, image, docker_args=[], cwd=None, environ=None):
return docker_cmdline
+def manual_cmdline(docker_cmdline):
+ """Returns docker cmdline adjusted for manual invocation."""
+ print_cmdline = []
+ for item in docker_cmdline:
+ if item.startswith('--name='):
+ continue
+ # add quotes when necessary
+ if any(character.isspace() for character in item):
+ item = "\"%s\"" % item
+ print_cmdline.append(item)
+ return ' '.join(print_cmdline)
+
+
+def write_cmdlog_maybe(cmdlog, filename):
+ """Returns docker cmdline adjusted for manual invocation."""
+ if cmdlog:
+ with open(filename, 'w') as logfile:
+ logfile.write('#!/bin/bash\n')
+ logfile.writelines("%s\n" % line for line in cmdlog)
+ print('Command log written to file %s' % filename)
+
+
def bash_cmdline(cmdline):
"""Creates bash -c cmdline from args list."""
# Use login shell:
@@ -551,7 +574,8 @@ def _job_kill_handler(job):
def cloud_to_prod_jobspec(language, test_case, server_host_name,
- server_host_detail, docker_image=None, auth=False):
+ server_host_detail, docker_image=None, auth=False,
+ manual_cmd_log=None):
"""Creates jobspec for cloud-to-prod interop test"""
container_name = None
cmdargs = [
@@ -576,7 +600,9 @@ def cloud_to_prod_jobspec(language, test_case, server_host_name,
cwd=cwd,
environ=environ,
docker_args=['--net=host',
- '--name', container_name])
+ '--name=%s' % container_name])
+ if manual_cmd_log is not None:
+ manual_cmd_log.append(manual_cmdline(cmdline))
cwd = None
environ = None
@@ -597,7 +623,8 @@ def cloud_to_prod_jobspec(language, test_case, server_host_name,
def cloud_to_cloud_jobspec(language, test_case, server_name, server_host,
- server_port, docker_image=None, insecure=False):
+ server_port, docker_image=None, insecure=False,
+ manual_cmd_log=None):
"""Creates jobspec for cloud-to-cloud interop test"""
interop_only_options = [
'--server_host_override=foo.test.google.fr',
@@ -607,17 +634,13 @@ def cloud_to_cloud_jobspec(language, test_case, server_name, server_host,
common_options = [
'--test_case=%s' % test_case,
'--server_host=%s' % server_host,
+ '--server_port=%s' % server_port,
]
if test_case in _HTTP2_BADSERVER_TEST_CASES:
- # We are running the http2_badserver_interop test. Adjust command line accordingly.
- offset = sorted(_HTTP2_BADSERVER_TEST_CASES).index(test_case)
- client_options = common_options + ['--server_port=%s' %
- (int(server_port)+offset)]
- cmdline = bash_cmdline(language.client_cmd_http2interop(client_options))
+ cmdline = bash_cmdline(language.client_cmd_http2interop(common_options))
cwd = language.http2_cwd
else:
- client_options = interop_only_options + common_options + ['--server_port=%s' % server_port]
- cmdline = bash_cmdline(language.client_cmd(client_options))
+ cmdline = bash_cmdline(language.client_cmd(common_options+interop_only_options))
cwd = language.client_cwd
environ = language.global_env()
@@ -628,7 +651,9 @@ def cloud_to_cloud_jobspec(language, test_case, server_name, server_host,
environ=environ,
cwd=cwd,
docker_args=['--net=host',
- '--name', container_name])
+ '--name=%s' % container_name])
+ if manual_cmd_log is not None:
+ manual_cmd_log.append(manual_cmdline(cmdline))
cwd = None
test_job = jobset.JobSpec(
@@ -646,37 +671,49 @@ def cloud_to_cloud_jobspec(language, test_case, server_name, server_host,
return test_job
-def server_jobspec(language, docker_image, insecure=False):
+def server_jobspec(language, docker_image, insecure=False, manual_cmd_log=None):
"""Create jobspec for running a server"""
container_name = dockerjob.random_name('interop_server_%s' % language.safename)
cmdline = bash_cmdline(
language.server_cmd(['--port=%s' % _DEFAULT_SERVER_PORT,
'--use_tls=%s' % ('false' if insecure else 'true')]))
environ = language.global_env()
+ docker_args = ['--name=%s' % container_name]
if language.safename == 'http2':
# we are running the http2 interop server. Open next N ports beginning
# with the server port. These ports are used for http2 interop test
- # (one test case per port). We also attach the docker container running
- # the server to local network, so we don't have to mess with port mapping
- port_args = [
- '-p', str(_DEFAULT_SERVER_PORT+0),
- '-p', str(_DEFAULT_SERVER_PORT+1),
- '-p', str(_DEFAULT_SERVER_PORT+2),
- '-p', str(_DEFAULT_SERVER_PORT+3),
- '-p', str(_DEFAULT_SERVER_PORT+4),
- '-p', str(_DEFAULT_SERVER_PORT+5),
- '-p', str(_DEFAULT_SERVER_PORT+6),
- '--net=host',
+ # (one test case per port).
+ docker_args += list(
+ itertools.chain.from_iterable(('-p', str(_DEFAULT_SERVER_PORT + i))
+ for i in range(
+ len(_HTTP2_BADSERVER_TEST_CASES))))
+ # Enable docker's healthcheck mechanism.
+ # This runs a Python script inside the container every second. The script
+ # pings the http2 server to verify it is ready. The 'health-retries' flag
+ # specifies the number of consecutive failures before docker will report
+ # the container's status as 'unhealthy'. Prior to the first 'health_retries'
+ # failures or the first success, the status will be 'starting'. 'docker ps'
+ # or 'docker inspect' can be used to see the health of the container on the
+ # command line.
+ docker_args += [
+ '--health-cmd=python test/http2_test/http2_server_health_check.py '
+ '--server_host=%s --server_port=%d'
+ % ('localhost', _DEFAULT_SERVER_PORT),
+ '--health-interval=1s',
+ '--health-retries=5',
+ '--health-timeout=10s',
]
+
else:
- port_args = ['-p', str(_DEFAULT_SERVER_PORT)]
+ docker_args += ['-p', str(_DEFAULT_SERVER_PORT)]
docker_cmdline = docker_run_cmdline(cmdline,
image=docker_image,
cwd=language.server_cwd,
environ=environ,
- docker_args=port_args +
- ['--name', container_name])
+ docker_args=docker_args)
+ if manual_cmd_log is not None:
+ manual_cmd_log.append(manual_cmdline(docker_cmdline))
server_job = jobset.JobSpec(
cmdline=docker_cmdline,
environ=environ,
@@ -806,6 +843,14 @@ argp.add_argument('--allow_flakes',
action='store_const',
const=True,
help='Allow flaky tests to show as passing (re-runs failed tests up to five times)')
+argp.add_argument('--manual_run',
+ default=False,
+ action='store_const',
+ const=True,
+ help='Prepare things for running interop tests manually. ' +
+ 'Preserve docker images after building them and skip '
+ 'actually running the tests. Only print commands to run by ' +
+ 'hand.')
argp.add_argument('--http2_interop',
default=False,
action='store_const',
@@ -837,19 +882,24 @@ if args.use_docker:
print('copied to the docker environment.')
time.sleep(5)
+if args.manual_run and not args.use_docker:
+ print('--manual_run is only supported with --use_docker option enabled.')
+ sys.exit(1)
+
if not args.use_docker and servers:
print('Running interop servers is only supported with --use_docker option enabled.')
sys.exit(1)
languages = set(_LANGUAGES[l]
for l in itertools.chain.from_iterable(
- _LANGUAGES.iterkeys() if x == 'all' else [x]
+ six.iterkeys(_LANGUAGES) if x == 'all' else [x]
for x in args.language))
languages_http2_badserver_interop = set()
if args.http2_badserver_interop:
languages_http2_badserver_interop = set(
- _LANGUAGES[l] for l in _LANGUAGES_FOR_HTTP2_BADSERVER_TESTS)
+ _LANGUAGES[l] for l in _LANGUAGES_FOR_HTTP2_BADSERVER_TESTS
+ if 'all' in args.language or l in args.language)
http2Interop = Http2Client() if args.http2_interop else None
http2InteropServer = Http2Server() if args.http2_badserver_interop else None
@@ -883,28 +933,42 @@ if args.use_docker:
else:
jobset.message('FAILED', 'Failed to build interop docker images.',
do_newline=True)
- for image in docker_images.itervalues():
+ for image in six.itervalues(docker_images):
dockerjob.remove_image(image, skip_nonexistent=True)
sys.exit(1)
+server_manual_cmd_log = [] if args.manual_run else None
+client_manual_cmd_log = [] if args.manual_run else None
+
# Start interop servers.
-server_jobs={}
-server_addresses={}
+server_jobs = {}
+server_addresses = {}
+http2_badserver_ports = ()
try:
for s in servers:
lang = str(s)
spec = server_jobspec(_LANGUAGES[lang], docker_images.get(lang),
- args.insecure)
- job = dockerjob.DockerJob(spec)
- server_jobs[lang] = job
- server_addresses[lang] = ('localhost', job.mapped_port(_DEFAULT_SERVER_PORT))
+ args.insecure, manual_cmd_log=server_manual_cmd_log)
+ if not args.manual_run:
+ job = dockerjob.DockerJob(spec)
+ server_jobs[lang] = job
+ server_addresses[lang] = ('localhost', job.mapped_port(_DEFAULT_SERVER_PORT))
+ else:
+ # don't run the server, set server port to a placeholder value
+ server_addresses[lang] = ('localhost', '${SERVER_PORT}')
+ http2_badserver_job = None
if args.http2_badserver_interop:
# launch a HTTP2 server emulator that creates edge cases
lang = str(http2InteropServer)
- spec = server_jobspec(http2InteropServer, docker_images.get(lang))
- job = dockerjob.DockerJob(spec)
- server_jobs[lang] = job
+ spec = server_jobspec(http2InteropServer, docker_images.get(lang),
+ manual_cmd_log=server_manual_cmd_log)
+ if not args.manual_run:
+ http2_badserver_job = dockerjob.DockerJob(spec)
+ server_jobs[lang] = http2_badserver_job
+ else:
+ # don't run the server, set server port to a placeholder value
+ server_addresses[lang] = ('localhost', '${SERVER_PORT}')
jobs = []
if args.cloud_to_prod:
@@ -918,7 +982,8 @@ try:
test_job = cloud_to_prod_jobspec(
language, test_case, server_host_name,
prod_servers[server_host_name],
- docker_image=docker_images.get(str(language)))
+ docker_image=docker_images.get(str(language)),
+ manual_cmd_log=client_manual_cmd_log)
jobs.append(test_job)
if args.http2_interop:
@@ -926,7 +991,8 @@ try:
test_job = cloud_to_prod_jobspec(
http2Interop, test_case, server_host_name,
prod_servers[server_host_name],
- docker_image=docker_images.get(str(http2Interop)))
+ docker_image=docker_images.get(str(http2Interop)),
+ manual_cmd_log=client_manual_cmd_log)
jobs.append(test_job)
if args.cloud_to_prod_auth:
@@ -939,7 +1005,8 @@ try:
test_job = cloud_to_prod_jobspec(
language, test_case, server_host_name,
prod_servers[server_host_name],
- docker_image=docker_images.get(str(language)), auth=True)
+ docker_image=docker_images.get(str(language)), auth=True,
+ manual_cmd_log=client_manual_cmd_log)
jobs.append(test_job)
for server in args.override_server:
@@ -963,7 +1030,8 @@ try:
server_host,
server_port,
docker_image=docker_images.get(str(language)),
- insecure=args.insecure)
+ insecure=args.insecure,
+ manual_cmd_log=client_manual_cmd_log)
jobs.append(test_job)
if args.http2_interop:
@@ -977,33 +1045,48 @@ try:
server_host,
server_port,
docker_image=docker_images.get(str(http2Interop)),
- insecure=args.insecure)
+ insecure=args.insecure,
+ manual_cmd_log=client_manual_cmd_log)
jobs.append(test_job)
if args.http2_badserver_interop:
+ if not args.manual_run:
+ http2_badserver_job.wait_for_healthy(timeout_seconds=600)
for language in languages_http2_badserver_interop:
for test_case in _HTTP2_BADSERVER_TEST_CASES:
+ offset = sorted(_HTTP2_BADSERVER_TEST_CASES).index(test_case)
+ server_port = _DEFAULT_SERVER_PORT+offset
+ if not args.manual_run:
+ server_port = http2_badserver_job.mapped_port(server_port)
test_job = cloud_to_cloud_jobspec(language,
test_case,
str(http2InteropServer),
'localhost',
- _DEFAULT_SERVER_PORT,
- docker_image=docker_images.get(str(language)))
+ server_port,
+ docker_image=docker_images.get(str(language)),
+ manual_cmd_log=client_manual_cmd_log)
jobs.append(test_job)
if not jobs:
print('No jobs to run.')
- for image in docker_images.itervalues():
+ for image in six.itervalues(docker_images):
dockerjob.remove_image(image, skip_nonexistent=True)
sys.exit(1)
+ if args.manual_run:
+ print('All tests will skipped --manual_run option is active.')
+
num_failures, resultset = jobset.run(jobs, newline_on_success=True,
- maxjobs=args.jobs)
+ maxjobs=args.jobs,
+ skip_jobs=args.manual_run)
if num_failures:
jobset.message('FAILED', 'Some tests failed', do_newline=True)
else:
jobset.message('SUCCESS', 'All tests passed', do_newline=True)
+ write_cmdlog_maybe(server_manual_cmd_log, 'interop_server_cmds.sh')
+ write_cmdlog_maybe(client_manual_cmd_log, 'interop_client_cmds.sh')
+
report_utils.render_junit_xml_report(resultset, 'report.xml')
for name, job in resultset.items():
@@ -1026,8 +1109,11 @@ finally:
if not job.is_running():
print('Server "%s" has exited prematurely.' % server)
- dockerjob.finish_jobs([j for j in server_jobs.itervalues()])
+ dockerjob.finish_jobs([j for j in six.itervalues(server_jobs)])
- for image in docker_images.itervalues():
- print('Removing docker image %s' % image)
- dockerjob.remove_image(image)
+ for image in six.itervalues(docker_images):
+ if not args.manual_run:
+ print('Removing docker image %s' % image)
+ dockerjob.remove_image(image)
+ else:
+ print('Preserving docker image: %s' % image)
diff --git a/tools/run_tests/run_microbenchmark.py b/tools/run_tests/run_microbenchmark.py
index 3a9461ecd3..57b2636e56 100755
--- a/tools/run_tests/run_microbenchmark.py
+++ b/tools/run_tests/run_microbenchmark.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2017, Google Inc.
# All rights reserved.
#
@@ -178,13 +178,15 @@ def run_summary(bm_name, cfg, base_json_name):
def collect_summary(bm_name, args):
heading('Summary: %s [no counters]' % bm_name)
- text(run_summary(bm_name, 'opt', 'out'))
+ text(run_summary(bm_name, 'opt', bm_name))
heading('Summary: %s [with counters]' % bm_name)
- text(run_summary(bm_name, 'counters', 'out'))
+ text(run_summary(bm_name, 'counters', bm_name))
if args.bigquery_upload:
- with open('out.csv', 'w') as f:
- f.write(subprocess.check_output(['tools/profiling/microbenchmarks/bm2bq.py', 'out.counters.json', 'out.opt.json']))
- subprocess.check_call(['bq', 'load', 'microbenchmarks.microbenchmarks', 'out.csv'])
+ with open('%s.csv' % bm_name, 'w') as f:
+ f.write(subprocess.check_output(['tools/profiling/microbenchmarks/bm2bq.py',
+ '%s.counters.json' % bm_name,
+ '%s.opt.json' % bm_name]))
+ subprocess.check_call(['bq', 'load', 'microbenchmarks.microbenchmarks', '%s.csv' % bm_name])
collectors = {
'latency': collect_latency,
@@ -199,13 +201,17 @@ argp.add_argument('-c', '--collect',
default=sorted(collectors.keys()),
help='Which collectors should be run against each benchmark')
argp.add_argument('-b', '--benchmarks',
- default=['bm_fullstack',
+ default=['bm_fullstack_unary_ping_pong',
+ 'bm_fullstack_streaming_ping_pong',
+ 'bm_fullstack_streaming_pump',
'bm_closure',
'bm_cq',
'bm_call_create',
'bm_error',
'bm_chttp2_hpack',
- 'bm_metadata'],
+ 'bm_metadata',
+ 'bm_fullstack_trickle',
+ ],
nargs='+',
type=str,
help='Which microbenchmarks should be run')
@@ -224,30 +230,39 @@ argp.add_argument('--summary_time',
help='Minimum time to run benchmarks for the summary collection')
args = argp.parse_args()
-for bm_name in args.benchmarks:
+try:
for collect in args.collect:
- collectors[collect](bm_name, args)
-if args.diff_perf:
- for bm_name in args.benchmarks:
- run_summary(bm_name, 'opt', '%s.new' % bm_name)
- where_am_i = subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).strip()
- subprocess.check_call(['git', 'checkout', args.diff_perf])
- comparables = []
- subprocess.check_call(['make', 'clean'])
- try:
for bm_name in args.benchmarks:
- try:
- run_summary(bm_name, 'opt', '%s.old' % bm_name)
- comparables.append(bm_name)
- except subprocess.CalledProcessError, e:
- pass
- finally:
- subprocess.check_call(['git', 'checkout', where_am_i])
- for bm_name in comparables:
- subprocess.check_call(['third_party/benchmark/tools/compare_bench.py',
- '%s.new.opt.json' % bm_name,
- '%s.old.opt.json' % bm_name])
-
-index_html += "</body>\n</html>\n"
-with open('reports/index.html', 'w') as f:
- f.write(index_html)
+ collectors[collect](bm_name, args)
+ if args.diff_perf:
+ if 'summary' not in args.collect:
+ for bm_name in args.benchmarks:
+ run_summary(bm_name, 'opt', bm_name)
+ run_summary(bm_name, 'counters', bm_name)
+ where_am_i = subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).strip()
+ subprocess.check_call(['git', 'checkout', args.diff_perf])
+ comparables = []
+ subprocess.check_call(['make', 'clean'])
+ try:
+ for bm_name in args.benchmarks:
+ try:
+ run_summary(bm_name, 'opt', '%s.old' % bm_name)
+ run_summary(bm_name, 'counters', '%s.old' % bm_name)
+ comparables.append(bm_name)
+ except subprocess.CalledProcessError, e:
+ pass
+ finally:
+ subprocess.check_call(['git', 'checkout', where_am_i])
+ for bm_name in comparables:
+ diff = subprocess.check_output(['tools/profiling/microbenchmarks/bm_diff.py',
+ '%s.counters.json' % bm_name,
+ '%s.opt.json' % bm_name,
+ '%s.old.counters.json' % bm_name,
+ '%s.old.opt.json' % bm_name]).strip()
+ if diff:
+ heading('Performance diff: %s' % bm_name)
+ text(diff)
+finally:
+ index_html += "</body>\n</html>\n"
+ with open('reports/index.html', 'w') as f:
+ f.write(index_html)
diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py
index 7c04d228ba..35d20be5b7 100755
--- a/tools/run_tests/run_performance_tests.py
+++ b/tools/run_tests/run_performance_tests.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
#
@@ -46,6 +46,7 @@ import tempfile
import time
import traceback
import uuid
+import six
import performance.scenario_config as scenario_config
import python_utils.jobset as jobset
@@ -101,7 +102,7 @@ def create_qpsworker_job(language, shortname=None, port=10000, remote_host=None,
user_at_host = '%s@%s' % (_REMOTE_HOST_USERNAME, remote_host)
ssh_cmd = ['ssh']
cmdline = ['timeout', '%s' % (worker_timeout + 30)] + cmdline
- ssh_cmd.extend([str(user_at_host), 'cd ~/performance_workspace/grpc/ && %s' % ' '.join(cmdline)])
+ ssh_cmd.extend([str(user_at_host), 'cd ~/performance_workspace/grpc/ && tools/run_tests/start_port_server.py && %s' % ' '.join(cmdline)])
cmdline = ssh_cmd
jobspec = jobset.JobSpec(
@@ -502,8 +503,8 @@ args = argp.parse_args()
languages = set(scenario_config.LANGUAGES[l]
for l in itertools.chain.from_iterable(
- scenario_config.LANGUAGES.iterkeys() if x == 'all' else [x]
- for x in args.language))
+ six.iterkeys(scenario_config.LANGUAGES) if x == 'all'
+ else [x] for x in args.language))
# Put together set of remote hosts where to run and build
@@ -572,8 +573,8 @@ for scenario in scenarios:
jobs.append(create_quit_jobspec(scenario.workers, remote_host=args.remote_driver_host))
scenario_failures, resultset = jobset.run(jobs, newline_on_success=True, maxjobs=1)
total_scenario_failures += scenario_failures
- merged_resultset = dict(itertools.chain(merged_resultset.iteritems(),
- resultset.iteritems()))
+ merged_resultset = dict(itertools.chain(six.iteritems(merged_resultset),
+ six.iteritems(resultset)))
finally:
# Consider qps workers that need to be killed as failures
qps_workers_killed += finish_qps_workers(scenario.workers)
diff --git a/tools/run_tests/run_stress_tests.py b/tools/run_tests/run_stress_tests.py
index a94a615b88..4eea02118e 100755
--- a/tools/run_tests/run_stress_tests.py
+++ b/tools/run_tests/run_stress_tests.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2015, Google Inc.
# All rights reserved.
#
@@ -43,6 +43,7 @@ import sys
import tempfile
import time
import uuid
+import six
import python_utils.dockerjob as dockerjob
import python_utils.jobset as jobset
@@ -239,9 +240,8 @@ servers = set(
for s in itertools.chain.from_iterable(_SERVERS if x == 'all' else [x]
for x in args.server))
-languages = set(_LANGUAGES[l]
- for l in itertools.chain.from_iterable(_LANGUAGES.iterkeys(
- ) if x == 'all' else [x] for x in args.language))
+languages = set(_LANGUAGES[l] for l in itertools.chain.from_iterable(
+ six.iterkeys(_LANGUAGES) if x == 'all' else [x] for x in args.language))
docker_images = {}
# languages for which to build docker images
@@ -267,7 +267,7 @@ if build_jobs:
jobset.message('FAILED',
'Failed to build interop docker images.',
do_newline=True)
- for image in docker_images.itervalues():
+ for image in six.itervalues(docker_images):
dockerjob.remove_image(image, skip_nonexistent=True)
sys.exit(1)
@@ -306,7 +306,7 @@ try:
if not jobs:
print('No jobs to run.')
- for image in docker_images.itervalues():
+ for image in six.itervalues(docker_images):
dockerjob.remove_image(image, skip_nonexistent=True)
sys.exit(1)
@@ -324,8 +324,8 @@ finally:
if not job.is_running():
print('Server "%s" has exited prematurely.' % server)
- dockerjob.finish_jobs([j for j in server_jobs.itervalues()])
+ dockerjob.finish_jobs([j for j in six.itervalues(server_jobs)])
- for image in docker_images.itervalues():
+ for image in six.itervalues(docker_images):
print('Removing docker image %s' % image)
dockerjob.remove_image(image)
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index d4983403cc..cba91a9a63 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -54,6 +54,7 @@ import traceback
import time
from six.moves import urllib
import uuid
+import six
import python_utils.jobset as jobset
import python_utils.report_utils as report_utils
@@ -771,7 +772,7 @@ class CSharpLanguage(object):
runtime_cmd = ['mono']
specs = []
- for assembly in tests_by_assembly.iterkeys():
+ for assembly in six.iterkeys(tests_by_assembly):
assembly_file = 'src/csharp/%s/%s/%s%s' % (assembly,
assembly_subdir,
assembly,
@@ -1298,7 +1299,9 @@ if args.use_docker:
if not args.travis:
env['TTY_FLAG'] = '-t' # enables Ctrl-C when not on Jenkins.
- run_shell_command('tools/run_tests/dockerize/build_docker_and_run_tests.sh', env=env)
+ subprocess.check_call('tools/run_tests/dockerize/build_docker_and_run_tests.sh',
+ shell=True,
+ env=env)
sys.exit(0)
_check_arch_option(args.arch)
@@ -1465,10 +1468,9 @@ def _build_and_run(
sample_size = int(num_jobs * args.sample_percent/100.0)
massaged_one_run = random.sample(massaged_one_run, sample_size)
if not isclose(args.sample_percent, 100.0):
+ assert args.runs_per_test == 1, "Can't do sampling (-p) over multiple runs (-n)."
print("Running %d tests out of %d (~%d%%)" %
(sample_size, num_jobs, args.sample_percent))
- else:
- assert args.runs_per_test == 1, "Can't do sampling (-p) over multiple runs (-n)."
if infinite_runs:
assert len(massaged_one_run) > 0, 'Must have at least one test for a -n inf run'
runs_sequence = (itertools.repeat(massaged_one_run) if infinite_runs
diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py
index 5f5df70d1d..b9bf6e5037 100755
--- a/tools/run_tests/run_tests_matrix.py
+++ b/tools/run_tests/run_tests_matrix.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2015, Google Inc.
# All rights reserved.
#
@@ -30,6 +30,8 @@
"""Run test matrix."""
+from __future__ import print_function
+
import argparse
import multiprocessing
import os
@@ -49,6 +51,9 @@ _RUNTESTS_TIMEOUT = 4*60*60
# Number of jobs assigned to each run_tests.py instance
_DEFAULT_INNER_JOBS = 2
+# report suffix is important for reports to get picked up by internal CI
+_REPORT_SUFFIX = 'sponge_log.xml'
+
def _docker_jobspec(name, runtests_args=[], inner_jobs=_DEFAULT_INNER_JOBS):
"""Run a single instance of run_tests.py in a docker container"""
@@ -57,7 +62,7 @@ def _docker_jobspec(name, runtests_args=[], inner_jobs=_DEFAULT_INNER_JOBS):
'--use_docker',
'-t',
'-j', str(inner_jobs),
- '-x', 'report_%s.xml' % name,
+ '-x', 'report_%s_%s' % (name, _REPORT_SUFFIX),
'--report_suite_name', '%s' % name] + runtests_args,
shortname='run_tests_%s' % name,
timeout_seconds=_RUNTESTS_TIMEOUT)
@@ -74,7 +79,7 @@ def _workspace_jobspec(name, runtests_args=[], workspace_name=None, inner_jobs=_
'tools/run_tests/helper_scripts/run_tests_in_workspace.sh',
'-t',
'-j', str(inner_jobs),
- '-x', '../report_%s.xml' % name,
+ '-x', '../report_%s_%s' % (name, _REPORT_SUFFIX),
'--report_suite_name', '%s' % name] + runtests_args,
environ=env,
shortname='run_tests_%s' % name,
@@ -92,19 +97,19 @@ def _generate_jobs(languages, configs, platforms, iomgr_platform = 'native',
for config in configs:
name = '%s_%s_%s_%s' % (language, platform, config, iomgr_platform)
runtests_args = ['-l', language,
- '-c', config]
+ '-c', config,
+ '--iomgr_platform', iomgr_platform]
if arch or compiler:
name += '_%s_%s' % (arch, compiler)
runtests_args += ['--arch', arch,
'--compiler', compiler]
-
runtests_args += extra_args
if platform == 'linux':
job = _docker_jobspec(name=name, runtests_args=runtests_args, inner_jobs=inner_jobs)
else:
job = _workspace_jobspec(name=name, runtests_args=runtests_args, inner_jobs=inner_jobs)
- job.labels = [platform, config, language] + labels
+ job.labels = [platform, config, language, iomgr_platform] + labels
result.append(job)
return result
@@ -412,10 +417,10 @@ if __name__ == "__main__":
maxjobs=args.jobs)
# Merge skipped tests into results to show skipped tests on report.xml
if skipped_jobs:
- skipped_results = jobset.run(skipped_jobs,
- skip_jobs=True)
+ ignored_num_skipped_failures, skipped_results = jobset.run(
+ skipped_jobs, skip_jobs=True)
resultset.update(skipped_results)
- report_utils.render_junit_xml_report(resultset, 'report.xml',
+ report_utils.render_junit_xml_report(resultset, 'report_%s' % _REPORT_SUFFIX,
suite_name='aggregate_tests')
if num_failures == 0:
diff --git a/tools/run_tests/sanity/check_sources_and_headers.py b/tools/run_tests/sanity/check_sources_and_headers.py
index a86db02b80..f2e0bfeb3d 100755
--- a/tools/run_tests/sanity/check_sources_and_headers.py
+++ b/tools/run_tests/sanity/check_sources_and_headers.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2015, Google Inc.
# All rights reserved.
#
@@ -28,6 +28,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+from __future__ import print_function
+
import json
import os
import re
diff --git a/tools/run_tests/sanity/check_submodules.sh b/tools/run_tests/sanity/check_submodules.sh
index cfe4e2731c..3c5ba16b93 100755
--- a/tools/run_tests/sanity/check_submodules.sh
+++ b/tools/run_tests/sanity/check_submodules.sh
@@ -46,7 +46,7 @@ cat << EOF | awk '{ print $1 }' | sort > $want_submodules
886e7d75368e3f4fab3f4d0d3584e4abfc557755 third_party/boringssl-with-bazel (version_for_cocoapods_7.0-857-g886e7d7)
30dbc81fb5ffdc98ea9b14b1918bfe4e8779b26e third_party/gflags (v2.2.0)
c99458533a9b4c743ed51537e25989ea55944908 third_party/googletest (release-1.7.0)
- a428e42072765993ff674fda72863c9f1aa2d268 third_party/protobuf (v3.1.0-alpha-1)
+ 593e917c176b5bc5aafa57bf9f6030d749d91cd5 third_party/protobuf (v3.1.0-alpha-1-326-g593e917)
bcad91771b7f0bff28a1cac1981d7ef2b9bcef3c third_party/thrift (bcad917)
50893291621658f355bc5b4d450a8d06a563053d third_party/zlib (v1.2.8)
EOF
diff --git a/tools/run_tests/sanity/check_test_filtering.py b/tools/run_tests/sanity/check_test_filtering.py
index 290a6e2ddf..ba03f11209 100755
--- a/tools/run_tests/sanity/check_test_filtering.py
+++ b/tools/run_tests/sanity/check_test_filtering.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
@@ -62,7 +62,7 @@ class TestFilteringTest(unittest.TestCase):
def _get_changed_files(foo):
return changed_files
filter_pull_request_tests._get_changed_files = _get_changed_files
- print
+ print()
filtered_jobs = filter_pull_request_tests.filter_tests(all_jobs, "test")
# Make sure sanity tests aren't being filtered out
diff --git a/tools/run_tests/sanity/check_version.py b/tools/run_tests/sanity/check_version.py
index e62f390818..d247260dbb 100755
--- a/tools/run_tests/sanity/check_version.py
+++ b/tools/run_tests/sanity/check_version.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
@@ -29,6 +29,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+from __future__ import print_function
+
import sys
import yaml
import os
@@ -48,13 +50,13 @@ try:
'git rev-parse --abbrev-ref HEAD',
shell=True)
except:
- print 'WARNING: not a git repository'
+ print('WARNING: not a git repository')
branch_name = None
if branch_name is not None:
m = re.match(r'^release-([0-9]+)_([0-9]+)$', branch_name)
if m:
- print 'RELEASE branch'
+ print('RELEASE branch')
# version number should align with the branched version
check_version = lambda version: (
version.major == int(m.group(1)) and
@@ -78,7 +80,7 @@ settings = build_yaml['settings']
top_version = Version(settings['version'])
if not check_version(top_version):
errors += 1
- print warning % ('version', top_version)
+ print(warning % ('version', top_version))
for tag, value in settings.iteritems():
if re.match(r'^[a-z]+_version$', tag):
@@ -86,12 +88,14 @@ for tag, value in settings.iteritems():
if tag != 'core_version':
if value.major != top_version.major:
errors += 1
- print 'major version mismatch on %s: %d vs %d' % (tag, value.major, top_version.major)
+ print('major version mismatch on %s: %d vs %d' % (tag, value.major,
+ top_version.major))
if value.minor != top_version.minor:
errors += 1
- print 'minor version mismatch on %s: %d vs %d' % (tag, value.minor, top_version.minor)
+ print('minor version mismatch on %s: %d vs %d' % (tag, value.minor,
+ top_version.minor))
if not check_version(value):
errors += 1
- print warning % (tag, value)
+ print(warning % (tag, value))
sys.exit(errors)
diff --git a/tools/run_tests/sanity/core_banned_functions.py b/tools/run_tests/sanity/core_banned_functions.py
index afac10bf80..c3c3cbec76 100755
--- a/tools/run_tests/sanity/core_banned_functions.py
+++ b/tools/run_tests/sanity/core_banned_functions.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
@@ -29,6 +29,8 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+from __future__ import print_function
+
import os
import sys
@@ -42,6 +44,12 @@ BANNED_EXCEPT = {
'grpc_slice_buffer_reset_and_unref(': ['src/core/lib/slice/slice_buffer.c'],
'grpc_slice_ref(': ['src/core/lib/slice/slice.c'],
'grpc_slice_unref(': ['src/core/lib/slice/slice.c'],
+ 'grpc_error_create(': ['src/core/lib/iomgr/error.c'],
+ 'grpc_error_ref(': ['src/core/lib/iomgr/error.c'],
+ 'grpc_error_unref(': ['src/core/lib/iomgr/error.c'],
+ 'grpc_os_error(': ['src/core/lib/iomgr/error.c'],
+ 'grpc_wsa_error(': ['src/core/lib/iomgr/error.c'],
+ 'grpc_log_if_error(': ['src/core/lib/iomgr/error.c'],
}
errors = 0
@@ -54,7 +62,7 @@ for root, dirs, files in os.walk('src/core'):
for banned, exceptions in BANNED_EXCEPT.items():
if path in exceptions: continue
if banned in text:
- print 'Illegal use of "%s" in %s' % (banned, path)
+ print('Illegal use of "%s" in %s' % (banned, path))
errors += 1
assert errors == 0
diff --git a/tools/run_tests/start_port_server.py b/tools/run_tests/start_port_server.py
index e33ac12bd3..bfd72222b6 100755
--- a/tools/run_tests/start_port_server.py
+++ b/tools/run_tests/start_port_server.py
@@ -39,8 +39,10 @@ The path to this file is called out in test/core/util/port.c, and printed as
an error message to users.
"""
+from __future__ import print_function
+
import python_utils.start_port_server as start_port_server
start_port_server.start_port_server()
-print "Port server started successfully"
+print("Port server started successfully")
diff --git a/tools/run_tests/stress_test/print_summary.py b/tools/run_tests/stress_test/print_summary.py
index cb1a33961e..6f4ada2f4f 100755
--- a/tools/run_tests/stress_test/print_summary.py
+++ b/tools/run_tests/stress_test/print_summary.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
#
diff --git a/tools/run_tests/stress_test/run_on_gke.py b/tools/run_tests/stress_test/run_on_gke.py
index e2be76e245..b190ebde7a 100755
--- a/tools/run_tests/stress_test/run_on_gke.py
+++ b/tools/run_tests/stress_test/run_on_gke.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2015-2016, Google Inc.
# All rights reserved.
#
@@ -27,6 +27,9 @@
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+from __future__ import print_function
+
import argparse
import datetime
import json
@@ -124,23 +127,24 @@ class DockerImage:
return 'gcr.io/%s/%s' % (project_id, image_name)
def build_image(self):
- print 'Building docker image: %s (tag: %s)' % (self.image_name,
- self.tag_name)
+ print('Building docker image: %s (tag: %s)' % (self.image_name,
+ self.tag_name))
os.environ['INTEROP_IMAGE'] = self.image_name
os.environ['INTEROP_IMAGE_REPOSITORY_TAG'] = self.tag_name
os.environ['BASE_NAME'] = self.dockerfile_dir
os.environ['BUILD_TYPE'] = self.build_type
- print 'DEBUG: path: ', self.build_script_path
+ print('DEBUG: path: ', self.build_script_path)
if subprocess.call(args=[self.build_script_path]) != 0:
- print 'Error in building the Docker image'
+ print('Error in building the Docker image')
return False
return True
def push_to_gke_registry(self):
cmd = ['gcloud', 'docker', 'push', self.tag_name]
- print 'Pushing %s to the GKE registry..' % self.tag_name
+ print('Pushing %s to the GKE registry..' % self.tag_name)
if subprocess.call(args=cmd) != 0:
- print 'Error in pushing the image %s to the GKE registry' % self.tag_name
+ print('Error in pushing the image %s to the GKE registry' %
+ self.tag_name)
return False
return True
@@ -199,11 +203,11 @@ class Gke:
cmd = ['kubectl', 'proxy', '--port=%d' % port]
self.p = subprocess.Popen(args=cmd)
time.sleep(2)
- print '\nStarted kubernetes proxy on port: %d' % port
+ print('\nStarted kubernetes proxy on port: %d' % port)
def __del__(self):
if self.p is not None:
- print 'Shutting down Kubernetes proxy..'
+ print('Shutting down Kubernetes proxy..')
self.p.kill()
def __init__(self, project_id, run_id, dataset_id, summary_table_id,
@@ -253,7 +257,7 @@ class Gke:
for pod_name in server_pod_spec.pod_names():
server_env['POD_NAME'] = pod_name
- print 'Creating server: %s' % pod_name
+ print('Creating server: %s' % pod_name)
is_success = kubernetes_api.create_pod_and_service(
'localhost',
self.kubernetes_port,
@@ -267,11 +271,11 @@ class Gke:
True # Headless = True for server to that GKE creates a DNS record for pod_name
)
if not is_success:
- print 'Error in launching server: %s' % pod_name
+ print('Error in launching server: %s' % pod_name)
break
if is_success:
- print 'Successfully created server(s)'
+ print('Successfully created server(s)')
return is_success
@@ -301,7 +305,7 @@ class Gke:
for pod_name in client_pod_spec.pod_names():
client_env['POD_NAME'] = pod_name
- print 'Creating client: %s' % pod_name
+ print('Creating client: %s' % pod_name)
is_success = kubernetes_api.create_pod_and_service(
'localhost',
self.kubernetes_port,
@@ -316,18 +320,18 @@ class Gke:
)
if not is_success:
- print 'Error in launching client %s' % pod_name
+ print('Error in launching client %s' % pod_name)
break
if is_success:
- print 'Successfully created all client(s)'
+ print('Successfully created all client(s)')
return is_success
def _delete_pods(self, pod_name_list):
is_success = True
for pod_name in pod_name_list:
- print 'Deleting %s' % pod_name
+ print('Deleting %s' % pod_name)
is_success = kubernetes_api.delete_pod_and_service(
'localhost',
self.kubernetes_port,
@@ -335,11 +339,11 @@ class Gke:
pod_name)
if not is_success:
- print 'Error in deleting pod %s' % pod_name
+ print('Error in deleting pod %s' % pod_name)
break
if is_success:
- print 'Successfully deleted all pods'
+ print('Successfully deleted all pods')
return is_success
@@ -353,7 +357,7 @@ class Gke:
class Config:
def __init__(self, config_filename, gcp_project_id):
- print 'Loading configuration...'
+ print('Loading configuration...')
config_dict = self._load_config(config_filename)
self.global_settings = self._parse_global_settings(config_dict,
@@ -367,7 +371,7 @@ class Config:
self.client_pod_specs_dict = self._parse_client_pod_specs(
config_dict, self.docker_images_dict, self.client_templates_dict,
self.server_pod_specs_dict)
- print 'Loaded Configuaration.'
+ print('Loaded Configuaration.')
def _parse_global_settings(self, config_dict, gcp_project_id):
global_settings_dict = config_dict['globalSettings']
@@ -540,8 +544,8 @@ def run_tests(config):
# run id. This is useful in debugging when looking at records in Biq query)
run_id = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')
dataset_id = '%s_%s' % (config.global_settings.dataset_id_prefix, run_id)
- print 'Run id:', run_id
- print 'Dataset id:', dataset_id
+ print('Run id:', run_id)
+ print('Dataset id:', dataset_id)
bq_helper = BigQueryHelper(run_id, '', '',
config.global_settings.gcp_project_id, dataset_id,
@@ -557,7 +561,7 @@ def run_tests(config):
is_success = True
try:
- print 'Launching servers..'
+ print('Launching servers..')
for name, server_pod_spec in config.server_pod_specs_dict.iteritems():
if not gke.launch_servers(server_pod_spec):
is_success = False # is_success is checked in the 'finally' block
@@ -579,11 +583,12 @@ def run_tests(config):
start_time = datetime.datetime.now()
end_time = start_time + datetime.timedelta(
seconds=config.global_settings.test_duration_secs)
- print 'Running the test until %s' % end_time.isoformat()
+ print('Running the test until %s' % end_time.isoformat())
while True:
if datetime.datetime.now() > end_time:
- print 'Test was run for %d seconds' % config.global_settings.test_duration_secs
+ print('Test was run for %d seconds' %
+ config.global_settings.test_duration_secs)
break
# Check if either stress server or clients have failed (btw, the bq_helper
@@ -591,11 +596,12 @@ def run_tests(config):
# have a failure status)
if bq_helper.check_if_any_tests_failed():
is_success = False
- print 'Some tests failed.'
+ print('Some tests failed.')
break # Don't 'return' here. We still want to call bq_helper to print qps/summary tables
# Tests running fine. Wait until next poll time to check the status
- print 'Sleeping for %d seconds..' % config.global_settings.test_poll_interval_secs
+ print('Sleeping for %d seconds..' %
+ config.global_settings.test_poll_interval_secs)
time.sleep(config.global_settings.test_poll_interval_secs)
# Print BiqQuery tables
diff --git a/tools/run_tests/task_runner.py b/tools/run_tests/task_runner.py
index fdc4668222..0ec7efbbee 100755
--- a/tools/run_tests/task_runner.py
+++ b/tools/run_tests/task_runner.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2.7
+#!/usr/bin/env python
# Copyright 2016, Google Inc.
# All rights reserved.
#
diff --git a/tools/tsan_suppressions.txt b/tools/tsan_suppressions.txt
index 765fa098f9..e0c7907228 100644
--- a/tools/tsan_suppressions.txt
+++ b/tools/tsan_suppressions.txt
@@ -6,6 +6,8 @@ race:cleanse_ctr
race:ssleay_rand_add
race:ssleay_rand_bytes
race:__sleep_for
-# protobuf has an idempotent write race in ByteSize
+# protobuf has an idempotent write race in ByteSize/GetCachedSize
# https://github.com/google/protobuf/issues/2169
race:ByteSize
+race:ByteSizeLong
+race:GetCachedSize
diff --git a/tools/ubsan_suppressions.txt b/tools/ubsan_suppressions.txt
new file mode 100644
index 0000000000..9869f98a22
--- /dev/null
+++ b/tools/ubsan_suppressions.txt
@@ -0,0 +1,7 @@
+# boringssl stuff
+nonnull-attribute:bn_wexpand
+nonnull-attribute:CBB_add_bytes
+nonnull-attribute:rsa_blinding_get
+nonnull-attribute:ssl_copy_key_material
+alignment:CRYPTO_cbc128_encrypt
+
diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln
index 623de48d3e..c5bbaed60c 100644
--- a/vsprojects/buildtests_c.sln
+++ b/vsprojects/buildtests_c.sln
@@ -45,6 +45,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "alpn_test", "vcxproj\test\a
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "arena_test", "vcxproj\test\arena_test\arena_test.vcxproj", "{D85AC722-A88F-4280-F62E-672F571787FF}"
+ ProjectSection(myProperties) = preProject
+ lib = "False"
+ EndProjectSection
+ ProjectSection(ProjectDependencies) = postProject
+ {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037}
+ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+ EndProjectSection
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bad_client_test", "vcxproj\test/bad_client\bad_client_test\bad_client_test.vcxproj", "{BA67B418-B699-E41A-9CC4-0279C49481A5}"
ProjectSection(myProperties) = preProject
lib = "True"
@@ -297,6 +306,17 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "endpoint_pair_test", "vcxpr
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "error_test", "vcxproj\test\error_test\error_test.vcxproj", "{42720233-A6D4-66BC-CCA2-06B57261D0B3}"
+ ProjectSection(myProperties) = preProject
+ lib = "False"
+ EndProjectSection
+ ProjectSection(ProjectDependencies) = postProject
+ {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}
+ {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
+ {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037}
+ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+ EndProjectSection
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fling_client", "vcxproj\test\fling_client\fling_client.vcxproj", "{0647D598-9611-F659-EA36-DF995C9F736B}"
ProjectSection(myProperties) = preProject
lib = "False"
@@ -1264,6 +1284,17 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "no_server_test", "vcxproj\t
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "parse_address_test", "vcxproj\test\parse_address_test\parse_address_test.vcxproj", "{EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}"
+ ProjectSection(myProperties) = preProject
+ lib = "False"
+ EndProjectSection
+ ProjectSection(ProjectDependencies) = postProject
+ {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}
+ {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
+ {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037}
+ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+ EndProjectSection
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "percent_encoding_test", "vcxproj\test\percent_encoding_test\percent_encoding_test.vcxproj", "{CCFC6A58-623D-9013-BFEB-C809809E2429}"
ProjectSection(myProperties) = preProject
lib = "False"
@@ -1454,6 +1485,17 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "status_conversion_test", "v
{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
EndProjectSection
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stream_owned_slice_test", "vcxproj\test\stream_owned_slice_test\stream_owned_slice_test.vcxproj", "{D5A20C05-D9B2-970B-8429-94BC3F58D1C4}"
+ ProjectSection(myProperties) = preProject
+ lib = "False"
+ EndProjectSection
+ ProjectSection(ProjectDependencies) = postProject
+ {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} = {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}
+ {29D16885-7228-4C31-81ED-5F9187C7F2A9} = {29D16885-7228-4C31-81ED-5F9187C7F2A9}
+ {EAB0A629-17A9-44DB-B5FF-E91A721FE037} = {EAB0A629-17A9-44DB-B5FF-E91A721FE037}
+ {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}
+ EndProjectSection
+EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tcp_client_uv_test", "vcxproj\test\tcp_client_uv_test\tcp_client_uv_test.vcxproj", "{9814D850-F3BB-8C7A-4C78-2751C1E272F4}"
ProjectSection(myProperties) = preProject
lib = "False"
@@ -1675,6 +1717,22 @@ Global
{5BAAE7EA-A972-DD80-F190-29B9E3110BB3}.Release-DLL|Win32.Build.0 = Release|Win32
{5BAAE7EA-A972-DD80-F190-29B9E3110BB3}.Release-DLL|x64.ActiveCfg = Release|x64
{5BAAE7EA-A972-DD80-F190-29B9E3110BB3}.Release-DLL|x64.Build.0 = Release|x64
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Debug|x64.ActiveCfg = Debug|x64
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Release|Win32.ActiveCfg = Release|Win32
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Release|x64.ActiveCfg = Release|x64
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Debug|Win32.Build.0 = Debug|Win32
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Debug|x64.Build.0 = Debug|x64
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Release|Win32.Build.0 = Release|Win32
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Release|x64.Build.0 = Release|x64
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Debug-DLL|Win32.Build.0 = Debug|Win32
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Debug-DLL|x64.ActiveCfg = Debug|x64
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Debug-DLL|x64.Build.0 = Debug|x64
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Release-DLL|Win32.ActiveCfg = Release|Win32
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Release-DLL|Win32.Build.0 = Release|Win32
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Release-DLL|x64.ActiveCfg = Release|x64
+ {D85AC722-A88F-4280-F62E-672F571787FF}.Release-DLL|x64.Build.0 = Release|x64
{BA67B418-B699-E41A-9CC4-0279C49481A5}.Debug|Win32.ActiveCfg = Debug|Win32
{BA67B418-B699-E41A-9CC4-0279C49481A5}.Debug|x64.ActiveCfg = Debug|x64
{BA67B418-B699-E41A-9CC4-0279C49481A5}.Release|Win32.ActiveCfg = Release|Win32
@@ -2043,6 +2101,22 @@ Global
{37166D50-3AAA-1156-19F6-5901DFA55172}.Release-DLL|Win32.Build.0 = Release|Win32
{37166D50-3AAA-1156-19F6-5901DFA55172}.Release-DLL|x64.ActiveCfg = Release|x64
{37166D50-3AAA-1156-19F6-5901DFA55172}.Release-DLL|x64.Build.0 = Release|x64
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Debug|Win32.ActiveCfg = Debug|Win32
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Debug|x64.ActiveCfg = Debug|x64
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Release|Win32.ActiveCfg = Release|Win32
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Release|x64.ActiveCfg = Release|x64
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Debug|Win32.Build.0 = Debug|Win32
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Debug|x64.Build.0 = Debug|x64
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Release|Win32.Build.0 = Release|Win32
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Release|x64.Build.0 = Release|x64
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Debug-DLL|Win32.Build.0 = Debug|Win32
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Debug-DLL|x64.ActiveCfg = Debug|x64
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Debug-DLL|x64.Build.0 = Debug|x64
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Release-DLL|Win32.ActiveCfg = Release|Win32
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Release-DLL|Win32.Build.0 = Release|Win32
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Release-DLL|x64.ActiveCfg = Release|x64
+ {42720233-A6D4-66BC-CCA2-06B57261D0B3}.Release-DLL|x64.Build.0 = Release|x64
{0647D598-9611-F659-EA36-DF995C9F736B}.Debug|Win32.ActiveCfg = Debug|Win32
{0647D598-9611-F659-EA36-DF995C9F736B}.Debug|x64.ActiveCfg = Debug|x64
{0647D598-9611-F659-EA36-DF995C9F736B}.Release|Win32.ActiveCfg = Release|Win32
@@ -3515,6 +3589,22 @@ Global
{A66AC548-E2B9-74CD-293C-43526EE51DCE}.Release-DLL|Win32.Build.0 = Release|Win32
{A66AC548-E2B9-74CD-293C-43526EE51DCE}.Release-DLL|x64.ActiveCfg = Release|x64
{A66AC548-E2B9-74CD-293C-43526EE51DCE}.Release-DLL|x64.Build.0 = Release|x64
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Debug|x64.ActiveCfg = Debug|x64
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Release|Win32.ActiveCfg = Release|Win32
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Release|x64.ActiveCfg = Release|x64
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Debug|Win32.Build.0 = Debug|Win32
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Debug|x64.Build.0 = Debug|x64
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Release|Win32.Build.0 = Release|Win32
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Release|x64.Build.0 = Release|x64
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Debug-DLL|Win32.Build.0 = Debug|Win32
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Debug-DLL|x64.ActiveCfg = Debug|x64
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Debug-DLL|x64.Build.0 = Debug|x64
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Release-DLL|Win32.ActiveCfg = Release|Win32
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Release-DLL|Win32.Build.0 = Release|Win32
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Release-DLL|x64.ActiveCfg = Release|x64
+ {EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}.Release-DLL|x64.Build.0 = Release|x64
{CCFC6A58-623D-9013-BFEB-C809809E2429}.Debug|Win32.ActiveCfg = Debug|Win32
{CCFC6A58-623D-9013-BFEB-C809809E2429}.Debug|x64.ActiveCfg = Debug|x64
{CCFC6A58-623D-9013-BFEB-C809809E2429}.Release|Win32.ActiveCfg = Release|Win32
@@ -3787,6 +3877,22 @@ Global
{21E2A241-9D48-02CD-92E4-4EEC98424CF5}.Release-DLL|Win32.Build.0 = Release|Win32
{21E2A241-9D48-02CD-92E4-4EEC98424CF5}.Release-DLL|x64.ActiveCfg = Release|x64
{21E2A241-9D48-02CD-92E4-4EEC98424CF5}.Release-DLL|x64.Build.0 = Release|x64
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Debug|Win32.ActiveCfg = Debug|Win32
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Debug|x64.ActiveCfg = Debug|x64
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Release|Win32.ActiveCfg = Release|Win32
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Release|x64.ActiveCfg = Release|x64
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Debug|Win32.Build.0 = Debug|Win32
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Debug|x64.Build.0 = Debug|x64
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Release|Win32.Build.0 = Release|Win32
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Release|x64.Build.0 = Release|x64
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Debug-DLL|Win32.ActiveCfg = Debug|Win32
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Debug-DLL|Win32.Build.0 = Debug|Win32
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Debug-DLL|x64.ActiveCfg = Debug|x64
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Debug-DLL|x64.Build.0 = Debug|x64
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Release-DLL|Win32.ActiveCfg = Release|Win32
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Release-DLL|Win32.Build.0 = Release|Win32
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Release-DLL|x64.ActiveCfg = Release|x64
+ {D5A20C05-D9B2-970B-8429-94BC3F58D1C4}.Release-DLL|x64.Build.0 = Release|x64
{9814D850-F3BB-8C7A-4C78-2751C1E272F4}.Debug|Win32.ActiveCfg = Debug|Win32
{9814D850-F3BB-8C7A-4C78-2751C1E272F4}.Debug|x64.ActiveCfg = Debug|x64
{9814D850-F3BB-8C7A-4C78-2751C1E272F4}.Release|Win32.ActiveCfg = Release|Win32
diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj b/vsprojects/vcxproj/gpr/gpr.vcxproj
index 44c21ddeb3..1b37ace69a 100644
--- a/vsprojects/vcxproj/gpr/gpr.vcxproj
+++ b/vsprojects/vcxproj/gpr/gpr.vcxproj
@@ -188,6 +188,7 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(SolutionDir)\..\src\core\lib\profiling\timers.h" />
+ <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\arena.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\support\backoff.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\support\block_annotate.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\support\env.h" />
@@ -208,6 +209,8 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\support\alloc.c">
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\arena.c">
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\support\avl.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\support\backoff.c">
diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters
index a5924a624a..fafd54cdf9 100644
--- a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters
+++ b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters
@@ -10,6 +10,9 @@
<ClCompile Include="$(SolutionDir)\..\src\core\lib\support\alloc.c">
<Filter>src\core\lib\support</Filter>
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\arena.c">
+ <Filter>src\core\lib\support</Filter>
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\support\avl.c">
<Filter>src\core\lib\support</Filter>
</ClCompile>
@@ -254,6 +257,9 @@
<ClInclude Include="$(SolutionDir)\..\src\core\lib\profiling\timers.h">
<Filter>src\core\lib\profiling</Filter>
</ClInclude>
+ <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\arena.h">
+ <Filter>src\core\lib\support</Filter>
+ </ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\lib\support\backoff.h">
<Filter>src\core\lib\support</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj
index 45f3037e8a..c85454a6dd 100644
--- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj
+++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj
@@ -270,6 +270,7 @@
<ClInclude Include="$(SolutionDir)\..\include\grpc++\grpc++.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\health_check_service_interface.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\call.h" />
+ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\channel_argument_option.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\client_unary_call.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\core_codegen.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\grpc_library.h" />
@@ -414,6 +415,8 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\async_generic_service.cc">
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\cpp\server\channel_argument_option.cc">
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\create_default_thread_pool.cc">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\dynamic_thread_pool.cc">
diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
index 95cdb7434c..d800b297e9 100644
--- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters
@@ -70,6 +70,9 @@
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\async_generic_service.cc">
<Filter>src\cpp\server</Filter>
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\cpp\server\channel_argument_option.cc">
+ <Filter>src\cpp\server</Filter>
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\create_default_thread_pool.cc">
<Filter>src\cpp\server</Filter>
</ClCompile>
@@ -162,6 +165,9 @@
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\call.h">
<Filter>include\grpc++\impl</Filter>
</ClInclude>
+ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\channel_argument_option.h">
+ <Filter>include\grpc++\impl</Filter>
+ </ClInclude>
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\client_unary_call.h">
<Filter>include\grpc++\impl</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
index 22ea361a02..45c0ecd35d 100644
--- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj
@@ -270,6 +270,7 @@
<ClInclude Include="$(SolutionDir)\..\include\grpc++\grpc++.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\health_check_service_interface.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\call.h" />
+ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\channel_argument_option.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\client_unary_call.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\codegen\core_codegen.h" />
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\grpc_library.h" />
@@ -398,6 +399,8 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\async_generic_service.cc">
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\cpp\server\channel_argument_option.cc">
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\create_default_thread_pool.cc">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\dynamic_thread_pool.cc">
diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
index c3cef2d4df..987d56d6a0 100644
--- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
@@ -55,6 +55,9 @@
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\async_generic_service.cc">
<Filter>src\cpp\server</Filter>
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\cpp\server\channel_argument_option.cc">
+ <Filter>src\cpp\server</Filter>
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\cpp\server\create_default_thread_pool.cc">
<Filter>src\cpp\server</Filter>
</ClCompile>
@@ -147,6 +150,9 @@
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\call.h">
<Filter>include\grpc++\impl</Filter>
</ClInclude>
+ <ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\channel_argument_option.h">
+ <Filter>include\grpc++\impl</Filter>
+ </ClInclude>
<ClInclude Include="$(SolutionDir)\..\include\grpc++\impl\client_unary_call.h">
<Filter>include\grpc++\impl</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj
index fde60be3e2..5e3b027663 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj
@@ -357,6 +357,7 @@
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" />
+ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" />
@@ -618,6 +619,12 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c">
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c">
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c">
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
index 8edbbc22be..d75ca766c0 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
@@ -181,6 +181,15 @@
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
<Filter>src\core\lib\iomgr</Filter>
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
<Filter>src\core\lib\iomgr</Filter>
</ClCompile>
@@ -944,6 +953,9 @@
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h">
<Filter>src\core\lib\iomgr</Filter>
</ClInclude>
+ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h">
<Filter>src\core\lib\iomgr</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj
index d08ceb6828..62969e31ac 100644
--- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj
+++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj
@@ -182,7 +182,7 @@
<ClInclude Include="$(SolutionDir)\..\test\core\security\oauth2_utils.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\cq_verifier.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fake_resolver.h" />
- <ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy.h" />
+ <ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy_fixture.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\iomgr\endpoint_tests.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\debugger_macros.h" />
@@ -252,6 +252,7 @@
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" />
+ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" />
@@ -317,7 +318,7 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\end2end\fake_resolver.c">
</ClCompile>
- <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy.c">
+ <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy_fixture.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.c">
</ClCompile>
@@ -461,6 +462,12 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c">
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c">
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c">
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters
index 3beaa80994..30088101f5 100644
--- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters
@@ -22,7 +22,7 @@
<ClCompile Include="$(SolutionDir)\..\test\core\end2end\fake_resolver.c">
<Filter>test\core\end2end</Filter>
</ClCompile>
- <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy.c">
+ <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy_fixture.c">
<Filter>test\core\end2end\fixtures</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.c">
@@ -238,6 +238,15 @@
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
<Filter>src\core\lib\iomgr</Filter>
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
<Filter>src\core\lib\iomgr</Filter>
</ClCompile>
@@ -518,7 +527,7 @@
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fake_resolver.h">
<Filter>test\core\end2end</Filter>
</ClInclude>
- <ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy.h">
+ <ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy_fixture.h">
<Filter>test\core\end2end\fixtures</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.h">
@@ -728,6 +737,9 @@
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h">
<Filter>src\core\lib\iomgr</Filter>
</ClInclude>
+ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h">
<Filter>src\core\lib\iomgr</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj
index 5a58cae83f..af13acef45 100644
--- a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj
@@ -149,7 +149,7 @@
<ItemGroup>
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\cq_verifier.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fake_resolver.h" />
- <ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy.h" />
+ <ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy_fixture.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\iomgr\endpoint_tests.h" />
<ClInclude Include="$(SolutionDir)\..\test\core\util\debugger_macros.h" />
@@ -168,7 +168,7 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\end2end\fake_resolver.c">
</ClCompile>
- <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy.c">
+ <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy_fixture.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.c">
</ClCompile>
diff --git a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters
index 88c875cb01..4da043ea90 100644
--- a/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_test_util_unsecure/grpc_test_util_unsecure.vcxproj.filters
@@ -7,7 +7,7 @@
<ClCompile Include="$(SolutionDir)\..\test\core\end2end\fake_resolver.c">
<Filter>test\core\end2end</Filter>
</ClCompile>
- <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy.c">
+ <ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy_fixture.c">
<Filter>test\core\end2end\fixtures</Filter>
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.c">
@@ -54,7 +54,7 @@
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fake_resolver.h">
<Filter>test\core\end2end</Filter>
</ClInclude>
- <ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy.h">
+ <ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\http_proxy_fixture.h">
<Filter>test\core\end2end\fixtures</Filter>
</ClInclude>
<ClInclude Include="$(SolutionDir)\..\test\core\end2end\fixtures\proxy.h">
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
index 22f4740b8f..11ac8bd4b2 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
@@ -347,6 +347,7 @@
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" />
+ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" />
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" />
@@ -585,6 +586,12 @@
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c">
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c">
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c">
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
</ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c">
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
index 5021cb47d8..414e2a50b8 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -184,6 +184,15 @@
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c">
<Filter>src\core\lib\iomgr</Filter>
</ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClCompile>
<ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c">
<Filter>src\core\lib\iomgr</Filter>
</ClCompile>
@@ -854,6 +863,9 @@
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h">
<Filter>src\core\lib\iomgr</Filter>
</ClInclude>
+ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h">
+ <Filter>src\core\lib\iomgr</Filter>
+ </ClInclude>
<ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h">
<Filter>src\core\lib\iomgr</Filter>
</ClInclude>
diff --git a/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj
new file mode 100644
index 0000000000..5ae2f8e483
--- /dev/null
+++ b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{D85AC722-A88F-4280-F62E-672F571787FF}</ProjectGuid>
+ <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+ <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+ <PlatformToolset>v100</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>arena_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>arena_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\core\support\arena_test.c">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+ <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+ <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ </ImportGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+ </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj.filters b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj.filters
new file mode 100644
index 0000000000..c470f17527
--- /dev/null
+++ b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj.filters
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\core\support\arena_test.c">
+ <Filter>test\core\support</Filter>
+ </ClCompile>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="test">
+ <UniqueIdentifier>{130788b2-eacc-90df-a4f6-f5102a7d3370}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core">
+ <UniqueIdentifier>{5c3e1753-6fdb-9476-f98c-a3a394fac54a}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core\support">
+ <UniqueIdentifier>{1d3d2cc8-4e69-8b2e-6ceb-6569fcb19a86}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/error_test/error_test.vcxproj b/vsprojects/vcxproj/test/error_test/error_test.vcxproj
new file mode 100644
index 0000000000..c7d0e5a100
--- /dev/null
+++ b/vsprojects/vcxproj/test/error_test/error_test.vcxproj
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{42720233-A6D4-66BC-CCA2-06B57261D0B3}</ProjectGuid>
+ <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+ <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+ <PlatformToolset>v100</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>error_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>error_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\core\iomgr\error_test.c">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+ <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+ <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+ <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+ <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ </ImportGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+ </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/error_test/error_test.vcxproj.filters b/vsprojects/vcxproj/test/error_test/error_test.vcxproj.filters
new file mode 100644
index 0000000000..d2bb372482
--- /dev/null
+++ b/vsprojects/vcxproj/test/error_test/error_test.vcxproj.filters
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\core\iomgr\error_test.c">
+ <Filter>test\core\iomgr</Filter>
+ </ClCompile>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="test">
+ <UniqueIdentifier>{3226d467-9fe9-12e9-8b53-f24f5a4c34c0}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core">
+ <UniqueIdentifier>{3d86bf5c-b8eb-36f4-efe2-7e8596188481}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core\iomgr">
+ <UniqueIdentifier>{91f383bc-92fa-7058-d971-20189eadc0ad}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/grpc_benchmark/grpc_benchmark.vcxproj b/vsprojects/vcxproj/test/grpc_benchmark/grpc_benchmark.vcxproj
new file mode 100644
index 0000000000..58586f0cb8
--- /dev/null
+++ b/vsprojects/vcxproj/test/grpc_benchmark/grpc_benchmark.vcxproj
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{31FCED31-7D88-BE3D-2D61-0840F08E0850}</ProjectGuid>
+ <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+ <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+ <PlatformToolset>v100</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>grpc_benchmark</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>grpc_benchmark</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemGroup>
+ <ClInclude Include="$(SolutionDir)\..\test\cpp\microbenchmarks\fullstack_context_mutators.h" />
+ <ClInclude Include="$(SolutionDir)\..\test\cpp\microbenchmarks\fullstack_fixtures.h" />
+ <ClInclude Include="$(SolutionDir)\..\test\cpp\microbenchmarks\helpers.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\cpp\microbenchmarks\helpers.cc">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\benchmark\benchmark.vcxproj">
+ <Project>{07978586-E47C-8709-A63E-895FBF3C3C7D}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj">
+ <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+ <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+ <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ </ImportGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+ </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/grpc_benchmark/grpc_benchmark.vcxproj.filters b/vsprojects/vcxproj/test/grpc_benchmark/grpc_benchmark.vcxproj.filters
new file mode 100644
index 0000000000..8e865bcc1b
--- /dev/null
+++ b/vsprojects/vcxproj/test/grpc_benchmark/grpc_benchmark.vcxproj.filters
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\cpp\microbenchmarks\helpers.cc">
+ <Filter>test\cpp\microbenchmarks</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="$(SolutionDir)\..\test\cpp\microbenchmarks\fullstack_context_mutators.h">
+ <Filter>test\cpp\microbenchmarks</Filter>
+ </ClInclude>
+ <ClInclude Include="$(SolutionDir)\..\test\cpp\microbenchmarks\fullstack_fixtures.h">
+ <Filter>test\cpp\microbenchmarks</Filter>
+ </ClInclude>
+ <ClInclude Include="$(SolutionDir)\..\test\cpp\microbenchmarks\helpers.h">
+ <Filter>test\cpp\microbenchmarks</Filter>
+ </ClInclude>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="test">
+ <UniqueIdentifier>{46d1162d-13b8-d144-8b76-77a6d982a9f1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\cpp">
+ <UniqueIdentifier>{1d2b47d7-8fc3-a5b6-cc85-47e31600e9d7}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\cpp\microbenchmarks">
+ <UniqueIdentifier>{2a1ac913-6c7b-fbd2-6e8f-1215e92b4af8}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/parse_address_test/parse_address_test.vcxproj b/vsprojects/vcxproj/test/parse_address_test/parse_address_test.vcxproj
new file mode 100644
index 0000000000..17046708f9
--- /dev/null
+++ b/vsprojects/vcxproj/test/parse_address_test/parse_address_test.vcxproj
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{EDEA8257-AEA8-1B0A-F95B-8D6CD7286463}</ProjectGuid>
+ <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+ <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+ <PlatformToolset>v100</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>parse_address_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>parse_address_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\parse_address_test.c">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+ <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+ <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+ <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+ <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ </ImportGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+ </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/parse_address_test/parse_address_test.vcxproj.filters b/vsprojects/vcxproj/test/parse_address_test/parse_address_test.vcxproj.filters
new file mode 100644
index 0000000000..e4e446da99
--- /dev/null
+++ b/vsprojects/vcxproj/test/parse_address_test/parse_address_test.vcxproj.filters
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\parse_address_test.c">
+ <Filter>test\core\client_channel</Filter>
+ </ClCompile>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="test">
+ <UniqueIdentifier>{1613c595-3fdf-b7ab-6d5f-667bbd7eefc7}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core">
+ <UniqueIdentifier>{cdfde21c-75c2-08ee-3d98-8ca67b5c31e0}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core\client_channel">
+ <UniqueIdentifier>{60d8328d-ca06-b3cf-cf1d-889b6677def1}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj b/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj
new file mode 100644
index 0000000000..ebbfd59f3d
--- /dev/null
+++ b/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{60523734-00BD-765B-5A5B-19E19A2E31B8}</ProjectGuid>
+ <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+ <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+ <PlatformToolset>v100</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(SolutionDir)\..\vsprojects\cpptest.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\protobuf.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>server_builder_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>server_builder_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo_messages.pb.cc">
+ </ClCompile>
+ <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\echo_messages.pb.h">
+ </ClInclude>
+ <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo_messages.grpc.pb.cc">
+ </ClCompile>
+ <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\echo_messages.grpc.pb.h">
+ </ClInclude>
+ <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo.pb.cc">
+ </ClCompile>
+ <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\echo.pb.h">
+ </ClInclude>
+ <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo.grpc.pb.cc">
+ </ClCompile>
+ <ClInclude Include="$(SolutionDir)\..\src\proto\grpc\testing\echo.grpc.pb.h">
+ </ClInclude>
+ <ClCompile Include="$(SolutionDir)\..\test\cpp\server\server_builder_test.cc">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++_test_util\grpc++_test_util.vcxproj">
+ <Project>{0BE77741-552A-929B-A497-4EF7ECE17A64}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+ <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+ <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc++\grpc++.vcxproj">
+ <Project>{C187A093-A0FE-489D-A40A-6E33DE0F9FEB}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+ <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+ <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ </ImportGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+ </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj.filters b/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj.filters
new file mode 100644
index 0000000000..c323b7a673
--- /dev/null
+++ b/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj.filters
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo_messages.proto">
+ <Filter>src\proto\grpc\testing</Filter>
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\src\proto\grpc\testing\echo.proto">
+ <Filter>src\proto\grpc\testing</Filter>
+ </ClCompile>
+ <ClCompile Include="$(SolutionDir)\..\test\cpp\server\server_builder_test.cc">
+ <Filter>test\cpp\server</Filter>
+ </ClCompile>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="src">
+ <UniqueIdentifier>{828e0ffc-a89a-de93-ae06-706d522188a1}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="src\proto">
+ <UniqueIdentifier>{538db689-e85f-c369-7020-8d78e0ee5049}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="src\proto\grpc">
+ <UniqueIdentifier>{351168ef-9b4f-6165-ff4f-0e13781910db}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="src\proto\grpc\testing">
+ <UniqueIdentifier>{530a1a67-0a37-50f8-42d0-7ccf0ec34cfc}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test">
+ <UniqueIdentifier>{67afe178-6a18-fd24-bbe6-656fee5a5f10}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\cpp">
+ <UniqueIdentifier>{aaa8777b-1bc3-abaa-5e6d-28040c5aa213}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\cpp\server">
+ <UniqueIdentifier>{af770080-f515-c773-3ae0-243d5929bbd0}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/stream_owned_slice_test/stream_owned_slice_test.vcxproj b/vsprojects/vcxproj/test/stream_owned_slice_test/stream_owned_slice_test.vcxproj
new file mode 100644
index 0000000000..09279e325d
--- /dev/null
+++ b/vsprojects/vcxproj/test/stream_owned_slice_test/stream_owned_slice_test.vcxproj
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\1.0.204.1.props')" />
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{D5A20C05-D9B2-970B-8429-94BC3F58D1C4}</ProjectGuid>
+ <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected>
+ <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
+ <PlatformToolset>v100</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
+ <PlatformToolset>v120</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'" Label="Configuration">
+ <PlatformToolset>v140</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(SolutionDir)\..\vsprojects\global.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\openssl.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\winsock.props" />
+ <Import Project="$(SolutionDir)\..\vsprojects\zlib.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <TargetName>stream_owned_slice_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
+ <TargetName>stream_owned_slice_test</TargetName>
+ <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
+ <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib>
+ <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl>
+ <Configuration-grpc_dependencies_openssl>Release</Configuration-grpc_dependencies_openssl>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>NotUsing</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <SDLCheck>true</SDLCheck>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
+ <MinimalRebuild Condition="$(Jenkins)">false</MinimalRebuild>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
+ <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\core\transport\stream_owned_slice_test.c">
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
+ <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
+ <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
+ <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
+ </ProjectReference>
+ <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
+ <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ <Import Project="$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets" Condition="Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
+ </ImportGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.10\build\native\grpc.dependencies.zlib.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.10\build\native\grpc.dependencies.zlib.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.204.1\build\native\grpc.dependencies.openssl.redist.targets')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.props')" />
+ <Error Condition="!Exists('$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\..\vsprojects\packages\grpc.dependencies.openssl.1.0.204.1\build\native\grpc.dependencies.openssl.targets')" />
+ </Target>
+</Project>
+
diff --git a/vsprojects/vcxproj/test/stream_owned_slice_test/stream_owned_slice_test.vcxproj.filters b/vsprojects/vcxproj/test/stream_owned_slice_test/stream_owned_slice_test.vcxproj.filters
new file mode 100644
index 0000000000..9a41202197
--- /dev/null
+++ b/vsprojects/vcxproj/test/stream_owned_slice_test/stream_owned_slice_test.vcxproj.filters
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <ClCompile Include="$(SolutionDir)\..\test\core\transport\stream_owned_slice_test.c">
+ <Filter>test\core\transport</Filter>
+ </ClCompile>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Filter Include="test">
+ <UniqueIdentifier>{5606d0c3-ce6d-0d92-aaa6-4cba3360af30}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core">
+ <UniqueIdentifier>{c89700dc-cc90-bd03-00e7-36ee75d20c07}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="test\core\transport">
+ <UniqueIdentifier>{faebe48f-9338-a5a4-439d-9f307d0b843b}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+</Project>
+