diff --git a/.gitignore b/.gitignore index 56e4b6d4b43..da2082c088c 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 ca0a1c56076..053f581101d 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 d3a76a29d76..5a8bff55342 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 9a347948fe2..587a9c04cd3 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 c521a27c300..2ec57768ae7 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 3abdeaefb22..994aeea71b5 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 90536e503ed..2bf302b8357 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 00000000000..9e9d077273e --- /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 00000000000..1fa24802315 --- /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 53a1fdf193c..d2fc7a50f95 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 00000000000..fccfa863a3e --- /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 00000000000..32ff399ef94 --- /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 fc97d34a386..0441b27f25a 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 909ea5af967..6d1a59766e5 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 33ad74d2dfc..6ca9fcd3426 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 35eb5587c85..51b52c0c440 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 6ba0c01d39f..83a86803ebc 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 c660d361b1c..30d60b0d06d 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 8d5b7b2ab1c..8074df266ce 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 876abea40e4..057acc2cebf 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 -#include "src/core/lib/iomgr/resolve_address.h" +#include +#include -typedef void (*grpc_set_initial_connect_string_func)( - grpc_resolved_address **addr, grpc_slice *initial_str); +#include +#include -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 MakeChannelArgumentOption( + const grpc::string &name, const grpc::string &value); +std::unique_ptr 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 2ac2f0a1ef4..d707100a522 100644 --- a/include/grpc++/server_builder.h +++ b/include/grpc++/server_builder.h @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -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 + 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 efdf7772ad7..61307d61942 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(&args_[0]); return out; } diff --git a/include/grpc/impl/codegen/atm.h b/include/grpc/impl/codegen/atm.h index ae00fb0f169..4bd572d6d18 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 a7bbb38c27e..5cfeecb6017 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 d729f3d8376..8c0854b1d28 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 e16161d7a2e..f096869e4ed 100644 --- a/package.xml +++ b/package.xml @@ -13,8 +13,8 @@ 2017-03-01 - 1.2.0dev - 1.2.0dev + 1.3.0dev + 1.3.0dev beta @@ -91,6 +91,7 @@ + @@ -106,6 +107,8 @@ + + @@ -235,6 +238,7 @@ + @@ -334,7 +338,6 @@ - @@ -344,6 +347,7 @@ + @@ -434,6 +438,9 @@ + + + @@ -550,10 +557,8 @@ - - @@ -563,6 +568,7 @@ + diff --git a/setup.py b/setup.py index d5b843fdace..4d71848bff0 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 4841da8da8e..242ce06a16e 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 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 6a95255d40e..b91059fad77 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 b80d831557f..fc29dbd4545 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 bf64f84772c..00c20913b0f 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 28d3b63f99d..f51277d0b29 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 9bff41f003f..94b5fb5c9e1 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 8ae15fc72bc..cd1b2cd80cf 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 2c44b9d4903..0935ddbdbd1 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 00000000000..8926c3d7822 --- /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 +#include + +#include +#include +#include +#include +#include + +// +// 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 00000000000..f9971faf651 --- /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 + +/// 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 5df0a9060d0..e886fbc0ccd 100644 --- a/src/core/ext/client_channel/subchannel.c +++ b/src/core/ext/client_channel/subchannel.c @@ -41,7 +41,6 @@ #include #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 6a70a764676..3e64a2507cf 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 c2750634a50..4ed832671d9 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 eae0145ecc7..d49c32b6719 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 da4c7dc7b23..89659e7464f 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 f487533c414..9b4b1a7b841 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 40f5120308c..1865b997b7d 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 c91b019aa05..da0a34d32a0 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 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 1eac6fc1504..288c917e65a 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 d26812ad6be..3c56c215991 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 e7f2597f89c..7efc8c63c91 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 01a03533daf..36bb67869c5 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 3fb2a60ac71..6d53b0576e7 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 6d3340bcbf8..80e3603e8d8 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 aa41014a217..02dc479f3a2 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 29796f7ca7e..42ef7b78063 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 5a12d62f1d1..34114bbebfd 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 c031533dd86..f9d0d689acd 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 fb70de8e96c..bebd3af335b 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 b424c0d2acb..5ba13fe2514 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 509c1ff95dd..6633fb68ecf 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 #include #include @@ -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 fa9966c3a69..2bc476bbef6 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 #include #include @@ -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 dbe5b139f91..1127fff756f 100644 --- a/src/core/lib/iomgr/error.c +++ b/src/core/lib/iomgr/error.c @@ -35,6 +35,7 @@ #include +#include #include #include #include @@ -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 2613512acbe..0e7a7b0a1ef 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 1c89ead4ed6..7f204df1b2d 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 -#include +#include // TODO, do we need this? -#include +#include +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 5ddd5313e2b..789ef22c557 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 a5b62aa8888..ae3e2eabc39 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 af33949c698..a2f81bcd78d 100644 --- a/src/core/lib/iomgr/pollset_uv.c +++ b/src/core/lib/iomgr/pollset_uv.c @@ -39,6 +39,7 @@ #include +#include #include #include @@ -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 f1897bb91f2..94a454c0b7c 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 79ff9107389..4d715be94c7 100644 --- a/src/core/lib/iomgr/resolve_address_uv.c +++ b/src/core/lib/iomgr/resolve_address_uv.c @@ -40,6 +40,7 @@ #include #include #include +#include #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 ae66577cafd..618483d9cb7 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 5f286a6723c..e242631fc0b 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -44,11 +44,8 @@ #include #include -#include -#include #include #include -#include #include #include #include @@ -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 : ""); - 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(""); - } - 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 00000000000..f5dc8532f9f --- /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 00000000000..e45e27d5ab6 --- /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 +#include +#include +#include + +#include +#include +#include +#include + +#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 00000000000..6354a6bdc10 --- /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 +#include +#include +#include + +#include +#include +#include + +#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 : ""); + 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(""); + } + 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 8ebd06c458a..95c3198be6f 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 +#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 d1bcd89af1f..71e295770a4 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 ed63fa7d817..90842a47f09 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 71d32d97ba7..c8dd242c753 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 1f1987fb8e7..bc8e27714ca 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 a23082a8667..8dea1d98fff 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 14619d97caf..01cb4731773 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 00000000000..7bcb983f245 --- /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 +#include +#include +#include + +#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 00000000000..c28033ffc35 --- /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 + +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 6db82d84ef1..06e8432caf8 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 -#include "src/core/lib/iomgr/resolve_address.h" +#include +#include -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 e4a7fce646b..b52f004f743 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 c2547c5147a..2c5d8c0ff35 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 d6acd392c1a..2b700b2f675 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 3a441d7adde..c4aebd8b9be 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 49bc4c114b3..9ddb88bd114 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 b3605795536..1186a4af636 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 1143a9e044e..ba80bd801ee 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 da77828d9c1..ef55e561fbf 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 12da2a88feb..1195f75044a 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 cd739a593c2..ebfc59b5347 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 165950e288e..d56cb31ee00 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 cc1c277b355..950b18aeda2 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 8553148c35f..6f688bf8d28 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 65f32774999..eddcacc3325 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(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 79c4bab985b..494d5d64d7f 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(elem->call_data)->~CallDataType(); } diff --git a/src/cpp/common/version_cc.cc b/src/cpp/common/version_cc.cc index 039c530cdc7..f5a0e4131de 100644 --- a/src/cpp/common/version_cc.cc +++ b/src/cpp/common/version_cc.cc @@ -37,5 +37,5 @@ #include 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 00000000000..723f968ff86 --- /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 + +namespace grpc { + +std::unique_ptr 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> *plugins) override {} + + private: + const grpc::string name_; + const grpc::string value_; + }; + return std::unique_ptr(new StringOption(name, value)); +} + +std::unique_ptr 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> *plugins) override {} + + private: + const grpc::string name_; + const int value_; + }; + return std::unique_ptr(new IntOption(name, value)); +} + +} // namespace grpc diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc index 00a90bb184c..4eb4b5a1b21 100644 --- a/src/cpp/server/server_builder.cc +++ b/src/cpp/server/server_builder.cc @@ -323,9 +323,14 @@ std::unique_ptr 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 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 9e11a8a9e07..e874892e73c 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 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 170149ace52..370bf11b2dd 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 02be9578126..38d5fab50e1 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 f01a024db43..6012d904b69 100644 --- a/src/csharp/Grpc.Core/VersionInfo.cs +++ b/src/csharp/Grpc.Core/VersionInfo.cs @@ -48,11 +48,11 @@ namespace Grpc.Core /// /// Current AssemblyFileVersion of gRPC C# assemblies /// - public const string CurrentAssemblyFileVersion = "1.2.0.0"; + public const string CurrentAssemblyFileVersion = "1.3.0.0"; /// /// Current version of gRPC C# /// - 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 0e37ec8927f..a1306baa876 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 9e9d245caec..e93d0bf81b3 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 8bfe722f780..014c78e489d 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 b99fdcbdfde..4fec2c71cf8 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 442e3acad28..f51b42bc8c1 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 00000000000..32ff399ef94 --- /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 8376339debe..e218f5a4063 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 8a7eff507d0..a5a0ea26420 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 53dd53f5391..3096c6e42a8 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 1a3b775c609..ab8f82a39e7 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 e569faa25bb..09155ee4d40 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 1e0c8024cab..3b442645e83 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 5584246ad94..d964f53e8e2 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 b41210f50f8..49876608087 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 1479c5896c3..934d500abc0 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 70f84753bb6..9fb30aa43d0 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 fab8ad8d25f..005bac0a0d4 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 491e34795ac..2b140077cc5 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 00000000000..d9ca35ba43d --- /dev/null +++ b/src/php/tests/qps/client.php @@ -0,0 +1,166 @@ +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 00000000000..0fc87098f57 --- /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 00000000000..efca18a0cb3 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Control.php @@ -0,0 +1,127 @@ +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 00000000000..c0880026264 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php @@ -0,0 +1,69 @@ +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 00000000000..279fe00ac82 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Payloads.php @@ -0,0 +1,37 @@ +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 00000000000..e35944e1d82 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/ProxyService.php @@ -0,0 +1,34 @@ +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 00000000000..7a9439a5b93 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Services.php @@ -0,0 +1,45 @@ +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 00000000000..99c0000a52c --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Stats.php @@ -0,0 +1,44 @@ +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 00000000000..daf17800cdc --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/BenchmarkServiceClient.php @@ -0,0 +1,78 @@ +_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 00000000000..f0497accfb2 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/BoolValue.php @@ -0,0 +1,62 @@ + + * 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"; + * + * + * Protobuf type grpc.testing.BoolValue + */ +class BoolValue extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * The bool value.
+     * 
+ * + * bool value = 1; + */ + private $value = false; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * The bool value.
+     * 
+ * + * bool value = 1; + */ + public function getValue() + { + return $this->value; + } + + /** + *
+     * The bool value.
+     * 
+ * + * bool value = 1; + */ + 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 00000000000..0057d387488 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ByteBufferParams.php @@ -0,0 +1,65 @@ +grpc.testing.ByteBufferParams + */ +class ByteBufferParams extends \Google\Protobuf\Internal\Message +{ + /** + * int32 req_size = 1; + */ + private $req_size = 0; + /** + * int32 resp_size = 2; + */ + private $resp_size = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce(); + parent::__construct(); + } + + /** + * int32 req_size = 1; + */ + public function getReqSize() + { + return $this->req_size; + } + + /** + * int32 req_size = 1; + */ + public function setReqSize($var) + { + GPBUtil::checkInt32($var); + $this->req_size = $var; + } + + /** + * int32 resp_size = 2; + */ + public function getRespSize() + { + return $this->resp_size; + } + + /** + * int32 resp_size = 2; + */ + 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 00000000000..d2fe3ae5ffc --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ChannelArg.php @@ -0,0 +1,84 @@ +grpc.testing.ChannelArg + */ +class ChannelArg extends \Google\Protobuf\Internal\Message +{ + /** + * string name = 1; + */ + private $name = ''; + protected $value; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * string name = 1; + */ + public function getName() + { + return $this->name; + } + + /** + * string name = 1; + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + } + + /** + * string str_value = 2; + */ + public function getStrValue() + { + return $this->readOneof(2); + } + + /** + * string str_value = 2; + */ + public function setStrValue($var) + { + GPBUtil::checkString($var, True); + $this->writeOneof(2, $var); + } + + /** + * int32 int_value = 3; + */ + public function getIntValue() + { + return $this->readOneof(3); + } + + /** + * int32 int_value = 3; + */ + 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 00000000000..c878c5a7bc0 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientArgs.php @@ -0,0 +1,63 @@ +grpc.testing.ClientArgs + */ +class ClientArgs extends \Google\Protobuf\Internal\Message +{ + protected $argtype; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * .grpc.testing.ClientConfig setup = 1; + */ + public function getSetup() + { + return $this->readOneof(1); + } + + /** + * .grpc.testing.ClientConfig setup = 1; + */ + public function setSetup(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ClientConfig::class); + $this->writeOneof(1, $var); + } + + /** + * .grpc.testing.Mark mark = 2; + */ + public function getMark() + { + return $this->readOneof(2); + } + + /** + * .grpc.testing.Mark mark = 2; + */ + 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 00000000000..52d6a75fb0e --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientConfig.php @@ -0,0 +1,407 @@ +grpc.testing.ClientConfig + */ +class ClientConfig extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * List of targets to connect to. At least one target needs to be specified.
+     * 
+ * + * repeated string server_targets = 1; + */ + private $server_targets; + /** + * .grpc.testing.ClientType client_type = 2; + */ + private $client_type = 0; + /** + * .grpc.testing.SecurityParams security_params = 3; + */ + private $security_params = null; + /** + *
+     * How many concurrent RPCs to start for each channel.
+     * For synchronous client, use a separate thread for each outstanding RPC.
+     * 
+ * + * int32 outstanding_rpcs_per_channel = 4; + */ + private $outstanding_rpcs_per_channel = 0; + /** + *
+     * Number of independent client channels to create.
+     * i-th channel will connect to server_target[i % server_targets.size()]
+     * 
+ * + * int32 client_channels = 5; + */ + private $client_channels = 0; + /** + *
+     * Only for async client. Number of threads to use to start/manage RPCs.
+     * 
+ * + * int32 async_client_threads = 7; + */ + private $async_client_threads = 0; + /** + * .grpc.testing.RpcType rpc_type = 8; + */ + private $rpc_type = 0; + /** + *
+     * The requested load for the entire client (aggregated over all the threads).
+     * 
+ * + * .grpc.testing.LoadParams load_params = 10; + */ + private $load_params = null; + /** + * .grpc.testing.PayloadConfig payload_config = 11; + */ + private $payload_config = null; + /** + * .grpc.testing.HistogramParams histogram_params = 12; + */ + private $histogram_params = null; + /** + *
+     * Specify the cores we should run the client on, if desired
+     * 
+ * + * repeated int32 core_list = 13; + */ + private $core_list; + /** + * int32 core_limit = 14; + */ + private $core_limit = 0; + /** + *
+     * If we use an OTHER_CLIENT client_type, this string gives more detail
+     * 
+ * + * string other_client_api = 15; + */ + private $other_client_api = ''; + /** + * repeated .grpc.testing.ChannelArg channel_args = 16; + */ + private $channel_args; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + *
+     * List of targets to connect to. At least one target needs to be specified.
+     * 
+ * + * repeated string server_targets = 1; + */ + public function getServerTargets() + { + return $this->server_targets; + } + + /** + *
+     * List of targets to connect to. At least one target needs to be specified.
+     * 
+ * + * repeated string server_targets = 1; + */ + public function setServerTargets(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); + $this->server_targets = $var; + } + + /** + * .grpc.testing.ClientType client_type = 2; + */ + public function getClientType() + { + return $this->client_type; + } + + /** + * .grpc.testing.ClientType client_type = 2; + */ + public function setClientType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\ClientType::class); + $this->client_type = $var; + } + + /** + * .grpc.testing.SecurityParams security_params = 3; + */ + public function getSecurityParams() + { + return $this->security_params; + } + + /** + * .grpc.testing.SecurityParams security_params = 3; + */ + public function setSecurityParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\SecurityParams::class); + $this->security_params = $var; + } + + /** + *
+     * How many concurrent RPCs to start for each channel.
+     * For synchronous client, use a separate thread for each outstanding RPC.
+     * 
+ * + * int32 outstanding_rpcs_per_channel = 4; + */ + public function getOutstandingRpcsPerChannel() + { + return $this->outstanding_rpcs_per_channel; + } + + /** + *
+     * How many concurrent RPCs to start for each channel.
+     * For synchronous client, use a separate thread for each outstanding RPC.
+     * 
+ * + * int32 outstanding_rpcs_per_channel = 4; + */ + public function setOutstandingRpcsPerChannel($var) + { + GPBUtil::checkInt32($var); + $this->outstanding_rpcs_per_channel = $var; + } + + /** + *
+     * Number of independent client channels to create.
+     * i-th channel will connect to server_target[i % server_targets.size()]
+     * 
+ * + * int32 client_channels = 5; + */ + public function getClientChannels() + { + return $this->client_channels; + } + + /** + *
+     * Number of independent client channels to create.
+     * i-th channel will connect to server_target[i % server_targets.size()]
+     * 
+ * + * int32 client_channels = 5; + */ + public function setClientChannels($var) + { + GPBUtil::checkInt32($var); + $this->client_channels = $var; + } + + /** + *
+     * Only for async client. Number of threads to use to start/manage RPCs.
+     * 
+ * + * int32 async_client_threads = 7; + */ + public function getAsyncClientThreads() + { + return $this->async_client_threads; + } + + /** + *
+     * Only for async client. Number of threads to use to start/manage RPCs.
+     * 
+ * + * int32 async_client_threads = 7; + */ + public function setAsyncClientThreads($var) + { + GPBUtil::checkInt32($var); + $this->async_client_threads = $var; + } + + /** + * .grpc.testing.RpcType rpc_type = 8; + */ + public function getRpcType() + { + return $this->rpc_type; + } + + /** + * .grpc.testing.RpcType rpc_type = 8; + */ + public function setRpcType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\RpcType::class); + $this->rpc_type = $var; + } + + /** + *
+     * The requested load for the entire client (aggregated over all the threads).
+     * 
+ * + * .grpc.testing.LoadParams load_params = 10; + */ + public function getLoadParams() + { + return $this->load_params; + } + + /** + *
+     * The requested load for the entire client (aggregated over all the threads).
+     * 
+ * + * .grpc.testing.LoadParams load_params = 10; + */ + public function setLoadParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\LoadParams::class); + $this->load_params = $var; + } + + /** + * .grpc.testing.PayloadConfig payload_config = 11; + */ + public function getPayloadConfig() + { + return $this->payload_config; + } + + /** + * .grpc.testing.PayloadConfig payload_config = 11; + */ + public function setPayloadConfig(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\PayloadConfig::class); + $this->payload_config = $var; + } + + /** + * .grpc.testing.HistogramParams histogram_params = 12; + */ + public function getHistogramParams() + { + return $this->histogram_params; + } + + /** + * .grpc.testing.HistogramParams histogram_params = 12; + */ + public function setHistogramParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\HistogramParams::class); + $this->histogram_params = $var; + } + + /** + *
+     * Specify the cores we should run the client on, if desired
+     * 
+ * + * repeated int32 core_list = 13; + */ + public function getCoreList() + { + return $this->core_list; + } + + /** + *
+     * Specify the cores we should run the client on, if desired
+     * 
+ * + * repeated int32 core_list = 13; + */ + public function setCoreList(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->core_list = $var; + } + + /** + * int32 core_limit = 14; + */ + public function getCoreLimit() + { + return $this->core_limit; + } + + /** + * int32 core_limit = 14; + */ + public function setCoreLimit($var) + { + GPBUtil::checkInt32($var); + $this->core_limit = $var; + } + + /** + *
+     * If we use an OTHER_CLIENT client_type, this string gives more detail
+     * 
+ * + * string other_client_api = 15; + */ + public function getOtherClientApi() + { + return $this->other_client_api; + } + + /** + *
+     * If we use an OTHER_CLIENT client_type, this string gives more detail
+     * 
+ * + * string other_client_api = 15; + */ + public function setOtherClientApi($var) + { + GPBUtil::checkString($var, True); + $this->other_client_api = $var; + } + + /** + * repeated .grpc.testing.ChannelArg channel_args = 16; + */ + public function getChannelArgs() + { + return $this->channel_args; + } + + /** + * repeated .grpc.testing.ChannelArg channel_args = 16; + */ + 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 00000000000..8b9a0c33a46 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStats.php @@ -0,0 +1,164 @@ +grpc.testing.ClientStats + */ +class ClientStats extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Latency histogram. Data points are in nanoseconds.
+     * 
+ * + * .grpc.testing.HistogramData latencies = 1; + */ + private $latencies = null; + /** + *
+     * See ServerStats for details.
+     * 
+ * + * double time_elapsed = 2; + */ + private $time_elapsed = 0.0; + /** + * double time_user = 3; + */ + private $time_user = 0.0; + /** + * double time_system = 4; + */ + private $time_system = 0.0; + /** + *
+     * Number of failed requests (one row per status code seen)
+     * 
+ * + * repeated .grpc.testing.RequestResultCount request_results = 5; + */ + private $request_results; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + *
+     * Latency histogram. Data points are in nanoseconds.
+     * 
+ * + * .grpc.testing.HistogramData latencies = 1; + */ + public function getLatencies() + { + return $this->latencies; + } + + /** + *
+     * Latency histogram. Data points are in nanoseconds.
+     * 
+ * + * .grpc.testing.HistogramData latencies = 1; + */ + public function setLatencies(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\HistogramData::class); + $this->latencies = $var; + } + + /** + *
+     * See ServerStats for details.
+     * 
+ * + * double time_elapsed = 2; + */ + public function getTimeElapsed() + { + return $this->time_elapsed; + } + + /** + *
+     * See ServerStats for details.
+     * 
+ * + * double time_elapsed = 2; + */ + public function setTimeElapsed($var) + { + GPBUtil::checkDouble($var); + $this->time_elapsed = $var; + } + + /** + * double time_user = 3; + */ + public function getTimeUser() + { + return $this->time_user; + } + + /** + * double time_user = 3; + */ + public function setTimeUser($var) + { + GPBUtil::checkDouble($var); + $this->time_user = $var; + } + + /** + * double time_system = 4; + */ + public function getTimeSystem() + { + return $this->time_system; + } + + /** + * double time_system = 4; + */ + public function setTimeSystem($var) + { + GPBUtil::checkDouble($var); + $this->time_system = $var; + } + + /** + *
+     * Number of failed requests (one row per status code seen)
+     * 
+ * + * repeated .grpc.testing.RequestResultCount request_results = 5; + */ + public function getRequestResults() + { + return $this->request_results; + } + + /** + *
+     * Number of failed requests (one row per status code seen)
+     * 
+ * + * repeated .grpc.testing.RequestResultCount request_results = 5; + */ + 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 00000000000..a59f87a9628 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStatus.php @@ -0,0 +1,44 @@ +grpc.testing.ClientStatus + */ +class ClientStatus extends \Google\Protobuf\Internal\Message +{ + /** + * .grpc.testing.ClientStats stats = 1; + */ + private $stats = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * .grpc.testing.ClientStats stats = 1; + */ + public function getStats() + { + return $this->stats; + } + + /** + * .grpc.testing.ClientStats stats = 1; + */ + 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 00000000000..4f59da992f9 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientType.php @@ -0,0 +1,34 @@ +grpc.testing.ClientType + */ +class ClientType +{ + /** + *
+     * Many languages support a basic distinction between using
+     * sync or async client, and this allows the specification
+     * 
+ * + * SYNC_CLIENT = 0; + */ + const SYNC_CLIENT = 0; + /** + * ASYNC_CLIENT = 1; + */ + const ASYNC_CLIENT = 1; + /** + *
+     * used for some language-specific variants
+     * 
+ * + * OTHER_CLIENT = 2; + */ + 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 00000000000..53f2948af28 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClosedLoopParams.php @@ -0,0 +1,28 @@ + + * Once an RPC finishes, immediately start a new one. + * No configuration parameters needed. + * + * + * Protobuf type grpc.testing.ClosedLoopParams + */ +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 00000000000..6d990f1b064 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ComplexProtoParams.php @@ -0,0 +1,28 @@ + + * TODO (vpai): Fill this in once the details of complex, representative + * protos are decided + * + * + * Protobuf type grpc.testing.ComplexProtoParams + */ +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 00000000000..2e078b3fcdb --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/CoreRequest.php @@ -0,0 +1,23 @@ +grpc.testing.CoreRequest + */ +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 00000000000..85cb3418ada --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/CoreResponse.php @@ -0,0 +1,56 @@ +grpc.testing.CoreResponse + */ +class CoreResponse extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Number of cores available on the server
+     * 
+ * + * int32 cores = 1; + */ + private $cores = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + *
+     * Number of cores available on the server
+     * 
+ * + * int32 cores = 1; + */ + public function getCores() + { + return $this->cores; + } + + /** + *
+     * Number of cores available on the server
+     * 
+ * + * int32 cores = 1; + */ + 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 00000000000..27340fb0efe --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/EchoStatus.php @@ -0,0 +1,70 @@ + + * A protobuf representation for grpc status. This is used by test + * clients to specify a status that the server should attempt to return. + * + * + * Protobuf type grpc.testing.EchoStatus + */ +class EchoStatus extends \Google\Protobuf\Internal\Message +{ + /** + * int32 code = 1; + */ + private $code = 0; + /** + * string message = 2; + */ + private $message = ''; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * int32 code = 1; + */ + public function getCode() + { + return $this->code; + } + + /** + * int32 code = 1; + */ + public function setCode($var) + { + GPBUtil::checkInt32($var); + $this->code = $var; + } + + /** + * string message = 2; + */ + public function getMessage() + { + return $this->message; + } + + /** + * string message = 2; + */ + 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 00000000000..056da6e5de5 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramData.php @@ -0,0 +1,153 @@ + + * Histogram data based on grpc/support/histogram.c + * + * + * Protobuf type grpc.testing.HistogramData + */ +class HistogramData extends \Google\Protobuf\Internal\Message +{ + /** + * repeated uint32 bucket = 1; + */ + private $bucket; + /** + * double min_seen = 2; + */ + private $min_seen = 0.0; + /** + * double max_seen = 3; + */ + private $max_seen = 0.0; + /** + * double sum = 4; + */ + private $sum = 0.0; + /** + * double sum_of_squares = 5; + */ + private $sum_of_squares = 0.0; + /** + * double count = 6; + */ + private $count = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + * repeated uint32 bucket = 1; + */ + public function getBucket() + { + return $this->bucket; + } + + /** + * repeated uint32 bucket = 1; + */ + public function setBucket(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::UINT32); + $this->bucket = $var; + } + + /** + * double min_seen = 2; + */ + public function getMinSeen() + { + return $this->min_seen; + } + + /** + * double min_seen = 2; + */ + public function setMinSeen($var) + { + GPBUtil::checkDouble($var); + $this->min_seen = $var; + } + + /** + * double max_seen = 3; + */ + public function getMaxSeen() + { + return $this->max_seen; + } + + /** + * double max_seen = 3; + */ + public function setMaxSeen($var) + { + GPBUtil::checkDouble($var); + $this->max_seen = $var; + } + + /** + * double sum = 4; + */ + public function getSum() + { + return $this->sum; + } + + /** + * double sum = 4; + */ + public function setSum($var) + { + GPBUtil::checkDouble($var); + $this->sum = $var; + } + + /** + * double sum_of_squares = 5; + */ + public function getSumOfSquares() + { + return $this->sum_of_squares; + } + + /** + * double sum_of_squares = 5; + */ + public function setSumOfSquares($var) + { + GPBUtil::checkDouble($var); + $this->sum_of_squares = $var; + } + + /** + * double count = 6; + */ + public function getCount() + { + return $this->count; + } + + /** + * double count = 6; + */ + 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 00000000000..836c94b01d8 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramParams.php @@ -0,0 +1,93 @@ + + * Histogram params based on grpc/support/histogram.c + * + * + * Protobuf type grpc.testing.HistogramParams + */ +class HistogramParams extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * first bucket is [0, 1 + resolution)
+     * 
+ * + * double resolution = 1; + */ + private $resolution = 0.0; + /** + *
+     * use enough buckets to allow this value
+     * 
+ * + * double max_possible = 2; + */ + private $max_possible = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + *
+     * first bucket is [0, 1 + resolution)
+     * 
+ * + * double resolution = 1; + */ + public function getResolution() + { + return $this->resolution; + } + + /** + *
+     * first bucket is [0, 1 + resolution)
+     * 
+ * + * double resolution = 1; + */ + public function setResolution($var) + { + GPBUtil::checkDouble($var); + $this->resolution = $var; + } + + /** + *
+     * use enough buckets to allow this value
+     * 
+ * + * double max_possible = 2; + */ + public function getMaxPossible() + { + return $this->max_possible; + } + + /** + *
+     * use enough buckets to allow this value
+     * 
+ * + * double max_possible = 2; + */ + 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 00000000000..1f32e49c8aa --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/LoadParams.php @@ -0,0 +1,63 @@ +grpc.testing.LoadParams + */ +class LoadParams extends \Google\Protobuf\Internal\Message +{ + protected $load; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * .grpc.testing.ClosedLoopParams closed_loop = 1; + */ + public function getClosedLoop() + { + return $this->readOneof(1); + } + + /** + * .grpc.testing.ClosedLoopParams closed_loop = 1; + */ + public function setClosedLoop(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ClosedLoopParams::class); + $this->writeOneof(1, $var); + } + + /** + * .grpc.testing.PoissonParams poisson = 2; + */ + public function getPoisson() + { + return $this->readOneof(2); + } + + /** + * .grpc.testing.PoissonParams poisson = 2; + */ + 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 00000000000..ce006efacd8 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Mark.php @@ -0,0 +1,60 @@ + + * Request current stats + * + * + * Protobuf type grpc.testing.Mark + */ +class Mark extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * if true, the stats will be reset after taking their snapshot.
+     * 
+ * + * bool reset = 1; + */ + private $reset = false; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + *
+     * if true, the stats will be reset after taking their snapshot.
+     * 
+ * + * bool reset = 1; + */ + public function getReset() + { + return $this->reset; + } + + /** + *
+     * if true, the stats will be reset after taking their snapshot.
+     * 
+ * + * bool reset = 1; + */ + 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 00000000000..d17c271af74 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Payload.php @@ -0,0 +1,96 @@ + + * A block of data, to simply increase gRPC message size. + * + * + * Protobuf type grpc.testing.Payload + */ +class Payload extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * DEPRECATED, don't use. To be removed shortly.
+     * The type of data in body.
+     * 
+ * + * .grpc.testing.PayloadType type = 1; + */ + private $type = 0; + /** + *
+     * Primary contents of payload.
+     * 
+ * + * bytes body = 2; + */ + private $body = ''; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * DEPRECATED, don't use. To be removed shortly.
+     * The type of data in body.
+     * 
+ * + * .grpc.testing.PayloadType type = 1; + */ + public function getType() + { + return $this->type; + } + + /** + *
+     * DEPRECATED, don't use. To be removed shortly.
+     * The type of data in body.
+     * 
+ * + * .grpc.testing.PayloadType type = 1; + */ + public function setType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class); + $this->type = $var; + } + + /** + *
+     * Primary contents of payload.
+     * 
+ * + * bytes body = 2; + */ + public function getBody() + { + return $this->body; + } + + /** + *
+     * Primary contents of payload.
+     * 
+ * + * bytes body = 2; + */ + 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 00000000000..a2fe7109ba7 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadConfig.php @@ -0,0 +1,80 @@ +grpc.testing.PayloadConfig + */ +class PayloadConfig extends \Google\Protobuf\Internal\Message +{ + protected $payload; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce(); + parent::__construct(); + } + + /** + * .grpc.testing.ByteBufferParams bytebuf_params = 1; + */ + public function getBytebufParams() + { + return $this->readOneof(1); + } + + /** + * .grpc.testing.ByteBufferParams bytebuf_params = 1; + */ + public function setBytebufParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ByteBufferParams::class); + $this->writeOneof(1, $var); + } + + /** + * .grpc.testing.SimpleProtoParams simple_params = 2; + */ + public function getSimpleParams() + { + return $this->readOneof(2); + } + + /** + * .grpc.testing.SimpleProtoParams simple_params = 2; + */ + public function setSimpleParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\SimpleProtoParams::class); + $this->writeOneof(2, $var); + } + + /** + * .grpc.testing.ComplexProtoParams complex_params = 3; + */ + public function getComplexParams() + { + return $this->readOneof(3); + } + + /** + * .grpc.testing.ComplexProtoParams complex_params = 3; + */ + 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 00000000000..189ef034b47 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadType.php @@ -0,0 +1,26 @@ + + * DEPRECATED, don't use. To be removed shortly. + * The type of payload that should be returned. + * + * + * Protobuf enum grpc.testing.PayloadType + */ +class PayloadType +{ + /** + *
+     * Compressable text format.
+     * 
+ * + * COMPRESSABLE = 0; + */ + 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 00000000000..d64edd45f03 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/PoissonParams.php @@ -0,0 +1,61 @@ + + * Parameters of poisson process distribution, which is a good representation + * of activity coming in from independent identical stationary sources. + * + * + * Protobuf type grpc.testing.PoissonParams + */ +class PoissonParams extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
+     * 
+ * + * double offered_load = 1; + */ + private $offered_load = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + *
+     * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
+     * 
+ * + * double offered_load = 1; + */ + public function getOfferedLoad() + { + return $this->offered_load; + } + + /** + *
+     * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
+     * 
+ * + * double offered_load = 1; + */ + 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 00000000000..23c041b4709 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyClientServiceClient.php @@ -0,0 +1,72 @@ +_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 00000000000..ed43be99cef --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyStat.php @@ -0,0 +1,44 @@ +grpc.testing.ProxyStat + */ +class ProxyStat extends \Google\Protobuf\Internal\Message +{ + /** + * double latency = 1; + */ + private $latency = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\ProxyService::initOnce(); + parent::__construct(); + } + + /** + * double latency = 1; + */ + public function getLatency() + { + return $this->latency; + } + + /** + * double latency = 1; + */ + 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 00000000000..dfaaa606c3b --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectInfo.php @@ -0,0 +1,71 @@ + + * For reconnect interop test only. + * Server tells client whether its reconnects are following the spec and the + * reconnect backoffs it saw. + * + * + * Protobuf type grpc.testing.ReconnectInfo + */ +class ReconnectInfo extends \Google\Protobuf\Internal\Message +{ + /** + * bool passed = 1; + */ + private $passed = false; + /** + * repeated int32 backoff_ms = 2; + */ + private $backoff_ms; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * bool passed = 1; + */ + public function getPassed() + { + return $this->passed; + } + + /** + * bool passed = 1; + */ + public function setPassed($var) + { + GPBUtil::checkBool($var); + $this->passed = $var; + } + + /** + * repeated int32 backoff_ms = 2; + */ + public function getBackoffMs() + { + return $this->backoff_ms; + } + + /** + * repeated int32 backoff_ms = 2; + */ + 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 00000000000..97158557836 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectParams.php @@ -0,0 +1,49 @@ + + * For reconnect interop test only. + * Client tells server what reconnection parameters it used. + * + * + * Protobuf type grpc.testing.ReconnectParams + */ +class ReconnectParams extends \Google\Protobuf\Internal\Message +{ + /** + * int32 max_reconnect_backoff_ms = 1; + */ + private $max_reconnect_backoff_ms = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * int32 max_reconnect_backoff_ms = 1; + */ + public function getMaxReconnectBackoffMs() + { + return $this->max_reconnect_backoff_ms; + } + + /** + * int32 max_reconnect_backoff_ms = 1; + */ + 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 00000000000..1be42b2ac91 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/RequestResultCount.php @@ -0,0 +1,65 @@ +grpc.testing.RequestResultCount + */ +class RequestResultCount extends \Google\Protobuf\Internal\Message +{ + /** + * int32 status_code = 1; + */ + private $status_code = 0; + /** + * int64 count = 2; + */ + private $count = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + * int32 status_code = 1; + */ + public function getStatusCode() + { + return $this->status_code; + } + + /** + * int32 status_code = 1; + */ + public function setStatusCode($var) + { + GPBUtil::checkInt32($var); + $this->status_code = $var; + } + + /** + * int64 count = 2; + */ + public function getCount() + { + return $this->count; + } + + /** + * int64 count = 2; + */ + 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 00000000000..b7a8e5ece71 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ResponseParameters.php @@ -0,0 +1,138 @@ + + * Configuration for a particular response. + * + * + * Protobuf type grpc.testing.ResponseParameters + */ +class ResponseParameters extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Desired payload sizes in responses from the server.
+     * 
+ * + * int32 size = 1; + */ + private $size = 0; + /** + *
+     * Desired interval between consecutive responses in the response stream in
+     * microseconds.
+     * 
+ * + * int32 interval_us = 2; + */ + private $interval_us = 0; + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue compressed = 3; + */ + private $compressed = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * Desired payload sizes in responses from the server.
+     * 
+ * + * int32 size = 1; + */ + public function getSize() + { + return $this->size; + } + + /** + *
+     * Desired payload sizes in responses from the server.
+     * 
+ * + * int32 size = 1; + */ + public function setSize($var) + { + GPBUtil::checkInt32($var); + $this->size = $var; + } + + /** + *
+     * Desired interval between consecutive responses in the response stream in
+     * microseconds.
+     * 
+ * + * int32 interval_us = 2; + */ + public function getIntervalUs() + { + return $this->interval_us; + } + + /** + *
+     * Desired interval between consecutive responses in the response stream in
+     * microseconds.
+     * 
+ * + * int32 interval_us = 2; + */ + public function setIntervalUs($var) + { + GPBUtil::checkInt32($var); + $this->interval_us = $var; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue compressed = 3; + */ + public function getCompressed() + { + return $this->compressed; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue compressed = 3; + */ + 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 00000000000..2e664fff477 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/RpcType.php @@ -0,0 +1,21 @@ +grpc.testing.RpcType + */ +class RpcType +{ + /** + * UNARY = 0; + */ + const UNARY = 0; + /** + * STREAMING = 1; + */ + 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 00000000000..136ed299ea8 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Scenario.php @@ -0,0 +1,291 @@ + + * A single performance scenario: input to qps_json_driver + * + * + * Protobuf type grpc.testing.Scenario + */ +class Scenario extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Human readable name for this scenario
+     * 
+ * + * string name = 1; + */ + private $name = ''; + /** + *
+     * Client configuration
+     * 
+ * + * .grpc.testing.ClientConfig client_config = 2; + */ + private $client_config = null; + /** + *
+     * Number of clients to start for the test
+     * 
+ * + * int32 num_clients = 3; + */ + private $num_clients = 0; + /** + *
+     * Server configuration
+     * 
+ * + * .grpc.testing.ServerConfig server_config = 4; + */ + private $server_config = null; + /** + *
+     * Number of servers to start for the test
+     * 
+ * + * int32 num_servers = 5; + */ + private $num_servers = 0; + /** + *
+     * Warmup period, in seconds
+     * 
+ * + * int32 warmup_seconds = 6; + */ + private $warmup_seconds = 0; + /** + *
+     * Benchmark time, in seconds
+     * 
+ * + * int32 benchmark_seconds = 7; + */ + private $benchmark_seconds = 0; + /** + *
+     * Number of workers to spawn locally (usually zero)
+     * 
+ * + * int32 spawn_local_worker_count = 8; + */ + private $spawn_local_worker_count = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + *
+     * Human readable name for this scenario
+     * 
+ * + * string name = 1; + */ + public function getName() + { + return $this->name; + } + + /** + *
+     * Human readable name for this scenario
+     * 
+ * + * string name = 1; + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + } + + /** + *
+     * Client configuration
+     * 
+ * + * .grpc.testing.ClientConfig client_config = 2; + */ + public function getClientConfig() + { + return $this->client_config; + } + + /** + *
+     * Client configuration
+     * 
+ * + * .grpc.testing.ClientConfig client_config = 2; + */ + public function setClientConfig(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ClientConfig::class); + $this->client_config = $var; + } + + /** + *
+     * Number of clients to start for the test
+     * 
+ * + * int32 num_clients = 3; + */ + public function getNumClients() + { + return $this->num_clients; + } + + /** + *
+     * Number of clients to start for the test
+     * 
+ * + * int32 num_clients = 3; + */ + public function setNumClients($var) + { + GPBUtil::checkInt32($var); + $this->num_clients = $var; + } + + /** + *
+     * Server configuration
+     * 
+ * + * .grpc.testing.ServerConfig server_config = 4; + */ + public function getServerConfig() + { + return $this->server_config; + } + + /** + *
+     * Server configuration
+     * 
+ * + * .grpc.testing.ServerConfig server_config = 4; + */ + public function setServerConfig(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ServerConfig::class); + $this->server_config = $var; + } + + /** + *
+     * Number of servers to start for the test
+     * 
+ * + * int32 num_servers = 5; + */ + public function getNumServers() + { + return $this->num_servers; + } + + /** + *
+     * Number of servers to start for the test
+     * 
+ * + * int32 num_servers = 5; + */ + public function setNumServers($var) + { + GPBUtil::checkInt32($var); + $this->num_servers = $var; + } + + /** + *
+     * Warmup period, in seconds
+     * 
+ * + * int32 warmup_seconds = 6; + */ + public function getWarmupSeconds() + { + return $this->warmup_seconds; + } + + /** + *
+     * Warmup period, in seconds
+     * 
+ * + * int32 warmup_seconds = 6; + */ + public function setWarmupSeconds($var) + { + GPBUtil::checkInt32($var); + $this->warmup_seconds = $var; + } + + /** + *
+     * Benchmark time, in seconds
+     * 
+ * + * int32 benchmark_seconds = 7; + */ + public function getBenchmarkSeconds() + { + return $this->benchmark_seconds; + } + + /** + *
+     * Benchmark time, in seconds
+     * 
+ * + * int32 benchmark_seconds = 7; + */ + public function setBenchmarkSeconds($var) + { + GPBUtil::checkInt32($var); + $this->benchmark_seconds = $var; + } + + /** + *
+     * Number of workers to spawn locally (usually zero)
+     * 
+ * + * int32 spawn_local_worker_count = 8; + */ + public function getSpawnLocalWorkerCount() + { + return $this->spawn_local_worker_count; + } + + /** + *
+     * Number of workers to spawn locally (usually zero)
+     * 
+ * + * int32 spawn_local_worker_count = 8; + */ + 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 00000000000..809cd96244d --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResult.php @@ -0,0 +1,312 @@ + + * Results of a single benchmark scenario. + * + * + * Protobuf type grpc.testing.ScenarioResult + */ +class ScenarioResult extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Inputs used to run the scenario.
+     * 
+ * + * .grpc.testing.Scenario scenario = 1; + */ + private $scenario = null; + /** + *
+     * Histograms from all clients merged into one histogram.
+     * 
+ * + * .grpc.testing.HistogramData latencies = 2; + */ + private $latencies = null; + /** + *
+     * Client stats for each client
+     * 
+ * + * repeated .grpc.testing.ClientStats client_stats = 3; + */ + private $client_stats; + /** + *
+     * Server stats for each server
+     * 
+ * + * repeated .grpc.testing.ServerStats server_stats = 4; + */ + private $server_stats; + /** + *
+     * Number of cores available to each server
+     * 
+ * + * repeated int32 server_cores = 5; + */ + private $server_cores; + /** + *
+     * An after-the-fact computed summary
+     * 
+ * + * .grpc.testing.ScenarioResultSummary summary = 6; + */ + private $summary = null; + /** + *
+     * Information on success or failure of each worker
+     * 
+ * + * repeated bool client_success = 7; + */ + private $client_success; + /** + * repeated bool server_success = 8; + */ + private $server_success; + /** + *
+     * Number of failed requests (one row per status code seen)
+     * 
+ * + * repeated .grpc.testing.RequestResultCount request_results = 9; + */ + private $request_results; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + *
+     * Inputs used to run the scenario.
+     * 
+ * + * .grpc.testing.Scenario scenario = 1; + */ + public function getScenario() + { + return $this->scenario; + } + + /** + *
+     * Inputs used to run the scenario.
+     * 
+ * + * .grpc.testing.Scenario scenario = 1; + */ + public function setScenario(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Scenario::class); + $this->scenario = $var; + } + + /** + *
+     * Histograms from all clients merged into one histogram.
+     * 
+ * + * .grpc.testing.HistogramData latencies = 2; + */ + public function getLatencies() + { + return $this->latencies; + } + + /** + *
+     * Histograms from all clients merged into one histogram.
+     * 
+ * + * .grpc.testing.HistogramData latencies = 2; + */ + public function setLatencies(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\HistogramData::class); + $this->latencies = $var; + } + + /** + *
+     * Client stats for each client
+     * 
+ * + * repeated .grpc.testing.ClientStats client_stats = 3; + */ + public function getClientStats() + { + return $this->client_stats; + } + + /** + *
+     * Client stats for each client
+     * 
+ * + * repeated .grpc.testing.ClientStats client_stats = 3; + */ + public function setClientStats(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ClientStats::class); + $this->client_stats = $var; + } + + /** + *
+     * Server stats for each server
+     * 
+ * + * repeated .grpc.testing.ServerStats server_stats = 4; + */ + public function getServerStats() + { + return $this->server_stats; + } + + /** + *
+     * Server stats for each server
+     * 
+ * + * repeated .grpc.testing.ServerStats server_stats = 4; + */ + public function setServerStats(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ServerStats::class); + $this->server_stats = $var; + } + + /** + *
+     * Number of cores available to each server
+     * 
+ * + * repeated int32 server_cores = 5; + */ + public function getServerCores() + { + return $this->server_cores; + } + + /** + *
+     * Number of cores available to each server
+     * 
+ * + * repeated int32 server_cores = 5; + */ + public function setServerCores(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->server_cores = $var; + } + + /** + *
+     * An after-the-fact computed summary
+     * 
+ * + * .grpc.testing.ScenarioResultSummary summary = 6; + */ + public function getSummary() + { + return $this->summary; + } + + /** + *
+     * An after-the-fact computed summary
+     * 
+ * + * .grpc.testing.ScenarioResultSummary summary = 6; + */ + public function setSummary(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ScenarioResultSummary::class); + $this->summary = $var; + } + + /** + *
+     * Information on success or failure of each worker
+     * 
+ * + * repeated bool client_success = 7; + */ + public function getClientSuccess() + { + return $this->client_success; + } + + /** + *
+     * Information on success or failure of each worker
+     * 
+ * + * repeated bool client_success = 7; + */ + public function setClientSuccess(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::BOOL); + $this->client_success = $var; + } + + /** + * repeated bool server_success = 8; + */ + public function getServerSuccess() + { + return $this->server_success; + } + + /** + * repeated bool server_success = 8; + */ + public function setServerSuccess(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::BOOL); + $this->server_success = $var; + } + + /** + *
+     * Number of failed requests (one row per status code seen)
+     * 
+ * + * repeated .grpc.testing.RequestResultCount request_results = 9; + */ + public function getRequestResults() + { + return $this->request_results; + } + + /** + *
+     * Number of failed requests (one row per status code seen)
+     * 
+ * + * repeated .grpc.testing.RequestResultCount request_results = 9; + */ + 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 00000000000..7520cff78e8 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResultSummary.php @@ -0,0 +1,430 @@ + + * Basic summary that can be computed from ClientStats and ServerStats + * once the scenario has finished. + * + * + * Protobuf type grpc.testing.ScenarioResultSummary + */ +class ScenarioResultSummary extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Total number of operations per second over all clients.
+     * 
+ * + * double qps = 1; + */ + private $qps = 0.0; + /** + *
+     * QPS per one server core.
+     * 
+ * + * double qps_per_server_core = 2; + */ + private $qps_per_server_core = 0.0; + /** + *
+     * server load based on system_time (0.85 => 85%)
+     * 
+ * + * double server_system_time = 3; + */ + private $server_system_time = 0.0; + /** + *
+     * server load based on user_time (0.85 => 85%)
+     * 
+ * + * double server_user_time = 4; + */ + private $server_user_time = 0.0; + /** + *
+     * client load based on system_time (0.85 => 85%)
+     * 
+ * + * double client_system_time = 5; + */ + private $client_system_time = 0.0; + /** + *
+     * client load based on user_time (0.85 => 85%)
+     * 
+ * + * double client_user_time = 6; + */ + private $client_user_time = 0.0; + /** + *
+     * X% latency percentiles (in nanoseconds)
+     * 
+ * + * double latency_50 = 7; + */ + private $latency_50 = 0.0; + /** + * double latency_90 = 8; + */ + private $latency_90 = 0.0; + /** + * double latency_95 = 9; + */ + private $latency_95 = 0.0; + /** + * double latency_99 = 10; + */ + private $latency_99 = 0.0; + /** + * double latency_999 = 11; + */ + private $latency_999 = 0.0; + /** + *
+     * server cpu usage percentage
+     * 
+ * + * double server_cpu_usage = 12; + */ + private $server_cpu_usage = 0.0; + /** + *
+     * Number of requests that succeeded/failed
+     * 
+ * + * double successful_requests_per_second = 13; + */ + private $successful_requests_per_second = 0.0; + /** + * double failed_requests_per_second = 14; + */ + private $failed_requests_per_second = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + *
+     * Total number of operations per second over all clients.
+     * 
+ * + * double qps = 1; + */ + public function getQps() + { + return $this->qps; + } + + /** + *
+     * Total number of operations per second over all clients.
+     * 
+ * + * double qps = 1; + */ + public function setQps($var) + { + GPBUtil::checkDouble($var); + $this->qps = $var; + } + + /** + *
+     * QPS per one server core.
+     * 
+ * + * double qps_per_server_core = 2; + */ + public function getQpsPerServerCore() + { + return $this->qps_per_server_core; + } + + /** + *
+     * QPS per one server core.
+     * 
+ * + * double qps_per_server_core = 2; + */ + public function setQpsPerServerCore($var) + { + GPBUtil::checkDouble($var); + $this->qps_per_server_core = $var; + } + + /** + *
+     * server load based on system_time (0.85 => 85%)
+     * 
+ * + * double server_system_time = 3; + */ + public function getServerSystemTime() + { + return $this->server_system_time; + } + + /** + *
+     * server load based on system_time (0.85 => 85%)
+     * 
+ * + * double server_system_time = 3; + */ + public function setServerSystemTime($var) + { + GPBUtil::checkDouble($var); + $this->server_system_time = $var; + } + + /** + *
+     * server load based on user_time (0.85 => 85%)
+     * 
+ * + * double server_user_time = 4; + */ + public function getServerUserTime() + { + return $this->server_user_time; + } + + /** + *
+     * server load based on user_time (0.85 => 85%)
+     * 
+ * + * double server_user_time = 4; + */ + public function setServerUserTime($var) + { + GPBUtil::checkDouble($var); + $this->server_user_time = $var; + } + + /** + *
+     * client load based on system_time (0.85 => 85%)
+     * 
+ * + * double client_system_time = 5; + */ + public function getClientSystemTime() + { + return $this->client_system_time; + } + + /** + *
+     * client load based on system_time (0.85 => 85%)
+     * 
+ * + * double client_system_time = 5; + */ + public function setClientSystemTime($var) + { + GPBUtil::checkDouble($var); + $this->client_system_time = $var; + } + + /** + *
+     * client load based on user_time (0.85 => 85%)
+     * 
+ * + * double client_user_time = 6; + */ + public function getClientUserTime() + { + return $this->client_user_time; + } + + /** + *
+     * client load based on user_time (0.85 => 85%)
+     * 
+ * + * double client_user_time = 6; + */ + public function setClientUserTime($var) + { + GPBUtil::checkDouble($var); + $this->client_user_time = $var; + } + + /** + *
+     * X% latency percentiles (in nanoseconds)
+     * 
+ * + * double latency_50 = 7; + */ + public function getLatency50() + { + return $this->latency_50; + } + + /** + *
+     * X% latency percentiles (in nanoseconds)
+     * 
+ * + * double latency_50 = 7; + */ + public function setLatency50($var) + { + GPBUtil::checkDouble($var); + $this->latency_50 = $var; + } + + /** + * double latency_90 = 8; + */ + public function getLatency90() + { + return $this->latency_90; + } + + /** + * double latency_90 = 8; + */ + public function setLatency90($var) + { + GPBUtil::checkDouble($var); + $this->latency_90 = $var; + } + + /** + * double latency_95 = 9; + */ + public function getLatency95() + { + return $this->latency_95; + } + + /** + * double latency_95 = 9; + */ + public function setLatency95($var) + { + GPBUtil::checkDouble($var); + $this->latency_95 = $var; + } + + /** + * double latency_99 = 10; + */ + public function getLatency99() + { + return $this->latency_99; + } + + /** + * double latency_99 = 10; + */ + public function setLatency99($var) + { + GPBUtil::checkDouble($var); + $this->latency_99 = $var; + } + + /** + * double latency_999 = 11; + */ + public function getLatency999() + { + return $this->latency_999; + } + + /** + * double latency_999 = 11; + */ + public function setLatency999($var) + { + GPBUtil::checkDouble($var); + $this->latency_999 = $var; + } + + /** + *
+     * server cpu usage percentage
+     * 
+ * + * double server_cpu_usage = 12; + */ + public function getServerCpuUsage() + { + return $this->server_cpu_usage; + } + + /** + *
+     * server cpu usage percentage
+     * 
+ * + * double server_cpu_usage = 12; + */ + public function setServerCpuUsage($var) + { + GPBUtil::checkDouble($var); + $this->server_cpu_usage = $var; + } + + /** + *
+     * Number of requests that succeeded/failed
+     * 
+ * + * double successful_requests_per_second = 13; + */ + public function getSuccessfulRequestsPerSecond() + { + return $this->successful_requests_per_second; + } + + /** + *
+     * Number of requests that succeeded/failed
+     * 
+ * + * double successful_requests_per_second = 13; + */ + public function setSuccessfulRequestsPerSecond($var) + { + GPBUtil::checkDouble($var); + $this->successful_requests_per_second = $var; + } + + /** + * double failed_requests_per_second = 14; + */ + public function getFailedRequestsPerSecond() + { + return $this->failed_requests_per_second; + } + + /** + * double failed_requests_per_second = 14; + */ + 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 00000000000..278f555b760 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Scenarios.php @@ -0,0 +1,48 @@ + + * A set of scenarios to be run with qps_json_driver + * + * + * Protobuf type grpc.testing.Scenarios + */ +class Scenarios extends \Google\Protobuf\Internal\Message +{ + /** + * repeated .grpc.testing.Scenario scenarios = 1; + */ + private $scenarios; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * repeated .grpc.testing.Scenario scenarios = 1; + */ + public function getScenarios() + { + return $this->scenarios; + } + + /** + * repeated .grpc.testing.Scenario scenarios = 1; + */ + 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 00000000000..27a5b95cc94 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/SecurityParams.php @@ -0,0 +1,69 @@ + + * presence of SecurityParams implies use of TLS + * + * + * Protobuf type grpc.testing.SecurityParams + */ +class SecurityParams extends \Google\Protobuf\Internal\Message +{ + /** + * bool use_test_ca = 1; + */ + private $use_test_ca = false; + /** + * string server_host_override = 2; + */ + private $server_host_override = ''; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * bool use_test_ca = 1; + */ + public function getUseTestCa() + { + return $this->use_test_ca; + } + + /** + * bool use_test_ca = 1; + */ + public function setUseTestCa($var) + { + GPBUtil::checkBool($var); + $this->use_test_ca = $var; + } + + /** + * string server_host_override = 2; + */ + public function getServerHostOverride() + { + return $this->server_host_override; + } + + /** + * string server_host_override = 2; + */ + 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 00000000000..0d84b80124a --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerArgs.php @@ -0,0 +1,63 @@ +grpc.testing.ServerArgs + */ +class ServerArgs extends \Google\Protobuf\Internal\Message +{ + protected $argtype; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * .grpc.testing.ServerConfig setup = 1; + */ + public function getSetup() + { + return $this->readOneof(1); + } + + /** + * .grpc.testing.ServerConfig setup = 1; + */ + public function setSetup(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ServerConfig::class); + $this->writeOneof(1, $var); + } + + /** + * .grpc.testing.Mark mark = 2; + */ + public function getMark() + { + return $this->readOneof(2); + } + + /** + * .grpc.testing.Mark mark = 2; + */ + 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 00000000000..e2bcede48cb --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerConfig.php @@ -0,0 +1,305 @@ +grpc.testing.ServerConfig + */ +class ServerConfig extends \Google\Protobuf\Internal\Message +{ + /** + * .grpc.testing.ServerType server_type = 1; + */ + private $server_type = 0; + /** + * .grpc.testing.SecurityParams security_params = 2; + */ + private $security_params = null; + /** + *
+     * Port on which to listen. Zero means pick unused port.
+     * 
+ * + * int32 port = 4; + */ + private $port = 0; + /** + *
+     * Only for async server. Number of threads used to serve the requests.
+     * 
+ * + * int32 async_server_threads = 7; + */ + private $async_server_threads = 0; + /** + *
+     * Specify the number of cores to limit server to, if desired
+     * 
+ * + * int32 core_limit = 8; + */ + private $core_limit = 0; + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadConfig payload_config = 9; + */ + private $payload_config = null; + /** + *
+     * Specify the cores we should run the server on, if desired
+     * 
+ * + * repeated int32 core_list = 10; + */ + private $core_list; + /** + *
+     * If we use an OTHER_SERVER client_type, this string gives more detail
+     * 
+ * + * string other_server_api = 11; + */ + private $other_server_api = ''; + /** + *
+     * Buffer pool size (no buffer pool specified if unset)
+     * 
+ * + * int32 resource_quota_size = 1001; + */ + private $resource_quota_size = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * .grpc.testing.ServerType server_type = 1; + */ + public function getServerType() + { + return $this->server_type; + } + + /** + * .grpc.testing.ServerType server_type = 1; + */ + public function setServerType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\ServerType::class); + $this->server_type = $var; + } + + /** + * .grpc.testing.SecurityParams security_params = 2; + */ + public function getSecurityParams() + { + return $this->security_params; + } + + /** + * .grpc.testing.SecurityParams security_params = 2; + */ + public function setSecurityParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\SecurityParams::class); + $this->security_params = $var; + } + + /** + *
+     * Port on which to listen. Zero means pick unused port.
+     * 
+ * + * int32 port = 4; + */ + public function getPort() + { + return $this->port; + } + + /** + *
+     * Port on which to listen. Zero means pick unused port.
+     * 
+ * + * int32 port = 4; + */ + public function setPort($var) + { + GPBUtil::checkInt32($var); + $this->port = $var; + } + + /** + *
+     * Only for async server. Number of threads used to serve the requests.
+     * 
+ * + * int32 async_server_threads = 7; + */ + public function getAsyncServerThreads() + { + return $this->async_server_threads; + } + + /** + *
+     * Only for async server. Number of threads used to serve the requests.
+     * 
+ * + * int32 async_server_threads = 7; + */ + public function setAsyncServerThreads($var) + { + GPBUtil::checkInt32($var); + $this->async_server_threads = $var; + } + + /** + *
+     * Specify the number of cores to limit server to, if desired
+     * 
+ * + * int32 core_limit = 8; + */ + public function getCoreLimit() + { + return $this->core_limit; + } + + /** + *
+     * Specify the number of cores to limit server to, if desired
+     * 
+ * + * int32 core_limit = 8; + */ + public function setCoreLimit($var) + { + GPBUtil::checkInt32($var); + $this->core_limit = $var; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadConfig payload_config = 9; + */ + public function getPayloadConfig() + { + return $this->payload_config; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadConfig payload_config = 9; + */ + public function setPayloadConfig(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\PayloadConfig::class); + $this->payload_config = $var; + } + + /** + *
+     * Specify the cores we should run the server on, if desired
+     * 
+ * + * repeated int32 core_list = 10; + */ + public function getCoreList() + { + return $this->core_list; + } + + /** + *
+     * Specify the cores we should run the server on, if desired
+     * 
+ * + * repeated int32 core_list = 10; + */ + public function setCoreList(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->core_list = $var; + } + + /** + *
+     * If we use an OTHER_SERVER client_type, this string gives more detail
+     * 
+ * + * string other_server_api = 11; + */ + public function getOtherServerApi() + { + return $this->other_server_api; + } + + /** + *
+     * If we use an OTHER_SERVER client_type, this string gives more detail
+     * 
+ * + * string other_server_api = 11; + */ + public function setOtherServerApi($var) + { + GPBUtil::checkString($var, True); + $this->other_server_api = $var; + } + + /** + *
+     * Buffer pool size (no buffer pool specified if unset)
+     * 
+ * + * int32 resource_quota_size = 1001; + */ + public function getResourceQuotaSize() + { + return $this->resource_quota_size; + } + + /** + *
+     * Buffer pool size (no buffer pool specified if unset)
+     * 
+ * + * int32 resource_quota_size = 1001; + */ + 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 00000000000..98b2af764c9 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStats.php @@ -0,0 +1,191 @@ +grpc.testing.ServerStats + */ +class ServerStats extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * wall clock time change in seconds since last reset
+     * 
+ * + * double time_elapsed = 1; + */ + private $time_elapsed = 0.0; + /** + *
+     * change in user time (in seconds) used by the server since last reset
+     * 
+ * + * double time_user = 2; + */ + private $time_user = 0.0; + /** + *
+     * change in server time (in seconds) used by the server process and all
+     * threads since last reset
+     * 
+ * + * double time_system = 3; + */ + private $time_system = 0.0; + /** + *
+     * change in total cpu time of the server (data from proc/stat)
+     * 
+ * + * uint64 total_cpu_time = 4; + */ + private $total_cpu_time = 0; + /** + *
+     * change in idle time of the server (data from proc/stat)
+     * 
+ * + * uint64 idle_cpu_time = 5; + */ + private $idle_cpu_time = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + *
+     * wall clock time change in seconds since last reset
+     * 
+ * + * double time_elapsed = 1; + */ + public function getTimeElapsed() + { + return $this->time_elapsed; + } + + /** + *
+     * wall clock time change in seconds since last reset
+     * 
+ * + * double time_elapsed = 1; + */ + public function setTimeElapsed($var) + { + GPBUtil::checkDouble($var); + $this->time_elapsed = $var; + } + + /** + *
+     * change in user time (in seconds) used by the server since last reset
+     * 
+ * + * double time_user = 2; + */ + public function getTimeUser() + { + return $this->time_user; + } + + /** + *
+     * change in user time (in seconds) used by the server since last reset
+     * 
+ * + * double time_user = 2; + */ + public function setTimeUser($var) + { + GPBUtil::checkDouble($var); + $this->time_user = $var; + } + + /** + *
+     * change in server time (in seconds) used by the server process and all
+     * threads since last reset
+     * 
+ * + * double time_system = 3; + */ + public function getTimeSystem() + { + return $this->time_system; + } + + /** + *
+     * change in server time (in seconds) used by the server process and all
+     * threads since last reset
+     * 
+ * + * double time_system = 3; + */ + public function setTimeSystem($var) + { + GPBUtil::checkDouble($var); + $this->time_system = $var; + } + + /** + *
+     * change in total cpu time of the server (data from proc/stat)
+     * 
+ * + * uint64 total_cpu_time = 4; + */ + public function getTotalCpuTime() + { + return $this->total_cpu_time; + } + + /** + *
+     * change in total cpu time of the server (data from proc/stat)
+     * 
+ * + * uint64 total_cpu_time = 4; + */ + public function setTotalCpuTime($var) + { + GPBUtil::checkUint64($var); + $this->total_cpu_time = $var; + } + + /** + *
+     * change in idle time of the server (data from proc/stat)
+     * 
+ * + * uint64 idle_cpu_time = 5; + */ + public function getIdleCpuTime() + { + return $this->idle_cpu_time; + } + + /** + *
+     * change in idle time of the server (data from proc/stat)
+     * 
+ * + * uint64 idle_cpu_time = 5; + */ + 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 00000000000..d293f03fbdf --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStatus.php @@ -0,0 +1,110 @@ +grpc.testing.ServerStatus + */ +class ServerStatus extends \Google\Protobuf\Internal\Message +{ + /** + * .grpc.testing.ServerStats stats = 1; + */ + private $stats = null; + /** + *
+     * the port bound by the server
+     * 
+ * + * int32 port = 2; + */ + private $port = 0; + /** + *
+     * Number of cores available to the server
+     * 
+ * + * int32 cores = 3; + */ + private $cores = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * .grpc.testing.ServerStats stats = 1; + */ + public function getStats() + { + return $this->stats; + } + + /** + * .grpc.testing.ServerStats stats = 1; + */ + public function setStats(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ServerStats::class); + $this->stats = $var; + } + + /** + *
+     * the port bound by the server
+     * 
+ * + * int32 port = 2; + */ + public function getPort() + { + return $this->port; + } + + /** + *
+     * the port bound by the server
+     * 
+ * + * int32 port = 2; + */ + public function setPort($var) + { + GPBUtil::checkInt32($var); + $this->port = $var; + } + + /** + *
+     * Number of cores available to the server
+     * 
+ * + * int32 cores = 3; + */ + public function getCores() + { + return $this->cores; + } + + /** + *
+     * Number of cores available to the server
+     * 
+ * + * int32 cores = 3; + */ + 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 00000000000..605c83c3f76 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerType.php @@ -0,0 +1,33 @@ +grpc.testing.ServerType + */ +class ServerType +{ + /** + * SYNC_SERVER = 0; + */ + const SYNC_SERVER = 0; + /** + * ASYNC_SERVER = 1; + */ + const ASYNC_SERVER = 1; + /** + * ASYNC_GENERIC_SERVER = 2; + */ + const ASYNC_GENERIC_SERVER = 2; + /** + *
+     * used for some language-specific variants
+     * 
+ * + * OTHER_SERVER = 3; + */ + 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 00000000000..29834a3be71 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleProtoParams.php @@ -0,0 +1,65 @@ +grpc.testing.SimpleProtoParams + */ +class SimpleProtoParams extends \Google\Protobuf\Internal\Message +{ + /** + * int32 req_size = 1; + */ + private $req_size = 0; + /** + * int32 resp_size = 2; + */ + private $resp_size = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce(); + parent::__construct(); + } + + /** + * int32 req_size = 1; + */ + public function getReqSize() + { + return $this->req_size; + } + + /** + * int32 req_size = 1; + */ + public function setReqSize($var) + { + GPBUtil::checkInt32($var); + $this->req_size = $var; + } + + /** + * int32 resp_size = 2; + */ + public function getRespSize() + { + return $this->resp_size; + } + + /** + * int32 resp_size = 2; + */ + 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 00000000000..f84c95319f4 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleRequest.php @@ -0,0 +1,306 @@ + + * Unary request. + * + * + * Protobuf type grpc.testing.SimpleRequest + */ +class SimpleRequest extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadType response_type = 1; + */ + private $response_type = 0; + /** + *
+     * Desired payload size in the response from the server.
+     * 
+ * + * int32 response_size = 2; + */ + private $response_size = 0; + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 3; + */ + private $payload = null; + /** + *
+     * Whether SimpleResponse should include username.
+     * 
+ * + * bool fill_username = 4; + */ + private $fill_username = false; + /** + *
+     * Whether SimpleResponse should include OAuth scope.
+     * 
+ * + * bool fill_oauth_scope = 5; + */ + private $fill_oauth_scope = false; + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue response_compressed = 6; + */ + private $response_compressed = null; + /** + *
+     * Whether server should return a given status
+     * 
+ * + * .grpc.testing.EchoStatus response_status = 7; + */ + private $response_status = null; + /** + *
+     * Whether the server should expect this request to be compressed.
+     * 
+ * + * .grpc.testing.BoolValue expect_compressed = 8; + */ + private $expect_compressed = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadType response_type = 1; + */ + public function getResponseType() + { + return $this->response_type; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadType response_type = 1; + */ + public function setResponseType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class); + $this->response_type = $var; + } + + /** + *
+     * Desired payload size in the response from the server.
+     * 
+ * + * int32 response_size = 2; + */ + public function getResponseSize() + { + return $this->response_size; + } + + /** + *
+     * Desired payload size in the response from the server.
+     * 
+ * + * int32 response_size = 2; + */ + public function setResponseSize($var) + { + GPBUtil::checkInt32($var); + $this->response_size = $var; + } + + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 3; + */ + public function getPayload() + { + return $this->payload; + } + + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 3; + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + + /** + *
+     * Whether SimpleResponse should include username.
+     * 
+ * + * bool fill_username = 4; + */ + public function getFillUsername() + { + return $this->fill_username; + } + + /** + *
+     * Whether SimpleResponse should include username.
+     * 
+ * + * bool fill_username = 4; + */ + public function setFillUsername($var) + { + GPBUtil::checkBool($var); + $this->fill_username = $var; + } + + /** + *
+     * Whether SimpleResponse should include OAuth scope.
+     * 
+ * + * bool fill_oauth_scope = 5; + */ + public function getFillOauthScope() + { + return $this->fill_oauth_scope; + } + + /** + *
+     * Whether SimpleResponse should include OAuth scope.
+     * 
+ * + * bool fill_oauth_scope = 5; + */ + public function setFillOauthScope($var) + { + GPBUtil::checkBool($var); + $this->fill_oauth_scope = $var; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue response_compressed = 6; + */ + public function getResponseCompressed() + { + return $this->response_compressed; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue response_compressed = 6; + */ + public function setResponseCompressed(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class); + $this->response_compressed = $var; + } + + /** + *
+     * Whether server should return a given status
+     * 
+ * + * .grpc.testing.EchoStatus response_status = 7; + */ + public function getResponseStatus() + { + return $this->response_status; + } + + /** + *
+     * Whether server should return a given status
+     * 
+ * + * .grpc.testing.EchoStatus response_status = 7; + */ + public function setResponseStatus(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\EchoStatus::class); + $this->response_status = $var; + } + + /** + *
+     * Whether the server should expect this request to be compressed.
+     * 
+ * + * .grpc.testing.BoolValue expect_compressed = 8; + */ + public function getExpectCompressed() + { + return $this->expect_compressed; + } + + /** + *
+     * Whether the server should expect this request to be compressed.
+     * 
+ * + * .grpc.testing.BoolValue expect_compressed = 8; + */ + 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 00000000000..ccc628ec4c0 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleResponse.php @@ -0,0 +1,129 @@ + + * Unary response, as configured by the request. + * + * + * Protobuf type grpc.testing.SimpleResponse + */ +class SimpleResponse extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Payload to increase message size.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + private $payload = null; + /** + *
+     * The user the request came from, for verifying authentication was
+     * successful when the client expected it.
+     * 
+ * + * string username = 2; + */ + private $username = ''; + /** + *
+     * OAuth scope.
+     * 
+ * + * string oauth_scope = 3; + */ + private $oauth_scope = ''; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * Payload to increase message size.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + public function getPayload() + { + return $this->payload; + } + + /** + *
+     * Payload to increase message size.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + + /** + *
+     * The user the request came from, for verifying authentication was
+     * successful when the client expected it.
+     * 
+ * + * string username = 2; + */ + public function getUsername() + { + return $this->username; + } + + /** + *
+     * The user the request came from, for verifying authentication was
+     * successful when the client expected it.
+     * 
+ * + * string username = 2; + */ + public function setUsername($var) + { + GPBUtil::checkString($var, True); + $this->username = $var; + } + + /** + *
+     * OAuth scope.
+     * 
+ * + * string oauth_scope = 3; + */ + public function getOauthScope() + { + return $this->oauth_scope; + } + + /** + *
+     * OAuth scope.
+     * 
+ * + * string oauth_scope = 3; + */ + 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 00000000000..d7bbc707799 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallRequest.php @@ -0,0 +1,102 @@ + + * Client-streaming request. + * + * + * Protobuf type grpc.testing.StreamingInputCallRequest + */ +class StreamingInputCallRequest extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + private $payload = null; + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue expect_compressed = 2; + */ + private $expect_compressed = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + public function getPayload() + { + return $this->payload; + } + + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue expect_compressed = 2; + */ + public function getExpectCompressed() + { + return $this->expect_compressed; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.BoolValue expect_compressed = 2; + */ + 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 00000000000..fdd1d0dbf8a --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallResponse.php @@ -0,0 +1,60 @@ + + * Client-streaming response. + * + * + * Protobuf type grpc.testing.StreamingInputCallResponse + */ +class StreamingInputCallResponse extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Aggregated size of payloads received from the client.
+     * 
+ * + * int32 aggregated_payload_size = 1; + */ + private $aggregated_payload_size = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * Aggregated size of payloads received from the client.
+     * 
+ * + * int32 aggregated_payload_size = 1; + */ + public function getAggregatedPayloadSize() + { + return $this->aggregated_payload_size; + } + + /** + *
+     * Aggregated size of payloads received from the client.
+     * 
+ * + * int32 aggregated_payload_size = 1; + */ + 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 00000000000..2aab5fadad7 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallRequest.php @@ -0,0 +1,171 @@ + + * Server-streaming request. + * + * + * Protobuf type grpc.testing.StreamingOutputCallRequest + */ +class StreamingOutputCallRequest extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadType response_type = 1; + */ + private $response_type = 0; + /** + *
+     * Configuration for each expected response message.
+     * 
+ * + * repeated .grpc.testing.ResponseParameters response_parameters = 2; + */ + private $response_parameters; + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 3; + */ + private $payload = null; + /** + *
+     * Whether server should return a given status
+     * 
+ * + * .grpc.testing.EchoStatus response_status = 7; + */ + private $response_status = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadType response_type = 1; + */ + public function getResponseType() + { + return $this->response_type; + } + + /** + *
+     * 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.
+     * 
+ * + * .grpc.testing.PayloadType response_type = 1; + */ + public function setResponseType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class); + $this->response_type = $var; + } + + /** + *
+     * Configuration for each expected response message.
+     * 
+ * + * repeated .grpc.testing.ResponseParameters response_parameters = 2; + */ + public function getResponseParameters() + { + return $this->response_parameters; + } + + /** + *
+     * Configuration for each expected response message.
+     * 
+ * + * repeated .grpc.testing.ResponseParameters response_parameters = 2; + */ + public function setResponseParameters(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ResponseParameters::class); + $this->response_parameters = $var; + } + + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 3; + */ + public function getPayload() + { + return $this->payload; + } + + /** + *
+     * Optional input payload sent along with the request.
+     * 
+ * + * .grpc.testing.Payload payload = 3; + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + + /** + *
+     * Whether server should return a given status
+     * 
+ * + * .grpc.testing.EchoStatus response_status = 7; + */ + public function getResponseStatus() + { + return $this->response_status; + } + + /** + *
+     * Whether server should return a given status
+     * 
+ * + * .grpc.testing.EchoStatus response_status = 7; + */ + 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 00000000000..c06c78c9d8f --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallResponse.php @@ -0,0 +1,60 @@ + + * Server-streaming response, as configured by the request and parameters. + * + * + * Protobuf type grpc.testing.StreamingOutputCallResponse + */ +class StreamingOutputCallResponse extends \Google\Protobuf\Internal\Message +{ + /** + *
+     * Payload to increase response size.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + private $payload = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + *
+     * Payload to increase response size.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + public function getPayload() + { + return $this->payload; + } + + /** + *
+     * Payload to increase response size.
+     * 
+ * + * .grpc.testing.Payload payload = 1; + */ + 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 00000000000..38c100845a0 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Void.php @@ -0,0 +1,23 @@ +grpc.testing.Void + */ +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 00000000000..0a68e41269e --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/WorkerServiceClient.php @@ -0,0 +1,111 @@ +_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 00000000000..7b7de8d5494 --- /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 a9f20e6d2a8..cb6ca34dc68 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 c197e92ca58..267d848e743 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 f0f11cf84b0..e92c2659b7e 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 c1807e9f1c2..4ff5e266a1f 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 3778dcd3e0b..8ffc08c04b8 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 33824b6b8fc..ba82dce6f6d 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 363b4c5f994..1bc8669dad9 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 58f3b364bad..3325d54375a 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 5fe929b99ed..857e00efb3a 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 662ea9ce570..e1016f7c0d5 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 65f1604eb82..0ae2c97b427 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 db938e65459..6f9269dd402 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 025dfb9d4a7..7cd53e7bd9a 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 ca1a777611c..de9535f46eb 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 d06ff064e24..4d73be6204c 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 b9dbe61d44b..b7eb12bff86 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 52465a4dd70..3ef6f0eb299 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 b16e6738781..ef9845dfe06 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 ce0892decfb..9901158e735 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 00000000000..077920d1d3c --- /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 ]' + opts.on('--driver_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 00000000000..d238198cca3 --- /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 00000000000..37ddbf5b030 --- /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 8f3d2ba81cc..632c0100bd8 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 430f3fa3f22..058ce15fb52 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 6204c3e2cb2..12b99844253 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 76bb57346c0..af551c4928e 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 a29e9aca4e6..55a74c6d019 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 a0a33667cc8..00000000000 --- 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 - -#include -#include -#include -#include -#include -#include - -#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 cb0afd9cd99..cdb26a67e9d 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 d2d6e82d574..65216cf19dc 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 25e606556da..c968f30b3b8 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 d05e9e79a11..2428c92a42b 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 7540ce93a1b..d7a4106459d 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 4f9ed7a3a17..db26b4480e0 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 42055907c85..2b9c404b15a 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 diff --git a/test/core/iomgr/error_test.c b/test/core/iomgr/error_test.c new file mode 100644 index 00000000000..2a6b1b17fde --- /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 +#include +#include +#include +#include + +#include + +#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 f8938d0abb7..064119f11b9 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 7b458c90f3d..0fc74599ea5 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 d57a37b2a97..396ec959cdc 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 09f0e2d8670..107abbc1b3d 100644 --- a/test/core/memory_usage/client.c +++ b/test/core/memory_usage/client.c @@ -43,6 +43,7 @@ #include #include #include +#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 e750c39b7c6..1cb03c5cfe7 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 f789278add8..7a3612c419b 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 00000000000..35b2bbd1b10 --- /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 +#include +#include +#include +#include +#include +#include +#include + +#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 ca0fe0ccb50..7b9bf6c5e1d 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 00000000000..04d48d6d76f 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 7c8b620f34f..c27065f2605 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 7ab0488a660..0848147158a 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 @@ -40,9 +42,6 @@ #include #include #include - -#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 190d32ce060..9bcc9f99f68 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 01c07823cfe..38a437f39f8 100644 --- a/test/cpp/interop/http2_client.cc +++ b/test/cpp/interop/http2_client.cc @@ -41,7 +41,7 @@ #include #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 12df5d26bc2..e57d695205b 100644 --- a/test/cpp/interop/http2_client.h +++ b/test/cpp/interop/http2_client.h @@ -38,7 +38,7 @@ #include #include -#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 b7f2723c39b..55ba324cc7d 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -46,8 +46,8 @@ #include #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 74f4db6b789..efcb7d28608 100644 --- a/test/cpp/interop/interop_client.h +++ b/test/cpp/interop/interop_client.h @@ -38,7 +38,7 @@ #include #include -#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 5a810b45ef4..1cbca179287 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 1c2f6066377..01d985068dc 100644 --- a/test/cpp/interop/reconnect_interop_client.cc +++ b/test/cpp/interop/reconnect_interop_client.cc @@ -40,8 +40,8 @@ #include #include #include -#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 634d0a90fce..8d1b884af91 100644 --- a/test/cpp/interop/reconnect_interop_server.cc +++ b/test/cpp/interop/reconnect_interop_server.cc @@ -47,8 +47,8 @@ #include #include -#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 00000000000..770c0b6d474 --- /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 cc57fd9098a..b34d0d1e12b 100644 --- a/test/cpp/microbenchmarks/bm_call_create.cc +++ b/test/cpp/microbenchmarks/bm_call_create.cc @@ -38,6 +38,7 @@ #include #include +#include #include #include #include @@ -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(static_cast(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(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 00000000000..254d57de205 --- /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 +#include +#include +#include +#include +#include +#include +#include +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(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(ep)->ru_); + grpc_closure_sched(exec_ctx, static_cast(ep)->read_cb_, + why); + } + + static void destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { + grpc_resource_user_unref(exec_ctx, static_cast(ep)->ru_); + delete static_cast(ep); + } + + static grpc_resource_user *get_resource_user(grpc_endpoint *ep) { + return static_cast(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(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(stream_), &refcount_, + NULL, arena_); + } + + void DestroyThen(grpc_closure *closure) { + grpc_transport_destroy_stream(f_->exec_ctx(), f_->transport(), + static_cast(stream_), closure); + } + + void Op(grpc_transport_stream_op *op) { + grpc_transport_perform_stream_op(f_->exec_ctx(), f_->transport(), + static_cast(stream_), op); + } + + grpc_chttp2_stream *chttp2_stream() { + return static_cast(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 +std::unique_ptr 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(arg)->f_(exec_ctx, error); + } + }; + return std::unique_ptr(new C(f, sched)); +} + +template +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(arg)->f_(exec_ctx, error); + delete static_cast(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 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 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 +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 start; + std::unique_ptr done; + + grpc_metadata_batch b; + grpc_metadata_batch_init(&b); + b.deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + std::vector elems = Metadata::GetElems(f.exec_ctx()); + std::vector 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 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 elems = + RepresentativeClientInitialMetadata::GetElems(f.exec_ctx()); + std::vector 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 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 unframed; + + unframed.push(static_cast(0)); + unframed.push(static_cast(length >> 24)); + unframed.push(static_cast(length >> 16)); + unframed.push(static_cast(length >> 8)); + unframed.push(static_cast(length)); + for (size_t i = 0; i < length; i++) { + unframed.push('a'); + } + + std::vector framed; + while (unframed.size() > frame_size) { + // frame size + framed.push_back(static_cast(frame_size >> 16)); + framed.push_back(static_cast(frame_size >> 8)); + framed.push_back(static_cast(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(unframed.size() >> 16)); + framed.push_back(static_cast(unframed.size() >> 8)); + framed.push_back(static_cast(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 elems = + RepresentativeClientInitialMetadata::GetElems(f.exec_ctx()); + std::vector 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 do_nothing = + MakeClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {}); + + uint32_t received; + + std::unique_ptr drain_start; + std::unique_ptr drain; + std::unique_ptr drain_continue; + grpc_slice recv_slice; + + std::unique_ptr 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 414edbcdb28..cf7b887728d 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 5c1eb1165b5..cafd4843d38 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(x); } -template -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 +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(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 response_rw(&svr_ctx); - service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(), - fixture->cq(), tag(0)); + std::unique_ptr 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 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 -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 +static void BM_StreamingPingPongMsgs(benchmark::State& state) { + const int msg_size = state.range(0); + EchoTestService::AsyncService service; std::unique_ptr 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 stub( + EchoTestService::NewStub(fixture->channel())); + ServerContext svr_ctx; + ServerContextMutator svr_ctx_mut(&svr_ctx); ServerAsyncReaderWriter response_rw(&svr_ctx); service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(), fixture->cq(), tag(0)); - std::unique_ptr 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 a077c3130ec..7029f369ad8 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 00000000000..0f3d3cef66a --- /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 +#include +#include +#include + +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 + +#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL +#include +#include +#include +#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(ps)); +} + +static void BM_CreateDestroyPollset(benchmark::State& state) { + TrackCounters track_counters; + size_t ps_sz = grpc_pollset_size(); + grpc_pollset* ps = static_cast(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 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(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 +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(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(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 947e81ffd83..d277c5984cd 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 6475b5c65ca..49ed517b1d7 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 baa9304cc2d..25a19a5a740 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -46,7 +46,7 @@ #include #include -#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 4032039ea10..396d308e2a5 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 498416c64a1..a944c454960 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 e72d30a4eff..dd32a16c879 100644 --- a/test/cpp/qps/driver.h +++ b/test/cpp/qps/driver.h @@ -36,7 +36,7 @@ #include -#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 acb415f0a10..470a3943013 100644 --- a/test/cpp/qps/histogram.h +++ b/test/cpp/qps/histogram.h @@ -35,7 +35,7 @@ #define TEST_QPS_HISTOGRAM_H #include -#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 ddaaa7ca75e..bd2c1f0ec67 100644 --- a/test/cpp/qps/qps_json_driver.cc +++ b/test/cpp/qps/qps_json_driver.cc @@ -31,6 +31,7 @@ * */ +#include #include #include diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h index 821d5935beb..8fbf37a0957 100644 --- a/test/cpp/qps/server.h +++ b/test/cpp/qps/server.h @@ -38,8 +38,8 @@ #include #include -#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 b3a06aeaf53..b58d91eea63 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 8076a4a6b9a..f79284d2254 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 00000000000..1d9eda17b40 --- /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 +#include + +#include +#include + +#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 00000000000..dd9402b8557 --- /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 abde3433ad2..46c3e00d18f 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 ba9825acb91..5fc28ddd31f 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 263785b774b..ad35b90bad3 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 007b14810eb..f28a1ce8bae 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 91639829dcd..c26c9a2826e 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 66d9b4f6403..acc984acb0d 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 91639829dcd..c26c9a2826e 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 965259746cf..5e6333dc899 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 d98475fb00c..8b7ec50a930 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 478bdb2d042..e15c1577517 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 a7d6aaeb9ef..dba0f4c1721 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 00000000000..8871ae21b6a --- /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 00000000000..fd2eebf7d25 --- /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 00000000000..5d468bc6e48 --- /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 00000000000..5dcdfac7a69 --- /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 00000000000..5dcdfac7a69 --- /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 00000000000..584487fafc2 --- /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 00000000000..ea2785e1104 --- /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 00000000000..ea2785e1104 --- /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 00000000000..fd32ac16e1b --- /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 00000000000..fd32ac16e1b --- /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 00000000000..fd2eebf7d25 --- /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 00000000000..60bd9b0b2fa --- /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 00000000000..5dcdfac7a69 --- /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 00000000000..b22f8731f68 --- /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 + /image_foo: + 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 7536a91a679..6c94c3b4d8f 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 d01d6375e9a..9ecf1239594 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 00000000000..a2a9407128b --- /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 00000000000..d22387fb203 --- /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 00000000000..5cc49f10462 --- /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 00000000000..58d3c58e707 --- /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 ce5be5abe97..4d3dda40822 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 ebdc0e82d76..80b5c4cb960 --- 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 511f2d6b35b..1abf6ac600b 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 f90af113085..21a9d6a985d 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 00000000000..b98c70146c4 --- /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 00000000000..10d8e985910 --- /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 e9baee09574..41423fc3c19 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 a83b3be89c9..ffb11f57d8f 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 00000000000..14ea24f65e6 --- /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 00000000000..ca0af414a3b --- /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 e0658f4678d..04702baccae 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 a7535b38521..90bbde83cf4 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 d490f571c37..2547f2073cf 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 9173bd7c19c..69e0f447743 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 22cf618c229..14ad133863a 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 402dabc554d..fc8019509ca 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 89d2a9b320f..3bac1199a7b 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 830b8c0849d..1d91b61ba45 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 857addfb386..111839ccf93 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 0869c5cee9b..709fc121a9b 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 3734f025d5f..e0133762959 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 f3047431e2a..5d812f28ee9 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 e9b3f7ff795..dbd32efc0e8 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 9dad60408f2..131772f55fc 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 654cf95a38c..dd11a45e789 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 0d5bec1d67f..ce4dfb863ea 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 4fb1d5fc7c2..6bedc54941a 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 += "\n\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 += "\n\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 ee4102c5913..35d20be5b75 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 a94a615b886..4eea02118e5 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 43b8f8184e2..cba91a9a632 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 47422451f8d..b9bf6e50373 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 a86db02b80b..f2e0bfeb3d4 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 290a6e2ddf6..ba03f112092 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 e62f3908185..d247260dbbb 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 afac10bf80e..c3c3cbec767 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 e33ac12bd3b..bfd72222b66 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 cb1a33961e4..6f4ada2f4fd 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 e2be76e245a..b190ebde7a4 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 fdc46682223..0ec7efbbee6 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 765fa098f92..e0c79072288 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 00000000000..9869f98a22e --- /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 ad7bffd6b49..c8fcacf75b1 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 44c21ddeb31..32dedee55d3 100644 --- a/vsprojects/vcxproj/gpr/gpr.vcxproj +++ b/vsprojects/vcxproj/gpr/gpr.vcxproj @@ -188,6 +188,7 @@ + @@ -208,6 +209,10 @@ + + + + diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters index a5924a624a8..94699c8ff8c 100644 --- a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters +++ b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters @@ -10,6 +10,12 @@ src\core\lib\support + + src\core\lib\support + + + src\core\lib\support + src\core\lib\support @@ -254,6 +260,9 @@ src\core\lib\profiling + + src\core\lib\support + src\core\lib\support diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj b/vsprojects/vcxproj/grpc++/grpc++.vcxproj index 45f3037e8ab..c85454a6dda 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj @@ -270,6 +270,7 @@ + @@ -414,6 +415,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters index 95cdb7434c1..d800b297e9f 100644 --- a/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++/grpc++.vcxproj.filters @@ -70,6 +70,9 @@ src\cpp\server + + src\cpp\server + src\cpp\server @@ -162,6 +165,9 @@ include\grpc++\impl + + include\grpc++\impl + include\grpc++\impl diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj index 22ea361a02e..45c0ecd35d0 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj @@ -270,6 +270,7 @@ + @@ -398,6 +399,8 @@ + + diff --git a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters index c3cef2d4df5..987d56d6a09 100644 --- a/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc++_unsecure/grpc++_unsecure.vcxproj.filters @@ -55,6 +55,9 @@ src\cpp\server + + src\cpp\server + src\cpp\server @@ -147,6 +150,9 @@ include\grpc++\impl + + include\grpc++\impl + include\grpc++\impl diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index fde60be3e20..afe72746e94 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -357,6 +357,7 @@ + @@ -456,7 +457,6 @@ - @@ -466,6 +466,7 @@ + @@ -618,6 +619,12 @@ + + + + + + @@ -850,14 +857,10 @@ - - - - @@ -876,6 +879,8 @@ + + diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 8edbbc22bed..a7d32afbe1b 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -181,6 +181,15 @@ src\core\lib\iomgr + + src\core\lib\iomgr + + + src\core\lib\iomgr + + + src\core\lib\iomgr + src\core\lib\iomgr @@ -529,18 +538,12 @@ src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel @@ -568,6 +571,9 @@ src\core\ext\client_channel + + src\core\ext\client_channel + src\core\ext\client_channel @@ -944,6 +950,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -1241,9 +1250,6 @@ src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel @@ -1271,6 +1277,9 @@ src\core\ext\client_channel + + src\core\ext\client_channel + src\core\ext\client_channel diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index e7c9fb71f33..62969e31acf 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 @@ + @@ -461,6 +462,12 @@ + + + + + + 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 3d36948aaef..30088101f5f 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 @@ src\core\lib\iomgr + + src\core\lib\iomgr + + + src\core\lib\iomgr + + + src\core\lib\iomgr + src\core\lib\iomgr @@ -728,6 +737,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 22f4740b8fa..46069134a1e 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -347,6 +347,7 @@ + @@ -422,7 +423,6 @@ - @@ -432,6 +432,7 @@ + @@ -585,6 +586,12 @@ + + + + + + @@ -767,14 +774,10 @@ - - - - @@ -793,6 +796,8 @@ + + diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 5021cb47d8d..d658f4d5740 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -184,6 +184,15 @@ src\core\lib\iomgr + + src\core\lib\iomgr + + + src\core\lib\iomgr + + + src\core\lib\iomgr + src\core\lib\iomgr @@ -457,18 +466,12 @@ src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel @@ -496,6 +499,9 @@ src\core\ext\client_channel + + src\core\ext\client_channel + src\core\ext\client_channel @@ -854,6 +860,9 @@ src\core\lib\iomgr + + src\core\lib\iomgr + src\core\lib\iomgr @@ -1079,9 +1088,6 @@ src\core\ext\client_channel - - src\core\ext\client_channel - src\core\ext\client_channel @@ -1109,6 +1115,9 @@ src\core\ext\client_channel + + src\core\ext\client_channel + src\core\ext\client_channel 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 00000000000..5ae2f8e483c --- /dev/null +++ b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj @@ -0,0 +1,193 @@ + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {D85AC722-A88F-4280-F62E-672F571787FF} + true + $(SolutionDir)IntDir\$(MSBuildProjectName)\ + + + + v100 + + + v110 + + + v120 + + + v140 + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + arena_test + static + Debug + static + Debug + + + arena_test + static + Release + static + Release + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + + + + + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + + + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + + + + + + + + + + + + + + + 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}. + + + + + + + + + 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 00000000000..c470f175272 --- /dev/null +++ b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj.filters @@ -0,0 +1,21 @@ + + + + + test\core\support + + + + + + {130788b2-eacc-90df-a4f6-f5102a7d3370} + + + {5c3e1753-6fdb-9476-f98c-a3a394fac54a} + + + {1d3d2cc8-4e69-8b2e-6ceb-6569fcb19a86} + + + + 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 a438391f252..c7d0e5a1000 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 @@ - {4A48E5A5-2E69-ED6D-063C-C297180A54D0} + {42720233-A6D4-66BC-CCA2-06B57261D0B3} true $(SolutionDir)IntDir\$(MSBuildProjectName)\ @@ -60,14 +60,14 @@ - set_initial_connect_string_test + error_test static Debug static Debug - set_initial_connect_string_test + error_test static Release static @@ -158,13 +158,10 @@ - + - - {E3110C46-A148-FF65-08FD-3324829BE7FE} - {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} 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 00000000000..d2bb372482f --- /dev/null +++ b/vsprojects/vcxproj/test/error_test/error_test.vcxproj.filters @@ -0,0 +1,21 @@ + + + + + test\core\iomgr + + + + + + {3226d467-9fe9-12e9-8b53-f24f5a4c34c0} + + + {3d86bf5c-b8eb-36f4-efe2-7e8596188481} + + + {91f383bc-92fa-7058-d971-20189eadc0ad} + + + + 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 00000000000..ebbfd59f3d3 --- /dev/null +++ b/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj @@ -0,0 +1,223 @@ + + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + + {60523734-00BD-765B-5A5B-19E19A2E31B8} + true + $(SolutionDir)IntDir\$(MSBuildProjectName)\ + + + + v100 + + + v110 + + + v120 + + + v140 + + + Application + true + Unicode + + + Application + false + true + Unicode + + + + + + + + + + + + + + + + server_builder_test + static + Debug + static + Debug + + + server_builder_test + static + Release + static + Release + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + MultiThreadedDebug + true + None + false + + + Console + true + false + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + NotUsing + Level3 + MaxSpeed + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + true + true + true + MultiThreaded + true + None + false + + + Console + true + false + true + true + + + + + + + + + + + + + + + + + + + + + + + + + + {0BE77741-552A-929B-A497-4EF7ECE17A64} + + + {17BCAFC0-5FDC-4C94-AEB9-95F3E220614B} + + + {EAB0A629-17A9-44DB-B5FF-E91A721FE037} + + + {C187A093-A0FE-489D-A40A-6E33DE0F9FEB} + + + {29D16885-7228-4C31-81ED-5F9187C7F2A9} + + + {B23D3D1A-9438-4EDA-BEB6-9A0A03D17792} + + + + + + + + + + + + + + + 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}. + + + + + + + + + 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 00000000000..c323b7a6731 --- /dev/null +++ b/vsprojects/vcxproj/test/server_builder_test/server_builder_test.vcxproj.filters @@ -0,0 +1,39 @@ + + + + + src\proto\grpc\testing + + + src\proto\grpc\testing + + + test\cpp\server + + + + + + {828e0ffc-a89a-de93-ae06-706d522188a1} + + + {538db689-e85f-c369-7020-8d78e0ee5049} + + + {351168ef-9b4f-6165-ff4f-0e13781910db} + + + {530a1a67-0a37-50f8-42d0-7ccf0ec34cfc} + + + {67afe178-6a18-fd24-bbe6-656fee5a5f10} + + + {aaa8777b-1bc3-abaa-5e6d-28040c5aa213} + + + {af770080-f515-c773-3ae0-243d5929bbd0} + + + + 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 4422a3e7925..00000000000 --- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters +++ /dev/null @@ -1,21 +0,0 @@ - - - - - test\core\client_channel - - - - - - {413358e4-3165-f09d-071c-ee4f2ca0b826} - - - {a554b5ef-0c80-ac03-1848-bccd947a06a6} - - - {4726253c-a562-0ace-2798-996807381208} - - - -