diff --git a/.gitignore b/.gitignore index 56e4b6d4b43e9b0c1becd55c01a26e1855d58cda..da2082c088ce09c27045e816bc0e4d9b4d00d910 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/BUILD b/BUILD index ca0a1c56076b0496b8e3ffc3efd4c5032da565fb..053f581101d5d67bc66d1194434dd7e44e2813cd 100644 --- a/BUILD +++ b/BUILD @@ -308,7 +308,9 @@ 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/atm.c", "src/core/lib/support/avl.c", "src/core/lib/support/backoff.c", "src/core/lib/support/cmdline.c", @@ -352,6 +354,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 +484,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 +605,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", @@ -679,10 +686,8 @@ grpc_cc_library( "src/core/ext/client_channel/client_channel_factory.c", "src/core/ext/client_channel/client_channel_plugin.c", "src/core/ext/client_channel/connector.c", - "src/core/ext/client_channel/default_initial_connect_string.c", "src/core/ext/client_channel/http_connect_handshaker.c", "src/core/ext/client_channel/http_proxy.c", - "src/core/ext/client_channel/initial_connect_string.c", "src/core/ext/client_channel/lb_policy.c", "src/core/ext/client_channel/lb_policy_factory.c", "src/core/ext/client_channel/lb_policy_registry.c", @@ -692,6 +697,7 @@ grpc_cc_library( "src/core/ext/client_channel/resolver.c", "src/core/ext/client_channel/resolver_factory.c", "src/core/ext/client_channel/resolver_registry.c", + "src/core/ext/client_channel/retry_throttle.c", "src/core/ext/client_channel/subchannel.c", "src/core/ext/client_channel/subchannel_index.c", "src/core/ext/client_channel/uri_parser.c", @@ -702,7 +708,6 @@ grpc_cc_library( "src/core/ext/client_channel/connector.h", "src/core/ext/client_channel/http_connect_handshaker.h", "src/core/ext/client_channel/http_proxy.h", - "src/core/ext/client_channel/initial_connect_string.h", "src/core/ext/client_channel/lb_policy.h", "src/core/ext/client_channel/lb_policy_factory.h", "src/core/ext/client_channel/lb_policy_registry.h", @@ -712,6 +717,7 @@ grpc_cc_library( "src/core/ext/client_channel/resolver.h", "src/core/ext/client_channel/resolver_factory.h", "src/core/ext/client_channel/resolver_registry.h", + "src/core/ext/client_channel/retry_throttle.h", "src/core/ext/client_channel/subchannel.h", "src/core/ext/client_channel/subchannel_index.h", "src/core/ext/client_channel/uri_parser.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 d3a76a29d76fc1c7969b4fbe8a5f9834cada50d3..5a8bff55342ecadb334784380fe3a40d5d801e00 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() @@ -455,7 +457,6 @@ add_dependencies(buildtests_c secure_endpoint_test) add_dependencies(buildtests_c sequential_connectivity_test) add_dependencies(buildtests_c server_chttp2_test) add_dependencies(buildtests_c server_test) -add_dependencies(buildtests_c set_initial_connect_string_test) add_dependencies(buildtests_c slice_buffer_test) add_dependencies(buildtests_c slice_string_helpers_test) add_dependencies(buildtests_c slice_test) @@ -573,12 +574,18 @@ 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) add_dependencies(buildtests_cxx bm_chttp2_hpack) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) +add_dependencies(buildtests_cxx bm_chttp2_transport) +endif() +if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) add_dependencies(buildtests_cxx bm_closure) endif() if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) @@ -602,6 +609,9 @@ 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) @@ -662,6 +672,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) @@ -688,6 +699,8 @@ 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/atm.c src/core/lib/support/avl.c src/core/lib/support/backoff.c src/core/lib/support/cmdline.c @@ -912,6 +925,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 @@ -1028,10 +1044,8 @@ add_library(grpc src/core/ext/client_channel/client_channel_factory.c src/core/ext/client_channel/client_channel_plugin.c src/core/ext/client_channel/connector.c - src/core/ext/client_channel/default_initial_connect_string.c src/core/ext/client_channel/http_connect_handshaker.c src/core/ext/client_channel/http_proxy.c - src/core/ext/client_channel/initial_connect_string.c src/core/ext/client_channel/lb_policy.c src/core/ext/client_channel/lb_policy_factory.c src/core/ext/client_channel/lb_policy_registry.c @@ -1041,6 +1055,7 @@ add_library(grpc src/core/ext/client_channel/resolver.c src/core/ext/client_channel/resolver_factory.c src/core/ext/client_channel/resolver_registry.c + src/core/ext/client_channel/retry_throttle.c src/core/ext/client_channel/subchannel.c src/core/ext/client_channel/subchannel_index.c src/core/ext/client_channel/uri_parser.c @@ -1221,6 +1236,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 @@ -1310,10 +1328,8 @@ add_library(grpc_cronet src/core/ext/client_channel/client_channel_factory.c src/core/ext/client_channel/client_channel_plugin.c src/core/ext/client_channel/connector.c - src/core/ext/client_channel/default_initial_connect_string.c src/core/ext/client_channel/http_connect_handshaker.c src/core/ext/client_channel/http_proxy.c - src/core/ext/client_channel/initial_connect_string.c src/core/ext/client_channel/lb_policy.c src/core/ext/client_channel/lb_policy_factory.c src/core/ext/client_channel/lb_policy_registry.c @@ -1323,6 +1339,7 @@ add_library(grpc_cronet src/core/ext/client_channel/resolver.c src/core/ext/client_channel/resolver_factory.c src/core/ext/client_channel/resolver_registry.c + src/core/ext/client_channel/retry_throttle.c src/core/ext/client_channel/subchannel.c src/core/ext/client_channel/subchannel_index.c src/core/ext/client_channel/uri_parser.c @@ -1521,6 +1538,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 @@ -1767,6 +1787,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 @@ -1858,10 +1881,8 @@ add_library(grpc_unsecure src/core/ext/client_channel/client_channel_factory.c src/core/ext/client_channel/client_channel_plugin.c src/core/ext/client_channel/connector.c - src/core/ext/client_channel/default_initial_connect_string.c src/core/ext/client_channel/http_connect_handshaker.c src/core/ext/client_channel/http_proxy.c - src/core/ext/client_channel/initial_connect_string.c src/core/ext/client_channel/lb_policy.c src/core/ext/client_channel/lb_policy_factory.c src/core/ext/client_channel/lb_policy_registry.c @@ -1871,6 +1892,7 @@ add_library(grpc_unsecure src/core/ext/client_channel/resolver.c src/core/ext/client_channel/resolver_factory.c src/core/ext/client_channel/resolver_registry.c + src/core/ext/client_channel/retry_throttle.c src/core/ext/client_channel/subchannel.c src/core/ext/client_channel/subchannel_index.c src/core/ext/client_channel/uri_parser.c @@ -2085,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 @@ -2150,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 @@ -2271,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 @@ -2371,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 @@ -2436,10 +2464,8 @@ add_library(grpc++_cronet src/core/ext/client_channel/client_channel_factory.c src/core/ext/client_channel/client_channel_plugin.c src/core/ext/client_channel/connector.c - src/core/ext/client_channel/default_initial_connect_string.c src/core/ext/client_channel/http_connect_handshaker.c src/core/ext/client_channel/http_proxy.c - src/core/ext/client_channel/initial_connect_string.c src/core/ext/client_channel/lb_policy.c src/core/ext/client_channel/lb_policy_factory.c src/core/ext/client_channel/lb_policy_registry.c @@ -2449,6 +2475,7 @@ add_library(grpc++_cronet src/core/ext/client_channel/resolver.c src/core/ext/client_channel/resolver_factory.c src/core/ext/client_channel/resolver_registry.c + src/core/ext/client_channel/retry_throttle.c src/core/ext/client_channel/subchannel.c src/core/ext/client_channel/subchannel_index.c src/core/ext/client_channel/uri_parser.c @@ -2520,6 +2547,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 @@ -2942,6 +2970,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 @@ -3007,6 +3036,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 @@ -4104,6 +4134,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 ) @@ -4613,6 +4668,33 @@ target_link_libraries(endpoint_pair_test gpr ) +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) @@ -6795,34 +6877,6 @@ target_link_libraries(server_test endif (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS) -add_executable(set_initial_connect_string_test - test/core/client_channel/set_initial_connect_string_test.c -) - - -target_include_directories(set_initial_connect_string_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(set_initial_connect_string_test - ${_gRPC_ALLTARGETS_LIBRARIES} - test_tcp_server - grpc_test_util - grpc - gpr_test_util - gpr -) - -endif (gRPC_BUILD_TESTS) -if (gRPC_BUILD_TESTS) - add_executable(slice_buffer_test test/core/slice/slice_buffer_test.c ) @@ -7591,6 +7645,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 @@ -7669,6 +7762,45 @@ endif (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS) if(_gRPC_PLATFORM_LINUX OR _gRPC_PLATFORM_MAC OR _gRPC_PLATFORM_POSIX) +add_executable(bm_chttp2_transport + test/cpp/microbenchmarks/bm_chttp2_transport.cc + third_party/googletest/src/gtest-all.cc +) + + +target_include_directories(bm_chttp2_transport + 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_chttp2_transport + ${_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_closure test/cpp/microbenchmarks/bm_closure.cc third_party/googletest/src/gtest-all.cc @@ -7976,6 +8108,45 @@ target_link_libraries(bm_metadata ${_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 + ${_gRPC_GFLAGS_LIBRARIES} +) + endif() endif (gRPC_BUILD_TESTS) if (gRPC_BUILD_TESTS) @@ -9841,6 +10012,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 9a347948fe2a7234b14acddf0b079af0192d6095..587a9c04cd3b6973f76afe53b61465fa72ba8519 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 @@ -1016,7 +1018,6 @@ sequential_connectivity_test: $(BINDIR)/$(CONFIG)/sequential_connectivity_test server_chttp2_test: $(BINDIR)/$(CONFIG)/server_chttp2_test server_fuzzer: $(BINDIR)/$(CONFIG)/server_fuzzer server_test: $(BINDIR)/$(CONFIG)/server_test -set_initial_connect_string_test: $(BINDIR)/$(CONFIG)/set_initial_connect_string_test slice_buffer_test: $(BINDIR)/$(CONFIG)/slice_buffer_test slice_string_helpers_test: $(BINDIR)/$(CONFIG)/slice_string_helpers_test slice_test: $(BINDIR)/$(CONFIG)/slice_test @@ -1046,8 +1047,10 @@ 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_chttp2_transport: $(BINDIR)/$(CONFIG)/bm_chttp2_transport bm_closure: $(BINDIR)/$(CONFIG)/bm_closure bm_cq: $(BINDIR)/$(CONFIG)/bm_cq bm_error: $(BINDIR)/$(CONFIG)/bm_error @@ -1056,6 +1059,7 @@ 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 @@ -1105,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 @@ -1283,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 \ @@ -1302,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 \ @@ -1376,7 +1383,6 @@ buildtests_c: privatelibs_c \ $(BINDIR)/$(CONFIG)/sequential_connectivity_test \ $(BINDIR)/$(CONFIG)/server_chttp2_test \ $(BINDIR)/$(CONFIG)/server_test \ - $(BINDIR)/$(CONFIG)/set_initial_connect_string_test \ $(BINDIR)/$(CONFIG)/slice_buffer_test \ $(BINDIR)/$(CONFIG)/slice_string_helpers_test \ $(BINDIR)/$(CONFIG)/slice_test \ @@ -1465,8 +1471,10 @@ 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_chttp2_transport \ $(BINDIR)/$(CONFIG)/bm_closure \ $(BINDIR)/$(CONFIG)/bm_cq \ $(BINDIR)/$(CONFIG)/bm_error \ @@ -1475,6 +1483,7 @@ buildtests_cxx: privatelibs_cxx \ $(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 \ @@ -1517,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 \ @@ -1579,8 +1589,10 @@ 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_chttp2_transport \ $(BINDIR)/$(CONFIG)/bm_closure \ $(BINDIR)/$(CONFIG)/bm_cq \ $(BINDIR)/$(CONFIG)/bm_error \ @@ -1589,6 +1601,7 @@ buildtests_cxx: privatelibs_cxx \ $(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 \ @@ -1631,6 +1644,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 \ @@ -1658,6 +1672,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" @@ -1696,6 +1712,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" @@ -1828,8 +1846,6 @@ test_c: buildtests_c $(Q) $(BINDIR)/$(CONFIG)/server_chttp2_test || ( echo test server_chttp2_test failed ; exit 1 ) $(E) "[RUN] Testing server_test" $(Q) $(BINDIR)/$(CONFIG)/server_test || ( echo test server_test failed ; exit 1 ) - $(E) "[RUN] Testing set_initial_connect_string_test" - $(Q) $(BINDIR)/$(CONFIG)/set_initial_connect_string_test || ( echo test set_initial_connect_string_test failed ; exit 1 ) $(E) "[RUN] Testing slice_buffer_test" $(Q) $(BINDIR)/$(CONFIG)/slice_buffer_test || ( echo test slice_buffer_test failed ; exit 1 ) $(E) "[RUN] Testing slice_string_helpers_test" @@ -1916,10 +1932,14 @@ 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" $(Q) $(BINDIR)/$(CONFIG)/bm_chttp2_hpack || ( echo test bm_chttp2_hpack failed ; exit 1 ) + $(E) "[RUN] Testing bm_chttp2_transport" + $(Q) $(BINDIR)/$(CONFIG)/bm_chttp2_transport || ( echo test bm_chttp2_transport failed ; exit 1 ) $(E) "[RUN] Testing bm_closure" $(Q) $(BINDIR)/$(CONFIG)/bm_closure || ( echo test bm_closure failed ; exit 1 ) $(E) "[RUN] Testing bm_cq" @@ -1936,6 +1956,8 @@ test_cxx: buildtests_cxx $(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" @@ -1994,6 +2016,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" @@ -2585,6 +2609,8 @@ 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/atm.c \ src/core/lib/support/avl.c \ src/core/lib/support/backoff.c \ src/core/lib/support/cmdline.c \ @@ -2790,6 +2816,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 \ @@ -2906,10 +2935,8 @@ LIBGRPC_SRC = \ src/core/ext/client_channel/client_channel_factory.c \ src/core/ext/client_channel/client_channel_plugin.c \ src/core/ext/client_channel/connector.c \ - src/core/ext/client_channel/default_initial_connect_string.c \ src/core/ext/client_channel/http_connect_handshaker.c \ src/core/ext/client_channel/http_proxy.c \ - src/core/ext/client_channel/initial_connect_string.c \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ @@ -2919,6 +2946,7 @@ LIBGRPC_SRC = \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ src/core/ext/client_channel/resolver_registry.c \ + src/core/ext/client_channel/retry_throttle.c \ src/core/ext/client_channel/subchannel.c \ src/core/ext/client_channel/subchannel_index.c \ src/core/ext/client_channel/uri_parser.c \ @@ -3102,6 +3130,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 \ @@ -3191,10 +3222,8 @@ LIBGRPC_CRONET_SRC = \ src/core/ext/client_channel/client_channel_factory.c \ src/core/ext/client_channel/client_channel_plugin.c \ src/core/ext/client_channel/connector.c \ - src/core/ext/client_channel/default_initial_connect_string.c \ src/core/ext/client_channel/http_connect_handshaker.c \ src/core/ext/client_channel/http_proxy.c \ - src/core/ext/client_channel/initial_connect_string.c \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ @@ -3204,6 +3233,7 @@ LIBGRPC_CRONET_SRC = \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ src/core/ext/client_channel/resolver_registry.c \ + src/core/ext/client_channel/retry_throttle.c \ src/core/ext/client_channel/subchannel.c \ src/core/ext/client_channel/subchannel_index.c \ src/core/ext/client_channel/uri_parser.c \ @@ -3405,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 \ @@ -3631,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 \ @@ -3722,10 +3758,8 @@ LIBGRPC_UNSECURE_SRC = \ src/core/ext/client_channel/client_channel_factory.c \ src/core/ext/client_channel/client_channel_plugin.c \ src/core/ext/client_channel/connector.c \ - src/core/ext/client_channel/default_initial_connect_string.c \ src/core/ext/client_channel/http_connect_handshaker.c \ src/core/ext/client_channel/http_proxy.c \ - src/core/ext/client_channel/initial_connect_string.c \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ @@ -3735,6 +3769,7 @@ LIBGRPC_UNSECURE_SRC = \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ src/core/ext/client_channel/resolver_registry.c \ + src/core/ext/client_channel/retry_throttle.c \ src/core/ext/client_channel/subchannel.c \ src/core/ext/client_channel/subchannel_index.c \ src/core/ext/client_channel/uri_parser.c \ @@ -3938,6 +3973,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 \ @@ -3970,6 +4006,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 \ @@ -4137,6 +4174,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 \ @@ -4237,6 +4275,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 \ @@ -4302,10 +4343,8 @@ LIBGRPC++_CRONET_SRC = \ src/core/ext/client_channel/client_channel_factory.c \ src/core/ext/client_channel/client_channel_plugin.c \ src/core/ext/client_channel/connector.c \ - src/core/ext/client_channel/default_initial_connect_string.c \ src/core/ext/client_channel/http_connect_handshaker.c \ src/core/ext/client_channel/http_proxy.c \ - src/core/ext/client_channel/initial_connect_string.c \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ @@ -4315,6 +4354,7 @@ LIBGRPC++_CRONET_SRC = \ src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ src/core/ext/client_channel/resolver_registry.c \ + src/core/ext/client_channel/retry_throttle.c \ src/core/ext/client_channel/subchannel.c \ src/core/ext/client_channel/subchannel_index.c \ src/core/ext/client_channel/uri_parser.c \ @@ -4352,6 +4392,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 \ @@ -4820,6 +4861,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 \ @@ -4852,6 +4894,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 \ @@ -8079,6 +8122,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 \ @@ -8719,6 +8794,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 \ @@ -11599,38 +11706,6 @@ endif endif -SET_INITIAL_CONNECT_STRING_TEST_SRC = \ - test/core/client_channel/set_initial_connect_string_test.c \ - -SET_INITIAL_CONNECT_STRING_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(SET_INITIAL_CONNECT_STRING_TEST_SRC)))) -ifeq ($(NO_SECURE),true) - -# You can't build secure targets if you don't have OpenSSL. - -$(BINDIR)/$(CONFIG)/set_initial_connect_string_test: openssl_dep_error - -else - - - -$(BINDIR)/$(CONFIG)/set_initial_connect_string_test: $(SET_INITIAL_CONNECT_STRING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(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) $(SET_INITIAL_CONNECT_STRING_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(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)/set_initial_connect_string_test - -endif - -$(OBJDIR)/$(CONFIG)/test/core/client_channel/set_initial_connect_string_test.o: $(LIBDIR)/$(CONFIG)/libtest_tcp_server.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a - -deps_set_initial_connect_string_test: $(SET_INITIAL_CONNECT_STRING_TEST_OBJS:.o=.dep) - -ifneq ($(NO_SECURE),true) -ifneq ($(NO_DEPS),true) --include $(SET_INITIAL_CONNECT_STRING_TEST_OBJS:.o=.dep) -endif -endif - - SLICE_BUFFER_TEST_SRC = \ test/core/slice/slice_buffer_test.c \ @@ -12592,6 +12667,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 \ @@ -12679,6 +12797,49 @@ endif endif +BM_CHTTP2_TRANSPORT_SRC = \ + test/cpp/microbenchmarks/bm_chttp2_transport.cc \ + +BM_CHTTP2_TRANSPORT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(BM_CHTTP2_TRANSPORT_SRC)))) +ifeq ($(NO_SECURE),true) + +# You can't build secure targets if you don't have OpenSSL. + +$(BINDIR)/$(CONFIG)/bm_chttp2_transport: 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_chttp2_transport: protobuf_dep_error + +else + +$(BINDIR)/$(CONFIG)/bm_chttp2_transport: $(PROTOBUF_DEP) $(BM_CHTTP2_TRANSPORT_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_TRANSPORT_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_transport + +endif + +endif + +$(OBJDIR)/$(CONFIG)/test/cpp/microbenchmarks/bm_chttp2_transport.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_transport: $(BM_CHTTP2_TRANSPORT_OBJS:.o=.dep) + +ifneq ($(NO_SECURE),true) +ifneq ($(NO_DEPS),true) +-include $(BM_CHTTP2_TRANSPORT_OBJS:.o=.dep) +endif +endif + + BM_CLOSURE_SRC = \ test/cpp/microbenchmarks/bm_closure.cc \ @@ -13026,6 +13187,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 \ @@ -15093,6 +15297,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 \ diff --git a/binding.gyp b/binding.gyp index c521a27c300673abf59058d237f6b88b9365072e..2ec57768ae74b076da5b32c8633c471ebe35f742 100644 --- a/binding.gyp +++ b/binding.gyp @@ -544,6 +544,8 @@ '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/atm.c', 'src/core/lib/support/avl.c', 'src/core/lib/support/backoff.c', 'src/core/lib/support/cmdline.c', @@ -667,6 +669,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', @@ -783,10 +788,8 @@ 'src/core/ext/client_channel/client_channel_factory.c', 'src/core/ext/client_channel/client_channel_plugin.c', 'src/core/ext/client_channel/connector.c', - 'src/core/ext/client_channel/default_initial_connect_string.c', 'src/core/ext/client_channel/http_connect_handshaker.c', 'src/core/ext/client_channel/http_proxy.c', - 'src/core/ext/client_channel/initial_connect_string.c', 'src/core/ext/client_channel/lb_policy.c', 'src/core/ext/client_channel/lb_policy_factory.c', 'src/core/ext/client_channel/lb_policy_registry.c', @@ -796,6 +799,7 @@ 'src/core/ext/client_channel/resolver.c', 'src/core/ext/client_channel/resolver_factory.c', 'src/core/ext/client_channel/resolver_registry.c', + 'src/core/ext/client_channel/retry_throttle.c', 'src/core/ext/client_channel/subchannel.c', 'src/core/ext/client_channel/subchannel_index.c', 'src/core/ext/client_channel/uri_parser.c', diff --git a/build.yaml b/build.yaml index 3abdeaefb228992363365ae0ac5303b42be19328..994aeea71b5a103f6d7f2974effbbabc8bcfab17 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,8 @@ 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/atm.c - src/core/lib/support/avl.c - src/core/lib/support/backoff.c - src/core/lib/support/cmdline.c @@ -228,6 +231,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 +341,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 @@ -407,7 +414,6 @@ filegroups: - src/core/ext/client_channel/connector.h - src/core/ext/client_channel/http_connect_handshaker.h - src/core/ext/client_channel/http_proxy.h - - src/core/ext/client_channel/initial_connect_string.h - src/core/ext/client_channel/lb_policy.h - src/core/ext/client_channel/lb_policy_factory.h - src/core/ext/client_channel/lb_policy_registry.h @@ -417,6 +423,7 @@ filegroups: - src/core/ext/client_channel/resolver.h - src/core/ext/client_channel/resolver_factory.h - src/core/ext/client_channel/resolver_registry.h + - src/core/ext/client_channel/retry_throttle.h - src/core/ext/client_channel/subchannel.h - src/core/ext/client_channel/subchannel_index.h - src/core/ext/client_channel/uri_parser.h @@ -426,10 +433,8 @@ filegroups: - src/core/ext/client_channel/client_channel_factory.c - src/core/ext/client_channel/client_channel_plugin.c - src/core/ext/client_channel/connector.c - - src/core/ext/client_channel/default_initial_connect_string.c - src/core/ext/client_channel/http_connect_handshaker.c - src/core/ext/client_channel/http_proxy.c - - src/core/ext/client_channel/initial_connect_string.c - src/core/ext/client_channel/lb_policy.c - src/core/ext/client_channel/lb_policy_factory.c - src/core/ext/client_channel/lb_policy_registry.c @@ -439,6 +444,7 @@ filegroups: - src/core/ext/client_channel/resolver.c - src/core/ext/client_channel/resolver_factory.c - src/core/ext/client_channel/resolver_registry.c + - src/core/ext/client_channel/retry_throttle.c - src/core/ext/client_channel/subchannel.c - src/core/ext/client_channel/subchannel_index.c - src/core/ext/client_channel/uri_parser.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 @@ -1481,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 @@ -1700,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 @@ -2576,6 +2603,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -2669,20 +2698,6 @@ targets: - grpc - gpr_test_util - gpr -- name: set_initial_connect_string_test - cpu_cost: 0.1 - build: test - language: c - src: - - test/core/client_channel/set_initial_connect_string_test.c - deps: - - test_tcp_server - - grpc_test_util - - grpc - - gpr_test_util - - gpr - exclude_iomgrs: - - uv - name: slice_buffer_test build: test language: c @@ -3039,6 +3054,26 @@ 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++ @@ -3080,6 +3115,26 @@ targets: - mac - linux - posix +- name: bm_chttp2_transport + build: test + language: c++ + src: + - test/cpp/microbenchmarks/bm_chttp2_transport.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_closure build: test language: c++ @@ -3259,6 +3314,26 @@ targets: - 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 + args: + - --benchmark_min_time=0 + platforms: + - mac + - linux + - posix - name: channel_arguments_test gtest: true build: test @@ -3928,6 +4003,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 @@ -4210,8 +4300,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 @@ -4219,7 +4309,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 90536e503edacc09fa2d5b2f3e30870916d39406..2bf302b835759e46ee01902346e2660c6333a54c 100644 --- a/config.m4 +++ b/config.m4 @@ -39,6 +39,8 @@ 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/atm.c \ src/core/lib/support/avl.c \ src/core/lib/support/backoff.c \ src/core/lib/support/cmdline.c \ @@ -140,6 +142,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 \ @@ -256,10 +261,8 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/client_channel/client_channel_factory.c \ src/core/ext/client_channel/client_channel_plugin.c \ src/core/ext/client_channel/connector.c \ - src/core/ext/client_channel/default_initial_connect_string.c \ src/core/ext/client_channel/http_connect_handshaker.c \ src/core/ext/client_channel/http_proxy.c \ - src/core/ext/client_channel/initial_connect_string.c \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy_factory.c \ src/core/ext/client_channel/lb_policy_registry.c \ @@ -269,6 +272,7 @@ if test "$PHP_GRPC" != "no"; then src/core/ext/client_channel/resolver.c \ src/core/ext/client_channel/resolver_factory.c \ src/core/ext/client_channel/resolver_registry.c \ + src/core/ext/client_channel/retry_throttle.c \ src/core/ext/client_channel/subchannel.c \ src/core/ext/client_channel/subchannel_index.c \ src/core/ext/client_channel/uri_parser.c \ diff --git a/doc/combiner-explainer.md b/doc/combiner-explainer.md new file mode 100644 index 0000000000000000000000000000000000000000..9e9d077273ec0c2b15eb846e0bee2e188f08b5a8 --- /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/core/grpc-error.md b/doc/core/grpc-error.md new file mode 100644 index 0000000000000000000000000000000000000000..1fa24802315ea9bf8a9f546bfde09ba54d4cedfe --- /dev/null +++ b/doc/core/grpc-error.md @@ -0,0 +1,160 @@ +# gRPC Error + +## Background + +`grpc_error` is the c-core's opaque representation of an error. It holds a +collection of integers, strings, timestamps, and child errors that related to +the final error. + +always present are: + +* GRPC_ERROR_STR_FILE and GRPC_ERROR_INT_FILE_LINE - the source location where + the error was generated +* GRPC_ERROR_STR_DESCRIPTION - a human readable description of the error +* GRPC_ERROR_TIME_CREATED - a timestamp indicating when the error happened + +An error can also have children; these are other errors that are believed to +have contributed to this one. By accumulating children, we can begin to root +cause high level failures from low level failures, without having to derive +execution paths from log lines. + +grpc_errors are refcounted objects, which means they need strict ownership +semantics. An extra ref on an error can cause a memory leak, and a missing ref +can cause a crash. + +This document serves as a detailed overview of grpc_error's ownership rules. It +should help people use the errors, as well as help people debug refcount related +errors. + +## Clarification of Ownership + +If a particular function is said to "own" an error, that means it has the +responsibility of calling unref on the error. A function may have access to an +error without ownership of it. + +This means the function may use the error, but must not call unref on it, since +that will be done elsewhere in the code. A function that does not own an error +may explicitly take ownership of it by manually calling GRPC_ERROR_REF. + +## Ownership Rules + +There are three rules of error ownership, which we will go over in detail. + +* If `grpc_error` is returned by a function, the caller owns a ref to that + instance. +* If a `grpc_error` is passed to a `grpc_closure` callback function, then that + function does not own a ref to the error. +* if a `grpc_error` is passed to *any other function*, then that function + takes ownership of the error. + +### Rule 1 + +> If `grpc_error` is returned by a function, the caller owns a ref to that +> instance.* + +For example, in the following code block, error1 and error2 are owned by the +current function. + +```C +grpc_error* error1 = GRPC_ERROR_CREATE("Some error occured"); +grpc_error* error2 = some_operation_that_might_fail(...); +``` + +The current function would have to explicitly call GRPC_ERROR_UNREF on the +errors, or pass them along to a function that would take over the ownership. + +### Rule 2 + +> If a `grpc_error` is passed to a `grpc_closure` callback function, then that +> function does not own a ref to the error. + +A `grpc_closure` callback function is any function that has the signature: + +```C +void (*cb)(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error); +``` + +This means that the error ownership is NOT transferred when a functions calls: + +```C +c->cb(exec_ctx, c->cb_arg, err); +``` + +The caller is still responsible for unref-ing the error. + +However, the above line is currently being phased out! It is safer to invoke +callbacks with `grpc_closure_run` and `grpc_closure_sched`. These functions are +not callbacks, so they will take ownership of the error passed to them. + +```C +grpc_error* error = GRPC_ERROR_CREATE("Some error occured"); +grpc_closure_run(exec_ctx, cb, error); +// current function no longer has ownership of the error +``` + +If you schedule or run a closure, but still need ownership of the error, then +you must explicitly take a reference. + +```C +grpc_error* error = GRPC_ERROR_CREATE("Some error occured"); +grpc_closure_run(exec_ctx, cb, GRPC_ERROR_REF(error)); +// do some other things with the error +GRPC_ERROR_UNREF(error); +``` + +Rule 2 is more important to keep in mind when **implementing** `grpc_closure` +callback functions. You must keep in mind that you do not own the error, and +must not unref it. More importantly, you cannot pass it to any function that +would take ownership of the error, without explicitly taking ownership yourself. +For example: + +```C +void on_some_action(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + // this would cause a crash, because some_function will unref the error, + // and the caller of this callback will also unref it. + some_function(error); + + // this callback function must take ownership, so it can give that + // ownership to the function it is calling. + some_function(GRPC_ERROR_REF(error)); +} +``` + +### Rule 3 + +> if a `grpc_error` is passed to *any other function*, then that function takes +> ownership of the error. + +Take the following example: + +```C +grpc_error* error = GRPC_ERROR_CREATE("Some error occured"); +// do some things +some_function(error); +// can't use error anymore! might be gone. +``` + +When some_function is called, it takes over the ownership of the error, and it +will eventually unref it. So the caller can no longer safely use the error. + +If the caller needed to keep using the error (or passing it to other functions), +if would have to take on a reference to it. This is a common pattern seen. + +```C +void func() { + grpc_error* error = GRPC_ERROR_CREATE("Some error occured"); + some_function(GRPC_ERROR_REF(error)); + // do things + some_other_function(GRPC_ERROR_REF(error)); + // do more things + some_last_function(error); +} +``` + +The last call takes ownership and will eventually give the error its final +unref. + +When **implementing** a function that takes an error (and is not a +`grpc_closure` callback function), you must ensure the error is unref-ed either +by doing it explicitly with GRPC_ERROR_UNREF, or by passing the error to a +function that takes over the ownership. diff --git a/doc/g_stands_for.md b/doc/g_stands_for.md index 53a1fdf193c08ac4c7678064719b3933bb1c36c2..d2fc7a50f95d73f6c2e5e58cadd2984e0ba69e2b 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 0000000000000000000000000000000000000000..fccfa863a3ef82fee5b7d8fa228e90f7bd2fb63c --- /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 0000000000000000000000000000000000000000..32ff399ef948d2a97a69c8ede4bf04ffd9203326 --- /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/examples/node/static_codegen/README.md b/examples/node/static_codegen/README.md index fc97d34a3868a449ef35bace323af4a9d434ce06..0441b27f25a65f3b5d410bfe9841e6ee060e13c4 100644 --- a/examples/node/static_codegen/README.md +++ b/examples/node/static_codegen/README.md @@ -1,7 +1,8 @@ -This is the static code generation variant of the Node examples. Code in these examples is pre-generated using protoc and the Node gRPC protoc plugin, and the generated code can be found in various `*_pb.js` files. The command line sequence for generating those files is as follows (assuming that `protoc` and `grpc_node_plugin` are present, and starting in the base directory of this package): +This is the static code generation variant of the Node examples. Code in these examples is pre-generated using protoc and the Node gRPC protoc plugin, and the generated code can be found in various `*_pb.js` files. The command line sequence for generating those files is as follows (assuming that `protoc` and `grpc_node_plugin` are present, and starting in the directory which contains this README.md file): ```sh -cd ../protos -protoc --js_out=import_style=commonjs,binary:../node/static_codegen/ --grpc_out=../node/static_codegen --plugin=protoc-gen-grpc=grpc_node_plugin helloworld.proto -protoc --js_out=import_style=commonjs,binary:../node/static_codegen/route_guide/ --grpc_out=../node/static_codegen/route_guide/ --plugin=protoc-gen-grpc=grpc_node_plugin route_guide.proto +cd ../../protos +npm install -g grpc-tools +grpc_tools_node_protoc --js_out=import_style=commonjs,binary:../node/static_codegen/ --grpc_out=../node/static_codegen --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` helloworld.proto +grpc_tools_node_protoc --js_out=import_style=commonjs,binary:../node/static_codegen/route_guide/ --grpc_out=../node/static_codegen/route_guide/ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` route_guide.proto ``` diff --git a/gRPC-Core.podspec b/gRPC-Core.podspec index 909ea5af96727411767020e141f9e5f88532d3cd..6d1a59766e5a8fb50dceff49c0a0d102da834d4d 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,8 @@ 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/atm.c', 'src/core/lib/support/avl.c', 'src/core/lib/support/backoff.c', 'src/core/lib/support/cmdline.c', @@ -309,6 +312,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', @@ -408,7 +412,6 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/connector.h', 'src/core/ext/client_channel/http_connect_handshaker.h', 'src/core/ext/client_channel/http_proxy.h', - 'src/core/ext/client_channel/initial_connect_string.h', 'src/core/ext/client_channel/lb_policy.h', 'src/core/ext/client_channel/lb_policy_factory.h', 'src/core/ext/client_channel/lb_policy_registry.h', @@ -418,6 +421,7 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/resolver.h', 'src/core/ext/client_channel/resolver_factory.h', 'src/core/ext/client_channel/resolver_registry.h', + 'src/core/ext/client_channel/retry_throttle.h', 'src/core/ext/client_channel/subchannel.h', 'src/core/ext/client_channel/subchannel_index.h', 'src/core/ext/client_channel/uri_parser.h', @@ -508,6 +512,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', @@ -624,10 +631,8 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/client_channel_factory.c', 'src/core/ext/client_channel/client_channel_plugin.c', 'src/core/ext/client_channel/connector.c', - 'src/core/ext/client_channel/default_initial_connect_string.c', 'src/core/ext/client_channel/http_connect_handshaker.c', 'src/core/ext/client_channel/http_proxy.c', - 'src/core/ext/client_channel/initial_connect_string.c', 'src/core/ext/client_channel/lb_policy.c', 'src/core/ext/client_channel/lb_policy_factory.c', 'src/core/ext/client_channel/lb_policy_registry.c', @@ -637,6 +642,7 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/resolver.c', 'src/core/ext/client_channel/resolver_factory.c', 'src/core/ext/client_channel/resolver_registry.c', + 'src/core/ext/client_channel/retry_throttle.c', 'src/core/ext/client_channel/subchannel.c', 'src/core/ext/client_channel/subchannel_index.c', 'src/core/ext/client_channel/uri_parser.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', @@ -843,7 +851,6 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/connector.h', 'src/core/ext/client_channel/http_connect_handshaker.h', 'src/core/ext/client_channel/http_proxy.h', - 'src/core/ext/client_channel/initial_connect_string.h', 'src/core/ext/client_channel/lb_policy.h', 'src/core/ext/client_channel/lb_policy_factory.h', 'src/core/ext/client_channel/lb_policy_registry.h', @@ -853,6 +860,7 @@ Pod::Spec.new do |s| 'src/core/ext/client_channel/resolver.h', 'src/core/ext/client_channel/resolver_factory.h', 'src/core/ext/client_channel/resolver_registry.h', + 'src/core/ext/client_channel/retry_throttle.h', 'src/core/ext/client_channel/subchannel.h', 'src/core/ext/client_channel/subchannel_index.h', 'src/core/ext/client_channel/uri_parser.h', diff --git a/gRPC-ProtoRPC.podspec b/gRPC-ProtoRPC.podspec index 33ad74d2dfcf2ca132cdaa418bb2c680ceff0aea..6ca9fcd3426919ee2148a405549546562173a774 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 35eb5587c85514ac0acaeeecf980b41517a88fd6..51b52c0c440a50d22b54bbca63893c47ff2b9392 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 6ba0c01d39f4771564b4e508dd4005579cfe63cf..83a86803ebc17ff42ff1cfda2e366c1d4c5a1b87 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 c660d361b1c33906d2d708f595d5761a6b3fb9ce..30d60b0d06d42aecf894460d0ffe257f59070dac 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 8d5b7b2ab1c299bfa0de49726750bd8ad77b263f..8074df266ce34936fd0feb1810e6e62735582980 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,8 @@ 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/atm.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 +229,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 ) @@ -325,7 +329,6 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_channel/connector.h ) s.files += %w( src/core/ext/client_channel/http_connect_handshaker.h ) s.files += %w( src/core/ext/client_channel/http_proxy.h ) - s.files += %w( src/core/ext/client_channel/initial_connect_string.h ) s.files += %w( src/core/ext/client_channel/lb_policy.h ) s.files += %w( src/core/ext/client_channel/lb_policy_factory.h ) s.files += %w( src/core/ext/client_channel/lb_policy_registry.h ) @@ -335,6 +338,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_channel/resolver.h ) s.files += %w( src/core/ext/client_channel/resolver_factory.h ) s.files += %w( src/core/ext/client_channel/resolver_registry.h ) + s.files += %w( src/core/ext/client_channel/retry_throttle.h ) s.files += %w( src/core/ext/client_channel/subchannel.h ) s.files += %w( src/core/ext/client_channel/subchannel_index.h ) s.files += %w( src/core/ext/client_channel/uri_parser.h ) @@ -425,6 +429,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 ) @@ -541,10 +548,8 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_channel/client_channel_factory.c ) s.files += %w( src/core/ext/client_channel/client_channel_plugin.c ) s.files += %w( src/core/ext/client_channel/connector.c ) - s.files += %w( src/core/ext/client_channel/default_initial_connect_string.c ) s.files += %w( src/core/ext/client_channel/http_connect_handshaker.c ) s.files += %w( src/core/ext/client_channel/http_proxy.c ) - s.files += %w( src/core/ext/client_channel/initial_connect_string.c ) s.files += %w( src/core/ext/client_channel/lb_policy.c ) s.files += %w( src/core/ext/client_channel/lb_policy_factory.c ) s.files += %w( src/core/ext/client_channel/lb_policy_registry.c ) @@ -554,6 +559,7 @@ Gem::Specification.new do |s| s.files += %w( src/core/ext/client_channel/resolver.c ) s.files += %w( src/core/ext/client_channel/resolver_factory.c ) s.files += %w( src/core/ext/client_channel/resolver_registry.c ) + s.files += %w( src/core/ext/client_channel/retry_throttle.c ) s.files += %w( src/core/ext/client_channel/subchannel.c ) s.files += %w( src/core/ext/client_channel/subchannel_index.c ) s.files += %w( src/core/ext/client_channel/uri_parser.c ) diff --git a/src/core/ext/client_channel/initial_connect_string.h b/include/grpc++/impl/channel_argument_option.h similarity index 68% rename from src/core/ext/client_channel/initial_connect_string.h rename to include/grpc++/impl/channel_argument_option.h index 876abea40e4b55c0a46b87e2674923e3d2870752..057acc2cebf40570ece63a9ff90150b30b221822 100644 --- a/src/core/ext/client_channel/initial_connect_string.h +++ b/include/grpc++/impl/channel_argument_option.h @@ -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 @@ -31,20 +31,22 @@ * */ -#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H -#define GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H +#ifndef GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H +#define GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H -#include <grpc/slice.h> -#include "src/core/lib/iomgr/resolve_address.h" +#include <map> +#include <memory> -typedef void (*grpc_set_initial_connect_string_func)( - grpc_resolved_address **addr, grpc_slice *initial_str); +#include <grpc++/impl/server_builder_option.h> +#include <grpc++/support/channel_arguments.h> -void grpc_test_set_initial_connect_string_function( - grpc_set_initial_connect_string_func func); +namespace grpc { -/** Set a string to be sent once connected. Optionally reset addr. */ -void grpc_set_initial_connect_string(grpc_resolved_address **addr, - grpc_slice *connect_string); +std::unique_ptr<ServerBuilderOption> MakeChannelArgumentOption( + const grpc::string &name, const grpc::string &value); +std::unique_ptr<ServerBuilderOption> MakeChannelArgumentOption( + const grpc::string &name, int value); -#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H */ +} // namespace grpc + +#endif // GRPCXX_IMPL_CHANNEL_ARGUMENT_OPTION_H diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h index 2ac2f0a1ef485c2a1a6bf6184016407d73f22ac7..d707100a52204ad5eeb2f4943b9068da53381ac3 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 efdf7772ad73bdf479f38cbe1891ae49c2733ccf..61307d61942bd18ce3b0fdd5d6a8139b0530ca5b 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) { @@ -117,10 +117,10 @@ class ChannelArguments { /// Return (by value) a c grpc_channel_args structure which points to /// arguments owned by this ChannelArguments instance - grpc_channel_args c_channel_args() { + grpc_channel_args c_channel_args() const { grpc_channel_args out; out.num_args = args_.size(); - out.args = args_.empty() ? NULL : &args_[0]; + out.args = args_.empty() ? NULL : const_cast<grpc_arg*>(&args_[0]); return out; } diff --git a/include/grpc/impl/codegen/atm.h b/include/grpc/impl/codegen/atm.h index ae00fb0f16989565732c1ef669d82ed547f4e6d4..4bd572d6d1841eadaf4c40eac0344ee67b534e68 100644 --- a/include/grpc/impl/codegen/atm.h +++ b/include/grpc/impl/codegen/atm.h @@ -92,4 +92,9 @@ #error could not determine platform for atm #endif +/** Adds \a delta to \a *value, clamping the result to the range specified + by \a min and \a max. Returns the new value. */ +gpr_atm gpr_atm_no_barrier_clamped_add(gpr_atm *value, gpr_atm delta, + gpr_atm min, gpr_atm max); + #endif /* GRPC_IMPL_CODEGEN_ATM_H */ diff --git a/include/grpc/support/sync.h b/include/grpc/support/sync.h index a7bbb38c27e601af241335c4ad60b89c214f1b2b..5cfeecb6017a9f0b2da6b9035ee02168bd8f6c25 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 d729f3d8376edb7815538a258983922a419b9843..8c0854b1d2869cbe04d1c2ad029d312b07b688ca 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 e16161d7a2e769dd3896978f3b673011957d70d0..f096869e4ed266f30d24e8ce4afbef3f1e2177fe 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,8 @@ <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/atm.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 +238,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" /> @@ -334,7 +338,6 @@ <file baseinstalldir="/" name="src/core/ext/client_channel/connector.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/http_connect_handshaker.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/http_proxy.h" role="src" /> - <file baseinstalldir="/" name="src/core/ext/client_channel/initial_connect_string.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_factory.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_registry.h" role="src" /> @@ -344,6 +347,7 @@ <file baseinstalldir="/" name="src/core/ext/client_channel/resolver.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_factory.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_registry.h" role="src" /> + <file baseinstalldir="/" name="src/core/ext/client_channel/retry_throttle.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel_index.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/uri_parser.h" role="src" /> @@ -434,6 +438,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" /> @@ -550,10 +557,8 @@ <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_plugin.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/connector.c" role="src" /> - <file baseinstalldir="/" name="src/core/ext/client_channel/default_initial_connect_string.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/http_connect_handshaker.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/http_proxy.c" role="src" /> - <file baseinstalldir="/" name="src/core/ext/client_channel/initial_connect_string.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_registry.c" role="src" /> @@ -563,6 +568,7 @@ <file baseinstalldir="/" name="src/core/ext/client_channel/resolver.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_registry.c" role="src" /> + <file baseinstalldir="/" name="src/core/ext/client_channel/retry_throttle.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel_index.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/uri_parser.c" role="src" /> diff --git a/setup.py b/setup.py index d5b843fdacecc4341a5cddf36459347b259be83f..4d71848bff02933bc4a82f4a8230fd8e88efb1f8 100644 --- a/setup.py +++ b/setup.py @@ -206,14 +206,13 @@ PACKAGE_DIRECTORIES = { INSTALL_REQUIRES = ( 'six>=1.5.2', - 'enum34>=1.0.4', # TODO(atash): eventually split the grpcio package into a metapackage # depending on protobuf and the runtime component (independent of protobuf) 'protobuf>=3.2.0', ) if not PY3: - INSTALL_REQUIRES += ('futures>=2.2.0',) + INSTALL_REQUIRES += ('futures>=2.2.0', 'enum34>=1.0.4') SETUP_REQUIRES = INSTALL_REQUIRES + ( 'sphinx>=1.3', diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc index 4841da8da8e8529f85966081e9d193b1b8bc2451..242ce06a16e6a4e1155580283fd70b729737b981 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 6a95255d40e4a088d8c60a1b2a70cfda904f3a13..b91059fad77db7aa7e9384876920ab962de30675 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 b80d831557f7ecab0f3c9a8a2fdb4a0814fe5b19..fc29dbd4545f8a342ca154b781d8b171a9145d74 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 bf64f84772c48d9c721643dfd79deab896b5875d..00c20913b0fe3bd119e1a7427809db889534af7c 100644 --- a/src/core/ext/client_channel/client_channel.c +++ b/src/core/ext/client_channel/client_channel.c @@ -47,6 +47,7 @@ #include "src/core/ext/client_channel/lb_policy_registry.h" #include "src/core/ext/client_channel/proxy_mapper_registry.h" #include "src/core/ext/client_channel/resolver_registry.h" +#include "src/core/ext/client_channel/retry_throttle.h" #include "src/core/ext/client_channel/subchannel.h" #include "src/core/lib/channel/channel_args.h" #include "src/core/lib/channel/connected_channel.h" @@ -71,7 +72,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; @@ -188,6 +190,8 @@ typedef struct client_channel_channel_data { grpc_combiner *combiner; /** currently active load balancer */ grpc_lb_policy *lb_policy; + /** retry throttle data */ + grpc_server_retry_throttle_data *retry_throttle_data; /** maps method names to method_parameters structs */ grpc_slice_hash_table *method_params_table; /** incoming resolver result - set by resolver.next() */ @@ -283,6 +287,65 @@ static void watch_lb_policy_locked(grpc_exec_ctx *exec_ctx, channel_data *chand, &w->on_changed); } +typedef struct { + char *server_name; + grpc_server_retry_throttle_data *retry_throttle_data; +} service_config_parsing_state; + +static void parse_retry_throttle_params(const grpc_json *field, void *arg) { + service_config_parsing_state *parsing_state = arg; + if (strcmp(field->key, "retryThrottling") == 0) { + if (parsing_state->retry_throttle_data != NULL) return; // Duplicate. + if (field->type != GRPC_JSON_OBJECT) return; + int max_milli_tokens = 0; + int milli_token_ratio = 0; + for (grpc_json *sub_field = field->child; sub_field != NULL; + sub_field = sub_field->next) { + if (sub_field->key == NULL) return; + if (strcmp(sub_field->key, "maxTokens") == 0) { + if (max_milli_tokens != 0) return; // Duplicate. + if (sub_field->type != GRPC_JSON_NUMBER) return; + max_milli_tokens = gpr_parse_nonnegative_int(sub_field->value); + if (max_milli_tokens == -1) return; + max_milli_tokens *= 1000; + } else if (strcmp(sub_field->key, "tokenRatio") == 0) { + if (milli_token_ratio != 0) return; // Duplicate. + if (sub_field->type != GRPC_JSON_NUMBER) return; + // We support up to 3 decimal digits. + size_t whole_len = strlen(sub_field->value); + uint32_t multiplier = 1; + uint32_t decimal_value = 0; + const char *decimal_point = strchr(sub_field->value, '.'); + if (decimal_point != NULL) { + whole_len = (size_t)(decimal_point - sub_field->value); + multiplier = 1000; + size_t decimal_len = strlen(decimal_point + 1); + if (decimal_len > 3) decimal_len = 3; + if (!gpr_parse_bytes_to_uint32(decimal_point + 1, decimal_len, + &decimal_value)) { + return; + } + uint32_t decimal_multiplier = 1; + for (size_t i = 0; i < (3 - decimal_len); ++i) { + decimal_multiplier *= 10; + } + decimal_value *= decimal_multiplier; + } + uint32_t whole_value; + if (!gpr_parse_bytes_to_uint32(sub_field->value, whole_len, + &whole_value)) { + return; + } + milli_token_ratio = (int)((whole_value * multiplier) + decimal_value); + if (milli_token_ratio <= 0) return; + } + } + parsing_state->retry_throttle_data = + grpc_retry_throttle_map_get_data_for_server( + parsing_state->server_name, max_milli_tokens, milli_token_ratio); + } +} + static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { channel_data *chand = arg; @@ -294,6 +357,8 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, bool exit_idle = false; grpc_error *state_error = GRPC_ERROR_CREATE("No load balancing policy"); char *service_config_json = NULL; + service_config_parsing_state parsing_state; + memset(&parsing_state, 0, sizeof(parsing_state)); if (chand->resolver_result != NULL) { // Find LB policy name. @@ -354,6 +419,19 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, grpc_service_config *service_config = grpc_service_config_create(service_config_json); if (service_config != NULL) { + channel_arg = + grpc_channel_args_find(chand->resolver_result, GRPC_ARG_SERVER_URI); + GPR_ASSERT(channel_arg != NULL); + GPR_ASSERT(channel_arg->type == GRPC_ARG_STRING); + grpc_uri *uri = + grpc_uri_parse(exec_ctx, channel_arg->value.string, true); + GPR_ASSERT(uri->path[0] != '\0'); + parsing_state.server_name = + uri->path[0] == '/' ? uri->path + 1 : uri->path; + grpc_service_config_parse_global_params( + service_config, parse_retry_throttle_params, &parsing_state); + parsing_state.server_name = NULL; + grpc_uri_destroy(uri); method_params_table = grpc_service_config_create_method_config_table( exec_ctx, service_config, method_parameters_create_from_json, &method_parameters_vtable); @@ -385,6 +463,11 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, chand->info_service_config_json = service_config_json; } gpr_mu_unlock(&chand->info_mu); + + if (chand->retry_throttle_data != NULL) { + grpc_server_retry_throttle_data_unref(chand->retry_throttle_data); + } + chand->retry_throttle_data = parsing_state.retry_throttle_data; if (chand->method_params_table != NULL) { grpc_slice_hash_table_unref(exec_ctx, chand->method_params_table); } @@ -612,6 +695,9 @@ static void cc_destroy_channel_elem(grpc_exec_ctx *exec_ctx, } gpr_free(chand->info_lb_policy_name); gpr_free(chand->info_service_config_json); + if (chand->retry_throttle_data != NULL) { + grpc_server_retry_throttle_data_unref(chand->retry_throttle_data); + } if (chand->method_params_table != NULL) { grpc_slice_hash_table_unref(exec_ctx, chand->method_params_table); } @@ -631,7 +717,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; @@ -652,14 +739,15 @@ typedef struct client_channel_call_data { grpc_slice path; // Request path. gpr_timespec call_start_time; gpr_timespec deadline; + grpc_server_retry_throttle_data *retry_throttle_data; 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; @@ -674,6 +762,9 @@ typedef struct client_channel_call_data { grpc_call_stack *owning_call; grpc_linked_mdelem lb_token_mdelem; + + grpc_closure on_complete; + grpc_closure *original_on_complete; } call_data; grpc_subchannel_call *grpc_client_channel_get_subchannel_call( @@ -726,6 +817,51 @@ static void retry_waiting_locked(grpc_exec_ctx *exec_ctx, call_data *calld) { gpr_free(ops); } +// Sets calld->method_params and calld->retry_throttle_data. +// 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->retry_throttle_data != NULL) { + calld->retry_throttle_data = + grpc_server_retry_throttle_data_ref(chand->retry_throttle_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 +890,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 +992,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 +1124,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)); @@ -1002,6 +1149,26 @@ static void start_transport_stream_op_locked_inner(grpc_exec_ctx *exec_ctx, add_waiting_locked(calld, op); } +static void on_complete(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + grpc_call_element *elem = arg; + call_data *calld = elem->call_data; + if (calld->retry_throttle_data != NULL) { + if (error == GRPC_ERROR_NONE) { + grpc_server_retry_throttle_data_record_success( + calld->retry_throttle_data); + } else { + // TODO(roth): In a subsequent PR, check the return value here and + // decide whether or not to retry. Note that we should only + // record failures whose statuses match the configured retryable + // or non-fatal status codes. + grpc_server_retry_throttle_data_record_failure( + calld->retry_throttle_data); + } + } + grpc_closure_run(exec_ctx, calld->original_on_complete, + GRPC_ERROR_REF(error)); +} + static void start_transport_stream_op_locked(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error_ignored) { GPR_TIMER_BEGIN("start_transport_stream_op_locked", 0); @@ -1010,6 +1177,14 @@ static void start_transport_stream_op_locked(grpc_exec_ctx *exec_ctx, void *arg, grpc_call_element *elem = op->handler_private.args[0]; call_data *calld = elem->call_data; + if (op->recv_trailing_metadata != NULL) { + GPR_ASSERT(op->on_complete != NULL); + calld->original_on_complete = op->on_complete; + grpc_closure_init(&calld->on_complete, on_complete, elem, + grpc_schedule_on_exec_ctx); + op->on_complete = &calld->on_complete; + } + start_transport_stream_op_locked_inner(exec_ctx, op, elem); GRPC_CALL_STACK_UNREF(exec_ctx, calld->owning_call, @@ -1060,114 +1235,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 +1255,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 +1265,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 +1276,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 28d3b63f99d2dcf5e00468289c03f615aa3ed66e..f51277d0b29bffa3485d8311b12c93b268cf7293 100644 --- a/src/core/ext/client_channel/client_channel_plugin.c +++ b/src/core/ext/client_channel/client_channel_plugin.c @@ -43,6 +43,7 @@ #include "src/core/ext/client_channel/lb_policy_registry.h" #include "src/core/ext/client_channel/proxy_mapper_registry.h" #include "src/core/ext/client_channel/resolver_registry.h" +#include "src/core/ext/client_channel/retry_throttle.h" #include "src/core/ext/client_channel/subchannel_index.h" #include "src/core/lib/surface/channel_init.h" @@ -82,6 +83,7 @@ static bool set_default_host_if_unset(grpc_exec_ctx *exec_ctx, void grpc_client_channel_init(void) { grpc_lb_policy_registry_init(); grpc_resolver_registry_init(); + grpc_retry_throttle_map_init(); grpc_proxy_mapper_registry_init(); grpc_register_http_proxy_mapper(); grpc_subchannel_index_init(); @@ -96,6 +98,7 @@ void grpc_client_channel_shutdown(void) { grpc_subchannel_index_shutdown(); grpc_channel_init_shutdown(); grpc_proxy_mapper_registry_shutdown(); + grpc_retry_throttle_map_shutdown(); grpc_resolver_registry_shutdown(); grpc_lb_policy_registry_shutdown(); } diff --git a/src/core/ext/client_channel/connector.h b/src/core/ext/client_channel/connector.h index 9bff41f003f8795ac2e084579e6ef3cf959c8631..94b5fb5c9e1ffd06ad83ea92aa09f4f6f112f382 100644 --- a/src/core/ext/client_channel/connector.h +++ b/src/core/ext/client_channel/connector.h @@ -48,8 +48,6 @@ struct grpc_connector { typedef struct { /** set of pollsets interested in this connection */ grpc_pollset_set *interested_parties; - /** initial connect string to send */ - grpc_slice initial_connect_string; /** deadline for connection */ gpr_timespec deadline; /** channel arguments (to be passed to transport) */ diff --git a/src/core/ext/client_channel/parse_address.c b/src/core/ext/client_channel/parse_address.c index 8ae15fc72bc1a05f58b5b24a2f073737afb75fd2..cd1b2cd80cf662db5d4b78c38a91f2e59f5ad0a7 100644 --- a/src/core/ext/client_channel/parse_address.c +++ b/src/core/ext/client_channel/parse_address.c @@ -128,6 +128,7 @@ int parse_ipv6(grpc_uri *uri, grpc_resolved_address *resolved_addr) { 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) { @@ -136,10 +137,12 @@ int parse_ipv6(grpc_uri *uri, grpc_resolved_address *resolved_addr) { } if (gpr_parse_bytes_to_uint32(host_end + 1, strlen(host) - host_without_scope_len - 1, - &in6->sin6_scope_id) == 0) { + &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); diff --git a/src/core/ext/client_channel/proxy_mapper_registry.c b/src/core/ext/client_channel/proxy_mapper_registry.c index 2c44b9d4903b286a27b7312ad3da4d5e0df65aff..0935ddbdbd15e3ff58a90087805eb47a0726c995 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/retry_throttle.c b/src/core/ext/client_channel/retry_throttle.c new file mode 100644 index 0000000000000000000000000000000000000000..8926c3d7822d88efd28c3f2af44d6a6a86a07bba --- /dev/null +++ b/src/core/ext/client_channel/retry_throttle.c @@ -0,0 +1,210 @@ +/* + * + * 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/retry_throttle.h" + +#include <limits.h> +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/atm.h> +#include <grpc/support/avl.h> +#include <grpc/support/string_util.h> +#include <grpc/support/sync.h> + +// +// server_retry_throttle_data +// + +struct grpc_server_retry_throttle_data { + gpr_refcount refs; + int max_milli_tokens; + int milli_token_ratio; + gpr_atm milli_tokens; + // A pointer to the replacement for this grpc_server_retry_throttle_data + // entry. If non-NULL, then this entry is stale and must not be used. + // We hold a reference to the replacement. + gpr_atm replacement; +}; + +static void get_replacement_throttle_data_if_needed( + grpc_server_retry_throttle_data** throttle_data) { + while (true) { + grpc_server_retry_throttle_data* new_throttle_data = + (grpc_server_retry_throttle_data*)gpr_atm_acq_load( + &(*throttle_data)->replacement); + if (new_throttle_data == NULL) return; + *throttle_data = new_throttle_data; + } +} + +bool grpc_server_retry_throttle_data_record_failure( + grpc_server_retry_throttle_data* throttle_data) { + // First, check if we are stale and need to be replaced. + get_replacement_throttle_data_if_needed(&throttle_data); + // We decrement milli_tokens by 1000 (1 token) for each failure. + const int new_value = (int)gpr_atm_no_barrier_clamped_add( + &throttle_data->milli_tokens, (gpr_atm)-1000, (gpr_atm)0, + (gpr_atm)throttle_data->max_milli_tokens); + // Retries are allowed as long as the new value is above the threshold + // (max_milli_tokens / 2). + return new_value > throttle_data->max_milli_tokens / 2; +} + +void grpc_server_retry_throttle_data_record_success( + grpc_server_retry_throttle_data* throttle_data) { + // First, check if we are stale and need to be replaced. + get_replacement_throttle_data_if_needed(&throttle_data); + // We increment milli_tokens by milli_token_ratio for each success. + gpr_atm_no_barrier_clamped_add( + &throttle_data->milli_tokens, (gpr_atm)throttle_data->milli_token_ratio, + (gpr_atm)0, (gpr_atm)throttle_data->max_milli_tokens); +} + +grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_ref( + grpc_server_retry_throttle_data* throttle_data) { + gpr_ref(&throttle_data->refs); + return throttle_data; +} + +void grpc_server_retry_throttle_data_unref( + grpc_server_retry_throttle_data* throttle_data) { + if (gpr_unref(&throttle_data->refs)) { + grpc_server_retry_throttle_data* replacement = + (grpc_server_retry_throttle_data*)gpr_atm_acq_load( + &throttle_data->replacement); + if (replacement != NULL) { + grpc_server_retry_throttle_data_unref(replacement); + } + gpr_free(throttle_data); + } +} + +static grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_create( + int max_milli_tokens, int milli_token_ratio, + grpc_server_retry_throttle_data* old_throttle_data) { + grpc_server_retry_throttle_data* throttle_data = + gpr_malloc(sizeof(*throttle_data)); + memset(throttle_data, 0, sizeof(*throttle_data)); + gpr_ref_init(&throttle_data->refs, 1); + throttle_data->max_milli_tokens = max_milli_tokens; + throttle_data->milli_token_ratio = milli_token_ratio; + int initial_milli_tokens = max_milli_tokens; + // If there was a pre-existing entry for this server name, initialize + // the token count by scaling proportionately to the old data. This + // ensures that if we're already throttling retries on the old scale, + // we will start out doing the same thing on the new one. + if (old_throttle_data != NULL) { + double token_fraction = + (int)gpr_atm_acq_load(&old_throttle_data->milli_tokens) / + (double)old_throttle_data->max_milli_tokens; + initial_milli_tokens = (int)(token_fraction * max_milli_tokens); + } + gpr_atm_rel_store(&throttle_data->milli_tokens, + (gpr_atm)initial_milli_tokens); + // If there was a pre-existing entry, mark it as stale and give it a + // pointer to the new entry, which is its replacement. + if (old_throttle_data != NULL) { + grpc_server_retry_throttle_data_ref(throttle_data); + gpr_atm_rel_store(&old_throttle_data->replacement, (gpr_atm)throttle_data); + } + return throttle_data; +} + +// +// avl vtable for string -> server_retry_throttle_data map +// + +static void* copy_server_name(void* key) { return gpr_strdup(key); } + +static long compare_server_name(void* key1, void* key2) { + return strcmp(key1, key2); +} + +static void destroy_server_retry_throttle_data(void* value) { + grpc_server_retry_throttle_data* throttle_data = value; + grpc_server_retry_throttle_data_unref(throttle_data); +} + +static void* copy_server_retry_throttle_data(void* value) { + grpc_server_retry_throttle_data* throttle_data = value; + return grpc_server_retry_throttle_data_ref(throttle_data); +} + +static const gpr_avl_vtable avl_vtable = { + gpr_free /* destroy_key */, copy_server_name, compare_server_name, + destroy_server_retry_throttle_data, copy_server_retry_throttle_data}; + +// +// server_retry_throttle_map +// + +static gpr_mu g_mu; +static gpr_avl g_avl; + +void grpc_retry_throttle_map_init() { + gpr_mu_init(&g_mu); + g_avl = gpr_avl_create(&avl_vtable); +} + +void grpc_retry_throttle_map_shutdown() { + gpr_mu_destroy(&g_mu); + gpr_avl_unref(g_avl); +} + +grpc_server_retry_throttle_data* grpc_retry_throttle_map_get_data_for_server( + const char* server_name, int max_milli_tokens, int milli_token_ratio) { + gpr_mu_lock(&g_mu); + grpc_server_retry_throttle_data* throttle_data = + gpr_avl_get(g_avl, (char*)server_name); + if (throttle_data == NULL) { + // Entry not found. Create a new one. + throttle_data = grpc_server_retry_throttle_data_create( + max_milli_tokens, milli_token_ratio, NULL); + g_avl = gpr_avl_add(g_avl, (char*)server_name, throttle_data); + } else { + if (throttle_data->max_milli_tokens != max_milli_tokens || + throttle_data->milli_token_ratio != milli_token_ratio) { + // Entry found but with old parameters. Create a new one based on + // the original one. + throttle_data = grpc_server_retry_throttle_data_create( + max_milli_tokens, milli_token_ratio, throttle_data); + g_avl = gpr_avl_add(g_avl, (char*)server_name, throttle_data); + } else { + // Entry found. Increase refcount. + grpc_server_retry_throttle_data_ref(throttle_data); + } + } + gpr_mu_unlock(&g_mu); + return throttle_data; +} diff --git a/src/core/ext/client_channel/retry_throttle.h b/src/core/ext/client_channel/retry_throttle.h new file mode 100644 index 0000000000000000000000000000000000000000..f9971faf6515cbd69b20b647e6700aa963e4fbf1 --- /dev/null +++ b/src/core/ext/client_channel/retry_throttle.h @@ -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. + * + */ + +#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RETRY_THROTTLE_H +#define GRPC_CORE_EXT_CLIENT_CHANNEL_RETRY_THROTTLE_H + +#include <stdbool.h> + +/// Tracks retry throttling data for an individual server name. +typedef struct grpc_server_retry_throttle_data grpc_server_retry_throttle_data; + +/// Records a failure. Returns true if it's okay to send a retry. +bool grpc_server_retry_throttle_data_record_failure( + grpc_server_retry_throttle_data* throttle_data); +/// Records a success. +void grpc_server_retry_throttle_data_record_success( + grpc_server_retry_throttle_data* throttle_data); + +grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_ref( + grpc_server_retry_throttle_data* throttle_data); +void grpc_server_retry_throttle_data_unref( + grpc_server_retry_throttle_data* throttle_data); + +/// Initializes global map of failure data for each server name. +void grpc_retry_throttle_map_init(); +/// Shuts down global map of failure data for each server name. +void grpc_retry_throttle_map_shutdown(); + +/// Returns a reference to the failure data for \a server_name, creating +/// a new entry if needed. +/// Caller must eventually unref via \a grpc_server_retry_throttle_data_unref(). +grpc_server_retry_throttle_data* grpc_retry_throttle_map_get_data_for_server( + const char* server_name, int max_milli_tokens, int milli_token_ratio); + +#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RETRY_THROTTLE_H */ diff --git a/src/core/ext/client_channel/subchannel.c b/src/core/ext/client_channel/subchannel.c index 5df0a9060d01df6fa680902cf5a6dc88dbdff403..e886fbc0ccdeebd8b2b13a2ee0553af47fdd5db3 100644 --- a/src/core/ext/client_channel/subchannel.c +++ b/src/core/ext/client_channel/subchannel.c @@ -41,7 +41,6 @@ #include <grpc/support/string_util.h> #include "src/core/ext/client_channel/client_channel.h" -#include "src/core/ext/client_channel/initial_connect_string.h" #include "src/core/ext/client_channel/parse_address.h" #include "src/core/ext/client_channel/proxy_mapper_registry.h" #include "src/core/ext/client_channel/subchannel_index.h" @@ -103,9 +102,6 @@ struct grpc_subchannel { grpc_subchannel_key *key; - /** initial string to send to peer */ - grpc_slice initial_connect_string; - /** set during connection */ grpc_connect_out_args connecting_result; @@ -148,6 +144,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)) @@ -214,7 +211,6 @@ static void subchannel_destroy(grpc_exec_ctx *exec_ctx, void *arg, grpc_subchannel *c = arg; gpr_free((void *)c->filters); grpc_channel_args_destroy(exec_ctx, c->args); - grpc_slice_unref_internal(exec_ctx, c->initial_connect_string); grpc_connectivity_state_destroy(exec_ctx, &c->state_tracker); grpc_connector_unref(exec_ctx, c->connector); grpc_pollset_set_destroy(exec_ctx, c->pollset_set); @@ -332,7 +328,6 @@ 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(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; if (grpc_proxy_mappers_map_address(exec_ctx, addr, args->args, &new_address, @@ -340,17 +335,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, @@ -405,7 +398,6 @@ static void continue_connect_locked(grpc_exec_ctx *exec_ctx, args.interested_parties = c->pollset_set; args.deadline = c->next_attempt; args.channel_args = c->args; - args.initial_connect_string = c->initial_connect_string; grpc_connectivity_state_set(exec_ctx, &c->state_tracker, GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE, @@ -719,13 +711,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 +762,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 +786,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; } diff --git a/src/core/ext/client_channel/subchannel.h b/src/core/ext/client_channel/subchannel.h index 6a70a76467629dbe6c824850c03ef370b52210c3..3e64a2507cf16eb311d1c2be343eae6820779c6d 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); diff --git a/src/core/ext/load_reporting/load_reporting_filter.c b/src/core/ext/load_reporting/load_reporting_filter.c index c2750634a50e1db089b63f89795378bf923070ef..4ed832671d9e24afda6cc3d0e30e1d70b56733a9 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 eae0145ecc72b643144817bfadfa827acf5b06c9..d49c32b67191edc91fb4b9778f09a673b093c1e8 100644 --- a/src/core/ext/transport/chttp2/client/chttp2_connector.c +++ b/src/core/ext/transport/chttp2/client/chttp2_connector.c @@ -63,8 +63,6 @@ typedef struct { grpc_closure *notify; grpc_connect_in_args args; grpc_connect_out_args *result; - grpc_closure initial_string_sent; - grpc_slice_buffer initial_string_buffer; grpc_endpoint *endpoint; // Non-NULL until handshaking starts. @@ -82,7 +80,6 @@ static void chttp2_connector_unref(grpc_exec_ctx *exec_ctx, grpc_connector *con) { chttp2_connector *c = (chttp2_connector *)con; if (gpr_unref(&c->refs)) { - /* c->initial_string_buffer does not need to be destroyed */ gpr_mu_destroy(&c->mu); // If handshaking is not yet in progress, destroy the endpoint. // Otherwise, the handshaker will do this for us. @@ -160,28 +157,6 @@ static void start_handshake_locked(grpc_exec_ctx *exec_ctx, c->endpoint = NULL; // Endpoint handed off to handshake manager. } -static void on_initial_connect_string_sent(grpc_exec_ctx *exec_ctx, void *arg, - grpc_error *error) { - chttp2_connector *c = arg; - gpr_mu_lock(&c->mu); - if (error != GRPC_ERROR_NONE || c->shutdown) { - if (error == GRPC_ERROR_NONE) { - error = GRPC_ERROR_CREATE("connector shutdown"); - } else { - error = GRPC_ERROR_REF(error); - } - memset(c->result, 0, sizeof(*c->result)); - grpc_closure *notify = c->notify; - c->notify = NULL; - grpc_closure_sched(exec_ctx, notify, error); - gpr_mu_unlock(&c->mu); - chttp2_connector_unref(exec_ctx, arg); - } else { - start_handshake_locked(exec_ctx, c); - gpr_mu_unlock(&c->mu); - } -} - static void connected(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { chttp2_connector *c = arg; gpr_mu_lock(&c->mu); @@ -204,17 +179,7 @@ static void connected(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { chttp2_connector_unref(exec_ctx, arg); } else { GPR_ASSERT(c->endpoint != NULL); - if (!GRPC_SLICE_IS_EMPTY(c->args.initial_connect_string)) { - grpc_closure_init(&c->initial_string_sent, on_initial_connect_string_sent, - c, grpc_schedule_on_exec_ctx); - grpc_slice_buffer_init(&c->initial_string_buffer); - grpc_slice_buffer_add(&c->initial_string_buffer, - c->args.initial_connect_string); - grpc_endpoint_write(exec_ctx, c->endpoint, &c->initial_string_buffer, - &c->initial_string_sent); - } else { - start_handshake_locked(exec_ctx, c); - } + start_handshake_locked(exec_ctx, c); gpr_mu_unlock(&c->mu); } } diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index da4c7dc7b231e9544fa09b52bf0f944aedceface..89659e7464f5859e4b94fa870d68976eceffd2af 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); @@ -1760,6 +1765,7 @@ static void close_from_api(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s, grpc_error *error) { grpc_slice hdr; grpc_slice status_hdr; + grpc_slice http_status_hdr; grpc_slice message_pfx; uint8_t *p; uint32_t len = 0; @@ -1775,6 +1781,26 @@ static void close_from_api(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, It's complicated by the fact that our send machinery would be dead by the time we got around to sending this, so instead we ignore HPACK compression and just write the uncompressed bytes onto the wire. */ + if (!s->sent_initial_metadata) { + http_status_hdr = grpc_slice_malloc(13); + p = GRPC_SLICE_START_PTR(http_status_hdr); + *p++ = 0x00; + *p++ = 7; + *p++ = ':'; + *p++ = 's'; + *p++ = 't'; + *p++ = 'a'; + *p++ = 't'; + *p++ = 'u'; + *p++ = 's'; + *p++ = 3; + *p++ = '2'; + *p++ = '0'; + *p++ = '0'; + GPR_ASSERT(p == GRPC_SLICE_END_PTR(http_status_hdr)); + len += (uint32_t)GRPC_SLICE_LENGTH(http_status_hdr); + } + status_hdr = grpc_slice_malloc(15 + (grpc_status >= 10)); p = GRPC_SLICE_START_PTR(status_hdr); *p++ = 0x00; /* literal header, not indexed */ @@ -1842,6 +1868,9 @@ static void close_from_api(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, GPR_ASSERT(p == GRPC_SLICE_END_PTR(hdr)); grpc_slice_buffer_add(&t->qbuf, hdr); + if (!s->sent_initial_metadata) { + grpc_slice_buffer_add(&t->qbuf, http_status_hdr); + } grpc_slice_buffer_add(&t->qbuf, status_hdr); if (msg != NULL) { grpc_slice_buffer_add(&t->qbuf, message_pfx); diff --git a/src/core/ext/transport/chttp2/transport/frame_ping.c b/src/core/ext/transport/chttp2/transport/frame_ping.c index f487533c4145376c751fedea9b211548fc800256..9b4b1a7b841e0ce6c7106b21379c431e193f3fa7 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 40f5120308c13de9d9818f894ca2e01acf8ee317..1865b997b7dd85f8eb332d7c28a1bf5a243df908 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 c91b019aa0591c0747ce3f9ea4b2363a0216c334..da0a34d32a08f009c4eab9657ce0baa80ca310d5 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 1eac6fc1504112d724392f3844e7cd4eca7ffe1e..288c917e65a96fad5cd2d5629c6ce3b232565433 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 d26812ad6be357f870527176ff08a1a35408bfbb..3c56c215991f22a9e74c554d411d1d948a452ceb 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 e7f2597f89c9e9ea1ca2f10f9ed01fd9bbfd82b4..7efc8c63c91dafa04a133195bb09b055f4502186 100644 --- a/src/core/ext/transport/chttp2/transport/parsing.c +++ b/src/core/ext/transport/chttp2/transport/parsing.c @@ -548,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); + } } } @@ -598,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 01a03533daf16338068cfe7a114760e782d2ce6f..36bb67869c53daa9d4341b90a505ba54747f73b6 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 { \ @@ -127,6 +128,7 @@ struct read_state { int received_bytes; int remaining_bytes; int length_field; + bool compressed; char grpc_header_bytes[GRPC_HEADER_SIZE_IN_BYTES]; char *payload_field; bool read_stream_closed; @@ -151,11 +153,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 +185,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 +257,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 +312,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 +404,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 +427,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 +442,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); } @@ -448,18 +485,31 @@ static void on_response_headers_received( CRONET_LOG(GPR_DEBUG, "R: on_response_headers_received(%p, %p, %s)", stream, headers, negotiated_protocol); stream_obj *s = (stream_obj *)stream->annotation; + + /* Identify if this is a header or a trailer (in a trailer-only response case) + */ + for (size_t i = 0; i < headers->count; i++) { + if (0 == strcmp("grpc-status", headers->headers[i].key)) { + on_response_trailers_received(stream, headers); + return; + } + } + 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] || @@ -468,11 +518,13 @@ static void on_response_headers_received( is closed */ GPR_ASSERT(s->state.rs.length_field_received == false); s->state.rs.read_buffer = s->state.rs.grpc_header_bytes; + s->state.rs.compressed = false; s->state.rs.received_bytes = 0; s->state.rs.remaining_bytes = GRPC_HEADER_SIZE_IN_BYTES; 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 +556,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 +573,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 +602,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; @@ -596,7 +653,7 @@ static void on_response_trailers_received( */ static void create_grpc_frame(grpc_slice_buffer *write_slice_buffer, char **pp_write_buffer, - size_t *p_write_buffer_size) { + size_t *p_write_buffer_size, uint32_t flags) { grpc_slice slice = grpc_slice_buffer_take_first(write_slice_buffer); size_t length = GRPC_SLICE_LENGTH(slice); *p_write_buffer_size = length + GRPC_HEADER_SIZE_IN_BYTES; @@ -605,7 +662,9 @@ static void create_grpc_frame(grpc_slice_buffer *write_slice_buffer, *pp_write_buffer = write_buffer; uint8_t *p = (uint8_t *)write_buffer; /* Append 5 byte header */ - *p++ = 0; + /* Compressed flag */ + *p++ = (flags & GRPC_WRITE_INTERNAL_COMPRESS) ? 1 : 0; + /* Message length */ *p++ = (uint8_t)(length >> 24); *p++ = (uint8_t)(length >> 16); *p++ = (uint8_t)(length >> 8); @@ -683,14 +742,16 @@ static void convert_metadata_to_cronet_headers( *p_num_headers = (size_t)num_headers; } -static int parse_grpc_header(const uint8_t *data) { +static void parse_grpc_header(const uint8_t *data, int *length, + bool *compressed) { + const uint8_t c = *data; const uint8_t *p = data + 1; - int length = 0; - length |= ((uint8_t)*p++) << 24; - length |= ((uint8_t)*p++) << 16; - length |= ((uint8_t)*p++) << 8; - length |= ((uint8_t)*p++); - return length; + *compressed = ((c & 0x01) == 0x01); + *length = 0; + *length |= ((uint8_t)*p++) << 24; + *length |= ((uint8_t)*p++) << 16; + *length |= ((uint8_t)*p++) << 8; + *length |= ((uint8_t)*p++); } static bool header_has_authority(grpc_linked_mdelem *head) { @@ -743,7 +804,8 @@ 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 received headers yet. */ - else if (!stream_state->state_callback_received[OP_RECV_INITIAL_METADATA]) + else if (!stream_state->state_callback_received[OP_RECV_INITIAL_METADATA] && + !stream_state->state_op_done[OP_RECV_TRAILING_METADATA]) result = false; } else if (op_id == OP_SEND_MESSAGE) { /* already executed (note we're checking op specific state, not stream @@ -756,7 +818,8 @@ static bool op_can_be_run(grpc_transport_stream_op *curr_op, /* already executed */ if (op_state->state_op_done[OP_RECV_MESSAGE]) result = false; /* we haven't received headers yet. */ - else if (!stream_state->state_callback_received[OP_RECV_INITIAL_METADATA]) + else if (!stream_state->state_callback_received[OP_RECV_INITIAL_METADATA] && + !stream_state->state_op_done[OP_RECV_TRAILING_METADATA]) result = false; } else if (op_id == OP_RECV_TRAILING_METADATA) { /* already executed */ @@ -778,7 +841,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 +963,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."); @@ -910,12 +973,6 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx, grpc_slice_buffer_init(&write_slice_buffer); grpc_byte_stream_next(NULL, stream_op->send_message, &slice, stream_op->send_message->length, NULL); - /* Check that compression flag is OFF. We don't support compression yet. - */ - if (stream_op->send_message->flags != 0) { - gpr_log(GPR_ERROR, "Compression is not supported"); - GPR_ASSERT(stream_op->send_message->flags == 0); - } grpc_slice_buffer_add(&write_slice_buffer, slice); if (write_slice_buffer.count != 1) { /* Empty request not handled yet */ @@ -925,7 +982,7 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx, if (write_slice_buffer.count > 0) { size_t write_buffer_size; create_grpc_frame(&write_slice_buffer, &stream_state->ws.write_buffer, - &write_buffer_size); + &write_buffer_size, stream_op->send_message->flags); CRONET_LOG(GPR_DEBUG, "bidirectional_stream_write (%p, %p)", s->cbs, stream_state->ws.write_buffer); stream_state->state_callback_received[OP_SEND_MESSAGE] = false; @@ -977,6 +1034,9 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx, } else if (stream_state->state_callback_received[OP_FAILED]) { grpc_closure_sched(exec_ctx, stream_op->recv_initial_metadata_ready, GRPC_ERROR_NONE); + } else if (stream_state->state_op_done[OP_RECV_TRAILING_METADATA]) { + grpc_closure_sched(exec_ctx, stream_op->recv_initial_metadata_ready, + GRPC_ERROR_NONE); } else { grpc_chttp2_incoming_metadata_buffer_publish( exec_ctx, &oas->s->state.rs.initial_metadata, @@ -1009,13 +1069,21 @@ 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) { /* Start a read operation for data */ stream_state->rs.length_field_received = true; - stream_state->rs.length_field = stream_state->rs.remaining_bytes = - parse_grpc_header((const uint8_t *)stream_state->rs.read_buffer); + parse_grpc_header((const uint8_t *)stream_state->rs.read_buffer, + &stream_state->rs.length_field, + &stream_state->rs.compressed); CRONET_LOG(GPR_DEBUG, "length field = %d", stream_state->rs.length_field); if (stream_state->rs.length_field > 0) { @@ -1029,6 +1097,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; @@ -1036,6 +1105,9 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx, grpc_slice_buffer_init(&stream_state->rs.read_slice_buffer); grpc_slice_buffer_stream_init(&stream_state->rs.sbs, &stream_state->rs.read_slice_buffer, 0); + if (stream_state->rs.compressed) { + stream_state->rs.sbs.base.flags |= GRPC_WRITE_INTERNAL_COMPRESS; + } *((grpc_byte_buffer **)stream_op->recv_message) = (grpc_byte_buffer *)&stream_state->rs.sbs; grpc_closure_sched(exec_ctx, stream_op->recv_message_ready, @@ -1047,11 +1119,14 @@ 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.compressed = false; + 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) { @@ -1059,11 +1134,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.compressed = 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_WITH_CALLBACK; } else { result = NO_ACTION_POSSIBLE; @@ -1075,12 +1152,15 @@ 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); grpc_slice_buffer_stream_init(&stream_state->rs.sbs, &stream_state->rs.read_slice_buffer, 0); + if (stream_state->rs.compressed) { + stream_state->rs.sbs.base.flags = GRPC_WRITE_INTERNAL_COMPRESS; + } *((grpc_byte_buffer **)stream_op->recv_message) = (grpc_byte_buffer *)&stream_state->rs.sbs; grpc_closure_sched(exec_ctx, stream_op->recv_message_ready, @@ -1090,12 +1170,14 @@ static enum e_op_result execute_stream_op(grpc_exec_ctx *exec_ctx, /* Do an extra read to trigger on_succeeded() callback in case connection is closed */ stream_state->rs.read_buffer = stream_state->rs.grpc_header_bytes; + stream_state->rs.compressed = false; stream_state->rs.received_bytes = 0; stream_state->rs.remaining_bytes = GRPC_HEADER_SIZE_IN_BYTES; stream_state->rs.length_field_received = false; 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 +1235,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 +1247,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 +1263,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 +1285,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 3fb2a60ac719245c0b28db53277728e5d90b74f6..6d53b0576e7ebb4f082589f1c1c21ed605c509f6 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 6d3340bcbf8cf6e155267077260c642a0dfad977..80e3603e8d87e3320587b07756833dc59cb8fcca 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 aa41014a217ba727f9e18e0fe5451c6d2327b854..02dc479f3a214df3342f31c4cdc36481cf839259 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 29796f7ca7e96546c770cafb2d1d4360198eac01..42ef7b78063b45ea1494722805843e2ecc0f6f85 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 5a12d62f1d1af7d0358cab4f0aba39d63c233f47..34114bbebfde57a08edb55bd2b98eef7d2e4ae6b 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 c031533dd867a65e4028dd63d8935ffc84c84fec..f9d0d689acd7c64cc3f2bb91ed797f62c214ea38 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 fb70de8e96c5f8093a659659734b8e2ca77c9bea..bebd3af335b31362bb6637c66f043db6893b1123 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 b424c0d2acbb55e7b79dd47d0270ee8267f67015..5ba13fe2514144311694ba1030d5394be083afb5 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/closure.c b/src/core/lib/iomgr/closure.c index 509c1ff95dd2304fe90b1f4e51cbba172d4f69fb..6633fb68ecf63b488e5976a98c5a4502bb80fef6 100644 --- a/src/core/lib/iomgr/closure.c +++ b/src/core/lib/iomgr/closure.c @@ -33,6 +33,7 @@ #include "src/core/lib/iomgr/closure.h" +#include <assert.h> #include <grpc/support/alloc.h> #include <grpc/support/log.h> @@ -124,6 +125,7 @@ void grpc_closure_run(grpc_exec_ctx *exec_ctx, grpc_closure *c, grpc_error *error) { GPR_TIMER_BEGIN("grpc_closure_run", 0); if (c != NULL) { + assert(c->cb); c->scheduler->vtable->run(exec_ctx, c, error); } else { GRPC_ERROR_UNREF(error); @@ -135,6 +137,7 @@ void grpc_closure_sched(grpc_exec_ctx *exec_ctx, grpc_closure *c, grpc_error *error) { GPR_TIMER_BEGIN("grpc_closure_sched", 0); if (c != NULL) { + assert(c->cb); c->scheduler->vtable->sched(exec_ctx, c, error); } else { GRPC_ERROR_UNREF(error); @@ -146,6 +149,7 @@ void grpc_closure_list_sched(grpc_exec_ctx *exec_ctx, grpc_closure_list *list) { grpc_closure *c = list->head; while (c != NULL) { grpc_closure *next = c->next_data.next; + assert(c->cb); c->scheduler->vtable->sched(exec_ctx, c, c->error_data.error); c = next; } diff --git a/src/core/lib/iomgr/combiner.c b/src/core/lib/iomgr/combiner.c index fa9966c3a6957b38d7fa47d983bc7783198cf8a5..2bc476bbef624a72aafd09049f58ffa30ef52a26 100644 --- a/src/core/lib/iomgr/combiner.c +++ b/src/core/lib/iomgr/combiner.c @@ -33,6 +33,7 @@ #include "src/core/lib/iomgr/combiner.h" +#include <assert.h> #include <string.h> #include <grpc/support/alloc.h> @@ -216,6 +217,7 @@ static void combiner_exec(grpc_exec_ctx *exec_ctx, grpc_combiner *lock, GPR_DEBUG, "C:%p grpc_combiner_execute c=%p cov=%d last=%" PRIdPTR, lock, cl, covered_by_poller, last)); GPR_ASSERT(last & STATE_UNORPHANED); // ensure lock has not been destroyed + assert(cl->cb); cl->error_data.scratch = pack_error_data((error_data){error, covered_by_poller}); if (covered_by_poller) { diff --git a/src/core/lib/iomgr/error.c b/src/core/lib/iomgr/error.c index dbe5b139f91dfbd11ddf042b7541a8069c1909e9..1127fff756f7a08f8a8d2b65893394293c598034 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 2613512acbeedd5970d64bb10a07e4cf1bb56c45..0e7a7b0a1ef8a1306f7570bdbee86d54111828cc 100644 --- a/src/core/lib/iomgr/error.h +++ b/src/core/lib/iomgr/error.h @@ -45,28 +45,9 @@ extern "C" { #endif /// Opaque representation of an error. -/// Errors are refcounted objects that represent the result of an operation. -/// Ownership laws: -/// if a grpc_error is returned by a function, the caller owns a ref to that -/// instance -/// if a grpc_error is passed to a grpc_closure callback function (functions -/// with the signature: -/// void (*f)(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error)) -/// then those functions do not own a ref to error (but are free to manually -/// take a reference). -/// if a grpc_error is passed to *ANY OTHER FUNCTION* then that function takes -/// ownership of the error -/// Errors have: -/// a set of ints, strings, and timestamps that describe the error -/// always present are: -/// GRPC_ERROR_STR_FILE, GRPC_ERROR_INT_FILE_LINE - source location the error -/// was generated -/// GRPC_ERROR_STR_DESCRIPTION - a human readable description of the error -/// GRPC_ERROR_TIME_CREATED - a timestamp indicating when the error happened -/// an error can also have children; these are other errors that are believed -/// to have contributed to this one. By accumulating children, we can begin -/// to root cause high level failures from low level failures, without having -/// to derive execution paths from log lines +/// See https://github.com/grpc/grpc/blob/master/doc/core/grpc-error.md for a +/// full write up of this object. + typedef struct grpc_error grpc_error; typedef enum { @@ -102,6 +83,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 +113,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 +174,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 1c89ead4ed66d53b36d81195bcccba2ba98ac5e7..7f204df1b2db613e273567d783dbdb1234207c21 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/ev_poll_posix.c b/src/core/lib/iomgr/ev_poll_posix.c index 5ddd5313e2b0e4ce7db05a688c32b2bf3ce5248d..789ef22c557ea4d336b47d0f5411a383d2d7a4ed 100644 --- a/src/core/lib/iomgr/ev_poll_posix.c +++ b/src/core/lib/iomgr/ev_poll_posix.c @@ -1421,7 +1421,7 @@ static int cvfd_poll(struct pollfd *fds, nfds_t nfds, int timeout) { g_cvfds.pollcount++; opt = gpr_thd_options_default(); gpr_thd_options_set_detached(&opt); - gpr_thd_new(&t_id, &run_poll, pargs, &opt); + GPR_ASSERT(gpr_thd_new(&t_id, &run_poll, pargs, &opt)); // We want the poll() thread to trigger the deadline, so wait forever here gpr_cv_wait(pollcv, &g_cvfds.mu, gpr_inf_future(GPR_CLOCK_MONOTONIC)); if (gpr_atm_no_barrier_load(&pargs->status) == COMPLETED) { diff --git a/src/core/lib/iomgr/executor.c b/src/core/lib/iomgr/executor.c index a5b62aa88885ccce3c0f89bb8fc0a945f80e63c4..ae3e2eabc390a47e51256038aa21cd1eb650c3fc 100644 --- a/src/core/lib/iomgr/executor.c +++ b/src/core/lib/iomgr/executor.c @@ -115,8 +115,8 @@ static void maybe_spawn_locked() { /* All previous instances of the thread should have been joined at this point. * Spawn time! */ g_executor.busy = 1; - gpr_thd_new(&g_executor.tid, closure_exec_thread_func, NULL, - &g_executor.options); + GPR_ASSERT(gpr_thd_new(&g_executor.tid, closure_exec_thread_func, NULL, + &g_executor.options)); g_executor.pending_join = 1; } diff --git a/src/core/lib/iomgr/pollset_uv.c b/src/core/lib/iomgr/pollset_uv.c index af33949c698bd33af5104b79ba3e88444716c816..a2f81bcd78d6354c754088972c095187f9f2bce6 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 f1897bb91f2fd8ad1efb29eef2d976e04a3e42ca..94a454c0b7c7e697827edc4043b9ba8d2d846b55 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 79ff91073899e47b6c47afb50fb322780c5f636c..4d715be94c7e82687cb4214bd411992652562d97 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/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c index ae66577cafd23226577a03647fc744037b8c9a78..618483d9cb7e75fc165de64c32e789d55201a0f3 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 5f286a6723ccf780f8f4e229f0d196f7a9d4e84a..e242631fc0b077426d18884f440f731b8568bd8b 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,82 +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; - /* 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; -}; - static gpr_once check_init = GPR_ONCE_INIT; static bool has_so_reuseport = false; @@ -301,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; @@ -477,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, @@ -701,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) { @@ -717,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; @@ -726,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 = @@ -756,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); @@ -828,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; } 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 0000000000000000000000000000000000000000..f5dc8532f9fb56ad6855fa55b6f6564acc39e3ab --- /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 0000000000000000000000000000000000000000..e45e27d5ab6b286e4b18e328b8c6b030a8f09c43 --- /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 0000000000000000000000000000000000000000..6354a6bdc1061bcf4025e99cbd9461e10e5def7d --- /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/ext/client_channel/initial_connect_string.c b/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c similarity index 69% rename from src/core/ext/client_channel/initial_connect_string.c rename to src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c index 8ebd06c458a6d50b87ebe45ea620b704b651d6d4..95c3198be6fec6c63b9665696d19a84ec87fd98e 100644 --- a/src/core/ext/client_channel/initial_connect_string.c +++ b/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c @@ -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 @@ -31,22 +31,19 @@ * */ -#include "src/core/ext/client_channel/initial_connect_string.h" +#include "src/core/lib/iomgr/port.h" -#include <stddef.h> +#if defined(GRPC_POSIX_SOCKET) && !defined(GRPC_HAVE_IFADDRS) -extern void grpc_set_default_initial_connect_string( - grpc_resolved_address **addr, grpc_slice *initial_str); +#include "src/core/lib/iomgr/tcp_server_utils_posix.h" -static grpc_set_initial_connect_string_func g_set_initial_connect_string_func = - grpc_set_default_initial_connect_string; - -void grpc_test_set_initial_connect_string_function( - grpc_set_initial_connect_string_func func) { - g_set_initial_connect_string_func = func; +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"); } -void grpc_set_initial_connect_string(grpc_resolved_address **addr, - grpc_slice *initial_str) { - g_set_initial_connect_string_func(addr, initial_str); -} +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 d1bcd89af1f0b07d9ffb25de8fc459423992774f..71e295770a4f97d44939902a94588d4b9bf313ef 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) { diff --git a/src/core/lib/iomgr/udp_server.h b/src/core/lib/iomgr/udp_server.h index ed63fa7d817b4d8eb6bd26c376d75e8f09b2cea9..90842a47f091ab2497d765185d3f7bdd091e37d5 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 71d32d97ba778da4b01fb5ea36ec482daec19a4b..c8dd242c753b348d8dee338c15288c695225730d 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/profiling/basic_timers.c b/src/core/lib/profiling/basic_timers.c index 1f1987fb8e7d4d1ba0aaa9ea4d0f9022f44b6218..bc8e27714ca298eef3c25c2ad1bfdcc4ada0618a 100644 --- a/src/core/lib/profiling/basic_timers.c +++ b/src/core/lib/profiling/basic_timers.c @@ -218,7 +218,7 @@ void gpr_timers_set_log_filename(const char *filename) { static void init_output() { gpr_thd_options options = gpr_thd_options_default(); gpr_thd_options_set_joinable(&options); - gpr_thd_new(&g_writing_thread, writing_thread, NULL, &options); + GPR_ASSERT(gpr_thd_new(&g_writing_thread, writing_thread, NULL, &options)); atexit(finish_writing); } diff --git a/src/core/lib/security/transport/client_auth_filter.c b/src/core/lib/security/transport/client_auth_filter.c index a23082a86678ad0df1a6000b6421cedde0223055..8dea1d98fff5e9f6e4047589b2be53362def0f99 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 14619d97caf1ff8d7ab3f0ac6ef18700de9f1437..01cb47317732e7319069d6a51c6cbbe26855897d 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 0000000000000000000000000000000000000000..7bcb983f245afa8cd447a8e47ef204ec4b114304 --- /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 0000000000000000000000000000000000000000..c28033ffc356fa637df7dea2564393f798daca63 --- /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/ext/client_channel/default_initial_connect_string.c b/src/core/lib/support/atm.c similarity index 76% rename from src/core/ext/client_channel/default_initial_connect_string.c rename to src/core/lib/support/atm.c index 6db82d84ef15a3ded8e816726efcc7a7da88be0e..06e8432caf887d6cb9bc06084dccab6c484c84cd 100644 --- a/src/core/ext/client_channel/default_initial_connect_string.c +++ b/src/core/lib/support/atm.c @@ -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 @@ -31,8 +31,17 @@ * */ -#include <grpc/slice.h> -#include "src/core/lib/iomgr/resolve_address.h" +#include <grpc/support/atm.h> +#include <grpc/support/useful.h> -void grpc_set_default_initial_connect_string(grpc_resolved_address **addr, - grpc_slice *initial_str) {} +gpr_atm gpr_atm_no_barrier_clamped_add(gpr_atm *value, gpr_atm delta, + gpr_atm min, gpr_atm max) { + gpr_atm current; + gpr_atm new; + do { + current = gpr_atm_no_barrier_load(value); + new = GPR_CLAMP(current + delta, min, max); + if (new == current) break; + } while (!gpr_atm_no_barrier_cas(value, current, new)); + return new; +} diff --git a/src/core/lib/support/sync.c b/src/core/lib/support/sync.c index e4a7fce646b7d6bee67ee74156961d4a24ef681b..b52f004f743746a0f7833db31605562e88f1a8bc 100644 --- a/src/core/lib/support/sync.c +++ b/src/core/lib/support/sync.c @@ -119,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 c2547c5147afdb0210b01aeec91fbbb876f34d59..2c5d8c0ff35171e601041ce2f56c83ccedf63e08 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,8 +162,8 @@ struct grpc_call { bool received_initial_metadata; bool receiving_message; bool requested_final_op; - bool received_final_op; - bool sent_any_op; + gpr_atm any_ops_sent_atm; + gpr_atm received_final_op_atm; /* have we received initial metadata */ bool has_initial_md_been_received; @@ -212,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; @@ -273,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; @@ -313,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( @@ -341,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) { @@ -353,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)); @@ -421,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) { @@ -435,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); } @@ -447,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); @@ -456,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); } @@ -473,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) { @@ -482,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->sent_any_op && !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); @@ -555,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, @@ -715,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; } @@ -729,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; } @@ -785,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; } @@ -1056,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) { @@ -1083,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, @@ -1103,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, @@ -1130,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 */ @@ -1221,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); @@ -1233,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); } } @@ -1296,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)); @@ -1309,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 = @@ -1336,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); } @@ -1393,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; @@ -1679,8 +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; - call->sent_any_op = true; - gpr_mu_unlock(&call->mu); + gpr_atm_rel_store(&call->any_ops_sent_atm, 1); execute_op(exec_ctx, call, stream_op); @@ -1711,7 +1692,6 @@ done_with_error: if (bctl->recv_final_op) { call->requested_final_op = 0; } - gpr_mu_unlock(&call->mu); goto done; } @@ -1760,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 d6acd392c1a5f55f43fbe1f8a797833fcc3dcec8..2b700b2f67506cad591b16731849b94c142df288 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 3a441d7added2b3b3d395d37af1597d5a8024244..c4aebd8b9bef3eaa8d85ae1e477651c779003176 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 49bc4c114b37afcc696b88cc98986321e7846af3..9ddb88bd1144ee4fd90ae47349d4e8812781512a 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 b360579553659fc005bfa10658d00077a30199f3..1186a4af63637508ed5d4ddef56cb0fced84dfe5 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 1143a9e044e97901e084416f670755494b66dacd..ba80bd801ee5da585febf65443248c647f503a4b 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 da77828d9c11bb7ea9c13691d3711fe78de808c1..ef55e561fbface9d866b7f4d8a9e59c384dd773f 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/service_config.c b/src/core/lib/transport/service_config.c index 12da2a88feb9537ace387c80d8be1fa13157cb75..1195f75044a4a64ac04c4fa2a79f6a9a2808f38c 100644 --- a/src/core/lib/transport/service_config.c +++ b/src/core/lib/transport/service_config.c @@ -93,6 +93,18 @@ void grpc_service_config_destroy(grpc_service_config* service_config) { gpr_free(service_config); } +void grpc_service_config_parse_global_params( + const grpc_service_config* service_config, + void (*process_json)(const grpc_json* json, void* arg), void* arg) { + const grpc_json* json = service_config->json_tree; + if (json->type != GRPC_JSON_OBJECT || json->key != NULL) return; + for (grpc_json* field = json->child; field != NULL; field = field->next) { + if (field->key == NULL) return; + if (strcmp(field->key, "methodConfig") == 0) continue; + process_json(field, arg); + } +} + const char* grpc_service_config_get_lb_policy_name( const grpc_service_config* service_config) { const grpc_json* json = service_config->json_tree; diff --git a/src/core/lib/transport/service_config.h b/src/core/lib/transport/service_config.h index cd739a593c27f939d2d7963ecee4d84e9619aa65..ebfc59b5347f057e775889c6c9d5be2b1a44f45b 100644 --- a/src/core/lib/transport/service_config.h +++ b/src/core/lib/transport/service_config.h @@ -42,6 +42,12 @@ typedef struct grpc_service_config grpc_service_config; grpc_service_config* grpc_service_config_create(const char* json_string); void grpc_service_config_destroy(grpc_service_config* service_config); +/// Invokes \a process_json() for each global parameter in the service +/// config. \a arg is passed as the second argument to \a process_json(). +void grpc_service_config_parse_global_params( + const grpc_service_config* service_config, + void (*process_json)(const grpc_json* json, void* arg), void* arg); + /// Gets the LB policy name from \a service_config. /// Returns NULL if no LB policy name was specified. /// Caller does NOT take ownership. diff --git a/src/core/lib/transport/transport.c b/src/core/lib/transport/transport.c index 165950e288e61edf50e1a83a3dd53ebece6bf39b..d56cb31ee00831c0b86ccaffb5f17cd688917865 100644 --- a/src/core/lib/transport/transport.c +++ b/src/core/lib/transport/transport.c @@ -162,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, @@ -197,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, @@ -254,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 cc1c277b355d2e4fcb4fd874fad2b8fb73ae89fb..950b18aeda2dceba34a48d7c64ae7d747d596cd2 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" @@ -229,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); @@ -246,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 8553148c35fd984226fd2587c3be4bd138055b51..6f688bf8d2870a82f4fdcd456cdaa426a665de9c 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/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index 65f327749999493476cf9d61db3c49e67add9e3e..eddcacc33254705c7a73ad54898e49247a2ff000 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 79c4bab985bac921734f08cd40af858d33ee69e9..494d5d64d7f68c364ddd011cccea46bc1cfef0af 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 039c530cdc7364bb66d8cb32cf5b1d52be45133c..f5a0e4131de418d88f6a06e26fec1e1c128a74fb 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 0000000000000000000000000000000000000000..723f968ff86c5779d96269de2f61496bc9948063 --- /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 00a90bb184c6d6233d2871e4f1fe3478b69ca39c..4eb4b5a1b21dc99c0e46d73ac071af48d162fdac 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 9e11a8a9e07a41420694f406d15a88fc49f4d4b5..e874892e73c0a173fb680fb0767a3846e34a2b5c 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/project.json b/src/csharp/Grpc.Auth/project.json index 170149ace52b15c68e9934cbc6f00f9f21f040aa..370bf11b2dd22cde543088b120ad487343239709 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,7 +21,7 @@ } }, "dependencies": { - "Grpc.Core": "1.2.0-dev", + "Grpc.Core": "1.3.0-dev", "Google.Apis.Auth": "1.21.0" }, "frameworks": { diff --git a/src/csharp/Grpc.Core.Testing/project.json b/src/csharp/Grpc.Core.Testing/project.json index 02be95781262362defb42f2cf22dd83e78b67753..38d5fab50e12615e9445eb629a605b873aff559f 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/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs index f01a024db43f52c50ba1198e8230df452115cb4b..6012d904b69ee0697b2739ffe63e05faa27ef64d 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 0e37ec8927f88b6524d64642d5f7eb22eafa4170..a1306baa8763062fd9103c404703161ef5b20176 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.HealthCheck/project.json b/src/csharp/Grpc.HealthCheck/project.json index 9e9d245caec7973bbdce2e9957a3bb384f0b362b..e93d0bf81b3786621e45f9760a5181ae839e0c94 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,7 +21,7 @@ } }, "dependencies": { - "Grpc.Core": "1.2.0-dev", + "Grpc.Core": "1.3.0-dev", "Google.Protobuf": "3.2.0" }, "frameworks": { diff --git a/src/csharp/Grpc.Reflection/project.json b/src/csharp/Grpc.Reflection/project.json index 8bfe722f78016978cc31614eea7f453e204a08a7..014c78e489d0ed78966913edbb8af59d8b5d4736 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,7 +21,7 @@ } }, "dependencies": { - "Grpc.Core": "1.2.0-dev", + "Grpc.Core": "1.3.0-dev", "Google.Protobuf": "3.2.0" }, "frameworks": { diff --git a/src/csharp/build_packages_dotnetcli.bat b/src/csharp/build_packages_dotnetcli.bat index b99fdcbdfde8bee033333af49e9bd2199e4dd4ee..4fec2c71cf8b28761d6b7237cd5e526bb6abe226 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 442e3acad28a5e23b8d0351a502b4b20c8a78071..f51b42bc8c10dffd533b50d24e94b196b88879bd 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/global.json b/src/csharp/global.json new file mode 100644 index 0000000000000000000000000000000000000000..32ff399ef948d2a97a69c8ede4bf04ffd9203326 --- /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/node/health_check/package.json b/src/node/health_check/package.json index 8376339debe13bb7f123da5551c6299e090788e6..e218f5a4063dc34b46b4d9bd7c20544c55bd9b5c 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 8a7eff507d03a691a8cd412475ca56928f7a02c8..a5a0ea264203f39f1bb8f948d3a0b449df99064e 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 53dd53f539106b694ca75e1a57b0238a5337e63f..3096c6e42a8fcd6a0ffb442fbd8b9947baa108d4 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 1a3b775c60986c5c560cf1621b02668ef4f5160c..ab8f82a39e74ce19fa25627f7de1ef19396857c9 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 e569faa25bbef40e8dff4efb40ad958bb1402c0d..09155ee4d40afab42c113e7c9f2270979b3719b2 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/CoreCronetEnd2EndTests/CoreCronetEnd2EndTests.m b/src/objective-c/tests/CoreCronetEnd2EndTests/CoreCronetEnd2EndTests.m index 1e0c8024cab3363d219bf8813077dd76119284c5..3b442645e8310cbe6729d811a400330d6e7d61ec 100644 --- a/src/objective-c/tests/CoreCronetEnd2EndTests/CoreCronetEnd2EndTests.m +++ b/src/objective-c/tests/CoreCronetEnd2EndTests/CoreCronetEnd2EndTests.m @@ -273,8 +273,7 @@ static char *roots_filename; } - (void)testCompressedPayload { - // NOT SUPPORTED - // [self testIndividualCase:"compressed_payload"]; + [self testIndividualCase:"compressed_payload"]; } - (void)testConnectivity { diff --git a/src/objective-c/tests/InteropTests.m b/src/objective-c/tests/InteropTests.m index 5584246ad94eb55a6d1c4c4cac9130c3428417a5..d964f53e8e2c0b6d5cb6ea7495b6d279aa13f934 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 b41210f50f85aca5d6c36837a585c08bfaf45e13..498766080872a359768d7a6e38bdff888366bfba 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 1479c5896c39488960a88516ba332a60c058f26d..934d500abc0275c90ed36a02b3252ff2a64da0f3 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 70f84753bb6e3e140c3870bb98cdc1d0a974da06..9fb30aa43d041c3f8c3d245650ca420510fd4a85 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 fab8ad8d25f2cf594ef97a7efff244c56f5dc2b8..005bac0a0d4851bdd0b2a094fd1518ac89eb4c41 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 491e34795ac0fd337c3443f93df04f9b4c270da5..2b140077cc5ed9ddbb4e508d6bce036b8b161f6f 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 0000000000000000000000000000000000000000..d9ca35ba43d2ffa954bd24dfc400fcb672ce8ea5 --- /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 0000000000000000000000000000000000000000..0fc87098f573c60ab4f5b9c699c87855296e9409 --- /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 0000000000000000000000000000000000000000..efca18a0cb31b1abcc2b994487ceb0edf2816d31 --- /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 0000000000000000000000000000000000000000..c0880026264968798638e8e9f3ff6660e23d0959 --- /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 0000000000000000000000000000000000000000..279fe00ac820ebd8af13dd324cb903222b77fc81 --- /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 0000000000000000000000000000000000000000..e35944e1d821dd4a3a91a31e2ca7f00a3addfbd6 --- /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 0000000000000000000000000000000000000000..7a9439a5b934e045707a24c1f886c3110725325a --- /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 0000000000000000000000000000000000000000..99c0000a52c163d8c4e43a1002a0740bab2b6329 --- /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 0000000000000000000000000000000000000000..daf17800cdcc4277692cbe94fcde4092076ef3af --- /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 0000000000000000000000000000000000000000..f0497accfb26ff43e2859af9e3e851f34f4b6dd6 --- /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 0000000000000000000000000000000000000000..0057d387488440468e7a5ccd32bb23b51c3ac015 --- /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 0000000000000000000000000000000000000000..d2fe3ae5ffc1083b52606734fed67ea95d917681 --- /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 0000000000000000000000000000000000000000..c878c5a7bc0bdc0d31ae6d8b5b6cfc05d3097d04 --- /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 0000000000000000000000000000000000000000..52d6a75fb0ecfe9ee8845b0960ed7bc1d17da20e --- /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 0000000000000000000000000000000000000000..8b9a0c33a463a1dd9488a38e73ac6cf7b36f7f1c --- /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 0000000000000000000000000000000000000000..a59f87a96285dd7113b079c98d4df73460d2ae92 --- /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 0000000000000000000000000000000000000000..4f59da992f998c9567c94acfb9e8f913d6e07deb --- /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 0000000000000000000000000000000000000000..53f2948af289e80de4d7851dc74a55c562c63c50 --- /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 0000000000000000000000000000000000000000..6d990f1b064a5abbc2018814f4f3a6987922dd2f --- /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 0000000000000000000000000000000000000000..2e078b3fcdbad02a17b41998c50b81aff7f0f0a2 --- /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 0000000000000000000000000000000000000000..85cb3418ada353426446cdde07326e3adb935c84 --- /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 0000000000000000000000000000000000000000..27340fb0efe9294b893a4c8854870bfd1590ae14 --- /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 0000000000000000000000000000000000000000..056da6e5de552b9329f77886867cdb7948a16dac --- /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 0000000000000000000000000000000000000000..836c94b01d836818cec011ef419ea1d809ffb067 --- /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 0000000000000000000000000000000000000000..1f32e49c8aad6369e587e9e8708b228d016b857a --- /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 0000000000000000000000000000000000000000..ce006efacd8874873f12f89d8217af659c61001c --- /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 0000000000000000000000000000000000000000..d17c271af7464ee7798f23cdefb61256a3df9637 --- /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 0000000000000000000000000000000000000000..a2fe7109ba7fc2dd2b08c391ace51e17dba008dd --- /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 0000000000000000000000000000000000000000..189ef034b4724cc7133c20435bd9d1cc93664bf2 --- /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 0000000000000000000000000000000000000000..d64edd45f03baf24a364040489c676c32525b9e1 --- /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 0000000000000000000000000000000000000000..23c041b47090c882b6567d930d732fc574028d7d --- /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 0000000000000000000000000000000000000000..ed43be99cef8c928cacf974393eb220e04ab4538 --- /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 0000000000000000000000000000000000000000..dfaaa606c3b6b3af2800e1712838514413450f41 --- /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 0000000000000000000000000000000000000000..97158557836966e04263c5f04cf5fd9e3b98f530 --- /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 0000000000000000000000000000000000000000..1be42b2ac91441251063e6acbca63200adb40645 --- /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 0000000000000000000000000000000000000000..b7a8e5ece719798c376ee3009d02618f0eb94f63 --- /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 0000000000000000000000000000000000000000..2e664fff47716c5ba0f7704c522ac7d0f35d4fa0 --- /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 0000000000000000000000000000000000000000..136ed299ea8ad6385f8c6698b0e4cd53a5d2dd06 --- /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 0000000000000000000000000000000000000000..809cd96244df250b37100aa40e007e4091e78dca --- /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 0000000000000000000000000000000000000000..7520cff78e8300e650dab257e9addae66e349755 --- /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 => 85%) + * </pre> + * + * <code>double server_system_time = 3;</code> + */ + private $server_system_time = 0.0; + /** + * <pre> + * server load based on user_time (0.85 => 85%) + * </pre> + * + * <code>double server_user_time = 4;</code> + */ + private $server_user_time = 0.0; + /** + * <pre> + * client load based on system_time (0.85 => 85%) + * </pre> + * + * <code>double client_system_time = 5;</code> + */ + private $client_system_time = 0.0; + /** + * <pre> + * client load based on user_time (0.85 => 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 => 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 => 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 => 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 => 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 => 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 => 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 => 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 => 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 0000000000000000000000000000000000000000..278f555b7606338f767c20c0ef610e22719a2cb6 --- /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 0000000000000000000000000000000000000000..27a5b95cc94db5a4605e141d2c3272b8bf1e6657 --- /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 0000000000000000000000000000000000000000..0d84b80124ae2b2927358b2639f0a712afb50749 --- /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 0000000000000000000000000000000000000000..e2bcede48cbd908422ea799da04793d3af5ac41b --- /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 0000000000000000000000000000000000000000..98b2af764c94fd1db6945d9b1afbdb98ac4d37e5 --- /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 0000000000000000000000000000000000000000..d293f03fbdfe3557e2954dbce1940b67800ef110 --- /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 0000000000000000000000000000000000000000..605c83c3f76d85310356f02c71ee252f04264721 --- /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 0000000000000000000000000000000000000000..29834a3be71a7ae28d3f772b967001d12c663203 --- /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 0000000000000000000000000000000000000000..f84c95319f4efc746bd7adab9dc6faf8c3f660d7 --- /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 0000000000000000000000000000000000000000..ccc628ec4c0feb8ed1aa68c293f71b997cf556c0 --- /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 0000000000000000000000000000000000000000..d7bbc707799688e2fb4895b631bf95245dc6de93 --- /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 0000000000000000000000000000000000000000..fdd1d0dbf8a96953ee7d36c319f31def76266e32 --- /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 0000000000000000000000000000000000000000..2aab5fadad77ced2c3a3ef24d8af965978e8f430 --- /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 0000000000000000000000000000000000000000..c06c78c9d8ffb2b251339fd900e4644bf2c7e3f0 --- /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 0000000000000000000000000000000000000000..38c100845a02b039048f7e9096d556f5e1b2b974 --- /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 0000000000000000000000000000000000000000..0a68e41269e895eff4d105480785ec2e69a8177c --- /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/proto/grpc/testing/proxy-service.proto b/src/proto/grpc/testing/proxy-service.proto new file mode 100644 index 0000000000000000000000000000000000000000..7b7de8d5494059969a054f168a260a30006ea3d6 --- /dev/null +++ b/src/proto/grpc/testing/proxy-service.proto @@ -0,0 +1,44 @@ +// 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. + +syntax = "proto3"; + +import "src/proto/grpc/testing/control.proto"; + +package grpc.testing; + +message ProxyStat { + double latency = 1; +} + +service ProxyClientService { + rpc GetConfig(Void) returns (ClientConfig); + rpc ReportTime(stream ProxyStat) returns (Void); +} + diff --git a/src/python/grpcio/grpc_core_dependencies.py b/src/python/grpcio/grpc_core_dependencies.py index a9f20e6d2a88654e327d2a8903f8de81c2c53b0f..cb6ca34dc68cab8428673d18290d42f684c66c4f 100644 --- a/src/python/grpcio/grpc_core_dependencies.py +++ b/src/python/grpcio/grpc_core_dependencies.py @@ -33,6 +33,8 @@ 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/atm.c', 'src/core/lib/support/avl.c', 'src/core/lib/support/backoff.c', 'src/core/lib/support/cmdline.c', @@ -134,6 +136,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', @@ -250,10 +255,8 @@ CORE_SOURCE_FILES = [ 'src/core/ext/client_channel/client_channel_factory.c', 'src/core/ext/client_channel/client_channel_plugin.c', 'src/core/ext/client_channel/connector.c', - 'src/core/ext/client_channel/default_initial_connect_string.c', 'src/core/ext/client_channel/http_connect_handshaker.c', 'src/core/ext/client_channel/http_proxy.c', - 'src/core/ext/client_channel/initial_connect_string.c', 'src/core/ext/client_channel/lb_policy.c', 'src/core/ext/client_channel/lb_policy_factory.c', 'src/core/ext/client_channel/lb_policy_registry.c', @@ -263,6 +266,7 @@ CORE_SOURCE_FILES = [ 'src/core/ext/client_channel/resolver.c', 'src/core/ext/client_channel/resolver_factory.c', 'src/core/ext/client_channel/resolver_registry.c', + 'src/core/ext/client_channel/retry_throttle.c', 'src/core/ext/client_channel/subchannel.c', 'src/core/ext/client_channel/subchannel_index.c', 'src/core/ext/client_channel/uri_parser.c', diff --git a/src/python/grpcio/grpc_version.py b/src/python/grpcio/grpc_version.py index c197e92ca58174a5b54921a9b7e7592f44f1234e..267d848e74377e8d036915a7fb2122fbde598601 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 f0f11cf84b01194afad61d8b88b036d4d90ba878..e92c2659b7e4a5af51b127f6c0437f4e5f36e895 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 c1807e9f1c2820c1273c07105da1c1ec6a801992..4ff5e266a1f4f1becb827368196562d2dcdaedff 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_reflection/grpc_version.py b/src/python/grpcio_reflection/grpc_version.py index 3778dcd3e0b26bc64cdae7d6d3484eb1307de299..8ffc08c04b8f72ebbc771f7bb153fcc31b5f096e 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_tests/grpc_version.py b/src/python/grpcio_tests/grpc_version.py index 33824b6b8fcb0d7dfead9787936b2435940d3cd8..ba82dce6f6d2ae8e168370aa4f4385606e54942a 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/tests/health_check/_health_servicer_test.py b/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py index 363b4c5f994799a66afe9f27917299e36eb1ca1b..1bc8669dad99ec9788678be815850be091d4673b 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 58f3b364bad336b05d449416b8510041fcf9e308..3325d54375a3a0635ad2fd74e8d4f5b381a4eb2f 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 5fe929b99edf6b859dd530a090851c18c82a50cb..857e00efb3a052bd569dcc68b008ffd8e260e7bc 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 662ea9ce570078b39a9c2760cda298f2711d78b4..e1016f7c0d5b803717b297023210a462de2b8fec 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 65f1604eb8239c47642d08a3c3044064a816e250..0ae2c97b4278502eb96f16f89a4ad376cdedd85d 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 db938e65459c77a5cbc1a21889e575f7cbde4670..6f9269dd402e96a4d9ef32bef379ffdb3b67feb2 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 025dfb9d4a7a933d10f98cda0bef43436b6046ba..7cd53e7bd9acd3770f148314b5e038931acacf27 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 ca1a777611c8cc2010de8f0e7d3eade4e2e1ac1b..de9535f46eb3621c3c54e91fb3ce9869bc37230f 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 d06ff064e24cdb5251b76469bc80f3686e6cf473..4d73be6204cd2a60a8994b385a813d8a67314e89 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 b9dbe61d44bc2266d53967f69d736f964d1f1e70..b7eb12bff8621e6bc001f4a6d7bbf3df1f33bf9f 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/rb_grpc_imports.generated.c b/src/ruby/ext/grpc/rb_grpc_imports.generated.c index 52465a4dd70527ecf2c6fd066b5deb6118d5aa5c..3ef6f0eb299f1abf2aaaef7542ceaeec96dad4c6 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 b16e6738781abc30871609d5328f7fa04b2c5faa..ef9845dfe06407f633b3038a615f03acf92fb395 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 ce0892decfbe640eb6b3faed21a0ad8756bb5b63..9901158e735daae3d90616247754933bdff569dc 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 0000000000000000000000000000000000000000..077920d1d3c13e8371937695fa654e82a227e4b6 --- /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 0000000000000000000000000000000000000000..d238198cca3765c01e0ca98444c709caeafadbbf --- /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 0000000000000000000000000000000000000000..37ddbf5b030348f97cac937f613224b5d1354640 --- /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 8f3d2ba81ccb807f726f9e96ae305c8e642e68d8..632c0100bd842cef6ddffb978e9c7ebb36d0e466 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/tools/dockerfile/csharp_dotnetcli_deps.include b/templates/tools/dockerfile/csharp_dotnetcli_deps.include index 430f3fa3f22e24e21549b2fdbd46f4cb32c2cd2d..058ce15fb52ecd6cd0951738efcaf48aa30e265a 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 6204c3e2cb297ff84fb3cb455c6f633c070f4740..12b99844253cfd7515b7e6c09e672a8bede3ea29 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/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c index 76bb57346c0ad9eb27cde4493c952a932c23edbd..af551c4928efb8ef0b05c2da212aac4ebf97766a 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/BUILD b/test/core/client_channel/BUILD index a29e9aca4e64e0dc52c64985bb0edd0602568686..55a74c6d01935e93ec21ec0bd80ee8d0b568cf58 100644 --- a/test/core/client_channel/BUILD +++ b/test/core/client_channel/BUILD @@ -45,10 +45,3 @@ cc_test( deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util", "//test/core/end2end:cq_verifier"], copts = ['-std=c99'] ) - -cc_test( - name = "set_initial_connect_string_test", - srcs = ["set_initial_connect_string_test.c"], - deps = ["//:grpc", "//test/core/util:grpc_test_util", "//:gpr", "//test/core/util:gpr_test_util"], - copts = ['-std=c99'] -) diff --git a/test/core/client_channel/set_initial_connect_string_test.c b/test/core/client_channel/set_initial_connect_string_test.c deleted file mode 100644 index a0a33667cc879c4651fcd8183aaeae88c9931bb4..0000000000000000000000000000000000000000 --- a/test/core/client_channel/set_initial_connect_string_test.c +++ /dev/null @@ -1,268 +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. - * - */ - -/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when - using that endpoint. Because of various transitive includes in uv.h, - including windows.h on Windows, uv.h must be included before other system - headers. Therefore, sockaddr.h must always be included first */ -#include "src/core/lib/iomgr/sockaddr.h" - -#include <string.h> - -#include <grpc/grpc.h> -#include <grpc/slice.h> -#include <grpc/support/alloc.h> -#include <grpc/support/host_port.h> -#include <grpc/support/log.h> -#include <grpc/support/thd.h> - -#include "src/core/ext/client_channel/initial_connect_string.h" -#include "src/core/lib/iomgr/sockaddr.h" -#include "src/core/lib/security/credentials/fake/fake_credentials.h" -#include "src/core/lib/slice/slice_string_helpers.h" -#include "src/core/lib/support/string.h" -#include "test/core/util/port.h" -#include "test/core/util/test_config.h" -#include "test/core/util/test_tcp_server.h" - -struct rpc_state { - char *target; - grpc_channel_credentials *creds; - grpc_completion_queue *cq; - grpc_channel *channel; - grpc_call *call; - grpc_op op; - grpc_slice_buffer incoming_buffer; - grpc_slice_buffer temp_incoming_buffer; - grpc_endpoint *tcp; - gpr_atm done_atm; -}; - -static const char *magic_connect_string = "magic initial string"; -static int server_port; -static struct rpc_state state; -static grpc_closure on_read; - -static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { - GPR_ASSERT(error == GRPC_ERROR_NONE); - grpc_slice_buffer_move_into(&state.temp_incoming_buffer, - &state.incoming_buffer); - gpr_log(GPR_DEBUG, "got %" PRIuPTR " bytes, magic is %" PRIuPTR " bytes", - state.incoming_buffer.length, strlen(magic_connect_string)); - if (state.incoming_buffer.length > strlen(magic_connect_string)) { - gpr_atm_rel_store(&state.done_atm, 1); - grpc_endpoint_shutdown( - exec_ctx, state.tcp, - GRPC_ERROR_CREATE("Incoming buffer longer than magic_connect_string")); - grpc_endpoint_destroy(exec_ctx, state.tcp); - } else { - grpc_endpoint_read(exec_ctx, state.tcp, &state.temp_incoming_buffer, - &on_read); - } -} - -static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp, - grpc_pollset *accepting_pollset, - grpc_tcp_server_acceptor *acceptor) { - gpr_free(acceptor); - test_tcp_server *server = arg; - grpc_closure_init(&on_read, handle_read, NULL, grpc_schedule_on_exec_ctx); - grpc_slice_buffer_init(&state.incoming_buffer); - grpc_slice_buffer_init(&state.temp_incoming_buffer); - state.tcp = tcp; - grpc_endpoint_add_to_pollset(exec_ctx, tcp, server->pollset); - grpc_endpoint_read(exec_ctx, tcp, &state.temp_incoming_buffer, &on_read); -} - -static void set_magic_initial_string(grpc_resolved_address **addr, - grpc_slice *connect_string) { - GPR_ASSERT(addr); - GPR_ASSERT((*addr)->len); - *connect_string = grpc_slice_from_copied_string(magic_connect_string); -} - -static void reset_addr_and_set_magic_string(grpc_resolved_address **addr, - grpc_slice *connect_string) { - struct sockaddr_in target; - *connect_string = grpc_slice_from_copied_string(magic_connect_string); - gpr_free(*addr); - target.sin_family = AF_INET; - target.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - target.sin_port = htons((uint16_t)server_port); - *addr = (grpc_resolved_address *)gpr_malloc(sizeof(grpc_resolved_address)); - (*addr)->len = sizeof(target); - memcpy((*addr)->addr, &target, sizeof(target)); -} - -static gpr_timespec n_sec_deadline(int seconds) { - return gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), - gpr_time_from_seconds(seconds, GPR_TIMESPAN)); -} - -static void start_rpc(int use_creds, int target_port) { - state.cq = grpc_completion_queue_create(NULL); - if (use_creds) { - state.creds = grpc_fake_transport_security_credentials_create(); - } else { - state.creds = NULL; - } - gpr_join_host_port(&state.target, "127.0.0.1", target_port); - if (use_creds) { - state.channel = - grpc_secure_channel_create(state.creds, state.target, NULL, NULL); - } else { - state.channel = grpc_insecure_channel_create(state.target, NULL, NULL); - } - grpc_slice host = grpc_slice_from_static_string("localhost"); - state.call = grpc_channel_create_call( - state.channel, NULL, GRPC_PROPAGATE_DEFAULTS, state.cq, - grpc_slice_from_static_string("/Service/Method"), &host, - gpr_inf_future(GPR_CLOCK_REALTIME), NULL); - memset(&state.op, 0, sizeof(state.op)); - state.op.op = GRPC_OP_SEND_INITIAL_METADATA; - state.op.data.send_initial_metadata.count = 0; - state.op.flags = 0; - state.op.reserved = NULL; - GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(state.call, &state.op, - (size_t)(1), NULL, NULL)); - grpc_completion_queue_next(state.cq, n_sec_deadline(5), NULL); -} - -static void cleanup_rpc(void) { - grpc_event ev; - grpc_slice_buffer_destroy(&state.incoming_buffer); - grpc_slice_buffer_destroy(&state.temp_incoming_buffer); - grpc_channel_credentials_release(state.creds); - grpc_call_destroy(state.call); - grpc_completion_queue_shutdown(state.cq); - do { - ev = grpc_completion_queue_next(state.cq, n_sec_deadline(1), NULL); - } while (ev.type != GRPC_QUEUE_SHUTDOWN); - grpc_completion_queue_destroy(state.cq); - grpc_channel_destroy(state.channel); - gpr_free(state.target); -} - -typedef struct { - test_tcp_server *server; - gpr_event *signal_when_done; -} poll_args; - -static void actually_poll_server(void *arg) { - poll_args *pa = arg; - gpr_timespec deadline = n_sec_deadline(10); - while (true) { - bool done = gpr_atm_acq_load(&state.done_atm) != 0; - gpr_timespec time_left = - gpr_time_sub(deadline, gpr_now(GPR_CLOCK_REALTIME)); - gpr_log(GPR_DEBUG, "done=%d, time_left=%" PRId64 ".%09" PRId32, done, - time_left.tv_sec, time_left.tv_nsec); - if (done || gpr_time_cmp(time_left, gpr_time_0(GPR_TIMESPAN)) < 0) { - break; - } - test_tcp_server_poll(pa->server, 1); - } - gpr_event_set(pa->signal_when_done, (void *)1); - gpr_free(pa); -} - -static void poll_server_until_read_done(test_tcp_server *server, - gpr_event *signal_when_done) { - gpr_atm_rel_store(&state.done_atm, 0); - gpr_thd_id id; - poll_args *pa = gpr_malloc(sizeof(*pa)); - pa->server = server; - pa->signal_when_done = signal_when_done; - gpr_thd_new(&id, actually_poll_server, pa, NULL); -} - -static void match_initial_magic_string(grpc_slice_buffer *buffer) { - size_t i, j, cmp_length; - size_t magic_length = strlen(magic_connect_string); - GPR_ASSERT(buffer->length >= magic_length); - for (i = 0, j = 0; i < state.incoming_buffer.count && j < magic_length; i++) { - char *dump = grpc_slice_to_c_string(state.incoming_buffer.slices[i]); - cmp_length = GPR_MIN(strlen(dump), magic_length - j); - GPR_ASSERT(strncmp(dump, magic_connect_string + j, cmp_length) == 0); - j += cmp_length; - gpr_free(dump); - } -} - -static void test_initial_string(test_tcp_server *server, int secure) { - gpr_event ev; - gpr_event_init(&ev); - grpc_test_set_initial_connect_string_function(set_magic_initial_string); - poll_server_until_read_done(server, &ev); - start_rpc(secure, server_port); - gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); - match_initial_magic_string(&state.incoming_buffer); - cleanup_rpc(); -} - -static void test_initial_string_with_redirect(test_tcp_server *server, - int secure) { - gpr_event ev; - gpr_event_init(&ev); - int another_port = grpc_pick_unused_port_or_die(); - grpc_test_set_initial_connect_string_function( - reset_addr_and_set_magic_string); - poll_server_until_read_done(server, &ev); - start_rpc(secure, another_port); - gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); - match_initial_magic_string(&state.incoming_buffer); - cleanup_rpc(); -} - -static void run_test(void (*test)(test_tcp_server *server, int secure), - int secure) { - test_tcp_server test_server; - server_port = grpc_pick_unused_port_or_die(); - test_tcp_server_init(&test_server, on_connect, &test_server); - test_tcp_server_start(&test_server, server_port); - test(&test_server, secure); - test_tcp_server_destroy(&test_server); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - grpc_init(); - - run_test(test_initial_string, 0); - run_test(test_initial_string, 1); - run_test(test_initial_string_with_redirect, 0); - run_test(test_initial_string_with_redirect, 1); - - grpc_shutdown(); - return 0; -} diff --git a/test/core/end2end/end2end_tests.h b/test/core/end2end/end2end_tests.h index cb0afd9cd99b8399fb798280642e2b167bd52f2a..cdb26a67e9d5e5f6bf4fd7fb29796c7d0ff3799a 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/tests/filter_call_init_fails.c b/test/core/end2end/tests/filter_call_init_fails.c index d2d6e82d57437aafde432b08dbde300f0f9c33e8..65216cf19dc7a95c3a487a2d4ef7053707ca0212 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 25e606556da641e7652bc7f54d44ec3f5f487490..c968f30b3b8ea3593c16421eeb284c72e1660092 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 d05e9e79a1175ee4f09168766da28cb7af75a49a..2428c92a42bd3994cf10a3b6eee56355da137626 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 7540ce93a1b18746f98824a13848a249b3a8f0d9..d7a4106459dc3269bbe408add1933775a4486e4c 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 4f9ed7a3a17bd65c704ae7bd583421c7e9f1bbb0..db26b4480e0c32a7d2b2e3570cefd065d9314c29 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 42055907c85f2e28e15acab49be69322c4c2c6ad..2b9c404b15aa3da5547609e9812af35c90a2bd8d 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/iomgr/error_test.c b/test/core/iomgr/error_test.c new file mode 100644 index 0000000000000000000000000000000000000000..2a6b1b17fdef595aeb96e4a8e2b88c2e3e01a419 --- /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/tcp_client_uv_test.c b/test/core/iomgr/tcp_client_uv_test.c index f8938d0abb7799fc66c4cee863c21e5bc384098c..064119f11b99ac521f1d06b4ab4de11fd0c256c5 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_uv_test.c b/test/core/iomgr/tcp_server_uv_test.c index 7b458c90f3deb2473ce2fc604129969ad098ce29..0fc74599ea59518ebe38cd44fd0a3bd9a52ac53e 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 d57a37b2a97b6f7ffedf1449e7caee47cf309525..396ec959cdcedd7fabd6a6cb3dde82d3a1506df5 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 09f0e2d8670f52d792e8b1b0a2b374566edf31c8..107abbc1b3da4c523af5a3e43216a41d9b435044 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 e750c39b7c61c24aa3df66695727da575c43f3bb..1cb03c5cfe7a2712fa8ae0c625f0acc127a3a382 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 f789278add8f8abd1a71298d411224c1aabed78d..7a3612c419b9866eff76957a1a553794c8b8871f 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/support/arena_test.c b/test/core/support/arena_test.c new file mode 100644 index 0000000000000000000000000000000000000000..35b2bbd1b1051414a5549d459e2a482cbd2b6cc6 --- /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 ca0fe0ccb50630a56afeb340b5ce4addaa679dae..7b9bf6c5e1dac246497297c8d375d7fe5e0ee944 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/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112 b/test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112 new file mode 100644 index 0000000000000000000000000000000000000000..04d48d6d76f8bedfb6e708cb4e877791999dacef Binary files /dev/null and b/test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112 differ diff --git a/test/core/util/memory_counters.c b/test/core/util/memory_counters.c index 7c8b620f34f09bf5610cfea4b073f72fcf5b30ce..c27065f26053f5d931048d18da2679a270730514 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/trickle_endpoint.c b/test/core/util/trickle_endpoint.c index 7ab0488a6608abdcfe910eff6d2a7796ada882ad..0848147158acd80b33da521dc5994c78b2c6d5ae 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/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc index 190d32ce060b4c9c6af0d10c82d12df8362b54d8..9bcc9f99f6871e9c1d167b950a552c04cd9a8fb3 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 01c07823cfe9664711fdfbcd3382e3d262d4bbe2..38a437f39f8a166ed95c3540f356385d43dbae6e 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 12df5d26bc27a67a42dde78b0ff22bd4960e6a49..e57d695205bf919c9b887b7c04fab0121fd03218 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 b7f2723c39bd302862d5e746eda95985434c839f..55ba324cc7d34296415d8a1a93e1c6d170c9e62b 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 74f4db6b78903f37c80e679b1667bcba0490e8ae..efcb7d286085b0e22273c55c9def3b558a5aee40 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 5a810b45ef4f132c3694c0a53c68ddfec669ed27..1cbca179287aa20b1a4730eaaac4d33e74812952 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 1c2f6066377b1c652fe0e7be41722d3801b29c5f..01d985068dcb05662cf1f0d251bd8ffcbfd2246d 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 634d0a90fceb85e5834f85968254652522ef2b53..8d1b884af91d6976a7d783146ad62b6cc7781e72 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 0000000000000000000000000000000000000000..770c0b6d4741d4e1a42524e64a3a947d568733c2 --- /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 cc57fd9098a50b1cbdb9dd4c0c23939efca99953..b34d0d1e12bcce276439851503f4a8a35465b2c5 100644 --- a/test/cpp/microbenchmarks/bm_call_create.cc +++ b/test/cpp/microbenchmarks/bm_call_create.cc @@ -38,6 +38,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> @@ -56,10 +57,34 @@ 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" auto &force_library_initialization = Library::get(); +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) {} @@ -105,6 +130,33 @@ static void BM_CallCreateDestroy(benchmark::State &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_LameChannelCallCreateCpp); + static void FilterDestroy(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_free(arg); @@ -180,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) { @@ -223,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; } @@ -247,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) {} @@ -342,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 @@ -357,15 +409,29 @@ 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); diff --git a/test/cpp/microbenchmarks/bm_chttp2_transport.cc b/test/cpp/microbenchmarks/bm_chttp2_transport.cc new file mode 100644 index 0000000000000000000000000000000000000000..254d57de20589938beb142d1cf9cef41e2bfd4cc --- /dev/null +++ b/test/cpp/microbenchmarks/bm_chttp2_transport.cc @@ -0,0 +1,587 @@ +/* + * + * 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. + * + */ + +/* Microbenchmarks around CHTTP2 transport operations */ + +#include <grpc++/support/channel_arguments.h> +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <string.h> +#include <memory> +#include <queue> +#include <sstream> +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/iomgr/resource_quota.h" +#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" + +auto &force_library_initialization = Library::get(); + +//////////////////////////////////////////////////////////////////////////////// +// Helper classes +// + +class DummyEndpoint : public grpc_endpoint { + public: + DummyEndpoint() { + static const grpc_endpoint_vtable my_vtable = {read, + write, + get_workqueue, + add_to_pollset, + add_to_pollset_set, + shutdown, + destroy, + get_resource_user, + get_peer, + get_fd}; + grpc_endpoint::vtable = &my_vtable; + ru_ = grpc_resource_user_create(Library::get().rq(), "dummy_endpoint"); + } + + void PushInput(grpc_exec_ctx *exec_ctx, grpc_slice slice) { + if (read_cb_ == nullptr) { + GPR_ASSERT(!have_slice_); + buffered_slice_ = slice; + have_slice_ = true; + return; + } + grpc_slice_buffer_add(slices_, slice); + grpc_closure_sched(exec_ctx, read_cb_, GRPC_ERROR_NONE); + read_cb_ = nullptr; + } + + private: + grpc_resource_user *ru_; + grpc_closure *read_cb_ = nullptr; + grpc_slice_buffer *slices_ = nullptr; + bool have_slice_ = false; + grpc_slice buffered_slice_; + + void QueueRead(grpc_exec_ctx *exec_ctx, grpc_slice_buffer *slices, + grpc_closure *cb) { + GPR_ASSERT(read_cb_ == nullptr); + if (have_slice_) { + have_slice_ = false; + grpc_slice_buffer_add(slices, buffered_slice_); + grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_NONE); + return; + } + read_cb_ = cb; + slices_ = slices; + } + + static void read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_slice_buffer *slices, grpc_closure *cb) { + static_cast<DummyEndpoint *>(ep)->QueueRead(exec_ctx, slices, cb); + } + + static void write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_slice_buffer *slices, grpc_closure *cb) { + grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_NONE); + } + + static grpc_workqueue *get_workqueue(grpc_endpoint *ep) { return NULL; } + + static void add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_pollset *pollset) {} + + static void add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_pollset_set *pollset) {} + + static void shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_error *why) { + grpc_resource_user_shutdown(exec_ctx, + static_cast<DummyEndpoint *>(ep)->ru_); + grpc_closure_sched(exec_ctx, static_cast<DummyEndpoint *>(ep)->read_cb_, + why); + } + + static void destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { + grpc_resource_user_unref(exec_ctx, static_cast<DummyEndpoint *>(ep)->ru_); + delete static_cast<DummyEndpoint *>(ep); + } + + static grpc_resource_user *get_resource_user(grpc_endpoint *ep) { + return static_cast<DummyEndpoint *>(ep)->ru_; + } + static char *get_peer(grpc_endpoint *ep) { return gpr_strdup("test"); } + static int get_fd(grpc_endpoint *ep) { return 0; } +}; + +class Fixture { + public: + Fixture(const grpc::ChannelArguments &args, bool client) { + grpc_channel_args c_args = args.c_channel_args(); + ep_ = new DummyEndpoint; + t_ = grpc_create_chttp2_transport(exec_ctx(), &c_args, ep_, client); + grpc_chttp2_transport_start_reading(exec_ctx(), t_, NULL); + FlushExecCtx(); + } + + void FlushExecCtx() { grpc_exec_ctx_flush(&exec_ctx_); } + + ~Fixture() { + grpc_transport_destroy(&exec_ctx_, t_); + grpc_exec_ctx_finish(&exec_ctx_); + } + + grpc_chttp2_transport *chttp2_transport() { + return reinterpret_cast<grpc_chttp2_transport *>(t_); + } + grpc_transport *transport() { return t_; } + grpc_exec_ctx *exec_ctx() { return &exec_ctx_; } + + void PushInput(grpc_slice slice) { ep_->PushInput(exec_ctx(), slice); } + + private: + DummyEndpoint *ep_; + grpc_exec_ctx exec_ctx_ = GRPC_EXEC_CTX_INIT; + grpc_transport *t_; +}; + +static void DoNothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {} + +class Stream { + public: + Stream(Fixture *f) : f_(f) { + GRPC_STREAM_REF_INIT(&refcount_, 1, DoNothing, nullptr, "test_stream"); + stream_size_ = grpc_transport_stream_size(f->transport()); + stream_ = gpr_malloc(stream_size_); + arena_ = gpr_arena_create(4096); + } + + ~Stream() { + gpr_free(stream_); + gpr_arena_destroy(arena_); + } + + void Init(benchmark::State &state) { + memset(stream_, 0, stream_size_); + if ((state.iterations() & 0xffff) == 0) { + gpr_arena_destroy(arena_); + arena_ = gpr_arena_create(4096); + } + grpc_transport_init_stream(f_->exec_ctx(), f_->transport(), + static_cast<grpc_stream *>(stream_), &refcount_, + NULL, arena_); + } + + void DestroyThen(grpc_closure *closure) { + grpc_transport_destroy_stream(f_->exec_ctx(), f_->transport(), + static_cast<grpc_stream *>(stream_), closure); + } + + void Op(grpc_transport_stream_op *op) { + grpc_transport_perform_stream_op(f_->exec_ctx(), f_->transport(), + static_cast<grpc_stream *>(stream_), op); + } + + grpc_chttp2_stream *chttp2_stream() { + return static_cast<grpc_chttp2_stream *>(stream_); + } + + private: + Fixture *f_; + grpc_stream_refcount refcount_; + gpr_arena *arena_; + size_t stream_size_; + void *stream_; +}; + +class Closure : public grpc_closure { + public: + virtual ~Closure() {} +}; + +template <class F> +std::unique_ptr<Closure> MakeClosure( + F f, grpc_closure_scheduler *sched = grpc_schedule_on_exec_ctx) { + struct C : public Closure { + C(const F &f, grpc_closure_scheduler *sched) : f_(f) { + grpc_closure_init(this, Execute, this, sched); + } + F f_; + static void Execute(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + static_cast<C *>(arg)->f_(exec_ctx, error); + } + }; + return std::unique_ptr<Closure>(new C(f, sched)); +} + +template <class F> +grpc_closure *MakeOnceClosure( + F f, grpc_closure_scheduler *sched = grpc_schedule_on_exec_ctx) { + struct C : public grpc_closure { + C(const F &f) : f_(f) {} + F f_; + static void Execute(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + static_cast<C *>(arg)->f_(exec_ctx, error); + delete static_cast<C *>(arg); + } + }; + auto *c = new C{f}; + return grpc_closure_init(c, C::Execute, c, sched); +} + +//////////////////////////////////////////////////////////////////////////////// +// Benchmarks +// + +static void BM_StreamCreateDestroy(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + std::unique_ptr<Closure> next = + MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + s.Init(state); + s.DestroyThen(next.get()); + }); + grpc_closure_run(f.exec_ctx(), next.get(), GRPC_ERROR_NONE); + f.FlushExecCtx(); + track_counters.Finish(state); +} +BENCHMARK(BM_StreamCreateDestroy); + +class RepresentativeClientInitialMetadata { + public: + static std::vector<grpc_mdelem> GetElems(grpc_exec_ctx *exec_ctx) { + return { + GRPC_MDELEM_SCHEME_HTTP, GRPC_MDELEM_METHOD_POST, + grpc_mdelem_from_slices( + exec_ctx, GRPC_MDSTR_PATH, + grpc_slice_intern(grpc_slice_from_static_string("/foo/bar"))), + grpc_mdelem_from_slices(exec_ctx, GRPC_MDSTR_AUTHORITY, + grpc_slice_intern(grpc_slice_from_static_string( + "foo.test.google.fr:1234"))), + GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY_COMMA_DEFLATE_COMMA_GZIP, + GRPC_MDELEM_TE_TRAILERS, + GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC, + grpc_mdelem_from_slices( + exec_ctx, GRPC_MDSTR_USER_AGENT, + grpc_slice_intern(grpc_slice_from_static_string( + "grpc-c/3.0.0-dev (linux; chttp2; green)")))}; + } +}; + +template <class Metadata> +static void BM_StreamCreateSendInitialMetadataDestroy(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + grpc_transport_stream_op op; + std::unique_ptr<Closure> start; + std::unique_ptr<Closure> done; + + grpc_metadata_batch b; + grpc_metadata_batch_init(&b); + b.deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + std::vector<grpc_mdelem> elems = Metadata::GetElems(f.exec_ctx()); + std::vector<grpc_linked_mdelem> storage(elems.size()); + for (size_t i = 0; i < elems.size(); i++) { + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "addmd", + grpc_metadata_batch_add_tail(f.exec_ctx(), &b, &storage[i], elems[i]))); + } + + f.FlushExecCtx(); + start = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + s.Init(state); + memset(&op, 0, sizeof(op)); + op.on_complete = done.get(); + op.send_initial_metadata = &b; + s.Op(&op); + }); + done = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + memset(&op, 0, sizeof(op)); + op.cancel_error = GRPC_ERROR_CANCELLED; + s.Op(&op); + s.DestroyThen(start.get()); + }); + grpc_closure_sched(f.exec_ctx(), start.get(), GRPC_ERROR_NONE); + f.FlushExecCtx(); + grpc_metadata_batch_destroy(f.exec_ctx(), &b); + track_counters.Finish(state); +} +BENCHMARK_TEMPLATE(BM_StreamCreateSendInitialMetadataDestroy, + RepresentativeClientInitialMetadata); + +static void BM_TransportEmptyOp(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + s.Init(state); + grpc_transport_stream_op op; + std::unique_ptr<Closure> c = + MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + memset(&op, 0, sizeof(op)); + op.on_complete = c.get(); + s.Op(&op); + }); + grpc_closure_sched(f.exec_ctx(), c.get(), GRPC_ERROR_NONE); + f.FlushExecCtx(); + s.DestroyThen( + MakeOnceClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {})); + f.FlushExecCtx(); + track_counters.Finish(state); +} +BENCHMARK(BM_TransportEmptyOp); + +static void BM_TransportStreamSend(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + s.Init(state); + grpc_transport_stream_op op; + grpc_slice_buffer_stream send_stream; + grpc_slice_buffer send_buffer; + grpc_slice_buffer_init(&send_buffer); + grpc_slice_buffer_add(&send_buffer, gpr_slice_malloc(state.range(0))); + memset(GRPC_SLICE_START_PTR(send_buffer.slices[0]), 0, + GRPC_SLICE_LENGTH(send_buffer.slices[0])); + + grpc_metadata_batch b; + grpc_metadata_batch_init(&b); + b.deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + std::vector<grpc_mdelem> elems = + RepresentativeClientInitialMetadata::GetElems(f.exec_ctx()); + std::vector<grpc_linked_mdelem> storage(elems.size()); + for (size_t i = 0; i < elems.size(); i++) { + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "addmd", + grpc_metadata_batch_add_tail(f.exec_ctx(), &b, &storage[i], elems[i]))); + } + + std::unique_ptr<Closure> c = + MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + // force outgoing window to be yuge + s.chttp2_stream()->outgoing_window_delta = 1024 * 1024 * 1024; + f.chttp2_transport()->outgoing_window = 1024 * 1024 * 1024; + grpc_slice_buffer_stream_init(&send_stream, &send_buffer, 0); + memset(&op, 0, sizeof(op)); + op.on_complete = c.get(); + op.send_message = &send_stream.base; + s.Op(&op); + }); + + memset(&op, 0, sizeof(op)); + op.send_initial_metadata = &b; + op.on_complete = c.get(); + s.Op(&op); + + f.FlushExecCtx(); + memset(&op, 0, sizeof(op)); + op.cancel_error = GRPC_ERROR_CANCELLED; + s.Op(&op); + s.DestroyThen( + MakeOnceClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {})); + f.FlushExecCtx(); + track_counters.Finish(state); + grpc_metadata_batch_destroy(f.exec_ctx(), &b); + grpc_slice_buffer_destroy(&send_buffer); +} +BENCHMARK(BM_TransportStreamSend)->Range(0, 128 * 1024 * 1024); + +#define SLICE_FROM_BUFFER(s) grpc_slice_from_static_buffer(s, sizeof(s) - 1) + +static grpc_slice CreateIncomingDataSlice(size_t length, size_t frame_size) { + std::queue<char> unframed; + + unframed.push(static_cast<uint8_t>(0)); + unframed.push(static_cast<uint8_t>(length >> 24)); + unframed.push(static_cast<uint8_t>(length >> 16)); + unframed.push(static_cast<uint8_t>(length >> 8)); + unframed.push(static_cast<uint8_t>(length)); + for (size_t i = 0; i < length; i++) { + unframed.push('a'); + } + + std::vector<char> framed; + while (unframed.size() > frame_size) { + // frame size + framed.push_back(static_cast<uint8_t>(frame_size >> 16)); + framed.push_back(static_cast<uint8_t>(frame_size >> 8)); + framed.push_back(static_cast<uint8_t>(frame_size)); + // data frame + framed.push_back(0); + // no flags + framed.push_back(0); + // stream id + framed.push_back(0); + framed.push_back(0); + framed.push_back(0); + framed.push_back(1); + // frame data + for (size_t i = 0; i < frame_size; i++) { + framed.push_back(unframed.front()); + unframed.pop(); + } + } + + // frame size + framed.push_back(static_cast<uint8_t>(unframed.size() >> 16)); + framed.push_back(static_cast<uint8_t>(unframed.size() >> 8)); + framed.push_back(static_cast<uint8_t>(unframed.size())); + // data frame + framed.push_back(0); + // no flags + framed.push_back(0); + // stream id + framed.push_back(0); + framed.push_back(0); + framed.push_back(0); + framed.push_back(1); + while (!unframed.empty()) { + framed.push_back(unframed.front()); + unframed.pop(); + } + + return grpc_slice_from_copied_buffer(framed.data(), framed.size()); +} + +static void BM_TransportStreamRecv(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + s.Init(state); + grpc_transport_stream_op op; + grpc_byte_stream *recv_stream; + grpc_slice incoming_data = CreateIncomingDataSlice(state.range(0), 16384); + + grpc_metadata_batch b; + grpc_metadata_batch_init(&b); + grpc_metadata_batch b_recv; + grpc_metadata_batch_init(&b_recv); + b.deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + std::vector<grpc_mdelem> elems = + RepresentativeClientInitialMetadata::GetElems(f.exec_ctx()); + std::vector<grpc_linked_mdelem> storage(elems.size()); + for (size_t i = 0; i < elems.size(); i++) { + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "addmd", + grpc_metadata_batch_add_tail(f.exec_ctx(), &b, &storage[i], elems[i]))); + } + + std::unique_ptr<Closure> do_nothing = + MakeClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {}); + + uint32_t received; + + std::unique_ptr<Closure> drain_start; + std::unique_ptr<Closure> drain; + std::unique_ptr<Closure> drain_continue; + grpc_slice recv_slice; + + std::unique_ptr<Closure> c = + MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + // force outgoing window to be yuge + s.chttp2_stream()->incoming_window_delta = 1024 * 1024 * 1024; + f.chttp2_transport()->incoming_window = 1024 * 1024 * 1024; + received = 0; + memset(&op, 0, sizeof(op)); + op.on_complete = do_nothing.get(); + op.recv_message = &recv_stream; + op.recv_message_ready = drain_start.get(); + s.Op(&op); + f.PushInput(grpc_slice_ref(incoming_data)); + }); + + drain_start = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (recv_stream == NULL) { + GPR_ASSERT(!state.KeepRunning()); + return; + } + grpc_closure_run(exec_ctx, drain.get(), GRPC_ERROR_NONE); + }); + + drain = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + do { + if (received == recv_stream->length) { + grpc_byte_stream_destroy(exec_ctx, recv_stream); + grpc_closure_sched(exec_ctx, c.get(), GRPC_ERROR_NONE); + return; + } + } while (grpc_byte_stream_next(exec_ctx, recv_stream, &recv_slice, + recv_stream->length - received, + drain_continue.get())); + }); + + drain_continue = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + received += GRPC_SLICE_LENGTH(recv_slice); + grpc_slice_unref_internal(exec_ctx, recv_slice); + grpc_closure_run(exec_ctx, drain.get(), GRPC_ERROR_NONE); + }); + + memset(&op, 0, sizeof(op)); + op.send_initial_metadata = &b; + op.recv_initial_metadata = &b_recv; + op.on_complete = c.get(); + s.Op(&op); + f.PushInput(SLICE_FROM_BUFFER( + "\x00\x00\x00\x04\x00\x00\x00\x00\x00" + // Generated using: + // tools/codegen/core/gen_header_frame.py < + // test/cpp/microbenchmarks/representative_server_initial_metadata.headers + "\x00\x00X\x01\x04\x00\x00\x00\x01" + "\x10\x07:status\x03" + "200" + "\x10\x0c" + "content-type\x10" + "application/grpc" + "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip")); + + f.FlushExecCtx(); + memset(&op, 0, sizeof(op)); + op.cancel_error = GRPC_ERROR_CANCELLED; + s.Op(&op); + s.DestroyThen( + MakeOnceClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {})); + f.FlushExecCtx(); + track_counters.Finish(state); + grpc_metadata_batch_destroy(f.exec_ctx(), &b); + grpc_metadata_batch_destroy(f.exec_ctx(), &b_recv); + grpc_slice_unref(incoming_data); +} +BENCHMARK(BM_TransportStreamRecv)->Range(0, 128 * 1024 * 1024); + +BENCHMARK_MAIN(); diff --git a/test/cpp/microbenchmarks/bm_error.cc b/test/cpp/microbenchmarks/bm_error.cc index 414edbcdb2825ced7a5fd25409d38527e59736cd..cf7b887728d5be16bcf39b0706e41b454229275d 100644 --- a/test/cpp/microbenchmarks/bm_error.cc +++ b/test/cpp/microbenchmarks/bm_error.cc @@ -71,6 +71,42 @@ static void BM_ErrorCreateAndSetStatus(benchmark::State& 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"); diff --git a/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc b/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc index 5c1eb1165b5a4b91c33e85981050b8cc38e73ad0..cafd4843d388c9f9f9ba237daad150a17407e05b 100644 --- a/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc +++ b/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc @@ -53,86 +53,141 @@ auto& force_library_initialization = Library::get(); static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); } -template <class Fixture> -static void BM_PumpStreamClientToServer(benchmark::State& state) { +// 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 (state.range(0) > 0) { - send_request.set_message(std::string(state.range(0), 'a')); + + if (msg_size > 0) { + send_request.set_message(std::string(msg_size, 'a')); + send_response.set_message(std::string(msg_size, 'b')); } - 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) { + 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)); - if (t == tag(0)) { - response_rw.Read(&recv_request, tag(0)); - } else if (t == tag(1)) { - break; - } else { - GPR_ASSERT(false); + 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(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); + + 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(state.range(0) * state.iterations()); + state.SetBytesProcessed(msg_size * state.iterations() * max_ping_pongs * 2); } -template <class Fixture> -static void BM_PumpStreamServerToClient(benchmark::State& state) { +// 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; - if (state.range(0) > 0) { - send_response.set_message(std::string(state.range(0), 'a')); + 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')); } - Status recv_status; + + 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)); - std::unique_ptr<EchoTestService::Stub> stub( - EchoTestService::NewStub(fixture->channel())); + ClientContext cli_ctx; + ClientContextMutator cli_ctx_mut(&cli_ctx); auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1)); - int need_tags = (1 << 0) | (1 << 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); @@ -140,54 +195,78 @@ static void BM_PumpStreamServerToClient(benchmark::State& state) { 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) { + 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)); - if (t == tag(0)) { - request_rw->Read(&recv_response, tag(0)); - } else if (t == tag(1)) { - break; - } else { - GPR_ASSERT(false); + 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)); - need_tags = (1 << 0) | (1 << 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(state.range(0) * state.iterations()); + state.SetBytesProcessed(msg_size * state.iterations() * 2); } /******************************************************************************* * 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) +// 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_PumpStreamServerToClient, InProcessCHTTP2) +BENCHMARK_TEMPLATE(BM_StreamingPingPongMsgs, TCP, NoOpMutator, NoOpMutator) ->Range(0, 128 * 1024 * 1024); } // namespace testing diff --git a/test/cpp/microbenchmarks/bm_metadata.cc b/test/cpp/microbenchmarks/bm_metadata.cc index a077c3130ec3f8e75ef5f76d7d07c573fc825b9b..7029f369ad80cf9c40562975c645b53930f90439 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 diff --git a/test/cpp/microbenchmarks/bm_pollset.cc b/test/cpp/microbenchmarks/bm_pollset.cc new file mode 100644 index 0000000000000000000000000000000000000000..0f3d3cef66a9e9c4fae30305e078d6a4dfe9b373 --- /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/helpers.cc b/test/cpp/microbenchmarks/helpers.cc index 947e81ffd83f911ac1ea6547d850e7e96372f2c0..d277c5984cdab5f398960b2eda5b37e60be248f3 100644 --- a/test/cpp/microbenchmarks/helpers.cc +++ b/test/cpp/microbenchmarks/helpers.cc @@ -45,6 +45,7 @@ void TrackCounters::Finish(benchmark::State &state) { 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()) @@ -55,11 +56,10 @@ void TrackCounters::AddToLabel(std::ostream &out, benchmark::State &state) { << " atm_add/iter:" << ((double)(gpr_atm_no_barrier_load(&gpr_counter_atm_add) - atm_add_at_start_) / - (double)state.iterations()); -#endif - grpc_memory_counters counters_at_end = grpc_memory_counters_snapshot(); - out << " allocs/iter:" + (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 index 6475b5c65ca09e4b40e61ee3be757b3a2d01ed0f..49ed517b1d75bda3cf6bf9c1055fc04782d86efd 100644 --- a/test/cpp/microbenchmarks/helpers.h +++ b/test/cpp/microbenchmarks/helpers.h @@ -55,7 +55,9 @@ class Library { private: Library() { +#ifdef GPR_LOW_LEVEL_COUNTERS grpc_memory_counters_init(); +#endif init_lib_.init(); rq_ = grpc_resource_quota_create("bm"); } @@ -84,8 +86,8 @@ class TrackCounters { 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(); +#endif }; #endif diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index baa9304cc2d47e5df91f2fcef62a90c3622279d7..25a19a5a740ddef9dbe0717a428918bb10589b20 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 4032039ea1064d5919295985c2933b4df28de2c4..396d308e2a51be5fff281eb43dc538ad7b5917b4 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 498416c64a1a8b073f0820d1a3f48fce7fb8e4ab..a944c4549602c95cdbd57dad9acb3331cabdcfea 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 e72d30a4effbc03cc3e67835eee4722fcc43b13e..dd32a16c879abbacffd115721b8da4c3ae303af0 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 acb415f0a1085ed22edf0b83e2d1d90ed57f32e7..470a394301345cfe6145520ede70cd10c8e16114 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 ddaaa7ca75e1a83ce06940802a1093b50637cc69..bd2c1f0ec674becf12759f8153bdc5c7eb347ddf 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 821d5935beb96d971ad2539587492f9a183f50b5..8fbf37a0957869868fec4b68c75c0823f21e1b39 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 b3a06aeaf5319ae6a661889f388fb54e0e6b8695..b58d91eea637634f4ce553aaa7010dda8647df57 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 8076a4a6b9abb7374781cb84fa812c2ffb0bbb3d..f79284d2254b04f952aed145a088f135e7d9e142 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 0000000000000000000000000000000000000000..1d9eda17b40e46477f7ef83d78584c286584d4c8 --- /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 0000000000000000000000000000000000000000..dd9402b8557bc8fee0baeb9f728d3c332668ae1e --- /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 abde3433ad22782ab1757c52650e6575f4e8d014..46c3e00d18f7b114bbd3cf502f5107e5e200e869 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/tools/buildgen/plugins/make_fuzzer_tests.py b/tools/buildgen/plugins/make_fuzzer_tests.py index ba9825acb91244c7cbc8d562aac7afda1f4fcfab..5fc28ddd31fd8cd74d1c96621b3eab1b0b9d5d06 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/grpcio_tools/grpc_version.py b/tools/distrib/python/grpcio_tools/grpc_version.py index 263785b774b6a1e8239dfd189606dc95b3373f11..ad35b90bad3743f0afc81df80abfd22732d3242d 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/yapf_code.sh b/tools/distrib/yapf_code.sh index 007b14810eb9e01cdac3d9c9ca01e43042dafc2d..f28a1ce8baeb756444487adfa66e4d8b40794210 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/interoptest/grpc_interop_csharpcoreclr/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile index 91639829dcd9c331f598f4b9cdbaf3f2e166bfe5..c26c9a2826ea15ae42913b1e9bc0da0576e59b37 100644 --- a/tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile +++ b/tools/dockerfile/interoptest/grpc_interop_csharpcoreclr/Dockerfile @@ -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_http2/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile index 66d9b4f6403bfd54a6d73a41fddb6724c00f3e77..acc984acb0daae68bda9a2855a2fac05b8ec591e 100644 --- a/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile +++ b/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile @@ -47,7 +47,7 @@ RUN pip install pip --upgrade RUN pip install virtualenv 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/test/csharp_coreclr_x64/Dockerfile b/tools/dockerfile/test/csharp_coreclr_x64/Dockerfile index 91639829dcd9c331f598f4b9cdbaf3f2e166bfe5..c26c9a2826ea15ae42913b1e9bc0da0576e59b37 100644 --- a/tools/dockerfile/test/csharp_coreclr_x64/Dockerfile +++ b/tools/dockerfile/test/csharp_coreclr_x64/Dockerfile @@ -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/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++ index 965259746cf123449ec1eae9c56a5bd088c35bec..5e6333dc8993b8d4aa5fb25bf80ba8fbb932146c 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 d98475fb00c71807ae58bb1ad00dad28b938db5a..8b7ec50a9303df61a605b6ed1ea205d3ebeabef0 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 478bdb2d0427530c8e5f563b33e5e6fa5a69a62b..e15c157751721e97731c7f108dafaf60babdc062 100644 --- a/tools/doxygen/Doxyfile.core +++ b/tools/doxygen/Doxyfile.core @@ -764,12 +764,14 @@ 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 \ doc/connection-backoff-interop-test-description.md \ doc/connection-backoff.md \ doc/connectivity-semantics-and-api.md \ +doc/core/grpc-error.md \ doc/core/pending_api_cleanups.md \ doc/cpp-style-guide.md \ doc/environment_variables.md \ @@ -787,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 \ diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal index a7d6aaeb9ef221a8c7c8d93dcdcdf6f6c6b662a3..dba0f4c17217e077036a45033b012d34bbda4407 100644 --- a/tools/doxygen/Doxyfile.core.internal +++ b/tools/doxygen/Doxyfile.core.internal @@ -764,12 +764,14 @@ 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 \ doc/connection-backoff-interop-test-description.md \ doc/connection-backoff.md \ doc/connectivity-semantics-and-api.md \ +doc/core/grpc-error.md \ doc/core/pending_api_cleanups.md \ doc/cpp-style-guide.md \ doc/environment_variables.md \ @@ -787,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 \ @@ -902,13 +905,10 @@ src/core/ext/client_channel/client_channel_factory.h \ src/core/ext/client_channel/client_channel_plugin.c \ src/core/ext/client_channel/connector.c \ src/core/ext/client_channel/connector.h \ -src/core/ext/client_channel/default_initial_connect_string.c \ src/core/ext/client_channel/http_connect_handshaker.c \ src/core/ext/client_channel/http_connect_handshaker.h \ src/core/ext/client_channel/http_proxy.c \ src/core/ext/client_channel/http_proxy.h \ -src/core/ext/client_channel/initial_connect_string.c \ -src/core/ext/client_channel/initial_connect_string.h \ src/core/ext/client_channel/lb_policy.c \ src/core/ext/client_channel/lb_policy.h \ src/core/ext/client_channel/lb_policy_factory.c \ @@ -927,6 +927,8 @@ src/core/ext/client_channel/resolver_factory.c \ src/core/ext/client_channel/resolver_factory.h \ src/core/ext/client_channel/resolver_registry.c \ src/core/ext/client_channel/resolver_registry.h \ +src/core/ext/client_channel/retry_throttle.c \ +src/core/ext/client_channel/retry_throttle.h \ src/core/ext/client_channel/subchannel.c \ src/core/ext/client_channel/subchannel.h \ src/core/ext/client_channel/subchannel_index.c \ @@ -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,9 @@ 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/atm.c \ 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 0000000000000000000000000000000000000000..8871ae21b6a54997ef74793be722295fa281d3ab --- /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 0000000000000000000000000000000000000000..fd2eebf7d2532faddab0109c63117ad62105e125 --- /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 0000000000000000000000000000000000000000..5d468bc6e480feedf7560222fc9a36e7cee246ff --- /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 0000000000000000000000000000000000000000..5dcdfac7a69dacd251fe1a6b7a2123247dcb8446 --- /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 0000000000000000000000000000000000000000..5dcdfac7a69dacd251fe1a6b7a2123247dcb8446 --- /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 0000000000000000000000000000000000000000..584487fafc2f535b73b812337a82d1a2db3976f5 --- /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 0000000000000000000000000000000000000000..ea2785e1104a1e005c4165dd1fba518325f924fa --- /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 0000000000000000000000000000000000000000..ea2785e1104a1e005c4165dd1fba518325f924fa --- /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 0000000000000000000000000000000000000000..fd32ac16e1bae39375eda07c8a03758b3666caa6 --- /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 0000000000000000000000000000000000000000..fd32ac16e1bae39375eda07c8a03758b3666caa6 --- /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 0000000000000000000000000000000000000000..fd2eebf7d2532faddab0109c63117ad62105e125 --- /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 0000000000000000000000000000000000000000..60bd9b0b2fa5c5f3589793030eeac07111535333 --- /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 0000000000000000000000000000000000000000..5dcdfac7a69dacd251fe1a6b7a2123247dcb8446 --- /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 0000000000000000000000000000000000000000..b22f8731f68ecdaa4a13afb8b3208f0f4a9949f2 --- /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 7536a91a679e69159aa6423416c1f99a8015faf4..6c94c3b4d8fb1aa23ec29f0e74c684e698838e88 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 d01d6375e9a7fff8d8c571dcf252b5935cef2526..9ecf12395949fc2ed57348dc70884ae94f6a4316 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 0000000000000000000000000000000000000000..a2a9407128b3f6b53d1a4baeb5a461f1f987905b --- /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/internal_ci/linux/grpc_master_sanitizers.sh b/tools/internal_ci/linux/grpc_master_sanitizers.sh new file mode 100755 index 0000000000000000000000000000000000000000..d22387fb2030170d9a9ecaab65e6705e7b0c4835 --- /dev/null +++ b/tools/internal_ci/linux/grpc_master_sanitizers.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 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 0000000000000000000000000000000000000000..5cc49f104629ac03e03bb57e29089fa98f197944 --- /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 0000000000000000000000000000000000000000..58d3c58e707f9ecee31fc918d2e89dd21ac814ec --- /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 ce5be5abe97d6dd06c2473bc482384121505b521..4d3dda4082234f9540e7fee0112e4a0567bcf71d 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 old mode 100644 new mode 100755 index ebdc0e82d767f5bbc71b3e496b0e63c39413665c..80b5c4cb9600292ee3933802b20ccbfc418a1d83 --- 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 511f2d6b35b3106048772c88e914a43c7bc100af..1abf6ac600b337385900b8591c62703779670bf3 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 f90af113085b6ee72505bbc7181d442b8beb5401..21a9d6a985de3bb27ea539217981d1d3c9a8caff 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 0000000000000000000000000000000000000000..b98c70146c45ea20d3c35701b21603d7e0c194fa --- /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 0000000000000000000000000000000000000000..10d8e9859108dbe83eec54371a90b07176324c36 --- /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/profiling/latency_profile/run_latency_profile.sh b/tools/profiling/latency_profile/run_latency_profile.sh index e9baee09574aebdfb3392f5f66e6fe487a283b94..41423fc3c192d509cfb941c063c5beb411ee8be8 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 a83b3be89c94757138dbf9b1552fe6dee8a3c3e6..ffb11f57d8f598c6e324fa428ba0db61faa336ce 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,147 +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': [], - }, - 'BM_CallCreateDestroy' : { - '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 0000000000000000000000000000000000000000..14ea24f65e6676385ad3444a6df7e545deccf7d8 --- /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 0000000000000000000000000000000000000000..ca0af414a3b26a49d614255ce4a034d082727d8e --- /dev/null +++ b/tools/profiling/microbenchmarks/bm_json.py @@ -0,0 +1,196 @@ +# 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'], + }, + 'BM_StreamCreateSendInitialMetadataDestroy': { + 'tpl': ['fixture'], + 'dyn': [], + }, + 'BM_TransportStreamSend': { + 'tpl': [], + 'dyn': ['request_size'], + }, + 'BM_TransportStreamRecv': { + 'tpl': [], + 'dyn': ['request_size'], + } +} + +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 e0658f4678d37018ab72bbd67c5b90191e41de4d..04702baccaeba3afe99b21d18c2146e8acf24388 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 a7535b385216bb0f4c98540826dedd38e2ebd4e0..90bbde83cf4f3ca80a39a56b86b3c35ef7e120f8 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 d490f571c37f684574dbbb30b13d903b160c0116..2547f2073cfa244f4e177c0534044e070e711510 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 9173bd7c19c8e25348e7bbab911b89a909c2e465..69e0f447743f6f1d539157f12bdc19d092be6885 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 22cf618c229c0a30e3ca4a9d0593c1c23d1469ce..14ad133863a63bac27fe19d2c12ee927b899b0ba 100644 --- a/tools/run_tests/generated/sources_and_headers.json +++ b/tools/run_tests/generated/sources_and_headers.json @@ -84,6 +84,21 @@ "third_party": false, "type": "target" }, + { + "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", @@ -421,6 +436,23 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "gpr_test_util", + "grpc", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "error_test", + "src": [ + "test/core/iomgr/error_test.c" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -1895,24 +1927,6 @@ "third_party": false, "type": "target" }, - { - "deps": [ - "gpr", - "gpr_test_util", - "grpc", - "grpc_test_util", - "test_tcp_server" - ], - "headers": [], - "is_filegroup": false, - "language": "c", - "name": "set_initial_connect_string_test", - "src": [ - "test/core/client_channel/set_initial_connect_string_test.c" - ], - "third_party": false, - "type": "target" - }, { "deps": [ "gpr", @@ -2412,6 +2426,27 @@ "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_arena", + "src": [ + "test/cpp/microbenchmarks/bm_arena.cc" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "benchmark", @@ -2454,6 +2489,27 @@ "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_chttp2_transport", + "src": [ + "test/cpp/microbenchmarks/bm_chttp2_transport.cc" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "benchmark", @@ -2622,6 +2678,27 @@ "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_pollset", + "src": [ + "test/cpp/microbenchmarks/bm_pollset.cc" + ], + "third_party": false, + "type": "target" + }, { "deps": [ "gpr", @@ -3561,6 +3638,30 @@ "third_party": false, "type": "target" }, + { + "deps": [ + "gpr", + "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", @@ -7202,6 +7303,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", @@ -7249,6 +7351,9 @@ "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/atm.c", "src/core/lib/support/avl.c", "src/core/lib/support/backoff.c", "src/core/lib/support/backoff.h", @@ -7415,6 +7520,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", @@ -7595,6 +7701,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", @@ -7718,7 +7828,6 @@ "src/core/ext/client_channel/connector.h", "src/core/ext/client_channel/http_connect_handshaker.h", "src/core/ext/client_channel/http_proxy.h", - "src/core/ext/client_channel/initial_connect_string.h", "src/core/ext/client_channel/lb_policy.h", "src/core/ext/client_channel/lb_policy_factory.h", "src/core/ext/client_channel/lb_policy_registry.h", @@ -7728,6 +7837,7 @@ "src/core/ext/client_channel/resolver.h", "src/core/ext/client_channel/resolver_factory.h", "src/core/ext/client_channel/resolver_registry.h", + "src/core/ext/client_channel/retry_throttle.h", "src/core/ext/client_channel/subchannel.h", "src/core/ext/client_channel/subchannel_index.h", "src/core/ext/client_channel/uri_parser.h" @@ -7744,13 +7854,10 @@ "src/core/ext/client_channel/client_channel_plugin.c", "src/core/ext/client_channel/connector.c", "src/core/ext/client_channel/connector.h", - "src/core/ext/client_channel/default_initial_connect_string.c", "src/core/ext/client_channel/http_connect_handshaker.c", "src/core/ext/client_channel/http_connect_handshaker.h", "src/core/ext/client_channel/http_proxy.c", "src/core/ext/client_channel/http_proxy.h", - "src/core/ext/client_channel/initial_connect_string.c", - "src/core/ext/client_channel/initial_connect_string.h", "src/core/ext/client_channel/lb_policy.c", "src/core/ext/client_channel/lb_policy.h", "src/core/ext/client_channel/lb_policy_factory.c", @@ -7769,6 +7876,8 @@ "src/core/ext/client_channel/resolver_factory.h", "src/core/ext/client_channel/resolver_registry.c", "src/core/ext/client_channel/resolver_registry.h", + "src/core/ext/client_channel/retry_throttle.c", + "src/core/ext/client_channel/retry_throttle.h", "src/core/ext/client_channel/subchannel.c", "src/core/ext/client_channel/subchannel.h", "src/core/ext/client_channel/subchannel_index.c", @@ -8381,6 +8490,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", @@ -8437,6 +8547,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", @@ -8486,6 +8597,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 402dabc554d6f6a7062fe76b2b391689f8c492c8..fc8019509ca4c9143126e486c49a793de475131b 100644 --- a/tools/run_tests/generated/tests.json +++ b/tools/run_tests/generated/tests.json @@ -89,6 +89,28 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "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": [ @@ -515,6 +537,28 @@ "windows" ] }, + { + "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": [ @@ -1790,7 +1834,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1959,30 +2005,6 @@ "windows" ] }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" - ], - "cpu_cost": 0.1, - "exclude_configs": [], - "exclude_iomgrs": [ - "uv" - ], - "flaky": false, - "gtest": false, - "language": "c", - "name": "set_initial_connect_string_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, { "args": [], "ci_platforms": [ @@ -2598,7 +2620,7 @@ "flaky": false, "gtest": false, "language": "c++", - "name": "bm_call_create", + "name": "bm_arena", "platforms": [ "linux", "mac", @@ -2620,7 +2642,7 @@ "flaky": false, "gtest": false, "language": "c++", - "name": "bm_chttp2_hpack", + "name": "bm_call_create", "platforms": [ "linux", "mac", @@ -2642,7 +2664,7 @@ "flaky": false, "gtest": false, "language": "c++", - "name": "bm_closure", + "name": "bm_chttp2_hpack", "platforms": [ "linux", "mac", @@ -2664,7 +2686,7 @@ "flaky": false, "gtest": false, "language": "c++", - "name": "bm_cq", + "name": "bm_chttp2_transport", "platforms": [ "linux", "mac", @@ -2686,7 +2708,7 @@ "flaky": false, "gtest": false, "language": "c++", - "name": "bm_error", + "name": "bm_closure", "platforms": [ "linux", "mac", @@ -2705,20 +2727,15 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "excluded_poll_engines": [ - "poll", - "poll-cv" - ], "flaky": false, "gtest": false, "language": "c++", - "name": "bm_fullstack_streaming_ping_pong", + "name": "bm_cq", "platforms": [ "linux", "mac", "posix" - ], - "timeout_seconds": 1200 + ] }, { "args": [ @@ -2732,20 +2749,15 @@ "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", + "name": "bm_error", "platforms": [ "linux", "mac", "posix" - ], - "timeout_seconds": 1200 + ] }, { "args": [ @@ -2766,7 +2778,7 @@ "flaky": false, "gtest": false, "language": "c++", - "name": "bm_fullstack_trickle", + "name": "bm_fullstack_streaming_ping_pong", "platforms": [ "linux", "mac", @@ -2793,7 +2805,7 @@ "flaky": false, "gtest": false, "language": "c++", - "name": "bm_fullstack_unary_ping_pong", + "name": "bm_fullstack_streaming_pump", "platforms": [ "linux", "mac", @@ -2813,166 +2825,90 @@ "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], + "excluded_poll_engines": [ + "poll", + "poll-cv" + ], "flaky": false, "gtest": false, "language": "c++", - "name": "bm_metadata", + "name": "bm_fullstack_trickle", "platforms": [ "linux", "mac", "posix" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": true, - "language": "c++", - "name": "channel_arguments_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] + "timeout_seconds": 1200 }, { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" + "args": [ + "--benchmark_min_time=0" ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": true, - "language": "c++", - "name": "channel_filter_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], "ci_platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], - "flaky": false, - "gtest": true, - "language": "c++", - "name": "cli_call_test", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix" + "excluded_poll_engines": [ + "poll", + "poll-cv" ], - "cpu_cost": 0.1, - "exclude_configs": [], - "exclude_iomgrs": [], "flaky": false, - "gtest": true, + "gtest": false, "language": "c++", - "name": "client_crash_test", + "name": "bm_fullstack_unary_ping_pong", "platforms": [ "linux", "mac", "posix" - ] - }, - { - "args": [], - "ci_platforms": [ - "linux", - "mac", - "posix", - "windows" ], - "cpu_cost": 1.0, - "exclude_configs": [], - "exclude_iomgrs": [], - "flaky": false, - "gtest": true, - "language": "c++", - "name": "codegen_test_full", - "platforms": [ - "linux", - "mac", - "posix", - "windows" - ] + "timeout_seconds": 1200 }, { - "args": [], + "args": [ + "--benchmark_min_time=0" + ], "ci_platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": true, + "gtest": false, "language": "c++", - "name": "codegen_test_minimal", + "name": "bm_metadata", "platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ] }, { - "args": [], + "args": [ + "--benchmark_min_time=0" + ], "ci_platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ], "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, - "gtest": true, + "gtest": false, "language": "c++", - "name": "credentials_test", + "name": "bm_pollset", "platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ] }, { @@ -2989,7 +2925,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "cxx_byte_buffer_test", + "name": "channel_arguments_test", "platforms": [ "linux", "mac", @@ -3011,7 +2947,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "cxx_slice_test", + "name": "channel_filter_test", "platforms": [ "linux", "mac", @@ -3033,7 +2969,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "cxx_string_ref_test", + "name": "cli_call_test", "platforms": [ "linux", "mac", @@ -3046,21 +2982,19 @@ "ci_platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ], - "cpu_cost": 1.0, + "cpu_cost": 0.1, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", - "name": "cxx_time_test", + "name": "client_crash_test", "platforms": [ "linux", "mac", - "posix", - "windows" + "posix" ] }, { @@ -3071,13 +3005,13 @@ "posix", "windows" ], - "cpu_cost": 0.5, + "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], "flaky": false, "gtest": true, "language": "c++", - "name": "end2end_test", + "name": "codegen_test_full", "platforms": [ "linux", "mac", @@ -3099,7 +3033,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "filter_end2end_test", + "name": "codegen_test_minimal", "platforms": [ "linux", "mac", @@ -3121,7 +3055,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "generic_end2end_test", + "name": "credentials_test", "platforms": [ "linux", "mac", @@ -3130,9 +3064,7 @@ ] }, { - "args": [ - "--generated_file_path=gens/src/proto/grpc/testing/compiler_test.grpc.pb.h" - ], + "args": [], "ci_platforms": [ "linux", "mac", @@ -3145,7 +3077,7 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "golden_file_test", + "name": "cxx_byte_buffer_test", "platforms": [ "linux", "mac", @@ -3167,7 +3099,163 @@ "flaky": false, "gtest": true, "language": "c++", - "name": "grpc_tool_test", + "name": "cxx_slice_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": "cxx_string_ref_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": "cxx_time_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 0.5, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "end2end_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": "filter_end2end_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": "generic_end2end_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [ + "--generated_file_path=gens/src/proto/grpc/testing/compiler_test.grpc.pb.h" + ], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "golden_file_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": "grpc_tool_test", "platforms": [ "linux", "mac", @@ -3477,6 +3565,28 @@ "windows" ] }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": true, + "language": "c++", + "name": "server_builder_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, { "args": [], "ci_platforms": [ @@ -39592,31 +39702,6 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure", "timeout_seconds": 360 }, - { - "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", @@ -39667,31 +39752,6 @@ "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure", "timeout_seconds": 360 }, - { - "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", @@ -39742,31 +39802,6 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure", "timeout_seconds": 360 }, - { - "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", @@ -39817,31 +39852,6 @@ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure", "timeout_seconds": 360 }, - { - "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", @@ -40021,31 +40031,6 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure", "timeout_seconds": 360 }, - { - "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", @@ -40096,31 +40081,6 @@ "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure", "timeout_seconds": 360 }, - { - "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", @@ -40171,31 +40131,6 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure", "timeout_seconds": 360 }, - { - "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", @@ -40246,31 +40181,6 @@ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure", "timeout_seconds": 360 }, - { - "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", @@ -40340,239 +40250,19 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_secure_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_qps_one_server_core_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\": 0, \"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\": 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_generic_async_streaming_qps_one_server_core_secure_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_servers\": 1, \"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\": 10, \"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": [ - "poll-cv" - ], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_servers\": 1, \"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\": 10, \"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": [ - "poll-cv" - ], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_secure_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_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\": \"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\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 2, - "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_ping_pong_secure_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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_low_thread_count", - "timeout_seconds": 360 - }, - { - "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", + "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_secure_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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_qps_one_server_core_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\": 0, \"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\": 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": 2, + "cpu_cost": "capacity", "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -40596,13 +40286,13 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_secure_low_thread_count", + "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_secure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_servers\": 1, \"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\": 10, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, "ci_platforms": [ @@ -40625,20 +40315,22 @@ "stapprof", "ubsan" ], - "excluded_poll_engines": [], + "excluded_poll_engines": [ + "poll-cv" + ], "flaky": false, "language": "c++", "name": "json_run_localhost", "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_secure_low_thread_count", "timeout_seconds": 360 }, { "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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_servers\": 1, \"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\": 10, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, "ci_platforms": [ @@ -40661,20 +40353,22 @@ "stapprof", "ubsan" ], - "excluded_poll_engines": [], + "excluded_poll_engines": [ + "poll-cv" + ], "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", + "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_secure_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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_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\": \"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\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, "ci_platforms": [ @@ -40704,13 +40398,13 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_ping_pong_secure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_secure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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": [ @@ -40740,19 +40434,19 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_low_thread_count", "timeout_seconds": 360 }, { "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}}}]}" + "{\"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, "ci_platforms": [ "linux" ], - "cpu_cost": 64, + "cpu_cost": 2, "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -40776,19 +40470,19 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_secure_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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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": 2, + "cpu_cost": "capacity", "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -40812,19 +40506,19 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_secure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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}}}]}" + "{\"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, "ci_platforms": [ "linux" ], - "cpu_cost": "capacity", + "cpu_cost": 2, "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -40848,19 +40542,19 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_ping_pong_secure_low_thread_count", "timeout_seconds": 360 }, { "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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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": "capacity", + "cpu_cost": 64, "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -40884,13 +40578,13 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_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}}}]}" + "{\"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, "ci_platforms": [ @@ -40920,13 +40614,13 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_generic_async_streaming_ping_pong_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_ping_pong_secure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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": [ @@ -40956,19 +40650,19 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_qps_one_server_core_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\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_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}}}]}" + "{\"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, "ci_platforms": [ "linux" ], - "cpu_cost": "capacity", + "cpu_cost": 2, "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -40992,13 +40686,13 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_generic_async_streaming_ping_pong_insecure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_servers\": 1, \"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\": 10, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_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": [ @@ -41021,22 +40715,20 @@ "stapprof", "ubsan" ], - "excluded_poll_engines": [ - "poll-cv" - ], + "excluded_poll_engines": [], "flaky": false, "language": "c++", "name": "json_run_localhost", "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_unconstrained_insecure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_servers\": 1, \"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\": 10, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_qps_one_server_core_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\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_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": [ @@ -41059,28 +40751,26 @@ "stapprof", "ubsan" ], - "excluded_poll_engines": [ - "poll-cv" - ], + "excluded_poll_engines": [], "flaky": false, "language": "c++", "name": "json_run_localhost", "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_generic_async_streaming_qps_one_server_core_insecure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_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\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_servers\": 1, \"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\": 10, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, "ci_platforms": [ "linux" ], - "cpu_cost": 2, + "cpu_cost": "capacity", "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -41097,26 +40787,28 @@ "stapprof", "ubsan" ], - "excluded_poll_engines": [], + "excluded_poll_engines": [ + "poll-cv" + ], "flaky": false, "language": "c++", "name": "json_run_localhost", "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_unary_qps_unconstrained_insecure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"server_config\": {\"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_servers\": 1, \"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\": 10, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, "ci_platforms": [ "linux" ], - "cpu_cost": 64, + "cpu_cost": "capacity", "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -41133,26 +40825,28 @@ "stapprof", "ubsan" ], - "excluded_poll_engines": [], + "excluded_poll_engines": [ + "poll-cv" + ], "flaky": false, "language": "c++", "name": "json_run_localhost", "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_client_sync_server_streaming_qps_unconstrained_insecure_low_thread_count", "timeout_seconds": 360 }, { "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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_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\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, "ci_platforms": [ "linux" ], - "cpu_cost": 64, + "cpu_cost": 2, "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -41176,19 +40870,19 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_ping_pong_insecure_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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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": 2, + "cpu_cost": 64, "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -41212,19 +40906,19 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_low_thread_count", "timeout_seconds": 360 }, { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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}}}]}" + "{\"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, "ci_platforms": [ "linux" ], - "cpu_cost": "capacity", + "cpu_cost": 2, "defaults": "boringssl", "exclude_configs": [ "asan-noleaks", @@ -41248,13 +40942,13 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_unary_ping_pong_insecure_low_thread_count", "timeout_seconds": 360 }, { "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}}}]}" + "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"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": [ @@ -41284,7 +40978,7 @@ "platforms": [ "linux" ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count", + "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_low_thread_count", "timeout_seconds": 360 }, { @@ -41359,42 +41053,6 @@ "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_low_thread_count", "timeout_seconds": 360 }, - { - "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", @@ -41467,42 +41125,6 @@ "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_low_thread_count", "timeout_seconds": 360 }, - { - "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" @@ -41521,6 +41143,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41543,6 +41166,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41565,6 +41189,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41587,6 +41212,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41609,6 +41235,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41631,6 +41258,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41653,6 +41281,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41675,6 +41304,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41697,6 +41327,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41719,6 +41350,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41741,6 +41373,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41763,6 +41396,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41785,6 +41419,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41807,6 +41442,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41829,6 +41465,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41851,6 +41488,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41873,6 +41511,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41895,6 +41534,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41917,6 +41557,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41939,6 +41580,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41961,6 +41603,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41983,6 +41626,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42005,6 +41649,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42027,6 +41672,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42049,6 +41695,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42071,6 +41718,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42093,6 +41741,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42115,6 +41764,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42137,6 +41787,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42159,6 +41810,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42181,6 +41833,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42203,6 +41856,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42225,6 +41879,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42247,6 +41902,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42269,6 +41925,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42291,6 +41948,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42313,6 +41971,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42335,6 +41994,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42357,6 +42017,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42379,6 +42040,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42401,6 +42063,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42423,6 +42086,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42445,6 +42109,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42467,6 +42132,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42489,6 +42155,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42511,6 +42178,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42533,6 +42201,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42555,6 +42224,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42577,6 +42247,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42599,6 +42270,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42621,6 +42293,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42643,6 +42316,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42665,6 +42339,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42687,6 +42362,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42709,6 +42385,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42731,6 +42408,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42753,6 +42431,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42775,6 +42454,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42797,6 +42477,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42819,6 +42500,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42841,6 +42523,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42863,6 +42546,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42885,6 +42569,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42907,6 +42592,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42929,6 +42615,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42951,6 +42638,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42973,6 +42661,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42995,6 +42684,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43017,6 +42707,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43039,6 +42730,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43061,6 +42753,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43083,6 +42776,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43105,6 +42799,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43127,6 +42822,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43149,6 +42845,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43171,6 +42868,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43193,6 +42891,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43215,6 +42914,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43237,6 +42937,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43259,6 +42960,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43281,6 +42983,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43303,6 +43006,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43325,6 +43029,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43347,6 +43052,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43369,6 +43075,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43391,6 +43098,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43413,6 +43121,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43435,6 +43144,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43457,6 +43167,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43479,6 +43190,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43501,6 +43213,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43523,6 +43236,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43545,6 +43259,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43567,6 +43282,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43589,6 +43305,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43611,6 +43328,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43633,6 +43351,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43655,6 +43374,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43677,6 +43397,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43699,6 +43420,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43721,6 +43443,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43743,6 +43466,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43765,6 +43489,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43787,6 +43512,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43809,6 +43535,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43831,6 +43558,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43853,6 +43581,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43875,6 +43604,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43897,6 +43627,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43919,6 +43650,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43941,6 +43673,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43963,6 +43696,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43985,6 +43719,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44007,6 +43742,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44029,6 +43765,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44051,6 +43788,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44073,6 +43811,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44095,6 +43834,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44117,6 +43857,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44139,6 +43880,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44161,6 +43903,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44183,6 +43926,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44205,6 +43949,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44227,6 +43972,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44249,6 +43995,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44271,6 +44018,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44293,6 +44041,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44315,6 +44064,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44337,6 +44087,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44359,6 +44110,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44381,6 +44133,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44403,6 +44156,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44425,6 +44179,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44447,6 +44202,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44469,6 +44225,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44491,6 +44248,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44513,6 +44271,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44535,6 +44294,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44557,6 +44317,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44579,6 +44340,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44601,6 +44363,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44623,6 +44386,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44645,6 +44409,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44667,6 +44432,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44689,6 +44455,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44711,6 +44478,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44733,6 +44501,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44755,6 +44524,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44777,6 +44547,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44799,6 +44570,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44821,6 +44593,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44843,6 +44616,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44865,6 +44639,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44887,6 +44662,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44909,6 +44685,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44931,6 +44708,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44953,6 +44731,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44975,6 +44754,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44997,6 +44777,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45019,6 +44800,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45041,6 +44823,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45063,6 +44846,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45085,6 +44869,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45107,6 +44892,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45129,6 +44915,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45151,6 +44938,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45173,6 +44961,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45195,6 +44984,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45217,6 +45007,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45239,6 +45030,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45261,6 +45053,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45283,6 +45076,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45305,6 +45099,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45327,6 +45122,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45349,6 +45145,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45371,6 +45168,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45393,6 +45191,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45415,6 +45214,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45437,6 +45237,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45459,6 +45260,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45481,6 +45283,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45503,6 +45306,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45525,6 +45329,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45547,6 +45352,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45569,6 +45375,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45591,6 +45398,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45613,6 +45421,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45635,6 +45444,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45657,6 +45467,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45679,6 +45490,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45701,6 +45513,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45723,6 +45536,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45745,6 +45559,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45767,6 +45582,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45789,6 +45605,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45811,6 +45628,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45833,6 +45651,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45855,6 +45674,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45877,6 +45697,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45899,6 +45720,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45921,6 +45743,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45943,6 +45766,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45965,6 +45789,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45987,6 +45812,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46009,6 +45835,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46031,6 +45858,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46053,6 +45881,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46075,6 +45904,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46097,6 +45927,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46119,6 +45950,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46141,6 +45973,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46163,6 +45996,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46185,6 +46019,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46207,6 +46042,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46229,6 +46065,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46251,6 +46088,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46273,6 +46111,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46295,6 +46134,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46317,6 +46157,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46339,6 +46180,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46361,6 +46203,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46383,6 +46226,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46405,6 +46249,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46427,6 +46272,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46449,6 +46295,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46471,6 +46318,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46493,6 +46341,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46515,6 +46364,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46537,6 +46387,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46559,6 +46410,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46581,6 +46433,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46603,6 +46456,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46625,6 +46479,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46647,6 +46502,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46669,6 +46525,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46691,6 +46548,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46713,6 +46571,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46735,6 +46594,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46757,6 +46617,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46779,6 +46640,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46801,6 +46663,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46823,6 +46686,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46845,6 +46709,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46867,6 +46732,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46889,6 +46755,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46911,6 +46778,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46933,6 +46801,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46955,6 +46824,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46977,6 +46847,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46999,6 +46870,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47021,6 +46893,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47043,6 +46916,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47065,6 +46939,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47087,6 +46962,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47109,6 +46985,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47131,6 +47008,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47153,6 +47031,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47175,6 +47054,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47197,6 +47077,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47219,6 +47100,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47241,6 +47123,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47263,6 +47146,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47285,6 +47169,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47307,6 +47192,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47329,6 +47215,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47351,6 +47238,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47373,6 +47261,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47395,6 +47284,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47417,6 +47307,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47439,6 +47330,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47461,6 +47353,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47483,6 +47376,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47505,6 +47399,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47527,6 +47422,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47549,6 +47445,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47571,6 +47468,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47593,6 +47491,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47615,6 +47514,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47637,6 +47537,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47659,6 +47560,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47681,6 +47583,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47703,6 +47606,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47725,6 +47629,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47747,6 +47652,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47769,6 +47675,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47791,6 +47698,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47813,6 +47721,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47835,6 +47744,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47857,6 +47767,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47879,6 +47790,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47901,6 +47813,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47923,6 +47836,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47945,6 +47859,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47967,6 +47882,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47989,6 +47905,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48011,6 +47928,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48033,6 +47951,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48055,6 +47974,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48077,6 +47997,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48099,6 +48020,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48121,6 +48043,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48143,6 +48066,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48165,6 +48089,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48187,6 +48112,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48209,6 +48135,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48231,6 +48158,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48253,6 +48181,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48275,6 +48204,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48297,6 +48227,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48319,6 +48250,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48341,6 +48273,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48363,6 +48296,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48385,6 +48319,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48407,6 +48342,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48429,6 +48365,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48451,6 +48388,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48473,6 +48411,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48495,6 +48434,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48517,6 +48457,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48539,6 +48480,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48561,6 +48503,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48583,6 +48526,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48605,6 +48549,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48627,6 +48572,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48649,6 +48595,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48671,6 +48618,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48693,6 +48641,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48715,6 +48664,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48737,6 +48687,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48759,6 +48710,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48781,6 +48733,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48803,6 +48756,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48825,6 +48779,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48847,6 +48802,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48869,6 +48825,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48891,6 +48848,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48913,6 +48871,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48935,6 +48894,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48957,6 +48917,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48979,6 +48940,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49001,6 +48963,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49023,6 +48986,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49045,6 +49009,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49067,6 +49032,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49089,6 +49055,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49111,6 +49078,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49133,6 +49101,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49155,6 +49124,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49177,6 +49147,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49199,6 +49170,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49221,6 +49193,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49243,6 +49216,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49265,6 +49239,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49287,6 +49262,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49309,6 +49285,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49331,6 +49308,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49353,6 +49331,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49375,6 +49354,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49397,6 +49377,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49419,6 +49400,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49441,6 +49423,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49463,6 +49446,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49485,6 +49469,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49507,6 +49492,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49529,6 +49515,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49551,6 +49538,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49573,6 +49561,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49595,6 +49584,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49617,6 +49607,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49639,6 +49630,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49661,6 +49653,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49683,6 +49676,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49705,6 +49699,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49727,6 +49722,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49749,6 +49745,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49771,6 +49768,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49793,6 +49791,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49815,6 +49814,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49837,6 +49837,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49859,6 +49860,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49881,6 +49883,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49903,6 +49906,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49925,6 +49929,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49947,6 +49952,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49969,6 +49975,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49991,6 +49998,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50013,6 +50021,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50035,6 +50044,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50057,6 +50067,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50079,6 +50090,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50101,6 +50113,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50123,6 +50136,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50145,6 +50159,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50167,6 +50182,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50189,6 +50205,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50211,6 +50228,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50233,6 +50251,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50255,6 +50274,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50277,6 +50297,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50299,6 +50320,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50321,6 +50343,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50343,6 +50366,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50365,6 +50389,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50387,6 +50412,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50409,6 +50435,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50431,6 +50458,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50453,6 +50481,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50475,6 +50504,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50497,6 +50527,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50519,6 +50550,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50541,6 +50573,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50563,6 +50596,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50585,6 +50619,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50607,6 +50642,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50629,6 +50665,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50651,6 +50688,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50673,6 +50711,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50695,6 +50734,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50717,6 +50757,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50739,6 +50780,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50761,6 +50803,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50783,6 +50826,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50805,6 +50849,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50827,6 +50872,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50849,6 +50895,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50871,6 +50918,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50893,6 +50941,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50915,6 +50964,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50937,6 +50987,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50959,6 +51010,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50981,6 +51033,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51003,6 +51056,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51025,6 +51079,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51047,6 +51102,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51069,6 +51125,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51091,6 +51148,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51113,6 +51171,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51135,6 +51194,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51157,6 +51217,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51179,6 +51240,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51201,6 +51263,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51223,6 +51286,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51245,6 +51309,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51267,6 +51332,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51289,6 +51355,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51311,6 +51378,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51333,6 +51401,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51355,6 +51424,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51377,6 +51447,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51399,6 +51470,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51421,6 +51493,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51443,6 +51516,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51465,6 +51539,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51487,6 +51562,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51509,6 +51585,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51531,6 +51608,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51553,6 +51631,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51575,6 +51654,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51597,6 +51677,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51619,6 +51700,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51641,6 +51723,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51663,6 +51746,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51685,6 +51769,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51707,6 +51792,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51729,6 +51815,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51751,6 +51838,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51773,6 +51861,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51795,6 +51884,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51817,6 +51907,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51839,6 +51930,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51861,6 +51953,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51883,6 +51976,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51905,6 +51999,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51927,6 +52022,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51949,6 +52045,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51971,6 +52068,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51993,6 +52091,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52015,6 +52114,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52037,6 +52137,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52059,6 +52160,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52081,6 +52183,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52103,6 +52206,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52125,6 +52229,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52147,6 +52252,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52169,6 +52275,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52191,6 +52298,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52213,6 +52321,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52235,6 +52344,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52257,6 +52367,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52279,6 +52390,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52301,6 +52413,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52323,6 +52436,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52345,6 +52459,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52367,6 +52482,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52389,6 +52505,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52411,6 +52528,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52433,6 +52551,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52455,6 +52574,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52477,6 +52597,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52499,6 +52620,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52521,6 +52643,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52543,6 +52666,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52565,6 +52689,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52587,6 +52712,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52609,6 +52735,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52631,6 +52758,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52653,6 +52781,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52675,6 +52804,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52697,6 +52827,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52719,6 +52850,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52741,6 +52873,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52763,6 +52896,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52785,6 +52919,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52807,6 +52942,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52829,6 +52965,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52851,6 +52988,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52873,6 +53011,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52895,6 +53034,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52917,6 +53057,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52939,6 +53080,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52961,6 +53103,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52983,6 +53126,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53005,6 +53149,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53027,6 +53172,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53049,6 +53195,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53071,6 +53218,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53093,6 +53241,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53115,6 +53264,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53137,6 +53287,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53159,6 +53310,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53181,6 +53333,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53203,6 +53356,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53225,6 +53379,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53247,6 +53402,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53269,6 +53425,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53291,6 +53448,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53313,6 +53471,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53335,6 +53494,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53357,6 +53517,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53379,6 +53540,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53401,6 +53563,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53423,6 +53586,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53445,6 +53609,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53467,6 +53632,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53489,6 +53655,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53511,6 +53678,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53533,6 +53701,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53555,6 +53724,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53577,6 +53747,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53599,6 +53770,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53621,6 +53793,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53643,6 +53816,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53665,6 +53839,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53687,6 +53862,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53709,6 +53885,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53731,6 +53908,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53753,6 +53931,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53775,6 +53954,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53797,6 +53977,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53819,6 +54000,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53841,6 +54023,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53863,6 +54046,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53885,6 +54069,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53907,6 +54092,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53929,6 +54115,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53951,6 +54138,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53973,6 +54161,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53995,6 +54184,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54017,6 +54207,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54039,6 +54230,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54061,6 +54253,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54083,6 +54276,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54105,6 +54299,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54127,6 +54322,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54149,6 +54345,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54171,6 +54368,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54193,6 +54391,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54215,6 +54414,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54237,6 +54437,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54259,6 +54460,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54281,6 +54483,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54303,6 +54506,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54325,6 +54529,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54347,6 +54552,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54369,6 +54575,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54391,6 +54598,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54413,6 +54621,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54435,6 +54644,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54457,6 +54667,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54479,6 +54690,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54501,6 +54713,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54523,6 +54736,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54545,6 +54759,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54567,6 +54782,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54589,6 +54805,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54611,6 +54828,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54633,6 +54851,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54655,6 +54874,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54677,6 +54897,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54699,6 +54920,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54721,6 +54943,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54743,6 +54966,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54765,6 +54989,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54787,6 +55012,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54809,6 +55035,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54831,6 +55058,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54853,6 +55081,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54875,6 +55104,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54897,6 +55127,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54919,6 +55150,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54941,6 +55173,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54963,6 +55196,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54985,6 +55219,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55007,6 +55242,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55029,6 +55265,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55051,6 +55288,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55073,6 +55311,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55095,6 +55334,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55117,6 +55357,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55139,6 +55380,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55161,6 +55403,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55183,6 +55426,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55205,6 +55449,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55227,6 +55472,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55249,6 +55495,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55271,6 +55518,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55293,6 +55541,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55315,6 +55564,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55337,6 +55587,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55359,6 +55610,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55381,6 +55633,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55403,6 +55656,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55425,6 +55679,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55447,6 +55702,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55469,6 +55725,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55491,6 +55748,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55513,6 +55771,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55535,6 +55794,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55557,6 +55817,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55579,6 +55840,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55601,6 +55863,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55623,6 +55886,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55645,6 +55909,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55667,6 +55932,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55689,6 +55955,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55711,6 +55978,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55733,6 +56001,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55755,6 +56024,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55777,6 +56047,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55799,6 +56070,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55821,6 +56093,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55843,6 +56116,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55865,6 +56139,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55887,6 +56162,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55909,6 +56185,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55931,6 +56208,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55953,6 +56231,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55975,6 +56254,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55997,6 +56277,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56019,6 +56300,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56041,6 +56323,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56063,6 +56346,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56085,6 +56369,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56107,6 +56392,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56129,6 +56415,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56151,6 +56438,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56173,6 +56461,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56195,6 +56484,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56217,6 +56507,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56239,6 +56530,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56261,6 +56553,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56283,6 +56576,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56305,6 +56599,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56327,6 +56622,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56349,6 +56645,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56371,6 +56668,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56393,6 +56691,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56415,6 +56714,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56437,6 +56737,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56459,6 +56760,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56481,6 +56783,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56503,6 +56806,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56525,6 +56829,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56547,6 +56852,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56569,6 +56875,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56591,6 +56898,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56613,6 +56921,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56635,6 +56944,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56657,6 +56967,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56679,6 +56990,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56701,6 +57013,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56723,6 +57036,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56745,6 +57059,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56767,6 +57082,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56789,6 +57105,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56811,6 +57128,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56833,6 +57151,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56855,6 +57174,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56877,6 +57197,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56899,6 +57220,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56921,6 +57243,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56943,6 +57266,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56965,6 +57289,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56987,6 +57312,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57009,6 +57335,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57031,6 +57358,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57053,6 +57381,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57075,6 +57404,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57097,6 +57427,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57119,6 +57450,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57141,6 +57473,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57163,6 +57496,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57185,6 +57519,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57207,6 +57542,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57229,6 +57565,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57251,6 +57588,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57273,6 +57611,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57295,6 +57634,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57317,6 +57657,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57339,6 +57680,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57361,6 +57703,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57383,6 +57726,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57405,6 +57749,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57427,6 +57772,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57449,6 +57795,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57471,6 +57818,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57493,6 +57841,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57515,6 +57864,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57537,6 +57887,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57559,6 +57910,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57581,6 +57933,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57603,6 +57956,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57625,6 +57979,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57647,6 +58002,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57669,6 +58025,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57691,6 +58048,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57713,6 +58071,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57735,6 +58094,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57757,6 +58117,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57779,6 +58140,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57801,6 +58163,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57823,6 +58186,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57845,6 +58209,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57867,6 +58232,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57889,6 +58255,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57911,6 +58278,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57933,6 +58301,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57955,6 +58324,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57977,6 +58347,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57999,6 +58370,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58021,6 +58393,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58043,6 +58416,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58065,6 +58439,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58087,6 +58462,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58109,6 +58485,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58131,6 +58508,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58153,6 +58531,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58175,6 +58554,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58197,6 +58577,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58219,6 +58600,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58241,6 +58623,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58263,6 +58646,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58285,6 +58669,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58307,6 +58692,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58329,6 +58715,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58351,6 +58738,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58373,6 +58761,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58395,6 +58784,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58417,6 +58807,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58439,6 +58830,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58461,6 +58853,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58483,6 +58876,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58505,6 +58899,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58527,6 +58922,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58549,6 +58945,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58571,6 +58968,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58593,6 +58991,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58615,6 +59014,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58637,6 +59037,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58659,6 +59060,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58681,6 +59083,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58703,6 +59106,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58725,6 +59129,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58747,6 +59152,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58769,6 +59175,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58791,6 +59198,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58813,6 +59221,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58835,6 +59244,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58857,6 +59267,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58879,6 +59290,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58901,6 +59313,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58923,6 +59336,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58945,6 +59359,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58967,6 +59382,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58989,6 +59405,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59011,6 +59428,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59033,6 +59451,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59055,6 +59474,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59077,6 +59497,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59099,6 +59520,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59121,6 +59543,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59143,6 +59566,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59165,6 +59589,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59187,6 +59612,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59209,6 +59635,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59231,6 +59658,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59253,6 +59681,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59275,6 +59704,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59297,6 +59727,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59319,6 +59750,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59341,6 +59773,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59363,6 +59796,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59385,6 +59819,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59407,6 +59842,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59429,6 +59865,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59451,6 +59888,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59473,6 +59911,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59495,6 +59934,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59517,6 +59957,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59539,6 +59980,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59561,6 +60003,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59583,6 +60026,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59605,6 +60049,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59627,6 +60072,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59649,6 +60095,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59671,6 +60118,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59693,6 +60141,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59715,6 +60164,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59737,6 +60187,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59759,6 +60210,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59781,6 +60233,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59803,6 +60256,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59825,6 +60279,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59847,6 +60302,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59869,6 +60325,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59891,6 +60348,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59913,6 +60371,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59935,6 +60394,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59957,6 +60417,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59979,6 +60440,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60001,6 +60463,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60023,6 +60486,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60045,6 +60509,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60067,6 +60532,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60089,6 +60555,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60111,6 +60578,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60133,6 +60601,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60155,6 +60624,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60177,6 +60647,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60199,6 +60670,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60221,6 +60693,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60243,6 +60716,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60265,6 +60739,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60287,6 +60762,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60309,6 +60785,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60331,6 +60808,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60353,6 +60831,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60375,6 +60854,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60397,6 +60877,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60419,6 +60900,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60441,6 +60923,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60463,6 +60946,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60485,6 +60969,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60507,6 +60992,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60529,6 +61015,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60551,6 +61038,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60573,6 +61061,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60595,6 +61084,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60617,6 +61107,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60639,6 +61130,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60661,6 +61153,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60683,6 +61176,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60705,6 +61199,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60727,6 +61222,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60749,6 +61245,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60771,6 +61268,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60793,6 +61291,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60815,6 +61314,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60837,6 +61337,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60859,6 +61360,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60881,6 +61383,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60903,6 +61406,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60925,6 +61429,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60947,6 +61452,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60969,6 +61475,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60991,6 +61498,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61013,6 +61521,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61035,6 +61544,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61057,6 +61567,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61079,6 +61590,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61101,6 +61613,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61123,6 +61636,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61145,6 +61659,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61167,6 +61682,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61189,6 +61705,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61211,6 +61728,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61233,6 +61751,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61255,6 +61774,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61277,6 +61797,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61299,6 +61820,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61321,6 +61843,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61343,6 +61866,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61365,6 +61889,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61387,6 +61912,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61409,6 +61935,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61431,6 +61958,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61453,6 +61981,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61475,6 +62004,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61497,6 +62027,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61519,6 +62050,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61541,6 +62073,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61563,6 +62096,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61585,6 +62119,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61607,6 +62142,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61629,6 +62165,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61651,6 +62188,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61673,6 +62211,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61695,6 +62234,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61717,6 +62257,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61739,6 +62280,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61761,6 +62303,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61783,6 +62326,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61805,6 +62349,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61827,6 +62372,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61849,6 +62395,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61871,6 +62418,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61893,6 +62441,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61915,6 +62464,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61937,6 +62487,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61959,6 +62510,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61981,6 +62533,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62003,6 +62556,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62025,6 +62579,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62047,6 +62602,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62069,6 +62625,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62091,6 +62648,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62113,6 +62671,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62135,6 +62694,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62157,6 +62717,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62179,6 +62740,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62201,6 +62763,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62223,6 +62786,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62245,6 +62809,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62267,6 +62832,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62289,6 +62855,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62311,6 +62878,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62333,6 +62901,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62355,6 +62924,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62377,6 +62947,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62399,6 +62970,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62421,6 +62993,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62443,6 +63016,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62465,6 +63039,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62487,6 +63062,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62509,6 +63085,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62531,6 +63108,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62553,6 +63131,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62575,6 +63154,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62597,6 +63177,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62619,6 +63200,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62641,6 +63223,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62663,6 +63246,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62685,6 +63269,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62707,6 +63292,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62729,6 +63315,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62751,6 +63338,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62773,6 +63361,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62795,6 +63384,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62817,6 +63407,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62839,6 +63430,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62861,6 +63453,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62883,6 +63476,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62905,6 +63499,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62927,6 +63522,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62949,6 +63545,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62971,6 +63568,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62993,6 +63591,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63015,6 +63614,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63037,6 +63637,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63059,6 +63660,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63081,6 +63683,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63103,6 +63706,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63125,6 +63729,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63147,6 +63752,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63169,6 +63775,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63191,6 +63798,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63213,6 +63821,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63235,6 +63844,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63257,6 +63867,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63279,6 +63890,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63301,6 +63913,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63323,6 +63936,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63345,6 +63959,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63367,6 +63982,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63389,6 +64005,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63411,6 +64028,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63433,6 +64051,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63455,6 +64074,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63477,6 +64097,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63499,6 +64120,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63521,6 +64143,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63543,6 +64166,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63565,6 +64189,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63587,6 +64212,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63609,6 +64235,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63631,6 +64258,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63653,6 +64281,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63675,6 +64304,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63697,6 +64327,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63719,6 +64350,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63741,6 +64373,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63763,6 +64396,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63785,6 +64419,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63807,6 +64442,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63829,6 +64465,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63851,6 +64488,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63873,6 +64511,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63895,6 +64534,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63917,6 +64557,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63939,6 +64580,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63961,6 +64603,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63983,6 +64626,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64005,6 +64649,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64027,6 +64672,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64049,6 +64695,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64071,6 +64718,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64093,6 +64741,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64115,6 +64764,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64137,6 +64787,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64159,6 +64810,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64181,6 +64833,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64203,6 +64856,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64225,6 +64879,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64247,6 +64902,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64269,6 +64925,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64291,6 +64948,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64313,6 +64971,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64335,6 +64994,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64357,6 +65017,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64379,6 +65040,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64401,6 +65063,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64423,6 +65086,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64445,6 +65109,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64467,6 +65132,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64489,6 +65155,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64511,6 +65178,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64533,6 +65201,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64555,6 +65224,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64577,6 +65247,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64599,6 +65270,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64621,6 +65293,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64643,6 +65316,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64665,6 +65339,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64687,6 +65362,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64709,6 +65385,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64731,6 +65408,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64753,6 +65431,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64775,6 +65454,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64797,6 +65477,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64819,6 +65500,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64841,6 +65523,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64863,6 +65546,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64885,6 +65569,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64907,6 +65592,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64929,6 +65615,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64951,6 +65638,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64973,6 +65661,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64995,6 +65684,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65017,6 +65707,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65039,6 +65730,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65061,6 +65753,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65083,6 +65776,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65105,6 +65799,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65127,6 +65822,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65149,6 +65845,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65171,6 +65868,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65193,6 +65891,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65215,6 +65914,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65237,6 +65937,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65259,6 +65960,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65281,6 +65983,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65303,6 +66006,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65325,6 +66029,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65347,6 +66052,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65369,6 +66075,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65391,6 +66098,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65413,6 +66121,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65435,6 +66144,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65457,6 +66167,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65479,6 +66190,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65501,6 +66213,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65523,6 +66236,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65545,6 +66259,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65567,6 +66282,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65589,6 +66305,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65611,6 +66328,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65633,6 +66351,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65655,6 +66374,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65677,6 +66397,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65699,6 +66420,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65721,6 +66443,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65743,6 +66466,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65765,6 +66489,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65787,6 +66512,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65809,6 +66535,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65831,6 +66558,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65853,6 +66581,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65875,6 +66604,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65897,6 +66627,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65919,6 +66650,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65941,6 +66673,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65963,6 +66696,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65985,6 +66719,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66007,6 +66742,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66029,6 +66765,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66051,6 +66788,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66073,6 +66811,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66095,6 +66834,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66117,6 +66857,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66139,6 +66880,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66161,6 +66903,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66183,6 +66926,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66205,6 +66949,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66227,6 +66972,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66249,6 +66995,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66271,6 +67018,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66293,6 +67041,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66315,6 +67064,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66337,6 +67087,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66359,6 +67110,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66381,6 +67133,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66403,6 +67156,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66425,6 +67179,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66447,6 +67202,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66469,6 +67225,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66491,6 +67248,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66513,6 +67271,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66535,6 +67294,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66557,6 +67317,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66579,6 +67340,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66601,6 +67363,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66623,6 +67386,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66645,6 +67409,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66667,6 +67432,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66689,6 +67455,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66711,6 +67478,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66733,6 +67501,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66755,6 +67524,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66777,6 +67547,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66799,6 +67570,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66821,6 +67593,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66843,6 +67616,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66865,6 +67639,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66887,6 +67662,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66909,6 +67685,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66931,6 +67708,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66953,6 +67731,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66975,6 +67754,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66997,6 +67777,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67019,6 +67800,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67041,6 +67823,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67063,6 +67846,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67085,6 +67869,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67107,6 +67892,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67129,6 +67915,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67151,6 +67938,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67173,6 +67961,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67195,6 +67984,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67217,6 +68007,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67239,6 +68030,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67261,6 +68053,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67283,6 +68076,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67305,6 +68099,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67327,6 +68122,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67349,6 +68145,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67371,6 +68168,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67393,6 +68191,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67415,6 +68214,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67437,6 +68237,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67459,6 +68260,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67481,6 +68283,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67503,6 +68306,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67525,6 +68329,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67547,6 +68352,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67569,6 +68375,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67591,6 +68398,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67613,6 +68421,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67635,6 +68444,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67657,6 +68467,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67679,6 +68490,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67701,6 +68513,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67723,6 +68536,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67745,6 +68559,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67767,6 +68582,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67789,6 +68605,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67811,6 +68628,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67833,6 +68651,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67855,6 +68674,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67877,6 +68697,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67899,6 +68720,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67921,6 +68743,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67943,6 +68766,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67965,6 +68789,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67987,6 +68812,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68009,6 +68835,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68031,6 +68858,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68053,6 +68881,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68075,6 +68904,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68097,6 +68927,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68119,6 +68950,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68141,6 +68973,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68163,6 +68996,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68185,6 +69019,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68207,6 +69042,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68229,6 +69065,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68251,6 +69088,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68273,6 +69111,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68295,6 +69134,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68317,6 +69157,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68339,6 +69180,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68361,6 +69203,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68383,6 +69226,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68405,6 +69249,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68427,6 +69272,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68449,6 +69295,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68471,6 +69318,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68493,6 +69341,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68515,6 +69364,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68537,6 +69387,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68559,6 +69410,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68581,6 +69433,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68603,6 +69456,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68625,6 +69479,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68647,6 +69502,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68669,6 +69525,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68691,6 +69548,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68713,6 +69571,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68735,6 +69594,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68757,6 +69617,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68779,6 +69640,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68801,6 +69663,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68823,6 +69686,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68845,6 +69709,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68867,6 +69732,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68889,6 +69755,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68911,6 +69778,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68933,6 +69801,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68955,6 +69824,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68977,6 +69847,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68999,6 +69870,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69021,6 +69893,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69043,6 +69916,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69065,6 +69939,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69087,6 +69962,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69109,6 +69985,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69131,6 +70008,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69153,6 +70031,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69175,6 +70054,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69197,6 +70077,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69219,6 +70100,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69241,6 +70123,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69263,6 +70146,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69285,6 +70169,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69307,6 +70192,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69329,6 +70215,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69351,6 +70238,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69373,6 +70261,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69395,6 +70284,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69417,6 +70307,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69439,6 +70330,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69461,6 +70353,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69483,6 +70376,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69505,6 +70399,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69527,6 +70422,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69549,6 +70445,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69571,6 +70468,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69593,6 +70491,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69615,6 +70514,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69637,6 +70537,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69659,6 +70560,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69681,6 +70583,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69703,6 +70606,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69725,6 +70629,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69747,6 +70652,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69769,6 +70675,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69791,6 +70698,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69813,6 +70721,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69835,6 +70744,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69857,6 +70767,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69879,6 +70790,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69901,6 +70813,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69923,6 +70836,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69945,6 +70859,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69967,6 +70882,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69989,6 +70905,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70011,6 +70928,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70033,6 +70951,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70055,6 +70974,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70077,6 +70997,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70099,6 +71020,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70121,6 +71043,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70143,6 +71066,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70165,6 +71089,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70187,6 +71112,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70209,6 +71135,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70231,6 +71158,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70253,6 +71181,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70275,6 +71204,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70297,6 +71227,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70319,6 +71250,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70341,6 +71273,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70363,6 +71296,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70385,6 +71319,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70407,6 +71342,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70429,6 +71365,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70451,6 +71388,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70473,6 +71411,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70495,6 +71434,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70517,6 +71457,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70539,6 +71480,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70561,6 +71503,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70583,6 +71526,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70605,6 +71549,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70627,6 +71572,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70649,6 +71595,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70671,6 +71618,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70693,6 +71641,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70715,6 +71664,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70737,6 +71687,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70759,6 +71710,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70781,6 +71733,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70803,6 +71756,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70825,6 +71779,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70847,6 +71802,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70869,6 +71825,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70891,6 +71848,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70913,6 +71871,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70935,6 +71894,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70957,6 +71917,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70979,6 +71940,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71001,6 +71963,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71023,6 +71986,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71045,6 +72009,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71067,6 +72032,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71089,6 +72055,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71111,6 +72078,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71133,6 +72101,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71155,6 +72124,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71177,6 +72147,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71199,6 +72170,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71221,6 +72193,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71243,6 +72216,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71265,6 +72239,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71287,6 +72262,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71309,6 +72285,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71331,6 +72308,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71353,6 +72331,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71375,6 +72354,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71397,6 +72377,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71419,6 +72400,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71441,6 +72423,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71463,6 +72446,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71485,6 +72469,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71507,6 +72492,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71529,6 +72515,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71551,6 +72538,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71573,6 +72561,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71595,6 +72584,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71617,6 +72607,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71639,6 +72630,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71661,6 +72653,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71683,6 +72676,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71705,6 +72699,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71727,6 +72722,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71749,6 +72745,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71771,6 +72768,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71793,6 +72791,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71815,6 +72814,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71837,6 +72837,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71859,6 +72860,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71881,6 +72883,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71903,6 +72906,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71925,6 +72929,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71947,6 +72952,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71969,6 +72975,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71991,6 +72998,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72013,6 +73021,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72035,6 +73044,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72057,6 +73067,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72079,6 +73090,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72101,6 +73113,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72123,6 +73136,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72145,6 +73159,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72167,6 +73182,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72189,6 +73205,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72211,6 +73228,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72233,6 +73251,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72255,6 +73274,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72277,6 +73297,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72299,6 +73320,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72321,6 +73343,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72343,6 +73366,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72365,6 +73389,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72387,6 +73412,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72409,6 +73435,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72431,6 +73458,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72453,6 +73481,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72475,6 +73504,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72497,6 +73527,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72519,6 +73550,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72541,6 +73573,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72563,6 +73596,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72585,6 +73619,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72607,6 +73642,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72629,6 +73665,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72651,6 +73688,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72673,6 +73711,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72695,6 +73734,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72717,6 +73757,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72739,6 +73780,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72761,6 +73803,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72783,6 +73826,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72805,6 +73849,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72827,6 +73872,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72849,6 +73895,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72871,6 +73918,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72893,6 +73941,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72915,6 +73964,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72937,6 +73987,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72959,6 +74010,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72981,6 +74033,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73003,6 +74056,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73025,6 +74079,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73047,6 +74102,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73069,6 +74125,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73091,6 +74148,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73113,6 +74171,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73135,6 +74194,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73157,6 +74217,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73179,6 +74240,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73201,6 +74263,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73223,6 +74286,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73245,6 +74309,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73267,6 +74332,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73289,6 +74355,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73311,6 +74378,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73333,6 +74401,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73355,6 +74424,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73377,6 +74447,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73399,6 +74470,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73421,6 +74493,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73443,6 +74516,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73465,6 +74539,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73487,6 +74562,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73509,6 +74585,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73531,6 +74608,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73553,6 +74631,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73575,6 +74654,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73597,6 +74677,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73619,6 +74700,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73641,6 +74723,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73663,6 +74746,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73685,6 +74769,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73707,6 +74792,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73729,6 +74815,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73751,6 +74838,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73773,6 +74861,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73795,6 +74884,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73817,6 +74907,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73839,6 +74930,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73861,6 +74953,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73883,6 +74976,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73905,6 +74999,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73927,6 +75022,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73949,6 +75045,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73971,6 +75068,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73993,6 +75091,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74015,6 +75114,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74037,6 +75137,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74059,6 +75160,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74081,6 +75183,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74103,6 +75206,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74125,6 +75229,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74147,6 +75252,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74169,6 +75275,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74191,6 +75298,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74213,6 +75321,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74235,6 +75344,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74257,6 +75367,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74279,6 +75390,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74301,6 +75413,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74323,6 +75436,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74345,6 +75459,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74367,6 +75482,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74389,6 +75505,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74411,6 +75528,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74433,6 +75551,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74455,6 +75574,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74477,6 +75597,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74499,6 +75620,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74521,6 +75643,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74543,6 +75666,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74565,6 +75689,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74587,6 +75712,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74609,6 +75735,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74631,6 +75758,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74653,6 +75781,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74675,6 +75804,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74697,6 +75827,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74719,6 +75850,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74741,6 +75873,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74763,6 +75896,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74785,6 +75919,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74807,6 +75942,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74829,6 +75965,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74851,6 +75988,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74873,6 +76011,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74895,6 +76034,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74917,6 +76057,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74939,6 +76080,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74961,6 +76103,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74983,6 +76126,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75005,6 +76149,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75027,6 +76172,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75049,6 +76195,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75071,6 +76218,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75093,6 +76241,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75115,6 +76264,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75137,6 +76287,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75159,6 +76310,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75181,6 +76333,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75203,6 +76356,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75225,6 +76379,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75247,6 +76402,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75269,6 +76425,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75291,6 +76448,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75313,6 +76471,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75335,6 +76494,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75357,6 +76517,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75379,6 +76540,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75401,6 +76563,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75423,6 +76586,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75445,6 +76609,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75467,6 +76632,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75489,6 +76655,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75511,6 +76678,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75533,6 +76701,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75555,6 +76724,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75577,6 +76747,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75599,6 +76770,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75621,6 +76793,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75643,6 +76816,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75665,6 +76839,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75687,6 +76862,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75709,6 +76885,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75731,6 +76908,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75753,6 +76931,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75775,6 +76954,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75797,6 +76977,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75819,6 +77000,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75841,6 +77023,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75863,6 +77046,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75885,6 +77069,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75907,6 +77092,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75929,6 +77115,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75951,6 +77138,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75973,6 +77161,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75995,6 +77184,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76017,6 +77207,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76039,6 +77230,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76061,6 +77253,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76083,6 +77276,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76105,6 +77299,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76127,6 +77322,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76149,6 +77345,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76171,6 +77368,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76193,6 +77391,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76215,6 +77414,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76237,6 +77437,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76259,6 +77460,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76281,6 +77483,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76303,6 +77506,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76325,6 +77529,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76347,6 +77552,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76369,6 +77575,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76391,6 +77598,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76413,6 +77621,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76435,6 +77644,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76457,6 +77667,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76479,6 +77690,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76501,6 +77713,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76523,6 +77736,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76545,6 +77759,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76567,6 +77782,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76589,6 +77805,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76611,6 +77828,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76633,6 +77851,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76655,6 +77874,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76677,6 +77897,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76699,6 +77920,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76721,6 +77943,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76743,6 +77966,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76765,6 +77989,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76787,6 +78012,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76809,6 +78035,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76831,6 +78058,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76853,6 +78081,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76875,6 +78104,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76897,6 +78127,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76919,6 +78150,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76941,6 +78173,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76963,6 +78196,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76985,6 +78219,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77007,6 +78242,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77029,6 +78265,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77051,6 +78288,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77073,6 +78311,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77095,6 +78334,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77117,6 +78357,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77139,6 +78380,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77161,6 +78403,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77183,6 +78426,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77205,6 +78449,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77227,6 +78472,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77249,6 +78495,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77271,6 +78518,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77293,6 +78541,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77315,6 +78564,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77337,6 +78587,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77359,6 +78610,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77381,6 +78633,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77403,6 +78656,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77425,6 +78679,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77447,6 +78702,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77469,6 +78725,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77491,6 +78748,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77513,6 +78771,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77535,6 +78794,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77557,6 +78817,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77579,6 +78840,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77601,6 +78863,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77623,6 +78886,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77645,6 +78909,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77667,6 +78932,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77689,6 +78955,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77711,6 +78978,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77733,6 +79001,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77755,6 +79024,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77777,6 +79047,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77799,6 +79070,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77821,6 +79093,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77843,6 +79116,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77865,6 +79139,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77887,6 +79162,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77909,6 +79185,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77931,6 +79208,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77953,6 +79231,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77975,6 +79254,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77997,6 +79277,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78019,6 +79300,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78041,6 +79323,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78063,6 +79346,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78085,6 +79369,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78107,6 +79392,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78129,6 +79415,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78151,6 +79438,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78173,6 +79461,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78195,6 +79484,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78217,6 +79507,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78239,6 +79530,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78261,6 +79553,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78283,6 +79576,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78305,6 +79599,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78327,6 +79622,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78349,6 +79645,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78371,6 +79668,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78393,6 +79691,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78415,6 +79714,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78437,6 +79737,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78459,6 +79760,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78481,6 +79783,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78503,6 +79806,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78525,6 +79829,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78547,6 +79852,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78569,6 +79875,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78591,6 +79898,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78613,6 +79921,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78635,6 +79944,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78657,6 +79967,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78679,6 +79990,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78701,6 +80013,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78723,6 +80036,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78745,6 +80059,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78767,6 +80082,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78789,6 +80105,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78811,6 +80128,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78833,6 +80151,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78855,6 +80174,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78877,6 +80197,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78899,6 +80220,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78921,6 +80243,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78943,6 +80266,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78965,6 +80289,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78987,6 +80312,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79009,6 +80335,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79031,6 +80358,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79053,6 +80381,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79075,6 +80404,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79097,6 +80427,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79119,6 +80450,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79141,6 +80473,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79163,6 +80496,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79185,6 +80519,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79207,6 +80542,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79229,6 +80565,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79251,6 +80588,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79273,6 +80611,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79295,6 +80634,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79317,6 +80657,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79339,6 +80680,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79361,6 +80703,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79383,6 +80726,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79405,6 +80749,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79427,6 +80772,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79449,6 +80795,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79471,6 +80818,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79493,6 +80841,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79515,6 +80864,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79537,6 +80887,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79559,6 +80910,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79581,6 +80933,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79603,6 +80956,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79625,6 +80979,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79647,6 +81002,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79669,6 +81025,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79691,6 +81048,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79713,6 +81071,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79735,6 +81094,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79757,6 +81117,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79779,6 +81140,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79801,6 +81163,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79823,6 +81186,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79845,6 +81209,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79867,6 +81232,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79889,6 +81255,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79911,6 +81278,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79933,6 +81301,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79955,6 +81324,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79977,6 +81347,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79999,6 +81370,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80021,6 +81393,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80043,6 +81416,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80065,6 +81439,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80087,6 +81462,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80109,6 +81485,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80131,6 +81508,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80153,6 +81531,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80175,6 +81554,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80197,6 +81577,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80219,6 +81600,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80241,6 +81623,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80263,6 +81646,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80285,6 +81669,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80307,6 +81692,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80329,6 +81715,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80351,6 +81738,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80373,6 +81761,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80395,6 +81784,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80417,6 +81807,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80439,6 +81830,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80461,6 +81853,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80483,6 +81876,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80505,6 +81899,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80527,6 +81922,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80549,6 +81945,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80571,6 +81968,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80593,6 +81991,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80615,6 +82014,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80637,6 +82037,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80659,6 +82060,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80681,6 +82083,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80703,6 +82106,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80725,6 +82129,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80747,6 +82152,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80769,6 +82175,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80791,6 +82198,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80813,6 +82221,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80835,6 +82244,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80857,6 +82267,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80879,6 +82290,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80901,6 +82313,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80923,6 +82336,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80945,6 +82359,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80967,6 +82382,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80989,6 +82405,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81011,6 +82428,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81033,6 +82451,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81055,6 +82474,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81077,6 +82497,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81099,6 +82520,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81121,6 +82543,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81143,6 +82566,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81165,6 +82589,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81187,6 +82612,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81209,6 +82635,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81231,6 +82658,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81253,6 +82681,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81275,6 +82704,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81297,6 +82727,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81319,6 +82750,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81341,6 +82773,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81363,6 +82796,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81385,6 +82819,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81407,6 +82842,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81429,6 +82865,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81451,6 +82888,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81473,6 +82911,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81495,6 +82934,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81517,6 +82957,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81539,6 +82980,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81561,6 +83003,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81583,6 +83026,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81605,6 +83049,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81627,6 +83072,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81649,6 +83095,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81671,6 +83118,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81693,6 +83141,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81715,6 +83164,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81737,6 +83187,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81759,6 +83210,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81781,6 +83233,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81803,6 +83256,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81825,6 +83279,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81847,6 +83302,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81869,6 +83325,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81891,6 +83348,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81913,6 +83371,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81935,6 +83394,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81957,6 +83417,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81979,6 +83440,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82001,6 +83463,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82023,6 +83486,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82045,6 +83509,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82067,6 +83532,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82089,6 +83555,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82111,6 +83578,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82133,6 +83601,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82155,6 +83624,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82177,6 +83647,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82199,6 +83670,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82221,6 +83693,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82243,6 +83716,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82265,6 +83739,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82287,6 +83762,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82309,6 +83785,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82331,6 +83808,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82353,6 +83831,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82375,6 +83854,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82397,6 +83877,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82419,6 +83900,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82441,6 +83923,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82463,6 +83946,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82485,6 +83969,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82507,6 +83992,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82529,6 +84015,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82551,6 +84038,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82573,6 +84061,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82595,6 +84084,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82617,6 +84107,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82639,6 +84130,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82661,6 +84153,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82683,6 +84176,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82705,6 +84199,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82727,6 +84222,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82749,6 +84245,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82771,6 +84268,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82793,6 +84291,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82815,6 +84314,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82837,6 +84337,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82859,6 +84360,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82881,6 +84383,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82903,6 +84406,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82925,6 +84429,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82947,6 +84452,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82969,6 +84475,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82991,6 +84498,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83013,6 +84521,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83035,6 +84544,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83057,6 +84567,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83079,6 +84590,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83101,6 +84613,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83123,6 +84636,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83145,6 +84659,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83167,6 +84682,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83189,6 +84705,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83211,6 +84728,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83233,6 +84751,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83255,6 +84774,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83277,6 +84797,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83299,6 +84820,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83321,6 +84843,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83343,6 +84866,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83365,6 +84889,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83387,6 +84912,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83409,6 +84935,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83431,6 +84958,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83453,6 +84981,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83475,6 +85004,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83497,6 +85027,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83519,6 +85050,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83541,6 +85073,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83563,6 +85096,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83585,6 +85119,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83607,6 +85142,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83629,6 +85165,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83651,6 +85188,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83673,6 +85211,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83695,6 +85234,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83717,6 +85257,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83739,6 +85280,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83761,6 +85303,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83783,6 +85326,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83805,6 +85349,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83827,6 +85372,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83849,6 +85395,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83871,6 +85418,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83893,6 +85441,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83915,6 +85464,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83937,6 +85487,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83959,6 +85510,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83981,6 +85533,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84003,6 +85556,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84025,6 +85579,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84047,6 +85602,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84069,6 +85625,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84091,6 +85648,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84113,6 +85671,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84135,6 +85694,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84157,6 +85717,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84179,6 +85740,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84201,6 +85763,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84223,6 +85786,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84245,6 +85809,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84267,6 +85832,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84289,6 +85855,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84311,6 +85878,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84333,6 +85901,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84355,6 +85924,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84377,6 +85947,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84399,6 +85970,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84421,6 +85993,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84443,6 +86016,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84465,6 +86039,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84487,6 +86062,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84509,6 +86085,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84531,6 +86108,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84553,6 +86131,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84575,6 +86154,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84597,6 +86177,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84619,6 +86200,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84641,6 +86223,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84663,6 +86246,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84685,6 +86269,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84707,6 +86292,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84729,6 +86315,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84751,6 +86338,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84773,6 +86361,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84795,6 +86384,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84817,6 +86407,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84839,6 +86430,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84861,6 +86453,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84883,6 +86476,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84905,6 +86499,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84927,6 +86522,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84949,6 +86545,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84971,6 +86568,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84993,6 +86591,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85015,6 +86614,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85037,6 +86637,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85059,6 +86660,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85081,6 +86683,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85103,6 +86706,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85125,6 +86729,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85147,6 +86752,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85169,6 +86775,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85191,6 +86798,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85213,6 +86821,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85235,6 +86844,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85257,6 +86867,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85279,6 +86890,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85301,6 +86913,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85323,6 +86936,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85345,6 +86959,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85367,6 +86982,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85389,6 +87005,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85411,6 +87028,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85433,6 +87051,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85455,6 +87074,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85477,6 +87097,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85499,6 +87120,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85521,6 +87143,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85543,6 +87166,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85565,6 +87189,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85587,6 +87212,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85609,6 +87235,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85631,6 +87258,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85653,6 +87281,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85675,6 +87304,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85697,6 +87327,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85719,6 +87350,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85741,6 +87373,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85763,6 +87396,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85785,6 +87419,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85807,6 +87442,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85829,6 +87465,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85851,6 +87488,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85873,6 +87511,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85895,6 +87534,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85917,6 +87557,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85939,6 +87580,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85961,6 +87603,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85983,6 +87626,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86005,6 +87649,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86027,6 +87672,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86049,6 +87695,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86071,6 +87718,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86093,6 +87741,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86115,6 +87764,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86137,6 +87787,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86159,6 +87810,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86181,6 +87833,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86203,6 +87856,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86225,6 +87879,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86247,6 +87902,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86269,6 +87925,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86291,6 +87948,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86313,6 +87971,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86335,6 +87994,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86357,6 +88017,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86379,6 +88040,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86401,6 +88063,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86423,6 +88086,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86445,6 +88109,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86467,6 +88132,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86489,6 +88155,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86511,6 +88178,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86533,6 +88201,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86555,6 +88224,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86577,6 +88247,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86599,6 +88270,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86621,6 +88293,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86643,6 +88316,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86665,6 +88339,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86687,6 +88362,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86709,6 +88385,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86731,6 +88408,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86753,6 +88431,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86775,6 +88454,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86797,6 +88477,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86819,6 +88500,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86841,6 +88523,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86863,6 +88546,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86885,6 +88569,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86907,6 +88592,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86929,6 +88615,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86951,6 +88638,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86973,6 +88661,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86995,6 +88684,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87017,6 +88707,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87039,6 +88730,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87061,6 +88753,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87083,6 +88776,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87105,6 +88799,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87127,6 +88822,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87149,6 +88845,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87171,6 +88868,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87193,6 +88891,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87215,6 +88914,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87237,6 +88937,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87259,6 +88960,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87281,6 +88983,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87303,6 +89006,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87325,6 +89029,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87347,6 +89052,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87369,6 +89075,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87391,6 +89098,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87413,6 +89121,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87435,6 +89144,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87457,6 +89167,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87479,6 +89190,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87501,6 +89213,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87523,6 +89236,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87545,6 +89259,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87567,6 +89282,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87589,6 +89305,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87611,6 +89328,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87633,6 +89351,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87655,6 +89374,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87677,6 +89397,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87699,6 +89420,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87721,6 +89443,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87743,6 +89466,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87765,6 +89489,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87787,6 +89512,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87809,6 +89535,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87831,6 +89558,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87853,6 +89581,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87875,6 +89604,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87897,6 +89627,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87919,6 +89650,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87941,6 +89673,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87963,6 +89696,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87985,6 +89719,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88007,6 +89742,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88029,6 +89765,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88051,6 +89788,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88073,6 +89811,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88095,6 +89834,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88117,6 +89857,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88139,6 +89880,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88161,6 +89903,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88183,6 +89926,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88205,6 +89949,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88227,6 +89972,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88249,6 +89995,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88271,6 +90018,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88293,6 +90041,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88315,6 +90064,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88337,6 +90087,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88359,6 +90110,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88381,6 +90133,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88403,6 +90156,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88425,6 +90179,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88447,6 +90202,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88469,6 +90225,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88491,6 +90248,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88513,6 +90271,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88535,6 +90294,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88557,6 +90317,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88579,6 +90340,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88601,6 +90363,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88623,6 +90386,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88645,6 +90409,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88667,6 +90432,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88689,6 +90455,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88711,6 +90478,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88733,6 +90501,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88755,6 +90524,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88777,6 +90547,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88799,6 +90570,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88821,6 +90593,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88843,6 +90616,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88865,6 +90639,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88887,6 +90662,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88909,6 +90685,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88931,6 +90708,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88953,6 +90731,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88975,6 +90754,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88997,6 +90777,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89019,6 +90800,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89041,6 +90823,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89063,6 +90846,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89085,6 +90869,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89107,6 +90892,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89129,6 +90915,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89151,6 +90938,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89173,6 +90961,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89195,6 +90984,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89217,6 +91007,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89239,6 +91030,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89261,6 +91053,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89283,6 +91076,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89305,6 +91099,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89327,6 +91122,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89349,6 +91145,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89371,6 +91168,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89393,6 +91191,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89415,6 +91214,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89437,6 +91237,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89459,6 +91260,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89481,6 +91283,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89503,6 +91306,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89525,6 +91329,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89547,6 +91352,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89569,6 +91375,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89591,6 +91398,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89613,6 +91421,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89635,6 +91444,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89657,6 +91467,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89679,6 +91490,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89701,6 +91513,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89723,6 +91536,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89745,6 +91559,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89767,6 +91582,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89789,6 +91605,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89811,6 +91628,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89833,6 +91651,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89855,6 +91674,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89877,6 +91697,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89899,6 +91720,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89921,6 +91743,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89943,6 +91766,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89965,6 +91789,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89987,6 +91812,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90009,6 +91835,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90031,6 +91858,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90053,6 +91881,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90075,6 +91904,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90097,6 +91927,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90119,6 +91950,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90141,6 +91973,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90163,6 +91996,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90185,6 +92019,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90207,6 +92042,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90229,6 +92065,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90251,6 +92088,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90273,6 +92111,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90295,6 +92134,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90317,6 +92157,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90339,6 +92180,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90361,6 +92203,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90383,6 +92226,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90405,6 +92249,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90427,6 +92272,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90449,6 +92295,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90471,6 +92318,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90493,6 +92341,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90515,6 +92364,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90537,6 +92387,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90559,6 +92410,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90581,6 +92433,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90603,6 +92456,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90625,6 +92479,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90647,6 +92502,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90669,6 +92525,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90691,6 +92548,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90713,6 +92571,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90735,6 +92594,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90757,6 +92617,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90779,6 +92640,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90801,6 +92663,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90823,6 +92686,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90845,6 +92709,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90867,6 +92732,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90889,6 +92755,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90911,6 +92778,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90933,6 +92801,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90955,6 +92824,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90977,6 +92847,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90999,6 +92870,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91021,6 +92893,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91043,6 +92916,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91065,6 +92939,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91087,6 +92962,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91109,6 +92985,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91131,6 +93008,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91153,6 +93031,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91175,6 +93054,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91197,6 +93077,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91219,6 +93100,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91241,6 +93123,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91263,6 +93146,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91285,6 +93169,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91307,6 +93192,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91329,6 +93215,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91351,6 +93238,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91373,6 +93261,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91395,6 +93284,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91417,6 +93307,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91439,6 +93330,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91461,6 +93353,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91483,6 +93376,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91505,6 +93399,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91527,6 +93422,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91549,6 +93445,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91571,6 +93468,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91593,6 +93491,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91615,6 +93514,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91637,6 +93537,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91659,6 +93560,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91681,6 +93583,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91703,6 +93606,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91725,6 +93629,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91747,6 +93652,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91769,6 +93675,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91791,6 +93698,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91813,6 +93721,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91835,6 +93744,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91857,6 +93767,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91879,6 +93790,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91901,6 +93813,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91923,6 +93836,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91945,6 +93859,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91967,6 +93882,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91989,6 +93905,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92011,6 +93928,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92033,6 +93951,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92055,6 +93974,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92077,6 +93997,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92099,6 +94020,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92121,6 +94043,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92143,6 +94066,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92165,6 +94089,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92187,6 +94112,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92209,6 +94135,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92231,6 +94158,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92253,6 +94181,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92275,6 +94204,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92297,6 +94227,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92319,6 +94250,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92341,6 +94273,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92363,6 +94296,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92385,6 +94319,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92407,6 +94342,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92429,6 +94365,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92451,6 +94388,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92473,6 +94411,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92495,6 +94434,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92517,6 +94457,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92539,6 +94480,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92561,6 +94503,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92583,6 +94526,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92605,6 +94549,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92627,6 +94572,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92649,6 +94595,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92671,6 +94618,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92693,6 +94641,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92715,6 +94664,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92737,6 +94687,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92759,6 +94710,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92781,6 +94733,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92803,6 +94756,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92825,6 +94779,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92847,6 +94802,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92869,6 +94825,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92891,6 +94848,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92913,6 +94871,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92935,6 +94894,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92957,6 +94917,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92979,6 +94940,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93001,6 +94963,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93023,6 +94986,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93045,6 +95009,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93067,6 +95032,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93089,6 +95055,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93111,6 +95078,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93133,6 +95101,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93155,6 +95124,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93177,6 +95147,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93199,6 +95170,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93221,6 +95193,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93243,6 +95216,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93265,6 +95239,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93287,6 +95262,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93309,6 +95285,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93331,6 +95308,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93353,6 +95331,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93375,6 +95354,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93397,6 +95377,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93419,6 +95400,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93441,6 +95423,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93463,6 +95446,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93485,6 +95469,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93507,6 +95492,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93529,6 +95515,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93551,6 +95538,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93573,6 +95561,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93595,6 +95584,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93617,6 +95607,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93639,6 +95630,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93661,6 +95653,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93683,6 +95676,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93705,6 +95699,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93727,6 +95722,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93749,6 +95745,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93771,6 +95768,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93793,6 +95791,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93815,6 +95814,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93837,6 +95837,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93859,6 +95860,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93881,6 +95883,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93903,6 +95906,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93925,6 +95929,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93947,6 +95952,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93969,6 +95975,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93991,6 +95998,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94013,6 +96021,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94035,6 +96044,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94057,6 +96067,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94079,6 +96090,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94101,6 +96113,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94123,6 +96136,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94145,6 +96159,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94167,6 +96182,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94189,6 +96205,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94211,6 +96228,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94233,6 +96251,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94255,6 +96274,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94277,6 +96297,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94299,6 +96320,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94321,6 +96343,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94343,6 +96366,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94365,6 +96389,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94387,6 +96412,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94409,6 +96435,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94431,6 +96458,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94453,6 +96481,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94475,6 +96504,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94497,6 +96527,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94519,6 +96550,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94541,6 +96573,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94563,6 +96596,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94585,6 +96619,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94607,6 +96642,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94629,6 +96665,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94651,6 +96688,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94673,6 +96711,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94695,6 +96734,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94717,6 +96757,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94739,6 +96780,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94761,6 +96803,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94783,6 +96826,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94805,6 +96849,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94827,6 +96872,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94849,6 +96895,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94871,6 +96918,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94893,6 +96941,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94915,6 +96964,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94937,6 +96987,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94959,6 +97010,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94981,6 +97033,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95003,6 +97056,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95025,6 +97079,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95047,6 +97102,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95069,6 +97125,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95091,6 +97148,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95113,6 +97171,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95135,6 +97194,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95157,6 +97217,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95179,6 +97240,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95201,6 +97263,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95223,6 +97286,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95245,6 +97309,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95267,6 +97332,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95289,6 +97355,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95311,6 +97378,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95333,6 +97401,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95355,6 +97424,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95377,6 +97447,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95399,6 +97470,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95421,6 +97493,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95443,6 +97516,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95465,6 +97539,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95487,6 +97562,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95509,6 +97585,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95531,6 +97608,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95553,6 +97631,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95575,6 +97654,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95597,6 +97677,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95619,6 +97700,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95641,6 +97723,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95663,6 +97746,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95685,6 +97769,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95707,6 +97792,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95729,6 +97815,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95751,6 +97838,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95773,6 +97861,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95795,6 +97884,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95817,6 +97907,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95839,6 +97930,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95861,6 +97953,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95883,6 +97976,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95905,6 +97999,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95927,6 +98022,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95949,6 +98045,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95971,6 +98068,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95993,6 +98091,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96015,6 +98114,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96037,6 +98137,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96059,6 +98160,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96081,6 +98183,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96103,6 +98206,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96125,6 +98229,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96147,6 +98252,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96169,6 +98275,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96191,6 +98298,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96213,6 +98321,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96235,6 +98344,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96257,6 +98367,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96279,6 +98390,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96301,6 +98413,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96323,6 +98436,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96345,6 +98459,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96367,6 +98482,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96389,6 +98505,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96411,6 +98528,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96433,6 +98551,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96455,6 +98574,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96477,6 +98597,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96499,6 +98620,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96521,6 +98643,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96543,6 +98666,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96565,6 +98689,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96587,6 +98712,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96609,6 +98735,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96631,6 +98758,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96653,6 +98781,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96675,6 +98804,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96697,6 +98827,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96719,6 +98850,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96741,6 +98873,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96763,6 +98896,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96785,6 +98919,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96807,6 +98942,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96829,6 +98965,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96851,6 +98988,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96873,6 +99011,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96895,6 +99034,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96917,6 +99057,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96939,6 +99080,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96961,6 +99103,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96983,6 +99126,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97005,6 +99149,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97027,6 +99172,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97049,6 +99195,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97071,6 +99218,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97093,6 +99241,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97115,6 +99264,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97137,6 +99287,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97159,6 +99310,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97181,6 +99333,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97203,6 +99356,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97225,6 +99379,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97247,6 +99402,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97269,6 +99425,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97291,6 +99448,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97313,6 +99471,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97335,6 +99494,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97357,6 +99517,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97379,6 +99540,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97401,6 +99563,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97423,6 +99586,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97445,6 +99609,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97467,6 +99632,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97489,6 +99655,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97511,6 +99678,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97533,6 +99701,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97555,6 +99724,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97577,6 +99747,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97599,6 +99770,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97621,6 +99793,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97643,6 +99816,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97665,6 +99839,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97687,6 +99862,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97709,6 +99885,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97731,6 +99908,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97753,6 +99931,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97775,6 +99954,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97797,6 +99977,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97819,6 +100000,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97841,6 +100023,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97863,6 +100046,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97885,6 +100069,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97907,6 +100092,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97929,6 +100115,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97951,6 +100138,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97973,6 +100161,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97995,6 +100184,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98017,6 +100207,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98039,6 +100230,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98061,6 +100253,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98083,6 +100276,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98105,6 +100299,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98127,6 +100322,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98149,6 +100345,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98171,6 +100368,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98193,6 +100391,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98215,6 +100414,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98237,6 +100437,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98259,6 +100460,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98281,6 +100483,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98303,6 +100506,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98325,6 +100529,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98347,6 +100552,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98369,6 +100575,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98391,6 +100598,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98413,6 +100621,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98435,6 +100644,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98457,6 +100667,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98479,6 +100690,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98501,6 +100713,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98523,6 +100736,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98545,6 +100759,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98567,6 +100782,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98589,6 +100805,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98611,6 +100828,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98633,6 +100851,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98655,6 +100874,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98677,6 +100897,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98699,6 +100920,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98721,6 +100943,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98743,6 +100966,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98765,6 +100989,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98787,6 +101012,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98809,6 +101035,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98831,6 +101058,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98853,6 +101081,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98875,6 +101104,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98897,6 +101127,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98919,6 +101150,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98941,6 +101173,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98963,6 +101196,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98985,6 +101219,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99007,6 +101242,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99029,6 +101265,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99051,6 +101288,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99073,6 +101311,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99095,6 +101334,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99117,6 +101357,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99139,6 +101380,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99161,6 +101403,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99183,6 +101426,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99205,6 +101449,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99227,6 +101472,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99249,6 +101495,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99271,6 +101518,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99293,6 +101541,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99315,6 +101564,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99337,6 +101587,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99359,6 +101610,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99381,6 +101633,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99403,6 +101656,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99425,6 +101679,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99447,6 +101702,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99469,6 +101725,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99491,6 +101748,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99513,6 +101771,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99535,6 +101794,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99557,6 +101817,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99579,6 +101840,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99601,6 +101863,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99623,6 +101886,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99645,6 +101909,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99667,6 +101932,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99689,6 +101955,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99711,6 +101978,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99733,6 +102001,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99755,6 +102024,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99777,6 +102047,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99799,6 +102070,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99821,6 +102093,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99843,6 +102116,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99865,6 +102139,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99887,6 +102162,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99909,6 +102185,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99931,6 +102208,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99953,6 +102231,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99975,6 +102254,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99997,6 +102277,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100019,6 +102300,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100041,6 +102323,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100063,6 +102346,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100085,6 +102369,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100107,6 +102392,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100129,6 +102415,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100151,6 +102438,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100173,6 +102461,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100195,6 +102484,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100217,6 +102507,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100239,6 +102530,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100261,6 +102553,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100283,6 +102576,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100305,6 +102599,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100327,6 +102622,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100349,6 +102645,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100371,6 +102668,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100393,6 +102691,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100415,6 +102714,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100437,6 +102737,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100459,6 +102760,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100481,6 +102783,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100503,6 +102806,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100525,6 +102829,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100547,6 +102852,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100569,6 +102875,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100591,6 +102898,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100613,6 +102921,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100635,6 +102944,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100657,6 +102967,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100679,6 +102990,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100701,6 +103013,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100723,6 +103036,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100745,6 +103059,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100767,6 +103082,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100789,6 +103105,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100811,6 +103128,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100833,6 +103151,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100855,6 +103174,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100877,6 +103197,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100899,6 +103220,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100921,6 +103243,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100943,6 +103266,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100965,6 +103289,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100987,6 +103312,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101009,6 +103335,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101031,6 +103358,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101053,6 +103381,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101075,6 +103404,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101097,6 +103427,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101119,6 +103450,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101141,6 +103473,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101163,6 +103496,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101185,6 +103519,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101207,6 +103542,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101229,6 +103565,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101251,6 +103588,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101273,6 +103611,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101295,6 +103634,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101317,6 +103657,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101339,6 +103680,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101361,6 +103703,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101383,6 +103726,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101405,6 +103749,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101427,6 +103772,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101449,6 +103795,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101471,6 +103818,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101493,6 +103841,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101515,6 +103864,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101537,6 +103887,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101559,6 +103910,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101581,6 +103933,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101603,6 +103956,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101625,6 +103979,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101647,6 +104002,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101669,6 +104025,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101691,6 +104048,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101713,6 +104071,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101735,6 +104094,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101757,6 +104117,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101779,6 +104140,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101801,6 +104163,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101823,6 +104186,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101845,6 +104209,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101867,6 +104232,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101889,6 +104255,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101911,6 +104278,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101933,6 +104301,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101955,6 +104324,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101977,6 +104347,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101999,6 +104370,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102021,6 +104393,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102043,6 +104416,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102065,6 +104439,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102087,6 +104462,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102109,6 +104485,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102131,6 +104508,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102153,6 +104531,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102175,6 +104554,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102197,6 +104577,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102219,6 +104600,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102241,6 +104623,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102263,6 +104646,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102285,6 +104669,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102307,6 +104692,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102329,6 +104715,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102351,6 +104738,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102373,6 +104761,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102395,6 +104784,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102417,6 +104807,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102439,6 +104830,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102461,6 +104853,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102483,6 +104876,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102505,6 +104899,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102527,6 +104922,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102549,6 +104945,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102571,6 +104968,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102593,6 +104991,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102615,6 +105014,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102637,6 +105037,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102659,6 +105060,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102681,6 +105083,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102703,6 +105106,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102725,6 +105129,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102747,6 +105152,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102769,6 +105175,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102791,6 +105198,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102813,6 +105221,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102835,6 +105244,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102857,6 +105267,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102879,6 +105290,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102901,6 +105313,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102923,6 +105336,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102945,6 +105359,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102967,6 +105382,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102989,6 +105405,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103011,6 +105428,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103033,6 +105451,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103055,6 +105474,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103077,6 +105497,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103099,6 +105520,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103121,6 +105543,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103143,6 +105566,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103165,6 +105589,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103187,6 +105612,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103209,6 +105635,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103231,6 +105658,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103253,6 +105681,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103275,6 +105704,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103297,6 +105727,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103319,6 +105750,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103341,6 +105773,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103363,6 +105796,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103385,6 +105819,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103407,6 +105842,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103429,6 +105865,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103451,6 +105888,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103473,6 +105911,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103495,6 +105934,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103517,6 +105957,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103539,6 +105980,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103561,6 +106003,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103583,6 +106026,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103605,6 +106049,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103627,6 +106072,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103649,6 +106095,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103671,6 +106118,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103693,6 +106141,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103715,6 +106164,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103737,6 +106187,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103759,6 +106210,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103781,6 +106233,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103803,6 +106256,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103825,6 +106279,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103847,6 +106302,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103869,6 +106325,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103891,6 +106348,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103913,6 +106371,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103935,6 +106394,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103957,6 +106417,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103979,6 +106440,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104001,6 +106463,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104023,6 +106486,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104045,6 +106509,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104067,6 +106532,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104089,6 +106555,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104111,6 +106578,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104133,6 +106601,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104155,6 +106624,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104177,6 +106647,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104199,6 +106670,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104221,6 +106693,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104243,6 +106716,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104265,6 +106739,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104287,6 +106762,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104309,6 +106785,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104331,6 +106808,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104353,6 +106831,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104375,6 +106854,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104397,6 +106877,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104419,6 +106900,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104441,6 +106923,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104463,6 +106946,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104485,6 +106969,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104507,6 +106992,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104529,6 +107015,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104551,6 +107038,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104573,6 +107061,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104595,6 +107084,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104617,6 +107107,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104639,6 +107130,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104661,6 +107153,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104683,6 +107176,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104705,6 +107199,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104727,6 +107222,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104749,6 +107245,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104771,6 +107268,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104793,6 +107291,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104815,6 +107314,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104837,6 +107337,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104859,6 +107360,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104881,6 +107383,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104903,6 +107406,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104925,6 +107429,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104947,6 +107452,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104969,6 +107475,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104991,6 +107498,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105013,6 +107521,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105035,6 +107544,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105057,6 +107567,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105079,6 +107590,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105101,6 +107613,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105123,6 +107636,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105145,6 +107659,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105167,6 +107682,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105189,6 +107705,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105211,6 +107728,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105233,6 +107751,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105255,6 +107774,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105277,6 +107797,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105299,6 +107820,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105321,6 +107843,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105343,6 +107866,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105365,6 +107889,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105387,6 +107912,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105409,6 +107935,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105431,6 +107958,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105453,6 +107981,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105475,6 +108004,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105497,6 +108027,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105519,6 +108050,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105541,6 +108073,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105563,6 +108096,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105585,6 +108119,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105607,6 +108142,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105629,6 +108165,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105651,6 +108188,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105673,6 +108211,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105695,6 +108234,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105717,6 +108257,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105739,6 +108280,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105761,6 +108303,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105783,6 +108326,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105805,6 +108349,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105827,6 +108372,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105849,6 +108395,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105871,6 +108418,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105893,6 +108441,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105915,6 +108464,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105937,6 +108487,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105959,6 +108510,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105981,6 +108533,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106003,6 +108556,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106025,6 +108579,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106047,6 +108602,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106069,6 +108625,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106091,6 +108648,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106113,6 +108671,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106135,6 +108694,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106157,6 +108717,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106179,6 +108740,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106201,6 +108763,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106223,6 +108786,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106245,6 +108809,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106267,6 +108832,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106289,6 +108855,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106311,6 +108878,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106333,6 +108901,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106355,6 +108924,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106377,6 +108947,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106399,6 +108970,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106421,6 +108993,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106443,6 +109016,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106465,6 +109039,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106487,6 +109062,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106509,6 +109085,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106531,6 +109108,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106553,6 +109131,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106575,6 +109154,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106597,6 +109177,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106619,6 +109200,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106641,6 +109223,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106663,6 +109246,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106685,6 +109269,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106707,6 +109292,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106729,6 +109315,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106751,6 +109338,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106773,6 +109361,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106795,6 +109384,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106817,6 +109407,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106839,6 +109430,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106861,6 +109453,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106883,6 +109476,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106905,6 +109499,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106927,6 +109522,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106949,6 +109545,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106971,6 +109568,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106993,6 +109591,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107015,6 +109614,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107037,6 +109637,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107059,6 +109660,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107081,6 +109683,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107103,6 +109706,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107125,6 +109729,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107147,6 +109752,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107169,6 +109775,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107191,6 +109798,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107213,6 +109821,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107235,6 +109844,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107257,6 +109867,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107279,6 +109890,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107301,6 +109913,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107323,6 +109936,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107345,6 +109959,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107367,6 +109982,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107389,6 +110005,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107411,6 +110028,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107433,6 +110051,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107455,6 +110074,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107477,6 +110097,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107499,6 +110120,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107521,6 +110143,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107543,6 +110166,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107565,6 +110189,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107587,6 +110212,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107609,6 +110235,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107631,6 +110258,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107653,6 +110281,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107675,6 +110304,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107697,6 +110327,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107719,6 +110350,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107741,6 +110373,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107763,6 +110396,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107785,6 +110419,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107807,6 +110442,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107829,6 +110465,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107851,6 +110488,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107873,6 +110511,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107895,6 +110534,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107917,6 +110557,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107939,6 +110580,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107961,6 +110603,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107983,6 +110626,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108005,6 +110649,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108027,6 +110672,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108049,6 +110695,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108071,6 +110718,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108093,6 +110741,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108115,6 +110764,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108137,6 +110787,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108159,6 +110810,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108181,6 +110833,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108203,6 +110856,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108225,6 +110879,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108247,6 +110902,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108269,6 +110925,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108291,6 +110948,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108313,6 +110971,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108335,6 +110994,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108357,6 +111017,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108379,6 +111040,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108401,6 +111063,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108423,6 +111086,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108445,6 +111109,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108467,6 +111132,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108489,6 +111155,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108511,6 +111178,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108533,6 +111201,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108555,6 +111224,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108577,6 +111247,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108599,6 +111270,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108621,6 +111293,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108643,6 +111316,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108665,6 +111339,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108687,6 +111362,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108709,6 +111385,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108731,6 +111408,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108753,6 +111431,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108775,6 +111454,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108797,6 +111477,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108819,6 +111500,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108841,6 +111523,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108863,6 +111546,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108885,6 +111569,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108907,6 +111592,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108929,6 +111615,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108951,6 +111638,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108973,6 +111661,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108995,6 +111684,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109017,6 +111707,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109039,6 +111730,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109061,6 +111753,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109083,6 +111776,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109105,6 +111799,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109127,6 +111822,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109149,6 +111845,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109171,6 +111868,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109193,6 +111891,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109215,6 +111914,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109237,6 +111937,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109259,6 +111960,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109281,6 +111983,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109303,6 +112006,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109325,6 +112029,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109347,6 +112052,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109369,6 +112075,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109391,6 +112098,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109413,6 +112121,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109435,6 +112144,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109457,6 +112167,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109479,6 +112190,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109501,6 +112213,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109523,6 +112236,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109545,6 +112259,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109567,6 +112282,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109589,6 +112305,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109611,6 +112328,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109633,6 +112351,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109655,6 +112374,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109677,6 +112397,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109699,6 +112420,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109721,6 +112443,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109743,6 +112466,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109765,6 +112489,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109787,6 +112512,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109809,6 +112535,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109831,6 +112558,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109853,6 +112581,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109875,6 +112604,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109897,6 +112627,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109919,6 +112650,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109941,6 +112673,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109963,6 +112696,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109985,6 +112719,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110007,6 +112742,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110029,6 +112765,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110051,6 +112788,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110073,6 +112811,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110095,6 +112834,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110117,6 +112857,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110139,6 +112880,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110161,6 +112903,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110183,6 +112926,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110205,6 +112949,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110227,6 +112972,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110249,6 +112995,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110271,6 +113018,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110293,6 +113041,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110315,6 +113064,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110337,6 +113087,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110359,6 +113110,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110381,6 +113133,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110403,6 +113156,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110425,6 +113179,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110447,6 +113202,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110469,6 +113225,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110491,6 +113248,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110513,6 +113271,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110535,6 +113294,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110557,6 +113317,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110579,6 +113340,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110601,6 +113363,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110623,6 +113386,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110645,6 +113409,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110667,6 +113432,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110689,6 +113455,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110711,6 +113478,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110733,6 +113501,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110755,6 +113524,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110777,6 +113547,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110799,6 +113570,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110821,6 +113593,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110843,6 +113616,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110865,6 +113639,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110887,6 +113662,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110909,6 +113685,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110931,6 +113708,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110953,6 +113731,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110975,6 +113754,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110997,6 +113777,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111019,6 +113800,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111041,6 +113823,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111063,6 +113846,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111085,6 +113869,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111107,6 +113892,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111129,6 +113915,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111151,6 +113938,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111173,6 +113961,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111195,6 +113984,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111217,6 +114007,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111239,6 +114030,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111261,6 +114053,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111283,6 +114076,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111305,6 +114099,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111327,6 +114122,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111349,6 +114145,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111371,6 +114168,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111393,6 +114191,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111415,6 +114214,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111437,6 +114237,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111459,6 +114260,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111481,6 +114283,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111503,6 +114306,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111525,6 +114329,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111547,6 +114352,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111569,6 +114375,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111591,6 +114398,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111613,6 +114421,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111635,6 +114444,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111657,6 +114467,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111679,6 +114490,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111701,6 +114513,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111723,6 +114536,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111745,6 +114559,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111767,6 +114582,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111789,6 +114605,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111811,6 +114628,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111833,6 +114651,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111855,6 +114674,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111877,6 +114697,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111899,6 +114720,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111921,6 +114743,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111943,6 +114766,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111965,6 +114789,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111987,6 +114812,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112009,6 +114835,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112031,6 +114858,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112053,6 +114881,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112075,6 +114904,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112097,6 +114927,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112119,6 +114950,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112141,6 +114973,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112163,6 +114996,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112185,6 +115019,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112207,6 +115042,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112229,6 +115065,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112251,6 +115088,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112273,6 +115111,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112295,6 +115134,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112317,6 +115157,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112339,6 +115180,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112361,6 +115203,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112383,6 +115226,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112405,6 +115249,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112427,6 +115272,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112449,6 +115295,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112471,6 +115318,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112493,6 +115341,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112515,6 +115364,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112537,6 +115387,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112559,6 +115410,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112581,6 +115433,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112603,6 +115456,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112625,6 +115479,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112647,6 +115502,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112669,6 +115525,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112691,6 +115548,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112713,6 +115571,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112735,6 +115594,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112757,6 +115617,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112779,6 +115640,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112801,6 +115663,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112823,6 +115686,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112845,6 +115709,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112867,6 +115732,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112889,6 +115755,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112911,6 +115778,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112933,6 +115801,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112955,6 +115824,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112977,6 +115847,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112999,6 +115870,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113021,6 +115893,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113043,6 +115916,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113065,6 +115939,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113087,6 +115962,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113109,6 +115985,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113131,6 +116008,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113153,6 +116031,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113175,6 +116054,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113197,6 +116077,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113219,6 +116100,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113241,6 +116123,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113263,6 +116146,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113285,6 +116169,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113307,6 +116192,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113329,6 +116215,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113351,6 +116238,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113373,6 +116261,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113395,6 +116284,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113417,6 +116307,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113439,6 +116330,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113461,6 +116353,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113483,6 +116376,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113505,6 +116399,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113527,6 +116422,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113549,6 +116445,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113571,6 +116468,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113593,6 +116491,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113615,6 +116514,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113637,6 +116537,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113659,6 +116560,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113681,6 +116583,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113703,6 +116606,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113725,6 +116629,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113747,6 +116652,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113769,6 +116675,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113791,6 +116698,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113813,6 +116721,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113835,6 +116744,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113857,6 +116767,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113879,6 +116790,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113901,6 +116813,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113923,6 +116836,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113945,6 +116859,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113967,6 +116882,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113989,6 +116905,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114011,6 +116928,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114033,6 +116951,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114055,6 +116974,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114077,6 +116997,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114099,6 +117020,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114121,6 +117043,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114143,6 +117066,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114165,6 +117089,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114187,6 +117112,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114209,6 +117135,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114231,6 +117158,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114253,6 +117181,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114275,6 +117204,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114297,6 +117227,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114319,6 +117250,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114341,6 +117273,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114363,6 +117296,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114385,6 +117319,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114407,6 +117342,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114429,6 +117365,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114451,6 +117388,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114473,6 +117411,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114495,6 +117434,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114517,6 +117457,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114539,6 +117480,30 @@ "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": [ + "mac", "linux" ], "uses_polling": false @@ -114561,6 +117526,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114583,6 +117549,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114605,6 +117572,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114627,6 +117595,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114649,6 +117618,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114671,6 +117641,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114693,6 +117664,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114715,6 +117687,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114737,6 +117710,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114759,6 +117733,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114781,6 +117756,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114803,6 +117779,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114825,6 +117802,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114847,6 +117825,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114869,6 +117848,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114891,6 +117871,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114913,6 +117894,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114935,6 +117917,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114957,6 +117940,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114979,6 +117963,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115001,6 +117986,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115023,6 +118009,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115045,6 +118032,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115067,6 +118055,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115089,6 +118078,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115111,6 +118101,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115133,6 +118124,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115155,6 +118147,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115177,6 +118170,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115199,6 +118193,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115221,6 +118216,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115243,6 +118239,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115265,6 +118262,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115287,6 +118285,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115309,6 +118308,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115331,6 +118331,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115353,6 +118354,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115375,6 +118377,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115397,6 +118400,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115419,6 +118423,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115441,6 +118446,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115463,6 +118469,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115485,6 +118492,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115507,6 +118515,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115529,6 +118538,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115551,6 +118561,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115573,6 +118584,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115595,6 +118607,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115617,6 +118630,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115639,6 +118653,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115661,6 +118676,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115683,6 +118699,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115705,6 +118722,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115727,6 +118745,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115749,6 +118768,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115771,6 +118791,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115793,6 +118814,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115815,6 +118837,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115837,6 +118860,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115859,6 +118883,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115881,6 +118906,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115903,6 +118929,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115925,6 +118952,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115947,6 +118975,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115969,6 +118998,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115991,6 +119021,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116013,6 +119044,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116035,6 +119067,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116057,6 +119090,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116079,6 +119113,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116101,6 +119136,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116123,6 +119159,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116145,6 +119182,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116167,6 +119205,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116189,6 +119228,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116211,6 +119251,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116233,6 +119274,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116255,6 +119297,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116277,6 +119320,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116299,6 +119343,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116321,6 +119366,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116343,6 +119389,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116365,6 +119412,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116387,6 +119435,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116409,6 +119458,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116431,6 +119481,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116453,6 +119504,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116475,6 +119527,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116497,6 +119550,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116519,6 +119573,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116541,6 +119596,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116563,6 +119619,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116585,6 +119642,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116607,6 +119665,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116629,6 +119688,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116651,6 +119711,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116673,6 +119734,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116695,6 +119757,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116717,6 +119780,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116739,6 +119803,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116761,6 +119826,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116783,6 +119849,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116805,6 +119872,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116827,6 +119895,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116849,6 +119918,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116871,6 +119941,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116893,6 +119964,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116915,6 +119987,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116937,6 +120010,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116959,6 +120033,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116981,6 +120056,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117003,6 +120079,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117025,6 +120102,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117047,6 +120125,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117069,6 +120148,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117091,6 +120171,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117113,6 +120194,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117135,6 +120217,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117157,6 +120240,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117179,6 +120263,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117201,6 +120286,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117223,6 +120309,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117245,6 +120332,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117267,6 +120355,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117289,6 +120378,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117311,6 +120401,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117333,6 +120424,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117355,6 +120447,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117377,6 +120470,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117399,6 +120493,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117421,6 +120516,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117443,6 +120539,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117465,6 +120562,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117487,6 +120585,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117509,6 +120608,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117531,6 +120631,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117553,6 +120654,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117575,6 +120677,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117597,6 +120700,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117619,6 +120723,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117641,6 +120746,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117663,6 +120769,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117685,6 +120792,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117707,6 +120815,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117729,6 +120838,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117751,6 +120861,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117773,6 +120884,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117795,6 +120907,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117817,6 +120930,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117839,6 +120953,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117861,6 +120976,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117883,6 +120999,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117905,6 +121022,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117927,6 +121045,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117949,6 +121068,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117971,6 +121091,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117993,6 +121114,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118015,6 +121137,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118037,6 +121160,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118059,6 +121183,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118081,6 +121206,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118103,6 +121229,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118125,6 +121252,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118147,6 +121275,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118169,6 +121298,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118191,6 +121321,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118213,6 +121344,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118235,6 +121367,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118257,6 +121390,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118279,6 +121413,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118301,6 +121436,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118323,6 +121459,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118345,6 +121482,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118367,6 +121505,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118389,6 +121528,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118411,6 +121551,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118433,6 +121574,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118455,6 +121597,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118477,6 +121620,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118499,6 +121643,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118521,6 +121666,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118543,6 +121689,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118565,6 +121712,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118587,6 +121735,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118609,6 +121758,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118631,6 +121781,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118653,6 +121804,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118675,6 +121827,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118697,6 +121850,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118719,6 +121873,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118741,6 +121896,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118763,6 +121919,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118785,6 +121942,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118807,6 +121965,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118829,6 +121988,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118851,6 +122011,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118873,6 +122034,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118895,6 +122057,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118917,6 +122080,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118939,6 +122103,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118961,6 +122126,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118983,6 +122149,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119005,6 +122172,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119027,6 +122195,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119049,6 +122218,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119071,6 +122241,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119093,6 +122264,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119115,6 +122287,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119137,6 +122310,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119159,6 +122333,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119181,6 +122356,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119203,6 +122379,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119225,6 +122402,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119247,6 +122425,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119269,6 +122448,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119291,6 +122471,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119313,6 +122494,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119335,6 +122517,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119357,6 +122540,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119379,6 +122563,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119401,6 +122586,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119423,6 +122609,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119445,6 +122632,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119467,6 +122655,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119489,6 +122678,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119511,6 +122701,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119533,6 +122724,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119555,6 +122747,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119577,6 +122770,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119599,6 +122793,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119621,6 +122816,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119643,6 +122839,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119665,6 +122862,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119687,6 +122885,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119709,6 +122908,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119731,6 +122931,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119753,6 +122954,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119775,6 +122977,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119797,6 +123000,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119819,6 +123023,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119841,6 +123046,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119863,6 +123069,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119885,6 +123092,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119907,6 +123115,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119929,6 +123138,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119951,6 +123161,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119973,6 +123184,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119995,6 +123207,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120017,6 +123230,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120039,6 +123253,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120061,6 +123276,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120083,6 +123299,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120105,6 +123322,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120127,6 +123345,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120149,6 +123368,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120171,6 +123391,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120193,6 +123414,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120215,6 +123437,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120237,6 +123460,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120259,6 +123483,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120281,6 +123506,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120303,6 +123529,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120325,6 +123552,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120347,6 +123575,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120369,6 +123598,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120391,6 +123621,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120413,6 +123644,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120435,6 +123667,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120457,6 +123690,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120479,6 +123713,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120501,6 +123736,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120523,6 +123759,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120545,6 +123782,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120567,6 +123805,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120589,6 +123828,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120611,6 +123851,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120633,6 +123874,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120655,6 +123897,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120677,6 +123920,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120699,6 +123943,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120721,6 +123966,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120743,6 +123989,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120765,6 +124012,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120787,6 +124035,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120809,6 +124058,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120831,6 +124081,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120853,6 +124104,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120875,6 +124127,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120897,6 +124150,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120919,6 +124173,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120941,6 +124196,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120963,6 +124219,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120985,6 +124242,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121007,6 +124265,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121029,6 +124288,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121051,6 +124311,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121073,6 +124334,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121095,6 +124357,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121117,6 +124380,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121139,6 +124403,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121161,6 +124426,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121183,6 +124449,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121205,6 +124472,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121227,6 +124495,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121249,6 +124518,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121271,6 +124541,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121293,6 +124564,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121315,6 +124587,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121337,6 +124610,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121359,6 +124633,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121381,6 +124656,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121403,6 +124679,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121425,6 +124702,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121447,6 +124725,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121469,6 +124748,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121491,6 +124771,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121513,6 +124794,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121535,6 +124817,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121557,6 +124840,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121579,6 +124863,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121601,6 +124886,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121623,6 +124909,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121645,6 +124932,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121667,6 +124955,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121689,6 +124978,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121711,6 +125001,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121733,6 +125024,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121755,6 +125047,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121777,6 +125070,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121799,6 +125093,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121821,6 +125116,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121843,6 +125139,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121865,6 +125162,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121887,6 +125185,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121909,6 +125208,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121931,6 +125231,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121953,6 +125254,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121975,6 +125277,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121997,6 +125300,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122019,6 +125323,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122041,6 +125346,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122063,6 +125369,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122085,6 +125392,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122107,6 +125415,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122129,6 +125438,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122151,6 +125461,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122173,6 +125484,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122195,6 +125507,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122217,6 +125530,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122239,6 +125553,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122261,6 +125576,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122283,6 +125599,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122305,6 +125622,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122327,6 +125645,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122349,6 +125668,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122371,6 +125691,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122393,6 +125714,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122415,6 +125737,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122437,6 +125760,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122459,6 +125783,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122481,6 +125806,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122503,6 +125829,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122525,6 +125852,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122547,6 +125875,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122569,6 +125898,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122591,6 +125921,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122613,6 +125944,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122635,6 +125967,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122657,6 +125990,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122679,6 +126013,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122701,6 +126036,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122723,6 +126059,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122745,6 +126082,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122767,6 +126105,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122789,6 +126128,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122811,6 +126151,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122833,6 +126174,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122855,6 +126197,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122877,6 +126220,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122899,6 +126243,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122921,6 +126266,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122943,6 +126289,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122965,6 +126312,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122987,6 +126335,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123009,6 +126358,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123031,6 +126381,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123053,6 +126404,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123075,6 +126427,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123097,6 +126450,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123119,6 +126473,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123141,6 +126496,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123163,6 +126519,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123185,6 +126542,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123207,6 +126565,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123229,6 +126588,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123251,6 +126611,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123273,6 +126634,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123295,6 +126657,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123317,6 +126680,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123339,6 +126703,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123361,6 +126726,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123383,6 +126749,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123405,6 +126772,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123427,6 +126795,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123449,6 +126818,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123471,6 +126841,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123493,6 +126864,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123515,6 +126887,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123537,6 +126910,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123559,6 +126933,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123581,6 +126956,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123603,6 +126979,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123625,6 +127002,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123647,6 +127025,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123669,6 +127048,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123691,6 +127071,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123713,6 +127094,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123735,6 +127117,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123757,6 +127140,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123779,6 +127163,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123801,6 +127186,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123823,6 +127209,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123845,6 +127232,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123867,6 +127255,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123889,6 +127278,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123911,6 +127301,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123933,6 +127324,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123955,6 +127347,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123977,6 +127370,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123999,6 +127393,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124021,6 +127416,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124043,6 +127439,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124065,6 +127462,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124087,6 +127485,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124109,6 +127508,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124131,6 +127531,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124153,6 +127554,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124175,6 +127577,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124197,6 +127600,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124219,6 +127623,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124241,6 +127646,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124263,6 +127669,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124285,6 +127692,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124307,6 +127715,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124329,6 +127738,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124351,6 +127761,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124373,6 +127784,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124395,6 +127807,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124417,6 +127830,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124439,6 +127853,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124461,6 +127876,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124483,6 +127899,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124505,6 +127922,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124527,6 +127945,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124549,6 +127968,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124571,6 +127991,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124593,6 +128014,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124615,6 +128037,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124637,6 +128060,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124659,6 +128083,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124681,6 +128106,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124703,6 +128129,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124725,6 +128152,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124747,6 +128175,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124769,6 +128198,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124791,6 +128221,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124813,6 +128244,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124835,6 +128267,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124857,6 +128290,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124879,6 +128313,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124901,6 +128336,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124923,6 +128359,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124945,6 +128382,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124967,6 +128405,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124989,6 +128428,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125011,6 +128451,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125033,6 +128474,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125055,6 +128497,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125077,6 +128520,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125099,6 +128543,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125121,6 +128566,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125143,6 +128589,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125165,6 +128612,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125187,6 +128635,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125209,6 +128658,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125231,6 +128681,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125253,6 +128704,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125275,6 +128727,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125297,6 +128750,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125319,6 +128773,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125341,6 +128796,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125363,6 +128819,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125385,6 +128842,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125407,6 +128865,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125429,6 +128888,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125451,6 +128911,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125473,6 +128934,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125495,6 +128957,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125517,6 +128980,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125539,6 +129003,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125561,6 +129026,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125583,6 +129049,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125605,6 +129072,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125627,6 +129095,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125649,6 +129118,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125671,6 +129141,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125693,6 +129164,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125715,6 +129187,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125737,6 +129210,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125759,6 +129233,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125781,6 +129256,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125803,6 +129279,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125825,6 +129302,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125847,6 +129325,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125869,6 +129348,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125891,6 +129371,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125913,6 +129394,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125935,6 +129417,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125957,6 +129440,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125979,6 +129463,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126001,6 +129486,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126023,6 +129509,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126045,6 +129532,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126067,6 +129555,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126089,6 +129578,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126111,6 +129601,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126133,6 +129624,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126155,6 +129647,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126177,6 +129670,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126199,6 +129693,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126221,6 +129716,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126243,6 +129739,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126265,6 +129762,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126287,6 +129785,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126309,6 +129808,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126331,6 +129831,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126353,6 +129854,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126375,6 +129877,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126397,6 +129900,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126419,6 +129923,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126441,6 +129946,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126463,6 +129969,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126485,6 +129992,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126507,6 +130015,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126529,6 +130038,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126551,6 +130061,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126573,6 +130084,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126595,6 +130107,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126617,6 +130130,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126639,6 +130153,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126661,6 +130176,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126683,6 +130199,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126705,6 +130222,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126727,6 +130245,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126749,6 +130268,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126771,6 +130291,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126793,6 +130314,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126815,6 +130337,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126837,6 +130360,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126859,6 +130383,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126881,6 +130406,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126903,6 +130429,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126925,6 +130452,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126947,6 +130475,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126969,6 +130498,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126991,6 +130521,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127013,6 +130544,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127035,6 +130567,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127057,6 +130590,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127079,6 +130613,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127101,6 +130636,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127123,6 +130659,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127145,6 +130682,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127167,6 +130705,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127189,6 +130728,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127211,6 +130751,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127233,6 +130774,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127255,6 +130797,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127277,6 +130820,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127299,6 +130843,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127321,6 +130866,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127343,6 +130889,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127365,6 +130912,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127387,6 +130935,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127409,6 +130958,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127431,6 +130981,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127453,6 +131004,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127475,6 +131027,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127497,6 +131050,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127519,6 +131073,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127541,6 +131096,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127563,6 +131119,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127585,6 +131142,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127607,6 +131165,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127629,6 +131188,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127651,6 +131211,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127673,6 +131234,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127695,6 +131257,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127717,6 +131280,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127739,6 +131303,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127761,6 +131326,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127783,6 +131349,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127805,6 +131372,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127827,6 +131395,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127849,6 +131418,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127871,6 +131441,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127893,6 +131464,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127915,6 +131487,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127937,6 +131510,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127959,6 +131533,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127981,6 +131556,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128003,6 +131579,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128025,6 +131602,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128047,6 +131625,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128069,6 +131648,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128091,6 +131671,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128113,6 +131694,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128135,6 +131717,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128157,6 +131740,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128179,6 +131763,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128201,6 +131786,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128223,6 +131809,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128245,6 +131832,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128267,6 +131855,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128289,6 +131878,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128311,6 +131901,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128333,6 +131924,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128355,6 +131947,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128377,6 +131970,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128399,6 +131993,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128421,6 +132016,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128443,6 +132039,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128465,6 +132062,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128487,6 +132085,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128509,6 +132108,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128531,6 +132131,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128553,6 +132154,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128575,6 +132177,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128597,6 +132200,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128619,6 +132223,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128641,6 +132246,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128663,6 +132269,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128685,6 +132292,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128707,6 +132315,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128729,6 +132338,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128751,6 +132361,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128773,6 +132384,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128795,6 +132407,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128817,6 +132430,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128839,6 +132453,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128861,6 +132476,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128883,6 +132499,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128905,6 +132522,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128927,6 +132545,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128949,6 +132568,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128971,6 +132591,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128993,6 +132614,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129015,6 +132637,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129037,6 +132660,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129059,6 +132683,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129081,6 +132706,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129103,6 +132729,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129125,6 +132752,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129147,6 +132775,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129169,6 +132798,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129191,6 +132821,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129213,6 +132844,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129235,6 +132867,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129257,6 +132890,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129279,6 +132913,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129301,6 +132936,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129323,6 +132959,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129345,6 +132982,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129367,6 +133005,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129389,6 +133028,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129411,6 +133051,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129433,6 +133074,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129455,6 +133097,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129477,6 +133120,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129499,6 +133143,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129521,6 +133166,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129543,6 +133189,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129565,6 +133212,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129587,6 +133235,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129609,6 +133258,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129631,6 +133281,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129653,6 +133304,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129675,6 +133327,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129697,6 +133350,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129719,6 +133373,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129741,6 +133396,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129763,6 +133419,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129785,6 +133442,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129807,6 +133465,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129829,6 +133488,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129851,6 +133511,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129873,6 +133534,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129895,6 +133557,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129917,6 +133580,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129939,6 +133603,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129961,6 +133626,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129983,6 +133649,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130005,6 +133672,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130027,6 +133695,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130049,6 +133718,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130071,6 +133741,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130093,6 +133764,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130115,6 +133787,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130137,6 +133810,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130159,6 +133833,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130181,6 +133856,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130203,6 +133879,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130225,6 +133902,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130247,6 +133925,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130269,6 +133948,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130291,6 +133971,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130313,6 +133994,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130335,6 +134017,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130357,6 +134040,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130379,6 +134063,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130401,6 +134086,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130423,6 +134109,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130445,6 +134132,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130467,6 +134155,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130489,6 +134178,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130511,6 +134201,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130533,6 +134224,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130555,6 +134247,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130577,6 +134270,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130599,6 +134293,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130621,6 +134316,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130643,6 +134339,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130665,6 +134362,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130687,6 +134385,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130709,6 +134408,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130731,6 +134431,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130753,6 +134454,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130775,6 +134477,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130797,6 +134500,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130819,6 +134523,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130841,6 +134546,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130863,6 +134569,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130885,6 +134592,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130907,6 +134615,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130929,6 +134638,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130951,6 +134661,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130973,6 +134684,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130995,6 +134707,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131017,6 +134730,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131039,6 +134753,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131061,6 +134776,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131083,6 +134799,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131105,6 +134822,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131127,6 +134845,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131149,6 +134868,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131171,6 +134891,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131193,6 +134914,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131215,6 +134937,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131237,6 +134960,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131259,6 +134983,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131281,6 +135006,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131303,6 +135029,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131325,6 +135052,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131347,6 +135075,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131369,6 +135098,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131391,6 +135121,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131413,6 +135144,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131435,6 +135167,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131457,6 +135190,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131479,6 +135213,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131501,6 +135236,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131523,6 +135259,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131545,6 +135282,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131567,6 +135305,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131589,6 +135328,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131611,6 +135351,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131633,6 +135374,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131655,6 +135397,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131677,6 +135420,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131699,6 +135443,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131721,6 +135466,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131743,6 +135489,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131765,6 +135512,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131787,6 +135535,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131809,6 +135558,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131831,6 +135581,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131853,6 +135604,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131875,6 +135627,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131897,6 +135650,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131919,6 +135673,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131941,6 +135696,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131963,6 +135719,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131985,6 +135742,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132007,6 +135765,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132029,6 +135788,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132051,6 +135811,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132073,6 +135834,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132095,6 +135857,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132117,6 +135880,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132139,6 +135903,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132161,6 +135926,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132183,6 +135949,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132205,6 +135972,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132227,6 +135995,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132249,6 +136018,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132271,6 +136041,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132293,6 +136064,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132315,6 +136087,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132337,6 +136110,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132359,6 +136133,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132381,6 +136156,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132403,6 +136179,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132425,6 +136202,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132447,6 +136225,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132469,6 +136248,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132491,6 +136271,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132513,6 +136294,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132535,6 +136317,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132557,6 +136340,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132579,6 +136363,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132601,6 +136386,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132623,6 +136409,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132645,6 +136432,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132667,6 +136455,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132689,6 +136478,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132711,6 +136501,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132733,6 +136524,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132755,6 +136547,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132777,6 +136570,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132799,6 +136593,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132821,6 +136616,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132843,6 +136639,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132865,6 +136662,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132887,6 +136685,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132909,6 +136708,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132931,6 +136731,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132953,6 +136754,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132975,6 +136777,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132997,6 +136800,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133019,6 +136823,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133041,6 +136846,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133063,6 +136869,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133085,6 +136892,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133107,6 +136915,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133129,6 +136938,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133151,6 +136961,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133173,6 +136984,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133195,6 +137007,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133217,6 +137030,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133239,6 +137053,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133261,6 +137076,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133283,6 +137099,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133305,6 +137122,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133327,6 +137145,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133349,6 +137168,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133371,6 +137191,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133393,6 +137214,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133415,6 +137237,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133437,6 +137260,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133459,6 +137283,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133481,6 +137306,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133503,6 +137329,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133525,6 +137352,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133547,6 +137375,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133569,6 +137398,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133591,6 +137421,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133613,6 +137444,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133635,6 +137467,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133657,6 +137490,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133679,6 +137513,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133701,6 +137536,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133723,6 +137559,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133745,6 +137582,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133767,6 +137605,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133789,6 +137628,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133811,6 +137651,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133833,6 +137674,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133855,6 +137697,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133877,6 +137720,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133899,6 +137743,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133921,6 +137766,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133943,6 +137789,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133965,6 +137812,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133987,6 +137835,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134009,6 +137858,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134031,6 +137881,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134053,6 +137904,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134075,6 +137927,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134097,6 +137950,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134119,6 +137973,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134141,6 +137996,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134163,6 +138019,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134185,6 +138042,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134207,6 +138065,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134229,6 +138088,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134251,6 +138111,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134273,6 +138134,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134295,6 +138157,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134317,6 +138180,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134339,6 +138203,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134361,6 +138226,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134383,6 +138249,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134405,6 +138272,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134427,6 +138295,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134449,6 +138318,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134471,6 +138341,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134493,6 +138364,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134515,6 +138387,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134537,6 +138410,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134559,6 +138433,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134581,6 +138456,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134603,6 +138479,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134625,6 +138502,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134647,6 +138525,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134669,6 +138548,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134691,6 +138571,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134713,6 +138594,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134735,6 +138617,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134757,6 +138640,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134779,6 +138663,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134801,6 +138686,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134823,6 +138709,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134845,6 +138732,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134867,6 +138755,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134889,6 +138778,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134911,6 +138801,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134933,6 +138824,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134955,6 +138847,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134977,6 +138870,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134999,6 +138893,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135021,6 +138916,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135043,6 +138939,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135065,6 +138962,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135087,6 +138985,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135109,6 +139008,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135131,6 +139031,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135153,6 +139054,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135175,6 +139077,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135197,6 +139100,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135219,6 +139123,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135241,6 +139146,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135263,6 +139169,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135285,6 +139192,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135307,6 +139215,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135329,6 +139238,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135351,6 +139261,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135373,6 +139284,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135395,6 +139307,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135417,6 +139330,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135439,6 +139353,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135461,6 +139376,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135483,6 +139399,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135505,6 +139422,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135527,6 +139445,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135549,6 +139468,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135571,6 +139491,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135593,6 +139514,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135615,6 +139537,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135637,6 +139560,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135659,6 +139583,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135681,6 +139606,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135703,6 +139629,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135725,6 +139652,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135747,6 +139675,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135769,6 +139698,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135791,6 +139721,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135813,6 +139744,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135835,6 +139767,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135857,6 +139790,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135879,6 +139813,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135901,6 +139836,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135923,6 +139859,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135945,6 +139882,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135967,6 +139905,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135989,6 +139928,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136011,6 +139951,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136033,6 +139974,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136055,6 +139997,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136077,6 +140020,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136099,6 +140043,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136121,6 +140066,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136143,6 +140089,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136165,6 +140112,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136187,6 +140135,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136209,6 +140158,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136231,6 +140181,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136253,6 +140204,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136275,6 +140227,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136297,6 +140250,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136319,6 +140273,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136341,6 +140296,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136363,6 +140319,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136385,6 +140342,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136407,6 +140365,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136429,6 +140388,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136451,6 +140411,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136473,6 +140434,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136495,6 +140457,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136517,6 +140480,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136539,6 +140503,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136561,6 +140526,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136583,6 +140549,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136605,6 +140572,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136627,6 +140595,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136649,6 +140618,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136671,6 +140641,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136693,6 +140664,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136715,6 +140687,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136737,6 +140710,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136759,6 +140733,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136781,6 +140756,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136803,6 +140779,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136825,6 +140802,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136847,6 +140825,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136869,6 +140848,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136891,6 +140871,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136913,6 +140894,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136935,6 +140917,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136957,6 +140940,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136979,6 +140963,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137001,6 +140986,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137023,6 +141009,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137045,6 +141032,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137067,6 +141055,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137089,6 +141078,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137111,6 +141101,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137133,6 +141124,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137155,6 +141147,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137177,6 +141170,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137199,6 +141193,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137221,6 +141216,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137243,6 +141239,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137265,6 +141262,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137287,6 +141285,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137309,6 +141308,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137331,6 +141331,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137353,6 +141354,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137375,6 +141377,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137397,6 +141400,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137419,6 +141423,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137441,6 +141446,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137463,6 +141469,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137485,6 +141492,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137507,6 +141515,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137529,6 +141538,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137551,6 +141561,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137573,6 +141584,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137595,6 +141607,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137617,6 +141630,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137639,6 +141653,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137661,6 +141676,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137683,6 +141699,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137705,6 +141722,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137727,6 +141745,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137749,6 +141768,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137771,6 +141791,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137793,6 +141814,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137815,6 +141837,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137837,6 +141860,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137859,6 +141883,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137881,6 +141906,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137903,6 +141929,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137925,6 +141952,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137947,6 +141975,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137969,6 +141998,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137991,6 +142021,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138013,6 +142044,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138035,6 +142067,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138057,6 +142090,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138079,6 +142113,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138101,6 +142136,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138123,6 +142159,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138145,6 +142182,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138167,6 +142205,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138189,6 +142228,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138211,6 +142251,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138233,6 +142274,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138255,6 +142297,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138277,6 +142320,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138299,6 +142343,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138321,6 +142366,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138343,6 +142389,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138365,6 +142412,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138387,6 +142435,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138409,6 +142458,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138431,6 +142481,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138453,6 +142504,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138475,6 +142527,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138497,6 +142550,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138519,6 +142573,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138541,6 +142596,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138563,6 +142619,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138585,6 +142642,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138607,6 +142665,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138629,6 +142688,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138651,6 +142711,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138673,6 +142734,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138695,6 +142757,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138717,6 +142780,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138739,6 +142803,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138761,6 +142826,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138783,6 +142849,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138805,6 +142872,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138827,6 +142895,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138849,6 +142918,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138871,6 +142941,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138893,6 +142964,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138915,6 +142987,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138937,6 +143010,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138959,6 +143033,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138981,6 +143056,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139003,6 +143079,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139025,6 +143102,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139047,6 +143125,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139069,6 +143148,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139091,6 +143171,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139113,6 +143194,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139135,6 +143217,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139157,6 +143240,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139179,6 +143263,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139201,6 +143286,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139223,6 +143309,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139245,6 +143332,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139267,6 +143355,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139289,6 +143378,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139311,6 +143401,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139333,6 +143424,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139355,6 +143447,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139377,6 +143470,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139399,6 +143493,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139421,6 +143516,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139443,6 +143539,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139465,6 +143562,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139487,6 +143585,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139509,6 +143608,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139531,6 +143631,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139553,6 +143654,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139575,6 +143677,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139597,6 +143700,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139619,6 +143723,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139641,6 +143746,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139663,6 +143769,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139685,6 +143792,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139707,6 +143815,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139729,6 +143838,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139751,6 +143861,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139773,6 +143884,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139795,6 +143907,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139817,6 +143930,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139839,6 +143953,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139861,6 +143976,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139883,6 +143999,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139905,6 +144022,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139927,6 +144045,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139949,6 +144068,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139971,6 +144091,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139993,6 +144114,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140015,6 +144137,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140037,6 +144160,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140059,6 +144183,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140081,6 +144206,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140103,6 +144229,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140125,6 +144252,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140147,6 +144275,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140169,6 +144298,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140191,6 +144321,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140213,6 +144344,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140235,6 +144367,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140257,6 +144390,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140279,6 +144413,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140301,6 +144436,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140323,6 +144459,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140345,6 +144482,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140367,6 +144505,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140389,6 +144528,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140411,6 +144551,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140433,6 +144574,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140455,6 +144597,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140477,6 +144620,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140499,6 +144643,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140521,6 +144666,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140543,6 +144689,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140565,6 +144712,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140587,6 +144735,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140609,6 +144758,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140631,6 +144781,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140653,6 +144804,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140675,6 +144827,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140697,6 +144850,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140719,6 +144873,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140741,6 +144896,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140763,6 +144919,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140785,6 +144942,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140807,6 +144965,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140829,6 +144988,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140851,6 +145011,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140873,6 +145034,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140895,6 +145057,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140917,6 +145080,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140939,6 +145103,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140961,6 +145126,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140983,6 +145149,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141005,6 +145172,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141027,6 +145195,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141049,6 +145218,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141071,6 +145241,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141093,6 +145264,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141115,6 +145287,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141137,6 +145310,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141159,6 +145333,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141181,6 +145356,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141203,6 +145379,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141225,6 +145402,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141247,6 +145425,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141269,6 +145448,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141291,6 +145471,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141313,6 +145494,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141335,6 +145517,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141357,6 +145540,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141379,6 +145563,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141401,6 +145586,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141423,6 +145609,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141445,6 +145632,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141467,6 +145655,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141489,6 +145678,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141511,6 +145701,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141533,6 +145724,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141555,6 +145747,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141577,6 +145770,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141599,6 +145793,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141621,6 +145816,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141643,6 +145839,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141665,6 +145862,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141687,6 +145885,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141709,6 +145908,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141731,6 +145931,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141753,6 +145954,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141775,6 +145977,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141797,6 +146000,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141819,6 +146023,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141841,6 +146046,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141863,6 +146069,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141885,6 +146092,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141907,6 +146115,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141929,6 +146138,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141951,6 +146161,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141973,6 +146184,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141995,6 +146207,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142017,6 +146230,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142039,6 +146253,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142061,6 +146276,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142083,6 +146299,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142105,6 +146322,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142127,6 +146345,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142149,6 +146368,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142171,6 +146391,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142193,6 +146414,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142215,6 +146437,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142237,6 +146460,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142259,6 +146483,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142281,6 +146506,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142303,6 +146529,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142325,6 +146552,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142347,6 +146575,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142369,6 +146598,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142391,6 +146621,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142413,6 +146644,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142435,6 +146667,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142457,6 +146690,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142479,6 +146713,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142501,6 +146736,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142523,6 +146759,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142545,6 +146782,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142567,6 +146805,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142589,6 +146828,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142611,6 +146851,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142633,6 +146874,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142655,6 +146897,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142677,6 +146920,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142699,6 +146943,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142721,6 +146966,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142743,6 +146989,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142765,6 +147012,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142787,6 +147035,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142809,6 +147058,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142831,6 +147081,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142853,6 +147104,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142875,6 +147127,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142897,6 +147150,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142919,6 +147173,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142941,6 +147196,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142963,6 +147219,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142985,6 +147242,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143007,6 +147265,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143029,6 +147288,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143051,6 +147311,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143073,6 +147334,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143095,6 +147357,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143117,6 +147380,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143139,6 +147403,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143161,6 +147426,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143183,6 +147449,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143205,6 +147472,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143227,6 +147495,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143249,6 +147518,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143271,6 +147541,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143293,6 +147564,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143315,6 +147587,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143337,6 +147610,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143359,6 +147633,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143381,6 +147656,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143403,6 +147679,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143425,6 +147702,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143447,6 +147725,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143469,6 +147748,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143491,6 +147771,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143513,6 +147794,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143535,6 +147817,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143557,6 +147840,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143579,6 +147863,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143601,6 +147886,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143623,6 +147909,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143645,6 +147932,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143667,6 +147955,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143689,6 +147978,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143711,6 +148001,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143733,6 +148024,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143755,6 +148047,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143777,6 +148070,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143799,6 +148093,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143821,6 +148116,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143843,6 +148139,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143865,6 +148162,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143887,6 +148185,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143909,6 +148208,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143931,6 +148231,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143953,6 +148254,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143975,6 +148277,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143997,6 +148300,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144019,6 +148323,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144041,6 +148346,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144063,6 +148369,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144085,6 +148392,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144107,6 +148415,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144129,6 +148438,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144151,6 +148461,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144173,6 +148484,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144195,6 +148507,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144217,6 +148530,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144239,6 +148553,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144261,6 +148576,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144283,6 +148599,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144305,6 +148622,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144327,6 +148645,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144349,6 +148668,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144371,6 +148691,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144393,6 +148714,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144415,6 +148737,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144437,6 +148760,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144459,6 +148783,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144481,6 +148806,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144503,6 +148829,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144525,6 +148852,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144547,6 +148875,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144569,6 +148898,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144591,6 +148921,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144613,6 +148944,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144635,6 +148967,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144657,6 +148990,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144679,6 +149013,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144701,6 +149036,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144723,6 +149059,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144745,6 +149082,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144767,6 +149105,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144789,6 +149128,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144811,6 +149151,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144833,6 +149174,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144855,6 +149197,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144877,6 +149220,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144899,6 +149243,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144921,6 +149266,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144943,6 +149289,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144965,6 +149312,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144987,6 +149335,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145009,6 +149358,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145031,6 +149381,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145053,6 +149404,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145075,6 +149427,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145097,6 +149450,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145119,6 +149473,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145141,6 +149496,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145163,6 +149519,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145185,6 +149542,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145207,6 +149565,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145229,6 +149588,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145251,6 +149611,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145273,6 +149634,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145295,6 +149657,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145317,6 +149680,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145339,6 +149703,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145361,6 +149726,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145383,6 +149749,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145405,6 +149772,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145427,6 +149795,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145449,6 +149818,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145471,6 +149841,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145493,6 +149864,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145515,6 +149887,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145537,6 +149910,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145559,6 +149933,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145581,6 +149956,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145603,6 +149979,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145625,6 +150002,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145647,6 +150025,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145669,6 +150048,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145691,6 +150071,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145713,6 +150094,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145735,6 +150117,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145757,6 +150140,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145779,6 +150163,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145801,6 +150186,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145823,6 +150209,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145845,6 +150232,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145867,6 +150255,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145889,6 +150278,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145911,6 +150301,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145933,6 +150324,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145955,6 +150347,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145977,6 +150370,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145999,6 +150393,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146021,6 +150416,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146043,6 +150439,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146065,6 +150462,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146087,6 +150485,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146109,6 +150508,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146131,6 +150531,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146153,6 +150554,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146175,6 +150577,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146197,6 +150600,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146219,6 +150623,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146241,6 +150646,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146263,6 +150669,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146285,6 +150692,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146307,6 +150715,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146329,6 +150738,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146351,6 +150761,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146373,6 +150784,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146395,6 +150807,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146417,6 +150830,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146439,6 +150853,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146461,6 +150876,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146483,6 +150899,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146505,6 +150922,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146527,6 +150945,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146549,6 +150968,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146571,6 +150991,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146593,6 +151014,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146615,6 +151037,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146637,6 +151060,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146659,6 +151083,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146681,6 +151106,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146703,6 +151129,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146725,6 +151152,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146747,6 +151175,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146769,6 +151198,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146791,6 +151221,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146813,6 +151244,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146835,6 +151267,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146857,6 +151290,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146879,6 +151313,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146901,6 +151336,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146923,6 +151359,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146945,6 +151382,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146967,6 +151405,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146989,6 +151428,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147011,6 +151451,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147033,6 +151474,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147055,6 +151497,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147077,6 +151520,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147099,6 +151543,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147121,6 +151566,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147143,6 +151589,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147165,6 +151612,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147187,6 +151635,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147209,6 +151658,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147231,6 +151681,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147253,6 +151704,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147275,6 +151727,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147297,6 +151750,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147319,6 +151773,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147341,6 +151796,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147363,6 +151819,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147385,6 +151842,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147407,6 +151865,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147429,6 +151888,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147451,6 +151911,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147473,6 +151934,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147495,6 +151957,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147517,6 +151980,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147539,6 +152003,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147561,6 +152026,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147583,6 +152049,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147605,6 +152072,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147627,6 +152095,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147649,6 +152118,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147671,6 +152141,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147693,6 +152164,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147715,6 +152187,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147737,6 +152210,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147759,6 +152233,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147781,6 +152256,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147803,6 +152279,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147825,6 +152302,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147847,6 +152325,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147869,6 +152348,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147891,6 +152371,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147913,6 +152394,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147935,6 +152417,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147957,6 +152440,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147979,6 +152463,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148001,6 +152486,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148023,6 +152509,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148045,6 +152532,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148067,6 +152555,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148089,6 +152578,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148111,6 +152601,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148133,6 +152624,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148155,6 +152647,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148177,6 +152670,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148199,6 +152693,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148221,6 +152716,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148243,6 +152739,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148265,6 +152762,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148287,6 +152785,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148309,6 +152808,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148331,6 +152831,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148353,6 +152854,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148375,6 +152877,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148397,6 +152900,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148419,6 +152923,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148441,6 +152946,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148463,6 +152969,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148485,6 +152992,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148507,6 +153015,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148529,6 +153038,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148551,6 +153061,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148573,6 +153084,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148595,6 +153107,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148617,6 +153130,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148639,6 +153153,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148661,6 +153176,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148683,6 +153199,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148705,6 +153222,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148727,6 +153245,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148749,6 +153268,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148771,6 +153291,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148793,6 +153314,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148815,6 +153337,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148837,6 +153360,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148859,6 +153383,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148881,6 +153406,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148903,6 +153429,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148925,6 +153452,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148947,6 +153475,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148969,6 +153498,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148991,6 +153521,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149013,6 +153544,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149035,6 +153567,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149057,6 +153590,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149079,6 +153613,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149101,6 +153636,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149123,6 +153659,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149145,6 +153682,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149167,6 +153705,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149189,6 +153728,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149211,6 +153751,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149233,6 +153774,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149255,6 +153797,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149277,6 +153820,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149299,6 +153843,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149321,6 +153866,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149343,6 +153889,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149365,6 +153912,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149387,6 +153935,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149409,6 +153958,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149431,6 +153981,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149453,6 +154004,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149475,6 +154027,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149497,6 +154050,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149519,6 +154073,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149541,6 +154096,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149563,6 +154119,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149585,6 +154142,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149607,6 +154165,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149629,6 +154188,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149651,6 +154211,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149673,6 +154234,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149695,6 +154257,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149717,6 +154280,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149739,6 +154303,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149761,6 +154326,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149783,6 +154349,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149805,6 +154372,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149827,6 +154395,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149849,6 +154418,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149871,6 +154441,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149893,6 +154464,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149915,6 +154487,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149937,6 +154510,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149959,6 +154533,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149981,6 +154556,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -150003,6 +154579,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -150025,6 +154602,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -150047,6 +154625,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false diff --git a/tools/run_tests/performance/bq_upload_result.py b/tools/run_tests/performance/bq_upload_result.py index 89d2a9b320fde3b83914593b5e025b1ca3be3a34..3bac1199a7bee21815410a89a650c162299d7a49 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 830b8c0849d44482abb7286909b79d677bb40901..1d91b61ba45fe8bd749cb6bb8647b44d99640e18 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)): diff --git a/tools/run_tests/python_utils/antagonist.py b/tools/run_tests/python_utils/antagonist.py index 857addfb38658a80f344a75d7526f8c5a1cc5ba0..111839ccf932073e78b7e9af99acd3d08521cf96 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 0869c5cee9bf932c3502168e737ab249f711f103..709fc121a9b1bb4b30661eab4949cd25c0e4a09f 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 3734f025d5f9408d4b3a00fe1d8d2668a85a1753..e013376295980f5520dc3d80126387b065e3765a 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 f3047431e2a554cf5cbf0c84d5ec9af1535ed4b4..5d812f28ee980a140b270b0bbaf6a6bc8614cea8 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 e9b3f7ff7957c4fdfbea8d1be2dbbbc96ba55176..dbd32efc0e8eab22abb94cb667177195f20e6c45 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 9dad60408f293b8eee552b314d6ba4abe724a5ab..131772f55fc48f381056c9d820f1b556318d8e02 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 654cf95a38c51a126035fca8eec69d4599066681..dd11a45e789b3d97a25c9b988e19bfdb4136bb25 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 0d5bec1d67f3b6f1292efc63d510e12ef95fbb48..ce4dfb863ead884be031d0ba8316b1302b7cabb0 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 4fb1d5fc7c2dc941cf44623bdde365c9cecb66b2..6bedc54941a5766b3110a7b5c6f2f0d5c8a9fea8 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, @@ -207,6 +209,8 @@ argp.add_argument('-b', '--benchmarks', 'bm_call_create', 'bm_error', 'bm_chttp2_hpack', + 'bm_chttp2_transport', + 'bm_pollset', 'bm_metadata', 'bm_fullstack_trickle', ], @@ -228,30 +232,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 ee4102c5913bc0bfa6f570ce843b0f8e3103a741..35d20be5b75d2abf58b37ed55316cf930fcbfd90 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 @@ -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 a94a615b8863aea920bb943acaed1b77972766a1..4eea02118e54682f5c6e26b36f53c7fdaa11966f 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 43b8f8184e23931c4758faaf3fc44ab4a3c4faa2..cba91a9a6323bd4a14b2a10a65ed5abc867cb466 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, diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index 47422451f8dfab8a84265d5b81faa182af3753cf..b9bf6e50373c10e12cb156734d4f2564a70cd13d 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 @@ -95,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 @@ -415,8 +417,8 @@ 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_%s' % _REPORT_SUFFIX, suite_name='aggregate_tests') diff --git a/tools/run_tests/sanity/check_sources_and_headers.py b/tools/run_tests/sanity/check_sources_and_headers.py index a86db02b80bf7841a952c78538b3e4dba05d0f1f..f2e0bfeb3d45dafa7abaffd4571063e999d1bff9 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_test_filtering.py b/tools/run_tests/sanity/check_test_filtering.py index 290a6e2ddf604bb63cd951489358bda72f516ab9..ba03f1120923e447d7509478a2850849fe5afc2d 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 e62f39081850bb9311f0de96d87592a6a2baa197..d247260dbbbb1351dff5e1916f9e9fdeb3ae98d4 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 afac10bf80e72b4a26f5e7ca9d2bd829b07c23c1..c3c3cbec767b96403b2479f38412bfee12df2300 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 e33ac12bd3bee5707967e71f7b35d11c29de44cc..bfd72222b660bf8c6708ab8e277ebe629b257d4d 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 cb1a33961e45a5cb05895c3c232ddefaba2faa56..6f4ada2f4fd23a6e341323f25f2f2b198ae71dee 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 e2be76e245ae9458c0ffdeac17818ced07ffd67a..b190ebde7a4f44d697b7eab4b23515755a6553d6 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 fdc46682223fed735454c3bb585bc8e0550b2f5d..0ec7efbbee6493da9e3b4778b8fee3e27730d13b 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 765fa098f92c5e4b9d9438859e4a1188c43167f1..e0c79072288285c7898769e8117089e1da6e3698 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 0000000000000000000000000000000000000000..9869f98a22e6507e64bc0bd927f782290d064edb --- /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 ad7bffd6b49a5a7cb124649867c863a469ea42d8..c8fcacf75b17371cc4f404f2fc30a6b8730727a2 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" @@ -1375,18 +1395,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server_test", "vcxproj\test {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} = {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "set_initial_connect_string_test", "vcxproj\test\set_initial_connect_string_test\set_initial_connect_string_test.vcxproj", "{4A48E5A5-2E69-ED6D-063C-C297180A54D0}" - ProjectSection(myProperties) = preProject - lib = "False" - EndProjectSection - ProjectSection(ProjectDependencies) = postProject - {E3110C46-A148-FF65-08FD-3324829BE7FE} = {E3110C46-A148-FF65-08FD-3324829BE7FE} - {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}") = "simple_request_bad_client_test", "vcxproj\test\simple_request_bad_client_test\simple_request_bad_client_test.vcxproj", "{63422647-93FA-46BB-4827-95473D9D503C}" ProjectSection(myProperties) = preProject lib = "False" @@ -1697,6 +1705,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 @@ -2065,6 +2089,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 @@ -3697,22 +3737,6 @@ Global {E765AC67-E4E5-C350-59A1-C6CA2BD9F64B}.Release-DLL|Win32.Build.0 = Release|Win32 {E765AC67-E4E5-C350-59A1-C6CA2BD9F64B}.Release-DLL|x64.ActiveCfg = Release|x64 {E765AC67-E4E5-C350-59A1-C6CA2BD9F64B}.Release-DLL|x64.Build.0 = Release|x64 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug|Win32.ActiveCfg = Debug|Win32 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug|x64.ActiveCfg = Debug|x64 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release|Win32.ActiveCfg = Release|Win32 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release|x64.ActiveCfg = Release|x64 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug|Win32.Build.0 = Debug|Win32 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug|x64.Build.0 = Debug|x64 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release|Win32.Build.0 = Release|Win32 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release|x64.Build.0 = Release|x64 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug-DLL|Win32.ActiveCfg = Debug|Win32 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug-DLL|Win32.Build.0 = Debug|Win32 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug-DLL|x64.ActiveCfg = Debug|x64 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Debug-DLL|x64.Build.0 = Debug|x64 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release-DLL|Win32.ActiveCfg = Release|Win32 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release-DLL|Win32.Build.0 = Release|Win32 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release-DLL|x64.ActiveCfg = Release|x64 - {4A48E5A5-2E69-ED6D-063C-C297180A54D0}.Release-DLL|x64.Build.0 = Release|x64 {63422647-93FA-46BB-4827-95473D9D503C}.Debug|Win32.ActiveCfg = Debug|Win32 {63422647-93FA-46BB-4827-95473D9D503C}.Debug|x64.ActiveCfg = Debug|x64 {63422647-93FA-46BB-4827-95473D9D503C}.Release|Win32.ActiveCfg = Release|Win32 diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj b/vsprojects/vcxproj/gpr/gpr.vcxproj index 44c21ddeb318106e03277fe68b027130afb6c458..32dedee55d3047ca865c6762759dac46713c3d52 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,10 @@ </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\atm.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 a5924a624a8a9e6541f93dfcfe502eb91bea918b..94699c8ff8c6d9efba55aeb785a7ed153be1f4b7 100644 --- a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters +++ b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters @@ -10,6 +10,12 @@ <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\atm.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 +260,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 45f3037e8ab88ddebc63c70049eb7812549fce96..c85454a6ddabcddc3b0113e757a47c9e7484a7d0 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 95cdb7434c157f2c3bc6cd78fdccd05047cd4625..d800b297e9f8d68523ae350ddc8ba2ad7b9a03ed 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 22ea361a02e7e5875c8cbd07521840c50945b5da..45c0ecd35d03b98ece051598d4164029ec6a5e86 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 c3cef2d4df50935e4171ae84b6d52580207a2ac0..987d56d6a0945488f4a53f766b271013715fd30c 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 fde60be3e208b4c7725e3f7d536c650519b4c59b..afe72746e94836ea32afc303bac670886d6438a0 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" /> @@ -456,7 +457,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h" /> @@ -466,6 +466,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.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"> @@ -850,14 +857,10 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c"> @@ -876,6 +879,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c"> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 8edbbc22bedc4340c3dd397a9ff27c9df1cc31b2..a7d32afbe1b9445eb705f2e5ca00bcdd615850df 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> @@ -529,18 +538,12 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c"> - <Filter>src\core\ext\client_channel</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c"> - <Filter>src\core\ext\client_channel</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> @@ -568,6 +571,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.c"> + <Filter>src\core\ext\client_channel</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> @@ -944,6 +950,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> @@ -1241,9 +1250,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h"> - <Filter>src\core\ext\client_channel</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> @@ -1271,6 +1277,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.h"> + <Filter>src\core\ext\client_channel</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h"> <Filter>src\core\ext\client_channel</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 e7c9fb71f33d60bde40523909095d896117475f2..62969e31acfdd23a4f0cc7da0e9d7194cf4bc730 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -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" /> @@ -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 3d36948aaef7548dfe8a2365e47ca71e054b6ecd..30088101f5f7d111b216ff1cca8c94c7d7314ad3 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -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> @@ -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_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 22f4740b8fa7e84f3762e3c0ff5e75bc2a4bde9b..46069134a1e344cb09c0d97912444a87e9d14a52 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" /> @@ -422,7 +423,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h" /> @@ -432,6 +432,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.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"> @@ -767,14 +774,10 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c"> @@ -793,6 +796,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c"> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 5021cb47d8df4eb8d29b8fc5e3d58d36af9f9c2e..d658f4d574035a69c27f0c864eb3e9dbbd001771 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> @@ -457,18 +466,12 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c"> - <Filter>src\core\ext\client_channel</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c"> - <Filter>src\core\ext\client_channel</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> @@ -496,6 +499,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.c"> + <Filter>src\core\ext\client_channel</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> @@ -854,6 +860,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> @@ -1079,9 +1088,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h"> - <Filter>src\core\ext\client_channel</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> @@ -1109,6 +1115,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.h"> + <Filter>src\core\ext\client_channel</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h"> <Filter>src\core\ext\client_channel</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 0000000000000000000000000000000000000000..5ae2f8e483c485b19cd43d4a170d15bf661b14c9 --- /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 0000000000000000000000000000000000000000..c470f17527240f82d49876e7e9a62d6c268ef462 --- /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/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj b/vsprojects/vcxproj/test/error_test/error_test.vcxproj similarity index 96% rename from vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj rename to vsprojects/vcxproj/test/error_test/error_test.vcxproj index a438391f252036844e2ed462cf75c5716f619789..c7d0e5a1000bb15eb0ea93aafeae0606678a24ca 100644 --- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj +++ b/vsprojects/vcxproj/test/error_test/error_test.vcxproj @@ -20,7 +20,7 @@ </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> - <ProjectGuid>{4A48E5A5-2E69-ED6D-063C-C297180A54D0}</ProjectGuid> + <ProjectGuid>{42720233-A6D4-66BC-CCA2-06B57261D0B3}</ProjectGuid> <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> </PropertyGroup> @@ -60,14 +60,14 @@ </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)'=='Debug'"> - <TargetName>set_initial_connect_string_test</TargetName> + <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>set_initial_connect_string_test</TargetName> + <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> @@ -158,13 +158,10 @@ </ItemDefinitionGroup> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\set_initial_connect_string_test.c"> + <ClCompile Include="$(SolutionDir)\..\test\core\iomgr\error_test.c"> </ClCompile> </ItemGroup> <ItemGroup> - <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\test_tcp_server\test_tcp_server.vcxproj"> - <Project>{E3110C46-A148-FF65-08FD-3324829BE7FE}</Project> - </ProjectReference> <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj"> <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project> </ProjectReference> 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 0000000000000000000000000000000000000000..d2bb372482fa51531cb17f8c9e2eebc0125cc838 --- /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/server_builder_test/server_builder_test.vcxproj b/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..ebbfd59f3d3c0f748b25dc3c0a3efa27de0fe7b1 --- /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 0000000000000000000000000000000000000000..c323b7a673121124133d8e7dbaf0d4454c127cdd --- /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/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters b/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters deleted file mode 100644 index 4422a3e79256dc80ec53cb633619854786a2f381..0000000000000000000000000000000000000000 --- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters +++ /dev/null @@ -1,21 +0,0 @@ -<?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\set_initial_connect_string_test.c"> - <Filter>test\core\client_channel</Filter> - </ClCompile> - </ItemGroup> - - <ItemGroup> - <Filter Include="test"> - <UniqueIdentifier>{413358e4-3165-f09d-071c-ee4f2ca0b826}</UniqueIdentifier> - </Filter> - <Filter Include="test\core"> - <UniqueIdentifier>{a554b5ef-0c80-ac03-1848-bccd947a06a6}</UniqueIdentifier> - </Filter> - <Filter Include="test\core\client_channel"> - <UniqueIdentifier>{4726253c-a562-0ace-2798-996807381208}</UniqueIdentifier> - </Filter> - </ItemGroup> -</Project> -