diff options
337 files changed, 17026 insertions, 3084 deletions
@@ -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 d0a65b4493..5a8bff5534 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) @@ -456,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) @@ -574,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) @@ -603,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) @@ -690,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 @@ -914,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 @@ -1030,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 @@ -1043,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 @@ -1223,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 @@ -1312,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 @@ -1325,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 @@ -1523,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 @@ -1769,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 @@ -1860,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 @@ -1873,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 @@ -2376,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 @@ -2441,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 @@ -2454,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 @@ -4112,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 ) @@ -6830,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 ) @@ -7626,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 @@ -7704,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 @@ -8014,6 +8111,45 @@ target_link_libraries(bm_metadata 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) add_executable(channel_arguments_test test/cpp/common/channel_arguments_test.cc @@ -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 @@ -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 @@ -1017,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 @@ -1047,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 @@ -1057,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 @@ -1285,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 \ @@ -1379,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 \ @@ -1468,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 \ @@ -1478,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 \ @@ -1583,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 \ @@ -1593,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 \ @@ -1663,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" @@ -1835,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" @@ -1923,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" @@ -1943,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" @@ -2594,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 \ @@ -2799,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 \ @@ -2915,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 \ @@ -2928,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 \ @@ -3111,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 \ @@ -3200,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 \ @@ -3213,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 \ @@ -3414,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 \ @@ -3640,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 \ @@ -3731,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 \ @@ -3744,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 \ @@ -4249,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 \ @@ -4314,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 \ @@ -4327,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 \ @@ -8094,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 \ @@ -11646,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 \ @@ -12639,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 \ @@ -12725,6 +12796,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 \ @@ -13069,6 +13183,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 \ diff --git a/binding.gyp b/binding.gyp index c521a27c30..2ec57768ae 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 a32a8a06d3..72b15374c6 100644 --- a/build.yaml +++ b/build.yaml @@ -13,7 +13,7 @@ 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 + g_stands_for: gentle version: 1.3.0-dev filegroups: - name: census @@ -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 @@ -1483,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 @@ -2589,6 +2603,8 @@ targets: - grpc - gpr_test_util - gpr + exclude_iomgrs: + - uv platforms: - mac - linux @@ -2682,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 @@ -3052,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++ @@ -3092,6 +3114,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++ @@ -3268,6 +3310,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 @@ -4233,8 +4295,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 @@ -4242,7 +4304,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 @@ -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 0000000000..9e9d077273 --- /dev/null +++ b/doc/combiner-explainer.md @@ -0,0 +1,158 @@ +# Combiner Explanation +## Talk by ctiller, notes by vjpai + +Typical way of doing critical section + +``` +mu.lock() +do_stuff() +mu.unlock() +``` + +An alternative way of doing it is + +``` +class combiner { + run(f) { + mu.lock() + f() + mu.unlock() + } + mutex mu; +} + +combiner.run(do_stuff) +``` + +If you have two threads calling combiner, there will be some kind of +queuing in place. It's called `combiner` because you can pass in more +than one do_stuff at once and they will run under a common `mu`. + +The implementation described above has the issue that you're blocking a thread +for a period of time, and this is considered harmful because it's an application thread that you're blocking. + +Instead, get a new property: +* Keep things running in serial execution +* Don't ever sleep the thread +* But maybe allow things to end up running on a different thread from where they were started +* This means that `do_stuff` doesn't necessarily run to completion when `combiner.run` is invoked + +``` +class combiner { + mpscq q; // multi-producer single-consumer queue can be made non-blocking + state s; // is it empty or executing + + run(f) { + if (q.push(f)) { + // q.push returns true if it's the first thing + while (q.pop(&f)) { // modulo some extra work to avoid races + f(); + } + } + } +} +``` + +The basic idea is that the first one to push onto the combiner +executes the work and then keeps executing functions from the queue +until the combiner is drained. + +Our combiner does some additional work, with the motivation of write-batching. + +We have a second tier of `run` called `run_finally`. Anything queued +onto `run_finally` runs after we have drained the queue. That means +that there is essentially a finally-queue. This is not guaranteed to +be final, but it's best-effort. In the process of running the finally +item, we might put something onto the main combiner queue and so we'll +need to re-enter. + +`chttp2` runs all ops in the run state except if it sees a write it puts that into a finally. That way anything else that gets put into the combiner can add to that write. + +``` +class combiner { + mpscq q; // multi-producer single-consumer queue can be made non-blocking + state s; // is it empty or executing + queue finally; // you can only do run_finally when you are already running something from the combiner + + run(f) { + if (q.push(f)) { + // q.push returns true if it's the first thing + loop: + while (q.pop(&f)) { // modulo some extra work to avoid races + f(); + } + while (finally.pop(&f)) { + f(); + } + goto loop; + } + } +} +``` + +So that explains how combiners work in general. In gRPC, there is +`start_batch(..., tag)` and then work only gets activated by somebody +calling `cq::next` which returns a tag. This gives an API-level +guarantee that there will be a thread doing polling to actually make +work happen. However, some operations are not covered by a poller +thread, such as cancellation that doesn't have a completion. Other +callbacks that don't have a completion are the internal work that gets +done before the batch gets completed. We need a condition called +`covered_by_poller` that means that the item will definitely need some +thread at some point to call `cq::next` . This includes those +callbacks that directly cause a completion but also those that are +indirectly required before getting a completion. If we can't tell for +sure for a specific path, we have to assumed it is not covered by +poller. + +The above combiner has the problem that it keeps draining for a +potentially infinite amount of time and that can lead to a huge tail +latency for some operations. So we can tweak it by returning to the application +if we know that it is valid to do so: + +``` +while (q.pop(&f)) { + f(); + if (control_can_be_returned && some_still_queued_thing_is_covered_by_poller) { + offload_combiner_work_to_some_other_thread(); + } +} +``` + +`offload` is more than `break`; it does `break` but also causes some +other thread that is currently waiting on a poll to break out of its +poll. This is done by setting up a per-polling-island work-queue +(distributor) wakeup FD. The work-queue is the converse of the combiner; it +tries to spray events onto as many threads as possible to get as much concurrency as possible. + +So `offload` really does: + +``` + workqueue.run(continue_from_while_loop); + break; +``` + +This needs us to add another class variable for a `workqueue` +(which is really conceptually a distributor). + +``` +workqueue::run(f) { + q.push(f) + eventfd.wakeup() +} + +workqueue::readable() { + eventfd.consume(); + q.pop(&f); + f(); + if (!q.empty()) { + eventfd.wakeup(); // spray across as many threads as are waiting on this workqueue + } +} +``` + +In principle, `run_finally` could get starved, but this hasn't +happened in practice. If we were concerned about this, we could put a +limit on how many things come off the regular `q` before the `finally` +queue gets processed. + diff --git a/doc/core/grpc-error.md b/doc/core/grpc-error.md new file mode 100644 index 0000000000..c05d1dd909 --- /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_FROM_STATIC_STRING("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_FROM_STATIC_STRING("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_FROM_STATIC_STRING("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_FROM_STATIC_STRING("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_FROM_STATIC_STRING("Some error"); + 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 53a1fdf193..d2fc7a50f9 100644 --- a/doc/g_stands_for.md +++ b/doc/g_stands_for.md @@ -7,3 +7,4 @@ future), and the corresponding version numbers that used them: - 1.0 'g' stands for 'gRPC' - 1.1 'g' stands for 'good' - 1.2 'g' stands for 'green' +- 1.3 'g' stands for 'gentle' diff --git a/examples/node/static_codegen/README.md b/examples/node/static_codegen/README.md index fc97d34a38..0441b27f25 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 027babcda4..6d1a59766e 100644 --- a/gRPC-Core.podspec +++ b/gRPC-Core.podspec @@ -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.gemspec b/grpc.gemspec index 8d5b7b2ab1..8074df266c 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/include/grpc++/support/channel_arguments.h b/include/grpc++/support/channel_arguments.h index efdf7772ad..61307d6194 100644 --- a/include/grpc++/support/channel_arguments.h +++ b/include/grpc++/support/channel_arguments.h @@ -54,7 +54,7 @@ class ResourceQuota; class ChannelArguments { public: ChannelArguments(); - ~ChannelArguments() {} + ~ChannelArguments(); ChannelArguments(const ChannelArguments& other); ChannelArguments& operator=(ChannelArguments other) { @@ -117,10 +117,10 @@ class ChannelArguments { /// Return (by value) a c grpc_channel_args structure which points to /// arguments owned by this ChannelArguments instance - grpc_channel_args c_channel_args() { + grpc_channel_args c_channel_args() const { grpc_channel_args out; out.num_args = args_.size(); - out.args = args_.empty() ? NULL : &args_[0]; + out.args = args_.empty() ? NULL : const_cast<grpc_arg*>(&args_[0]); return out; } diff --git a/include/grpc/impl/codegen/atm.h b/include/grpc/impl/codegen/atm.h index ae00fb0f16..4bd572d6d1 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/package.xml b/package.xml index 4167bef26e..f096869e4e 100644 --- a/package.xml +++ b/package.xml @@ -91,6 +91,7 @@ <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_posix.h" role="src" /> <file baseinstalldir="/" name="include/grpc/impl/codegen/sync_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/profiling/timers.h" role="src" /> + <file baseinstalldir="/" name="src/core/lib/support/arena.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/backoff.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/block_annotate.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/env.h" role="src" /> @@ -106,6 +107,8 @@ <file baseinstalldir="/" name="src/core/lib/profiling/basic_timers.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/profiling/stap_timers.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/alloc.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/support/arena.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/support/atm.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/avl.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/backoff.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/support/cmdline.c" role="src" /> @@ -235,6 +238,7 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server.h" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_windows.h" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/time_averaged_stats.h" role="src" /> @@ -334,7 +338,6 @@ <file baseinstalldir="/" name="src/core/ext/client_channel/connector.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/http_connect_handshaker.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/http_proxy.h" role="src" /> - <file baseinstalldir="/" name="src/core/ext/client_channel/initial_connect_string.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_factory.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_registry.h" role="src" /> @@ -344,6 +347,7 @@ <file baseinstalldir="/" name="src/core/ext/client_channel/resolver.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_factory.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_registry.h" role="src" /> + <file baseinstalldir="/" name="src/core/ext/client_channel/retry_throttle.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel_index.h" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/uri_parser.h" role="src" /> @@ -434,6 +438,9 @@ <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_client_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_posix.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_posix.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_common.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c" role="src" /> + <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_uv.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_server_windows.c" role="src" /> <file baseinstalldir="/" name="src/core/lib/iomgr/tcp_uv.c" role="src" /> @@ -550,10 +557,8 @@ <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/client_channel_plugin.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/connector.c" role="src" /> - <file baseinstalldir="/" name="src/core/ext/client_channel/default_initial_connect_string.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/http_connect_handshaker.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/http_proxy.c" role="src" /> - <file baseinstalldir="/" name="src/core/ext/client_channel/initial_connect_string.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/lb_policy_registry.c" role="src" /> @@ -563,6 +568,7 @@ <file baseinstalldir="/" name="src/core/ext/client_channel/resolver.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_factory.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/resolver_registry.c" role="src" /> + <file baseinstalldir="/" name="src/core/ext/client_channel/retry_throttle.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/subchannel_index.c" role="src" /> <file baseinstalldir="/" name="src/core/ext/client_channel/uri_parser.c" role="src" /> @@ -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 86c831d2b0..49d90fd36e 100644 --- a/src/compiler/python_generator.cc +++ b/src/compiler/python_generator.cc @@ -101,18 +101,20 @@ class IndentScope { // TODO(https://github.com/google/protobuf/issues/888): // Export `ModuleName` from protobuf's // `src/google/protobuf/compiler/python/python_generator.cc` file. -grpc::string ModuleName(const grpc::string& filename) { +grpc::string ModuleName(const grpc::string& filename, + const grpc::string& import_prefix) { grpc::string basename = StripProto(filename); basename = StringReplace(basename, "-", "_"); basename = StringReplace(basename, "/", "."); - return basename + "_pb2"; + return import_prefix + basename + "_pb2"; } // TODO(https://github.com/google/protobuf/issues/888): // Export `ModuleAlias` from protobuf's // `src/google/protobuf/compiler/python/python_generator.cc` file. -grpc::string ModuleAlias(const grpc::string& filename) { - grpc::string module_name = ModuleName(filename); +grpc::string ModuleAlias(const grpc::string& filename, + const grpc::string& import_prefix) { + grpc::string module_name = ModuleName(filename, import_prefix); // We can't have dots in the module name, so we replace each with _dot_. // But that could lead to a collision between a.b and a_dot_b, so we also // duplicate each underscore. @@ -189,7 +191,7 @@ bool PrivateGenerator::GetModuleAndMessagePath(const Descriptor* type, grpc::string generator_file_name = file->name(); grpc::string module; if (generator_file_name != file_name || generate_in_pb2_grpc) { - module = ModuleAlias(file_name) + "."; + module = ModuleAlias(file_name, config.import_prefix) + "."; } else { module = ""; } @@ -666,8 +668,10 @@ bool PrivateGenerator::PrintPreamble() { for (int k = 0; k < 2; ++k) { const Descriptor* type = types[k]; grpc::string type_file_name = type->file()->name(); - grpc::string module_name = ModuleName(type_file_name); - grpc::string module_alias = ModuleAlias(type_file_name); + grpc::string module_name = + ModuleName(type_file_name, config.import_prefix); + grpc::string module_alias = + ModuleAlias(type_file_name, config.import_prefix); imports_set.insert(std::make_tuple(module_name, module_alias)); } } @@ -766,7 +770,9 @@ pair<bool, grpc::string> PrivateGenerator::GetGrpcServices() { } // namespace GeneratorConfiguration::GeneratorConfiguration() - : grpc_package_root("grpc"), beta_package_root("grpc.beta") {} + : grpc_package_root("grpc"), + beta_package_root("grpc.beta"), + import_prefix("") {} PythonGrpcGenerator::PythonGrpcGenerator(const GeneratorConfiguration& config) : config_(config) {} diff --git a/src/compiler/python_generator.h b/src/compiler/python_generator.h index 6a95255d40..b91059fad7 100644 --- a/src/compiler/python_generator.h +++ b/src/compiler/python_generator.h @@ -45,7 +45,10 @@ namespace grpc_python_generator { struct GeneratorConfiguration { GeneratorConfiguration(); grpc::string grpc_package_root; + // TODO(https://github.com/grpc/grpc/issues/8622): Drop this. grpc::string beta_package_root; + // TODO(https://github.com/google/protobuf/issues/888): Drop this. + grpc::string import_prefix; }; class PythonGrpcGenerator : public grpc::protobuf::compiler::CodeGenerator { diff --git a/src/core/ext/census/grpc_filter.c b/src/core/ext/census/grpc_filter.c index b80d831557..fc29dbd454 100644 --- a/src/core/ext/census/grpc_filter.c +++ b/src/core/ext/census/grpc_filter.c @@ -138,7 +138,7 @@ static grpc_error *client_init_call_elem(grpc_exec_ctx *exec_ctx, static void client_destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *ignored) { + grpc_closure *ignored) { call_data *d = elem->call_data; GPR_ASSERT(d != NULL); /* TODO(hongyu): record rpc client stats and census_rpc_end_op here */ @@ -160,7 +160,7 @@ static grpc_error *server_init_call_elem(grpc_exec_ctx *exec_ctx, static void server_destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *ignored) { + grpc_closure *ignored) { call_data *d = elem->call_data; GPR_ASSERT(d != NULL); /* TODO(hongyu): record rpc server stats and census_tracing_end_op here */ diff --git a/src/core/ext/client_channel/channel_connectivity.c b/src/core/ext/client_channel/channel_connectivity.c index dd70bc2c6c..f6cb3b9115 100644 --- a/src/core/ext/client_channel/channel_connectivity.c +++ b/src/core/ext/client_channel/channel_connectivity.c @@ -139,8 +139,8 @@ static void partly_done(grpc_exec_ctx *exec_ctx, state_watcher *w, error = GRPC_ERROR_NONE; } else { if (error == GRPC_ERROR_NONE) { - error = - GRPC_ERROR_CREATE("Timed out waiting for connection state change"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Timed out waiting for connection state change"); } else if (error == GRPC_ERROR_CANCELLED) { error = GRPC_ERROR_NONE; } diff --git a/src/core/ext/client_channel/client_channel.c b/src/core/ext/client_channel/client_channel.c index bf64f84772..435a3ab0fe 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; @@ -292,8 +355,11 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, grpc_slice_hash_table *method_params_table = NULL; grpc_connectivity_state state = GRPC_CHANNEL_TRANSIENT_FAILURE; bool exit_idle = false; - grpc_error *state_error = GRPC_ERROR_CREATE("No load balancing policy"); + grpc_error *state_error = + GRPC_ERROR_CREATE_FROM_STATIC_STRING("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 +420,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 +464,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); } @@ -392,9 +476,9 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, if (lb_policy != NULL) { grpc_closure_list_sched(exec_ctx, &chand->waiting_for_config_closures); } else if (chand->resolver == NULL /* disconnected */) { - grpc_closure_list_fail_all( - &chand->waiting_for_config_closures, - GRPC_ERROR_CREATE_REFERENCING("Channel disconnected", &error, 1)); + grpc_closure_list_fail_all(&chand->waiting_for_config_closures, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Channel disconnected", &error, 1)); grpc_closure_list_sched(exec_ctx, &chand->waiting_for_config_closures); } if (lb_policy != NULL && chand->exit_idle_when_lb_policy_arrives) { @@ -422,8 +506,8 @@ static void on_resolver_result_changed_locked(grpc_exec_ctx *exec_ctx, grpc_error *refs[] = {error, state_error}; set_channel_connectivity_state_locked( exec_ctx, chand, GRPC_CHANNEL_SHUTDOWN, - GRPC_ERROR_CREATE_REFERENCING("Got config after disconnection", refs, - GPR_ARRAY_SIZE(refs)), + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Got config after disconnection", refs, GPR_ARRAY_SIZE(refs)), "resolver_gone"); } @@ -462,8 +546,9 @@ static void start_transport_op_locked(grpc_exec_ctx *exec_ctx, void *arg, if (op->send_ping != NULL) { if (chand->lb_policy == NULL) { - grpc_closure_sched(exec_ctx, op->send_ping, - GRPC_ERROR_CREATE("Ping with no load balancing")); + grpc_closure_sched( + exec_ctx, op->send_ping, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Ping with no load balancing")); } else { grpc_lb_policy_ping_one_locked(exec_ctx, chand->lb_policy, op->send_ping); op->bind_pollset = NULL; @@ -578,7 +663,7 @@ static grpc_error *cc_init_channel_elem(grpc_exec_ctx *exec_ctx, if (proxy_name != NULL) gpr_free(proxy_name); if (new_args != NULL) grpc_channel_args_destroy(exec_ctx, new_args); if (chand->resolver == NULL) { - return GRPC_ERROR_CREATE("resolver creation failed"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("resolver creation failed"); } return GRPC_ERROR_NONE; } @@ -612,6 +697,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 +719,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 +741,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 +764,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 +819,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; @@ -738,12 +876,14 @@ static void subchannel_ready_locked(grpc_exec_ctx *exec_ctx, void *arg, calld->creation_phase = GRPC_SUBCHANNEL_CALL_HOLDER_NOT_CREATING; if (calld->connected_subchannel == NULL) { gpr_atm_no_barrier_store(&calld->subchannel_call, 1); - fail_locked(exec_ctx, calld, GRPC_ERROR_CREATE_REFERENCING( - "Failed to create subchannel", &error, 1)); + fail_locked(exec_ctx, calld, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Failed to create subchannel", &error, 1)); } else if (GET_CALL(calld) == CANCELLED_CALL) { /* already cancelled before subchannel became ready */ - grpc_error *cancellation_error = GRPC_ERROR_CREATE_REFERENCING( - "Cancelled before creating subchannel", &error, 1); + grpc_error *cancellation_error = + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Cancelled before creating subchannel", &error, 1); /* if due to deadline, attach the deadline exceeded status to the error */ if (gpr_time_cmp(calld->deadline, gpr_now(GPR_CLOCK_MONOTONIC)) < 0) { cancellation_error = @@ -754,9 +894,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; @@ -840,9 +985,9 @@ static bool pick_subchannel_locked( cpa = closure->cb_arg; if (cpa->connected_subchannel == connected_subchannel) { cpa->connected_subchannel = NULL; - grpc_closure_sched( - exec_ctx, cpa->on_ready, - GRPC_ERROR_CREATE_REFERENCING("Pick cancelled", &error, 1)); + grpc_closure_sched(exec_ctx, cpa->on_ready, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Pick cancelled", &error, 1)); } } GPR_TIMER_END("pick_subchannel", 0); @@ -851,6 +996,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. @@ -898,7 +1044,8 @@ static bool pick_subchannel_locked( grpc_closure_list_append(&chand->waiting_for_config_closures, &cpa->closure, GRPC_ERROR_NONE); } else { - grpc_closure_sched(exec_ctx, on_ready, GRPC_ERROR_CREATE("Disconnected")); + grpc_closure_sched(exec_ctx, on_ready, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Disconnected")); } GPR_TIMER_END("pick_subchannel", 0); @@ -982,9 +1129,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 +1154,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 +1182,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 +1240,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 +1260,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 +1270,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 +1281,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 28d3b63f99..f51277d0b2 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 9bff41f003..94b5fb5c9e 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/http_connect_handshaker.c b/src/core/ext/client_channel/http_connect_handshaker.c index 58ab233f1b..778d76c39f 100644 --- a/src/core/ext/client_channel/http_connect_handshaker.c +++ b/src/core/ext/client_channel/http_connect_handshaker.c @@ -116,7 +116,7 @@ static void handshake_failed_locked(grpc_exec_ctx* exec_ctx, // If we were shut down after an endpoint operation succeeded but // before the endpoint callback was invoked, we need to generate our // own error. - error = GRPC_ERROR_CREATE("Handshaker shutdown"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshaker shutdown"); } if (!handshaker->shutdown) { // TODO(ctiller): It is currently necessary to shutdown endpoints @@ -226,7 +226,7 @@ static void on_read_done(grpc_exec_ctx* exec_ctx, void* arg, char* msg; gpr_asprintf(&msg, "HTTP proxy returned response code %d", handshaker->http_response.status); - error = GRPC_ERROR_CREATE(msg); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); handshake_failed_locked(exec_ctx, handshaker, error); goto done; diff --git a/src/core/ext/client_channel/parse_address.c b/src/core/ext/client_channel/parse_address.c index 8ae15fc72b..cd1b2cd80c 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 2c44b9d490..0935ddbdbd 100644 --- a/src/core/ext/client_channel/proxy_mapper_registry.c +++ b/src/core/ext/client_channel/proxy_mapper_registry.c @@ -94,6 +94,14 @@ static void grpc_proxy_mapper_list_destroy(grpc_proxy_mapper_list* list) { grpc_proxy_mapper_destroy(list->list[i]); } gpr_free(list->list); + // Clean up in case we re-initialze later. + // TODO(ctiller): This should ideally live in + // grpc_proxy_mapper_registry_init(). However, if we did this there, + // then we would do it AFTER we start registering proxy mappers from + // third-party plugins, so they'd never show up (and would leak memory). + // We probably need some sort of dependency system for plugins to fix + // this. + memset(list, 0, sizeof(*list)); } // @@ -102,9 +110,7 @@ static void grpc_proxy_mapper_list_destroy(grpc_proxy_mapper_list* list) { static grpc_proxy_mapper_list g_proxy_mapper_list; -void grpc_proxy_mapper_registry_init() { - memset(&g_proxy_mapper_list, 0, sizeof(g_proxy_mapper_list)); -} +void grpc_proxy_mapper_registry_init() {} void grpc_proxy_mapper_registry_shutdown() { grpc_proxy_mapper_list_destroy(&g_proxy_mapper_list); diff --git a/src/core/ext/client_channel/retry_throttle.c b/src/core/ext/client_channel/retry_throttle.c new file mode 100644 index 0000000000..8926c3d782 --- /dev/null +++ b/src/core/ext/client_channel/retry_throttle.c @@ -0,0 +1,210 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/ext/client_channel/retry_throttle.h" + +#include <limits.h> +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/atm.h> +#include <grpc/support/avl.h> +#include <grpc/support/string_util.h> +#include <grpc/support/sync.h> + +// +// server_retry_throttle_data +// + +struct grpc_server_retry_throttle_data { + gpr_refcount refs; + int max_milli_tokens; + int milli_token_ratio; + gpr_atm milli_tokens; + // A pointer to the replacement for this grpc_server_retry_throttle_data + // entry. If non-NULL, then this entry is stale and must not be used. + // We hold a reference to the replacement. + gpr_atm replacement; +}; + +static void get_replacement_throttle_data_if_needed( + grpc_server_retry_throttle_data** throttle_data) { + while (true) { + grpc_server_retry_throttle_data* new_throttle_data = + (grpc_server_retry_throttle_data*)gpr_atm_acq_load( + &(*throttle_data)->replacement); + if (new_throttle_data == NULL) return; + *throttle_data = new_throttle_data; + } +} + +bool grpc_server_retry_throttle_data_record_failure( + grpc_server_retry_throttle_data* throttle_data) { + // First, check if we are stale and need to be replaced. + get_replacement_throttle_data_if_needed(&throttle_data); + // We decrement milli_tokens by 1000 (1 token) for each failure. + const int new_value = (int)gpr_atm_no_barrier_clamped_add( + &throttle_data->milli_tokens, (gpr_atm)-1000, (gpr_atm)0, + (gpr_atm)throttle_data->max_milli_tokens); + // Retries are allowed as long as the new value is above the threshold + // (max_milli_tokens / 2). + return new_value > throttle_data->max_milli_tokens / 2; +} + +void grpc_server_retry_throttle_data_record_success( + grpc_server_retry_throttle_data* throttle_data) { + // First, check if we are stale and need to be replaced. + get_replacement_throttle_data_if_needed(&throttle_data); + // We increment milli_tokens by milli_token_ratio for each success. + gpr_atm_no_barrier_clamped_add( + &throttle_data->milli_tokens, (gpr_atm)throttle_data->milli_token_ratio, + (gpr_atm)0, (gpr_atm)throttle_data->max_milli_tokens); +} + +grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_ref( + grpc_server_retry_throttle_data* throttle_data) { + gpr_ref(&throttle_data->refs); + return throttle_data; +} + +void grpc_server_retry_throttle_data_unref( + grpc_server_retry_throttle_data* throttle_data) { + if (gpr_unref(&throttle_data->refs)) { + grpc_server_retry_throttle_data* replacement = + (grpc_server_retry_throttle_data*)gpr_atm_acq_load( + &throttle_data->replacement); + if (replacement != NULL) { + grpc_server_retry_throttle_data_unref(replacement); + } + gpr_free(throttle_data); + } +} + +static grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_create( + int max_milli_tokens, int milli_token_ratio, + grpc_server_retry_throttle_data* old_throttle_data) { + grpc_server_retry_throttle_data* throttle_data = + gpr_malloc(sizeof(*throttle_data)); + memset(throttle_data, 0, sizeof(*throttle_data)); + gpr_ref_init(&throttle_data->refs, 1); + throttle_data->max_milli_tokens = max_milli_tokens; + throttle_data->milli_token_ratio = milli_token_ratio; + int initial_milli_tokens = max_milli_tokens; + // If there was a pre-existing entry for this server name, initialize + // the token count by scaling proportionately to the old data. This + // ensures that if we're already throttling retries on the old scale, + // we will start out doing the same thing on the new one. + if (old_throttle_data != NULL) { + double token_fraction = + (int)gpr_atm_acq_load(&old_throttle_data->milli_tokens) / + (double)old_throttle_data->max_milli_tokens; + initial_milli_tokens = (int)(token_fraction * max_milli_tokens); + } + gpr_atm_rel_store(&throttle_data->milli_tokens, + (gpr_atm)initial_milli_tokens); + // If there was a pre-existing entry, mark it as stale and give it a + // pointer to the new entry, which is its replacement. + if (old_throttle_data != NULL) { + grpc_server_retry_throttle_data_ref(throttle_data); + gpr_atm_rel_store(&old_throttle_data->replacement, (gpr_atm)throttle_data); + } + return throttle_data; +} + +// +// avl vtable for string -> server_retry_throttle_data map +// + +static void* copy_server_name(void* key) { return gpr_strdup(key); } + +static long compare_server_name(void* key1, void* key2) { + return strcmp(key1, key2); +} + +static void destroy_server_retry_throttle_data(void* value) { + grpc_server_retry_throttle_data* throttle_data = value; + grpc_server_retry_throttle_data_unref(throttle_data); +} + +static void* copy_server_retry_throttle_data(void* value) { + grpc_server_retry_throttle_data* throttle_data = value; + return grpc_server_retry_throttle_data_ref(throttle_data); +} + +static const gpr_avl_vtable avl_vtable = { + gpr_free /* destroy_key */, copy_server_name, compare_server_name, + destroy_server_retry_throttle_data, copy_server_retry_throttle_data}; + +// +// server_retry_throttle_map +// + +static gpr_mu g_mu; +static gpr_avl g_avl; + +void grpc_retry_throttle_map_init() { + gpr_mu_init(&g_mu); + g_avl = gpr_avl_create(&avl_vtable); +} + +void grpc_retry_throttle_map_shutdown() { + gpr_mu_destroy(&g_mu); + gpr_avl_unref(g_avl); +} + +grpc_server_retry_throttle_data* grpc_retry_throttle_map_get_data_for_server( + const char* server_name, int max_milli_tokens, int milli_token_ratio) { + gpr_mu_lock(&g_mu); + grpc_server_retry_throttle_data* throttle_data = + gpr_avl_get(g_avl, (char*)server_name); + if (throttle_data == NULL) { + // Entry not found. Create a new one. + throttle_data = grpc_server_retry_throttle_data_create( + max_milli_tokens, milli_token_ratio, NULL); + g_avl = gpr_avl_add(g_avl, (char*)server_name, throttle_data); + } else { + if (throttle_data->max_milli_tokens != max_milli_tokens || + throttle_data->milli_token_ratio != milli_token_ratio) { + // Entry found but with old parameters. Create a new one based on + // the original one. + throttle_data = grpc_server_retry_throttle_data_create( + max_milli_tokens, milli_token_ratio, throttle_data); + g_avl = gpr_avl_add(g_avl, (char*)server_name, throttle_data); + } else { + // Entry found. Increase refcount. + grpc_server_retry_throttle_data_ref(throttle_data); + } + } + gpr_mu_unlock(&g_mu); + return throttle_data; +} diff --git a/src/core/ext/client_channel/retry_throttle.h b/src/core/ext/client_channel/retry_throttle.h new file mode 100644 index 0000000000..f9971faf65 --- /dev/null +++ b/src/core/ext/client_channel/retry_throttle.h @@ -0,0 +1,65 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_RETRY_THROTTLE_H +#define GRPC_CORE_EXT_CLIENT_CHANNEL_RETRY_THROTTLE_H + +#include <stdbool.h> + +/// Tracks retry throttling data for an individual server name. +typedef struct grpc_server_retry_throttle_data grpc_server_retry_throttle_data; + +/// Records a failure. Returns true if it's okay to send a retry. +bool grpc_server_retry_throttle_data_record_failure( + grpc_server_retry_throttle_data* throttle_data); +/// Records a success. +void grpc_server_retry_throttle_data_record_success( + grpc_server_retry_throttle_data* throttle_data); + +grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_ref( + grpc_server_retry_throttle_data* throttle_data); +void grpc_server_retry_throttle_data_unref( + grpc_server_retry_throttle_data* throttle_data); + +/// Initializes global map of failure data for each server name. +void grpc_retry_throttle_map_init(); +/// Shuts down global map of failure data for each server name. +void grpc_retry_throttle_map_shutdown(); + +/// Returns a reference to the failure data for \a server_name, creating +/// a new entry if needed. +/// Caller must eventually unref via \a grpc_server_retry_throttle_data_unref(). +grpc_server_retry_throttle_data* grpc_retry_throttle_map_get_data_for_server( + const char* server_name, int max_milli_tokens, int milli_token_ratio); + +#endif /* GRPC_CORE_EXT_CLIENT_CHANNEL_RETRY_THROTTLE_H */ diff --git a/src/core/ext/client_channel/subchannel.c b/src/core/ext/client_channel/subchannel.c index 5df0a9060d..063c0badff 100644 --- a/src/core/ext/client_channel/subchannel.c +++ b/src/core/ext/client_channel/subchannel.c @@ -41,7 +41,6 @@ #include <grpc/support/string_util.h> #include "src/core/ext/client_channel/client_channel.h" -#include "src/core/ext/client_channel/initial_connect_string.h" #include "src/core/ext/client_channel/parse_address.h" #include "src/core/ext/client_channel/proxy_mapper_registry.h" #include "src/core/ext/client_channel/subchannel_index.h" @@ -103,9 +102,6 @@ struct grpc_subchannel { grpc_subchannel_key *key; - /** initial string to send to peer */ - grpc_slice initial_connect_string; - /** set during connection */ grpc_connect_out_args connecting_result; @@ -148,6 +144,7 @@ struct grpc_subchannel { struct grpc_subchannel_call { grpc_connected_subchannel *connection; + grpc_closure *schedule_closure_after_destroy; }; #define SUBCHANNEL_CALL_TO_CALL_STACK(call) ((grpc_call_stack *)((call) + 1)) @@ -214,7 +211,6 @@ static void subchannel_destroy(grpc_exec_ctx *exec_ctx, void *arg, grpc_subchannel *c = arg; gpr_free((void *)c->filters); grpc_channel_args_destroy(exec_ctx, c->args); - grpc_slice_unref_internal(exec_ctx, c->initial_connect_string); grpc_connectivity_state_destroy(exec_ctx, &c->state_tracker); grpc_connector_unref(exec_ctx, c->connector); grpc_pollset_set_destroy(exec_ctx, c->pollset_set); @@ -273,8 +269,9 @@ static void disconnect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) { gpr_mu_lock(&c->mu); GPR_ASSERT(!c->disconnected); c->disconnected = true; - grpc_connector_shutdown(exec_ctx, c->connector, - GRPC_ERROR_CREATE("Subchannel disconnected")); + grpc_connector_shutdown( + exec_ctx, c->connector, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Subchannel disconnected")); con = GET_CONNECTED_SUBCHANNEL(c, no_barrier); if (con != NULL) { GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, con, "connection"); @@ -332,7 +329,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 +336,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 +399,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, @@ -445,7 +438,8 @@ static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_mu_lock(&c->mu); c->have_alarm = false; if (c->disconnected) { - error = GRPC_ERROR_CREATE_REFERENCING("Disconnected", &error, 1); + error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Disconnected", + &error, 1); } else { GRPC_ERROR_REF(error); } @@ -696,9 +690,9 @@ static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg, } else { grpc_connectivity_state_set( exec_ctx, &c->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE, - grpc_error_set_int( - GRPC_ERROR_CREATE_REFERENCING("Connect Failed", &error, 1), - GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE), + grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Connect Failed", &error, 1), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE), "connect_failed"); const char *errmsg = grpc_error_string(error); @@ -719,13 +713,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 +764,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 +788,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 6a70a76467..3e64a2507c 100644 --- a/src/core/ext/client_channel/subchannel.h +++ b/src/core/ext/client_channel/subchannel.h @@ -37,6 +37,7 @@ #include "src/core/ext/client_channel/connector.h" #include "src/core/lib/channel/channel_stack.h" #include "src/core/lib/iomgr/polling_entity.h" +#include "src/core/lib/support/arena.h" #include "src/core/lib/transport/connectivity_state.h" #include "src/core/lib/transport/metadata.h" @@ -112,10 +113,18 @@ void grpc_subchannel_call_unref(grpc_exec_ctx *exec_ctx, GRPC_SUBCHANNEL_REF_EXTRA_ARGS); /** construct a subchannel call */ +typedef struct { + grpc_polling_entity *pollent; + grpc_slice path; + gpr_timespec start_time; + gpr_timespec deadline; + gpr_arena *arena; +} grpc_connected_subchannel_call_args; + grpc_error *grpc_connected_subchannel_create_call( grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *connected_subchannel, - grpc_polling_entity *pollent, grpc_slice path, gpr_timespec start_time, - gpr_timespec deadline, grpc_subchannel_call **subchannel_call); + const grpc_connected_subchannel_call_args *args, + grpc_subchannel_call **subchannel_call); /** process a transport level op */ void grpc_connected_subchannel_process_transport_op( @@ -154,6 +163,11 @@ void grpc_subchannel_call_process_op(grpc_exec_ctx *exec_ctx, char *grpc_subchannel_call_get_peer(grpc_exec_ctx *exec_ctx, grpc_subchannel_call *subchannel_call); +/** Must be called once per call. Sets the 'then_schedule_closure' argument for + call stack destruction. */ +void grpc_subchannel_call_set_cleanup_closure( + grpc_subchannel_call *subchannel_call, grpc_closure *closure); + grpc_call_stack *grpc_subchannel_call_get_call_stack( grpc_subchannel_call *subchannel_call); diff --git a/src/core/ext/lb_policy/grpclb/grpclb.c b/src/core/ext/lb_policy/grpclb/grpclb.c index d612591f2e..601b0e643b 100644 --- a/src/core/ext/lb_policy/grpclb/grpclb.c +++ b/src/core/ext/lb_policy/grpclb/grpclb.c @@ -925,7 +925,7 @@ static void glb_shutdown_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { } grpc_connectivity_state_set( exec_ctx, &glb_policy->state_tracker, GRPC_CHANNEL_SHUTDOWN, - GRPC_ERROR_CREATE("Channel Shutdown"), "glb_shutdown"); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Shutdown"), "glb_shutdown"); /* We need a copy of the lb_call pointer because we can't cancell the call * while holding glb_policy->mu: lb_on_server_status_received, invoked due to * the cancel, needs to acquire that same lock */ @@ -965,9 +965,9 @@ static void glb_cancel_pick_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, pending_pick *next = pp->next; if (pp->target == target) { *target = NULL; - grpc_closure_sched( - exec_ctx, &pp->wrapped_on_complete_arg.wrapper_closure, - GRPC_ERROR_CREATE_REFERENCING("Pick Cancelled", &error, 1)); + grpc_closure_sched(exec_ctx, &pp->wrapped_on_complete_arg.wrapper_closure, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Pick Cancelled", &error, 1)); } else { pp->next = glb_policy->pending_picks; glb_policy->pending_picks = pp; @@ -989,9 +989,9 @@ static void glb_cancel_picks_locked(grpc_exec_ctx *exec_ctx, pending_pick *next = pp->next; if ((pp->pick_args.initial_metadata_flags & initial_metadata_flags_mask) == initial_metadata_flags_eq) { - grpc_closure_sched( - exec_ctx, &pp->wrapped_on_complete_arg.wrapper_closure, - GRPC_ERROR_CREATE_REFERENCING("Pick Cancelled", &error, 1)); + grpc_closure_sched(exec_ctx, &pp->wrapped_on_complete_arg.wrapper_closure, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Pick Cancelled", &error, 1)); } else { pp->next = glb_policy->pending_picks; glb_policy->pending_picks = pp; @@ -1023,10 +1023,10 @@ static int glb_pick_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, grpc_closure *on_complete) { if (pick_args->lb_token_mdelem_storage == NULL) { *target = NULL; - grpc_closure_sched( - exec_ctx, on_complete, - GRPC_ERROR_CREATE("No mdelem storage for the LB token. Load reporting " - "won't work without it. Failing")); + grpc_closure_sched(exec_ctx, on_complete, + GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "No mdelem storage for the LB token. Load reporting " + "won't work without it. Failing")); return 0; } diff --git a/src/core/ext/lb_policy/pick_first/pick_first.c b/src/core/ext/lb_policy/pick_first/pick_first.c index e2a66d16bd..fc65dfdcb9 100644 --- a/src/core/ext/lb_policy/pick_first/pick_first.c +++ b/src/core/ext/lb_policy/pick_first/pick_first.c @@ -101,7 +101,7 @@ static void pf_shutdown_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { p->pending_picks = NULL; grpc_connectivity_state_set( exec_ctx, &p->state_tracker, GRPC_CHANNEL_SHUTDOWN, - GRPC_ERROR_CREATE("Channel shutdown"), "shutdown"); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel shutdown"), "shutdown"); /* cancel subscription */ if (p->selected != NULL) { grpc_connected_subchannel_notify_on_state_change( @@ -131,9 +131,9 @@ static void pf_cancel_pick_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, pending_pick *next = pp->next; if (pp->target == target) { *target = NULL; - grpc_closure_sched( - exec_ctx, pp->on_complete, - GRPC_ERROR_CREATE_REFERENCING("Pick Cancelled", &error, 1)); + grpc_closure_sched(exec_ctx, pp->on_complete, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Pick Cancelled", &error, 1)); gpr_free(pp); } else { pp->next = p->pending_picks; @@ -156,9 +156,9 @@ static void pf_cancel_picks_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, pending_pick *next = pp->next; if ((pp->initial_metadata_flags & initial_metadata_flags_mask) == initial_metadata_flags_eq) { - grpc_closure_sched( - exec_ctx, pp->on_complete, - GRPC_ERROR_CREATE_REFERENCING("Pick Cancelled", &error, 1)); + grpc_closure_sched(exec_ctx, pp->on_complete, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Pick Cancelled", &error, 1)); gpr_free(pp); } else { pp->next = p->pending_picks; @@ -325,8 +325,8 @@ static void pf_connectivity_changed_locked(grpc_exec_ctx *exec_ctx, void *arg, if (p->num_subchannels == 0) { grpc_connectivity_state_set( exec_ctx, &p->state_tracker, GRPC_CHANNEL_SHUTDOWN, - GRPC_ERROR_CREATE_REFERENCING("Pick first exhausted channels", - &error, 1), + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Pick first exhausted channels", &error, 1), "no_more_channels"); while ((pp = p->pending_picks)) { p->pending_picks = pp->next; @@ -373,7 +373,8 @@ static void pf_ping_one_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, if (p->selected) { grpc_connected_subchannel_ping(exec_ctx, p->selected, closure); } else { - grpc_closure_sched(exec_ctx, closure, GRPC_ERROR_CREATE("Not connected")); + grpc_closure_sched(exec_ctx, closure, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Not connected")); } } @@ -423,11 +424,13 @@ static grpc_lb_policy *create_pick_first(grpc_exec_ctx *exec_ctx, "This LB policy doesn't support user data. It will be ignored"); } + static const char *keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS}; memset(&sc_args, 0, sizeof(grpc_subchannel_args)); grpc_arg addr_arg = grpc_create_subchannel_address_arg(&addresses->addresses[i].address); - grpc_channel_args *new_args = - grpc_channel_args_copy_and_add(args->args, &addr_arg, 1); + grpc_channel_args *new_args = grpc_channel_args_copy_and_add_and_remove( + args->args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), &addr_arg, + 1); gpr_free(addr_arg.value.string); sc_args.args = new_args; grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel( diff --git a/src/core/ext/lb_policy/round_robin/round_robin.c b/src/core/ext/lb_policy/round_robin/round_robin.c index f2d1d46179..a62082a2ff 100644 --- a/src/core/ext/lb_policy/round_robin/round_robin.c +++ b/src/core/ext/lb_policy/round_robin/round_robin.c @@ -320,13 +320,14 @@ static void rr_shutdown_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol) { while ((pp = p->pending_picks)) { p->pending_picks = pp->next; *pp->target = NULL; - grpc_closure_sched(exec_ctx, pp->on_complete, - GRPC_ERROR_CREATE("Channel Shutdown")); + grpc_closure_sched( + exec_ctx, pp->on_complete, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Shutdown")); gpr_free(pp); } grpc_connectivity_state_set( exec_ctx, &p->state_tracker, GRPC_CHANNEL_SHUTDOWN, - GRPC_ERROR_CREATE("Channel Shutdown"), "rr_shutdown"); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Shutdown"), "rr_shutdown"); for (i = 0; i < p->num_subchannels; i++) { subchannel_data *sd = p->subchannels[i]; grpc_subchannel_notify_on_state_change(exec_ctx, sd->subchannel, NULL, NULL, @@ -345,9 +346,9 @@ static void rr_cancel_pick_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, pending_pick *next = pp->next; if (pp->target == target) { *target = NULL; - grpc_closure_sched( - exec_ctx, pp->on_complete, - GRPC_ERROR_CREATE_REFERENCING("Pick cancelled", &error, 1)); + grpc_closure_sched(exec_ctx, pp->on_complete, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Pick cancelled", &error, 1)); gpr_free(pp); } else { pp->next = p->pending_picks; @@ -371,9 +372,9 @@ static void rr_cancel_picks_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, if ((pp->initial_metadata_flags & initial_metadata_flags_mask) == initial_metadata_flags_eq) { *pp->target = NULL; - grpc_closure_sched( - exec_ctx, pp->on_complete, - GRPC_ERROR_CREATE_REFERENCING("Pick cancelled", &error, 1)); + grpc_closure_sched(exec_ctx, pp->on_complete, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Pick cancelled", &error, 1)); gpr_free(pp); } else { pp->next = p->pending_picks; @@ -661,8 +662,8 @@ static void rr_ping_one_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *pol, grpc_connected_subchannel_ping(exec_ctx, target, closure); GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, target, "rr_picked"); } else { - grpc_closure_sched(exec_ctx, closure, - GRPC_ERROR_CREATE("Round Robin not connected")); + grpc_closure_sched(exec_ctx, closure, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Round Robin not connected")); } } @@ -709,11 +710,13 @@ static grpc_lb_policy *round_robin_create(grpc_exec_ctx *exec_ctx, /* Skip balancer addresses, since we only know how to handle backends. */ if (addresses->addresses[i].is_balancer) continue; + static const char *keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS}; memset(&sc_args, 0, sizeof(grpc_subchannel_args)); grpc_arg addr_arg = grpc_create_subchannel_address_arg(&addresses->addresses[i].address); - grpc_channel_args *new_args = - grpc_channel_args_copy_and_add(args->args, &addr_arg, 1); + grpc_channel_args *new_args = grpc_channel_args_copy_and_add_and_remove( + args->args, keys_to_remove, GPR_ARRAY_SIZE(keys_to_remove), &addr_arg, + 1); gpr_free(addr_arg.value.string); sc_args.args = new_args; grpc_subchannel *subchannel = grpc_client_channel_factory_create_subchannel( diff --git a/src/core/ext/load_reporting/load_reporting_filter.c b/src/core/ext/load_reporting/load_reporting_filter.c index c2750634a5..ea57c85c3a 100644 --- a/src/core/ext/load_reporting/load_reporting_filter.c +++ b/src/core/ext/load_reporting/load_reporting_filter.c @@ -78,8 +78,8 @@ static void on_initial_md_ready(grpc_exec_ctx *exec_ctx, void *user_data, GRPC_MDVALUE(calld->recv_initial_metadata->idx.named.path->md)); calld->have_service_method = true; } else { - err = - grpc_error_add_child(err, GRPC_ERROR_CREATE("Missing :path header")); + err = grpc_error_add_child( + err, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing :path header")); } if (calld->recv_initial_metadata->idx.named.lb_token != NULL) { calld->initial_md_string = grpc_slice_ref_internal( @@ -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/resolver/dns/native/dns_resolver.c b/src/core/ext/resolver/dns/native/dns_resolver.c index d227c19c43..d6cb6a95a2 100644 --- a/src/core/ext/resolver/dns/native/dns_resolver.c +++ b/src/core/ext/resolver/dns/native/dns_resolver.c @@ -113,8 +113,9 @@ static void dns_shutdown_locked(grpc_exec_ctx *exec_ctx, } if (r->next_completion != NULL) { *r->target_result = NULL; - grpc_closure_sched(exec_ctx, r->next_completion, - GRPC_ERROR_CREATE("Resolver Shutdown")); + grpc_closure_sched( + exec_ctx, r->next_completion, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Resolver Shutdown")); r->next_completion = NULL; } } diff --git a/src/core/ext/transport/chttp2/client/chttp2_connector.c b/src/core/ext/transport/chttp2/client/chttp2_connector.c index eae0145ecc..2b226c1bf7 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. @@ -116,7 +113,7 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, gpr_mu_lock(&c->mu); if (error != GRPC_ERROR_NONE || c->shutdown) { if (error == GRPC_ERROR_NONE) { - error = GRPC_ERROR_CREATE("connector shutdown"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("connector shutdown"); // We were shut down after handshaking completed successfully, so // destroy the endpoint here. // TODO(ctiller): It is currently necessary to shutdown endpoints @@ -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); @@ -189,7 +164,7 @@ static void connected(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { c->connecting = false; if (error != GRPC_ERROR_NONE || c->shutdown) { if (error == GRPC_ERROR_NONE) { - error = GRPC_ERROR_CREATE("connector shutdown"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("connector shutdown"); } else { error = GRPC_ERROR_REF(error); } @@ -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/server/chttp2_server.c b/src/core/ext/transport/chttp2/server/chttp2_server.c index 837b9fd03d..6433968ca5 100644 --- a/src/core/ext/transport/chttp2/server/chttp2_server.c +++ b/src/core/ext/transport/chttp2/server/chttp2_server.c @@ -256,7 +256,7 @@ grpc_error *grpc_chttp2_server_add_port(grpc_exec_ctx *exec_ctx, char *msg; gpr_asprintf(&msg, "No address added out of total %" PRIuPTR " resolved", naddrs); - err = GRPC_ERROR_CREATE_REFERENCING(msg, errors, naddrs); + err = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(msg, errors, naddrs); gpr_free(msg); goto error; } else if (count != naddrs) { @@ -264,7 +264,7 @@ grpc_error *grpc_chttp2_server_add_port(grpc_exec_ctx *exec_ctx, gpr_asprintf(&msg, "Only %" PRIuPTR " addresses added out of total %" PRIuPTR " resolved", count, naddrs); - err = GRPC_ERROR_CREATE_REFERENCING(msg, errors, naddrs); + err = GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(msg, errors, naddrs); gpr_free(msg); const char *warning_message = grpc_error_string(err); diff --git a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c index cb2b3f5502..88c813f3be 100644 --- a/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +++ b/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c @@ -61,7 +61,7 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, 3, (server, addr, creds)); // Create security context. if (creds == NULL) { - err = GRPC_ERROR_CREATE( + err = GRPC_ERROR_CREATE_FROM_STATIC_STRING( "No credentials specified for secure server port (creds==NULL)"); goto done; } @@ -72,7 +72,7 @@ int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr, gpr_asprintf(&msg, "Unable to create secure server with credentials of type %s.", creds->type); - err = grpc_error_set_int(GRPC_ERROR_CREATE(msg), + err = grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg), GRPC_ERROR_INT_SECURITY_STATUS, status); gpr_free(msg); goto done; diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index da4c7dc7b2..88d96b1a15 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -187,7 +187,8 @@ static void destruct_transport(grpc_exec_ctx *exec_ctx, GRPC_COMBINER_UNREF(exec_ctx, t->combiner, "chttp2_transport"); - cancel_pings(exec_ctx, t, GRPC_ERROR_CREATE("Transport destroyed")); + cancel_pings(exec_ctx, t, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed")); while (t->write_cb_pool) { grpc_chttp2_write_cb *next = t->write_cb_pool->next; @@ -494,8 +495,9 @@ static void destroy_transport_locked(grpc_exec_ctx *exec_ctx, void *tp, t->destroying = 1; close_transport_locked( exec_ctx, t, - grpc_error_set_int(GRPC_ERROR_CREATE("Transport destroyed"), - GRPC_ERROR_INT_OCCURRED_DURING_WRITE, t->write_state)); + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport destroyed"), + GRPC_ERROR_INT_OCCURRED_DURING_WRITE, t->write_state)); GRPC_CHTTP2_UNREF_TRANSPORT(exec_ctx, t, "destroy"); } @@ -511,19 +513,20 @@ 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 = - GRPC_ERROR_CREATE("Delayed close due to in-progress write"); + GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Delayed close due to in-progress write"); } t->close_transport_on_writes_finished = 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 +578,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 +591,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 +668,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)), @@ -833,7 +837,8 @@ static void write_action_end_locked(grpc_exec_ctx *exec_ctx, void *tp, if (t->sent_goaway_state == GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED) { t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SENT; if (grpc_chttp2_stream_map_size(&t->stream_map) == 0) { - close_transport_locked(exec_ctx, t, GRPC_ERROR_CREATE("goaway sent")); + close_transport_locked( + exec_ctx, t, GRPC_ERROR_CREATE_FROM_STATIC_STRING("goaway sent")); } } @@ -897,22 +902,19 @@ void grpc_chttp2_add_incoming_goaway(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, uint32_t goaway_error, grpc_slice goaway_text) { - char *msg = grpc_dump_slice(goaway_text, GPR_DUMP_HEX | GPR_DUMP_ASCII); - GRPC_CHTTP2_IF_TRACING( - gpr_log(GPR_DEBUG, "got goaway [%d]: %s", goaway_error, msg)); - grpc_slice_unref_internal(exec_ctx, goaway_text); + // GRPC_CHTTP2_IF_TRACING( + // gpr_log(GPR_DEBUG, "got goaway [%d]: %s", goaway_error, msg)); t->seen_goaway = 1; /* lie: use transient failure from the transport to indicate goaway has been * received */ connectivity_state_set( exec_ctx, t, GRPC_CHANNEL_TRANSIENT_FAILURE, grpc_error_set_str( - grpc_error_set_int(GRPC_ERROR_CREATE("GOAWAY received"), - GRPC_ERROR_INT_HTTP2_ERROR, - (intptr_t)goaway_error), - GRPC_ERROR_STR_RAW_BYTES, msg), + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("GOAWAY received"), + GRPC_ERROR_INT_HTTP2_ERROR, (intptr_t)goaway_error), + GRPC_ERROR_STR_RAW_BYTES, goaway_text), "got_goaway"); - gpr_free(msg); } static void maybe_start_some_streams(grpc_exec_ctx *exec_ctx, @@ -935,9 +937,10 @@ static void maybe_start_some_streams(grpc_exec_ctx *exec_ctx, t->next_stream_id += 2; if (t->next_stream_id >= MAX_CLIENT_STREAM_ID) { - connectivity_state_set(exec_ctx, t, GRPC_CHANNEL_TRANSIENT_FAILURE, - GRPC_ERROR_CREATE("Stream IDs exhausted"), - "no_more_stream_ids"); + connectivity_state_set( + exec_ctx, t, GRPC_CHANNEL_TRANSIENT_FAILURE, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Stream IDs exhausted"), + "no_more_stream_ids"); } grpc_chttp2_stream_map_add(&t->stream_map, s->id, s); @@ -951,9 +954,9 @@ static void maybe_start_some_streams(grpc_exec_ctx *exec_ctx, grpc_chttp2_list_pop_waiting_for_concurrency(t, &s)) { grpc_chttp2_cancel_stream( exec_ctx, t, s, - grpc_error_set_int(GRPC_ERROR_CREATE("Stream IDs exhausted"), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_UNAVAILABLE)); + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Stream IDs exhausted"), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE)); } } @@ -1002,11 +1005,11 @@ void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx, } if (error != GRPC_ERROR_NONE) { if (closure->error_data.error == GRPC_ERROR_NONE) { - closure->error_data.error = - GRPC_ERROR_CREATE("Error in HTTP transport completing operation"); - closure->error_data.error = - grpc_error_set_str(closure->error_data.error, - GRPC_ERROR_STR_TARGET_ADDRESS, t->peer_string); + closure->error_data.error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Error in HTTP transport completing operation"); + closure->error_data.error = grpc_error_set_str( + closure->error_data.error, GRPC_ERROR_STR_TARGET_ADDRESS, + grpc_slice_from_copied_string(t->peer_string)); } closure->error_data.error = grpc_error_add_child(closure->error_data.error, error); @@ -1181,10 +1184,11 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, exec_ctx, t, s, grpc_error_set_int( grpc_error_set_int( - grpc_error_set_int( - GRPC_ERROR_CREATE("to-be-sent initial metadata size " - "exceeds peer limit"), - GRPC_ERROR_INT_SIZE, (intptr_t)metadata_size), + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "to-be-sent initial metadata size " + "exceeds peer limit"), + GRPC_ERROR_INT_SIZE, + (intptr_t)metadata_size), GRPC_ERROR_INT_LIMIT, (intptr_t)metadata_peer_limit), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED)); } else { @@ -1200,9 +1204,9 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, } else { grpc_chttp2_cancel_stream( exec_ctx, t, s, - grpc_error_set_int(GRPC_ERROR_CREATE("Transport closed"), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_UNAVAILABLE)); + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport closed"), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE)); } } else { GPR_ASSERT(s->id != 0); @@ -1214,7 +1218,7 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, s->send_initial_metadata = NULL; grpc_chttp2_complete_closure_step( exec_ctx, t, s, &s->send_initial_metadata_finished, - GRPC_ERROR_CREATE_REFERENCING( + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( "Attempt to send initial metadata after stream was closed", &s->write_closed_error, 1), "send_initial_metadata_finished"); @@ -1228,7 +1232,7 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, if (s->write_closed) { grpc_chttp2_complete_closure_step( exec_ctx, t, s, &s->fetching_send_message_finished, - GRPC_ERROR_CREATE_REFERENCING( + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( "Attempt to send message after stream was closed", &s->write_closed_error, 1), "fetching_send_message_finished"); @@ -1276,10 +1280,11 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, exec_ctx, t, s, grpc_error_set_int( grpc_error_set_int( - grpc_error_set_int( - GRPC_ERROR_CREATE("to-be-sent trailing metadata size " - "exceeds peer limit"), - GRPC_ERROR_INT_SIZE, (intptr_t)metadata_size), + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "to-be-sent trailing metadata size " + "exceeds peer limit"), + GRPC_ERROR_INT_SIZE, + (intptr_t)metadata_size), GRPC_ERROR_INT_LIMIT, (intptr_t)metadata_peer_limit), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED)); } else { @@ -1292,8 +1297,9 @@ static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx, void *stream_op, exec_ctx, t, s, &s->send_trailing_metadata_finished, grpc_metadata_batch_is_empty(op->send_trailing_metadata) ? GRPC_ERROR_NONE - : GRPC_ERROR_CREATE("Attempt to send trailing metadata after " - "stream was closed"), + : GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Attempt to send trailing metadata after " + "stream was closed"), "send_trailing_metadata_finished"); } else if (s->id != 0) { /* TODO(ctiller): check if there's flow control for any outstanding @@ -1408,11 +1414,11 @@ static void send_goaway(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_error *error) { t->sent_goaway_state = GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED; grpc_http2_error_code http_error; - const char *msg; - grpc_error_get_status(error, gpr_inf_future(GPR_CLOCK_MONOTONIC), NULL, &msg, - &http_error); + grpc_slice slice; + grpc_error_get_status(error, gpr_inf_future(GPR_CLOCK_MONOTONIC), NULL, + &slice, &http_error); grpc_chttp2_goaway_append(t->last_new_stream_id, (uint32_t)http_error, - grpc_slice_from_copied_string(msg), &t->qbuf); + grpc_slice_ref_internal(slice), &t->qbuf); grpc_chttp2_initiate_write(exec_ctx, t, false, "goaway_sent"); GRPC_ERROR_UNREF(error); } @@ -1572,7 +1578,7 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, if (t->sent_goaway_state == GRPC_CHTTP2_GOAWAY_SENT) { close_transport_locked( exec_ctx, t, - GRPC_ERROR_CREATE_REFERENCING( + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( "Last stream closed after sending GOAWAY", &error, 1)); } } @@ -1613,8 +1619,8 @@ void grpc_chttp2_cancel_stream(grpc_exec_ctx *exec_ctx, void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s, grpc_error *error) { grpc_status_code status; - const char *msg; - grpc_error_get_status(error, s->deadline, &status, &msg, NULL); + grpc_slice slice; + grpc_error_get_status(error, s->deadline, &status, &slice, NULL); if (status != GRPC_STATUS_OK) { s->seen_error = true; @@ -1629,15 +1635,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))); - 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", + 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 (!GRPC_SLICE_IS_EMPTY(slice)) { + 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_ref_internal(slice)))); } s->published_metadata[1] = GRPC_METADATA_SYNTHESIZED_FROM_FAKE; grpc_chttp2_maybe_complete_recv_trailing_metadata(exec_ctx, t, s); @@ -1666,7 +1676,8 @@ static grpc_error *removal_error(grpc_error *extra_error, grpc_chttp2_stream *s, add_error(extra_error, refs, &nrefs); grpc_error *error = GRPC_ERROR_NONE; if (nrefs > 0) { - error = GRPC_ERROR_CREATE_REFERENCING(master_error_msg, refs, nrefs); + error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(master_error_msg, + refs, nrefs); } GRPC_ERROR_UNREF(extra_error); return error; @@ -1760,12 +1771,13 @@ 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; grpc_status_code grpc_status; - const char *msg; - grpc_error_get_status(error, s->deadline, &grpc_status, &msg, NULL); + grpc_slice slice; + grpc_error_get_status(error, s->deadline, &grpc_status, &slice, NULL); GPR_ASSERT(grpc_status >= 0 && (int)grpc_status < 100); @@ -1775,6 +1787,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 */ @@ -1801,32 +1833,30 @@ static void close_from_api(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, GPR_ASSERT(p == GRPC_SLICE_END_PTR(status_hdr)); len += (uint32_t)GRPC_SLICE_LENGTH(status_hdr); - if (msg != NULL) { - size_t msg_len = strlen(msg); - GPR_ASSERT(msg_len <= UINT32_MAX); - uint32_t msg_len_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)msg_len, 0); - message_pfx = grpc_slice_malloc(14 + msg_len_len); - p = GRPC_SLICE_START_PTR(message_pfx); - *p++ = 0x00; /* literal header, not indexed */ - *p++ = 12; /* len(grpc-message) */ - *p++ = 'g'; - *p++ = 'r'; - *p++ = 'p'; - *p++ = 'c'; - *p++ = '-'; - *p++ = 'm'; - *p++ = 'e'; - *p++ = 's'; - *p++ = 's'; - *p++ = 'a'; - *p++ = 'g'; - *p++ = 'e'; - GRPC_CHTTP2_WRITE_VARINT((uint32_t)msg_len, 0, 0, p, (uint32_t)msg_len_len); - p += msg_len_len; - GPR_ASSERT(p == GRPC_SLICE_END_PTR(message_pfx)); - len += (uint32_t)GRPC_SLICE_LENGTH(message_pfx); - len += (uint32_t)msg_len; - } + size_t msg_len = GRPC_SLICE_LENGTH(slice); + GPR_ASSERT(msg_len <= UINT32_MAX); + uint32_t msg_len_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)msg_len, 0); + message_pfx = grpc_slice_malloc(14 + msg_len_len); + p = GRPC_SLICE_START_PTR(message_pfx); + *p++ = 0x00; /* literal header, not indexed */ + *p++ = 12; /* len(grpc-message) */ + *p++ = 'g'; + *p++ = 'r'; + *p++ = 'p'; + *p++ = 'c'; + *p++ = '-'; + *p++ = 'm'; + *p++ = 'e'; + *p++ = 's'; + *p++ = 's'; + *p++ = 'a'; + *p++ = 'g'; + *p++ = 'e'; + GRPC_CHTTP2_WRITE_VARINT((uint32_t)msg_len, 0, 0, p, (uint32_t)msg_len_len); + p += msg_len_len; + GPR_ASSERT(p == GRPC_SLICE_END_PTR(message_pfx)); + len += (uint32_t)GRPC_SLICE_LENGTH(message_pfx); + len += (uint32_t)msg_len; hdr = grpc_slice_malloc(9); p = GRPC_SLICE_START_PTR(hdr); @@ -1842,11 +1872,12 @@ 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); - grpc_slice_buffer_add(&t->qbuf, status_hdr); - if (msg != NULL) { - grpc_slice_buffer_add(&t->qbuf, message_pfx); - grpc_slice_buffer_add(&t->qbuf, grpc_slice_from_copied_string(msg)); + if (!s->sent_initial_metadata) { + grpc_slice_buffer_add(&t->qbuf, http_status_hdr); } + grpc_slice_buffer_add(&t->qbuf, status_hdr); + grpc_slice_buffer_add(&t->qbuf, message_pfx); + grpc_slice_buffer_add(&t->qbuf, grpc_slice_ref_internal(slice)); grpc_slice_buffer_add( &t->qbuf, grpc_chttp2_rst_stream_create(s->id, GRPC_HTTP2_NO_ERROR, &s->stats.outgoing)); @@ -1921,9 +1952,9 @@ static grpc_error *try_http_parsing(grpc_exec_ctx *exec_ctx, if (parse_error == GRPC_ERROR_NONE && (parse_error = grpc_http_parser_eof(&parser)) == GRPC_ERROR_NONE) { error = grpc_error_set_int( - grpc_error_set_int( - GRPC_ERROR_CREATE("Trying to connect an http1.x server"), - GRPC_ERROR_INT_HTTP_STATUS, response.status), + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Trying to connect an http1.x server"), + GRPC_ERROR_INT_HTTP_STATUS, response.status), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE); } GRPC_ERROR_UNREF(parse_error); @@ -1944,9 +1975,10 @@ static void read_action_locked(grpc_exec_ctx *exec_ctx, void *tp, grpc_error *err = error; if (err != GRPC_ERROR_NONE) { - err = grpc_error_set_int( - GRPC_ERROR_CREATE_REFERENCING("Endpoint read failed", &err, 1), - GRPC_ERROR_INT_OCCURRED_DURING_WRITE, t->write_state); + err = grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Endpoint read failed", &err, 1), + GRPC_ERROR_INT_OCCURRED_DURING_WRITE, + t->write_state); } GPR_SWAP(grpc_error *, err, error); GRPC_ERROR_UNREF(err); @@ -1967,8 +1999,8 @@ static void read_action_locked(grpc_exec_ctx *exec_ctx, void *tp, if (errors[1] != GRPC_ERROR_NONE) { errors[2] = try_http_parsing(exec_ctx, t); GRPC_ERROR_UNREF(error); - error = GRPC_ERROR_CREATE_REFERENCING("Failed parsing HTTP/2", errors, - GPR_ARRAY_SIZE(errors)); + error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Failed parsing HTTP/2", errors, GPR_ARRAY_SIZE(errors)); } for (i = 0; i < GPR_ARRAY_SIZE(errors); i++) { GRPC_ERROR_UNREF(errors[i]); @@ -1993,7 +2025,7 @@ static void read_action_locked(grpc_exec_ctx *exec_ctx, void *tp, GPR_TIMER_BEGIN("post_reading_action_locked", 0); bool keep_reading = false; if (error == GRPC_ERROR_NONE && t->closed) { - error = GRPC_ERROR_CREATE("Transport closed"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Transport closed"); } if (error != GRPC_ERROR_NONE) { close_transport_locked(exec_ctx, t, GRPC_ERROR_REF(error)); @@ -2128,8 +2160,8 @@ static void keepalive_watchdog_fired_locked(grpc_exec_ctx *exec_ctx, void *arg, if (t->keepalive_state == GRPC_CHTTP2_KEEPALIVE_STATE_PINGING) { if (error == GRPC_ERROR_NONE) { t->keepalive_state = GRPC_CHTTP2_KEEPALIVE_STATE_DYING; - close_transport_locked(exec_ctx, t, - GRPC_ERROR_CREATE("keepalive watchdog timeout")); + close_transport_locked(exec_ctx, t, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "keepalive watchdog timeout")); } } else { /** The watchdog timer should have been cancelled by @@ -2328,7 +2360,8 @@ void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx, gpr_mu_lock(&bs->slice_mu); if (bs->remaining_bytes < GRPC_SLICE_LENGTH(slice)) { incoming_byte_stream_publish_error( - exec_ctx, bs, GRPC_ERROR_CREATE("Too many bytes in stream")); + exec_ctx, bs, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Too many bytes in stream")); } else { bs->remaining_bytes -= (uint32_t)GRPC_SLICE_LENGTH(slice); if (bs->on_next != NULL) { @@ -2348,7 +2381,7 @@ void grpc_chttp2_incoming_byte_stream_finished( if (error == GRPC_ERROR_NONE) { gpr_mu_lock(&bs->slice_mu); if (bs->remaining_bytes != 0) { - error = GRPC_ERROR_CREATE("Truncated message"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Truncated message"); } gpr_mu_unlock(&bs->slice_mu); } @@ -2428,9 +2461,9 @@ static void benign_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, t->peer_string); } send_goaway(exec_ctx, t, - grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"), - GRPC_ERROR_INT_HTTP2_ERROR, - GRPC_HTTP2_ENHANCE_YOUR_CALM)); + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Buffers full"), + GRPC_ERROR_INT_HTTP2_ERROR, GRPC_HTTP2_ENHANCE_YOUR_CALM)); } else if (error == GRPC_ERROR_NONE && grpc_resource_quota_trace) { gpr_log(GPR_DEBUG, "HTTP2: %s - skip benign reclamation, there are still %" PRIdPTR @@ -2457,9 +2490,10 @@ static void destructive_reclaimer_locked(grpc_exec_ctx *exec_ctx, void *arg, s->id); } grpc_chttp2_cancel_stream( - exec_ctx, t, s, grpc_error_set_int(GRPC_ERROR_CREATE("Buffers full"), - GRPC_ERROR_INT_HTTP2_ERROR, - GRPC_HTTP2_ENHANCE_YOUR_CALM)); + exec_ctx, t, s, + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Buffers full"), + GRPC_ERROR_INT_HTTP2_ERROR, + GRPC_HTTP2_ENHANCE_YOUR_CALM)); if (n > 1) { /* Since we cancel one stream per destructive reclamation, if there are more streams left, we can immediately post a new diff --git a/src/core/ext/transport/chttp2/transport/frame_data.c b/src/core/ext/transport/chttp2/transport/frame_data.c index f9b9e1b309..6e9258ee7e 100644 --- a/src/core/ext/transport/chttp2/transport/frame_data.c +++ b/src/core/ext/transport/chttp2/transport/frame_data.c @@ -54,7 +54,8 @@ void grpc_chttp2_data_parser_destroy(grpc_exec_ctx *exec_ctx, grpc_chttp2_data_parser *parser) { if (parser->parsing_frame != NULL) { grpc_chttp2_incoming_byte_stream_finished( - exec_ctx, parser->parsing_frame, GRPC_ERROR_CREATE("Parser destroyed")); + exec_ctx, parser->parsing_frame, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Parser destroyed")); } GRPC_ERROR_UNREF(parser->error); } @@ -65,8 +66,9 @@ grpc_error *grpc_chttp2_data_parser_begin_frame(grpc_chttp2_data_parser *parser, if (flags & ~GRPC_CHTTP2_DATA_FLAG_END_STREAM) { char *msg; gpr_asprintf(&msg, "unsupported data flags: 0x%02x", flags); - grpc_error *err = grpc_error_set_int( - GRPC_ERROR_CREATE(msg), GRPC_ERROR_INT_STREAM_ID, (intptr_t)stream_id); + grpc_error *err = + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg), + GRPC_ERROR_INT_STREAM_ID, (intptr_t)stream_id); gpr_free(msg); return err; } @@ -173,13 +175,13 @@ static grpc_error *parse_inner(grpc_exec_ctx *exec_ctx, break; default: gpr_asprintf(&msg, "Bad GRPC frame type 0x%02x", p->frame_type); - p->error = GRPC_ERROR_CREATE(msg); + p->error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); p->error = grpc_error_set_int(p->error, GRPC_ERROR_INT_STREAM_ID, (intptr_t)s->id); gpr_free(msg); msg = grpc_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII); - p->error = - grpc_error_set_str(p->error, GRPC_ERROR_STR_RAW_BYTES, msg); + p->error = grpc_error_set_str(p->error, GRPC_ERROR_STR_RAW_BYTES, + grpc_slice_from_copied_string(msg)); gpr_free(msg); p->error = grpc_error_set_int(p->error, GRPC_ERROR_INT_OFFSET, cur - beg); @@ -265,7 +267,8 @@ static grpc_error *parse_inner(grpc_exec_ctx *exec_ctx, } } - GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); + GPR_UNREACHABLE_CODE( + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here")); } grpc_error *grpc_chttp2_data_parser_parse(grpc_exec_ctx *exec_ctx, void *parser, diff --git a/src/core/ext/transport/chttp2/transport/frame_goaway.c b/src/core/ext/transport/chttp2/transport/frame_goaway.c index d99d486c1b..001271dd22 100644 --- a/src/core/ext/transport/chttp2/transport/frame_goaway.c +++ b/src/core/ext/transport/chttp2/transport/frame_goaway.c @@ -54,7 +54,7 @@ grpc_error *grpc_chttp2_goaway_parser_begin_frame(grpc_chttp2_goaway_parser *p, if (length < 8) { char *msg; gpr_asprintf(&msg, "goaway frame too short (%d bytes)", length); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -156,7 +156,8 @@ grpc_error *grpc_chttp2_goaway_parser_parse(grpc_exec_ctx *exec_ctx, } return GRPC_ERROR_NONE; } - GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); + GPR_UNREACHABLE_CODE( + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here")); } void grpc_chttp2_goaway_append(uint32_t last_stream_id, uint32_t error_code, diff --git a/src/core/ext/transport/chttp2/transport/frame_ping.c b/src/core/ext/transport/chttp2/transport/frame_ping.c index f487533c41..de8462a17e 100644 --- a/src/core/ext/transport/chttp2/transport/frame_ping.c +++ b/src/core/ext/transport/chttp2/transport/frame_ping.c @@ -71,7 +71,7 @@ grpc_error *grpc_chttp2_ping_parser_begin_frame(grpc_chttp2_ping_parser *parser, if (flags & 0xfe || length != 8) { char *msg; gpr_asprintf(&msg, "invalid ping: length=%d, flags=%02x", length, flags); - grpc_error *error = GRPC_ERROR_CREATE(msg); + grpc_error *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return error; } @@ -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/frame_rst_stream.c b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c index cb017e75f0..225f15c77c 100644 --- a/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +++ b/src/core/ext/transport/chttp2/transport/frame_rst_stream.c @@ -76,7 +76,7 @@ grpc_error *grpc_chttp2_rst_stream_parser_begin_frame( char *msg; gpr_asprintf(&msg, "invalid rst_stream: length=%d, flags=%02x", length, flags); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -112,8 +112,9 @@ grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx, char *message; gpr_asprintf(&message, "Received RST_STREAM with error code %d", reason); error = grpc_error_set_int( - grpc_error_set_str(GRPC_ERROR_CREATE("RST_STREAM"), - GRPC_ERROR_STR_GRPC_MESSAGE, message), + grpc_error_set_str(GRPC_ERROR_CREATE_FROM_STATIC_STRING("RST_STREAM"), + GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_copied_string(message)), GRPC_ERROR_INT_HTTP2_ERROR, (intptr_t)reason); gpr_free(message); } diff --git a/src/core/ext/transport/chttp2/transport/frame_settings.c b/src/core/ext/transport/chttp2/transport/frame_settings.c index 82290e34cd..16881c0707 100644 --- a/src/core/ext/transport/chttp2/transport/frame_settings.c +++ b/src/core/ext/transport/chttp2/transport/frame_settings.c @@ -131,13 +131,16 @@ grpc_error *grpc_chttp2_settings_parser_begin_frame( if (flags == GRPC_CHTTP2_FLAG_ACK) { parser->is_ack = 1; if (length != 0) { - return GRPC_ERROR_CREATE("non-empty settings ack frame received"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "non-empty settings ack frame received"); } return GRPC_ERROR_NONE; } else if (flags != 0) { - return GRPC_ERROR_CREATE("invalid flags on settings frame"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "invalid flags on settings frame"); } else if (length % 6 != 0) { - return GRPC_ERROR_CREATE("settings frames must be a multiple of six bytes"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "settings frames must be a multiple of six bytes"); } else { return GRPC_ERROR_NONE; } @@ -229,7 +232,7 @@ grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p, &t->qbuf); gpr_asprintf(&msg, "invalid value %u passed for %s", parser->value, sp->name); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } diff --git a/src/core/ext/transport/chttp2/transport/frame_window_update.c b/src/core/ext/transport/chttp2/transport/frame_window_update.c index 8fa0bb471a..b76b6f6f47 100644 --- a/src/core/ext/transport/chttp2/transport/frame_window_update.c +++ b/src/core/ext/transport/chttp2/transport/frame_window_update.c @@ -70,7 +70,7 @@ grpc_error *grpc_chttp2_window_update_parser_begin_frame( char *msg; gpr_asprintf(&msg, "invalid window update: length=%d, flags=%02x", length, flags); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -102,7 +102,7 @@ grpc_error *grpc_chttp2_window_update_parser_parse( if (received_update == 0 || (received_update & 0x80000000u)) { char *msg; gpr_asprintf(&msg, "invalid window update bytes: %d", p->amount); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.c b/src/core/ext/transport/chttp2/transport/hpack_parser.c index 40f5120308..5099d736bf 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_parser.c +++ b/src/core/ext/transport/chttp2/transport/hpack_parser.c @@ -693,7 +693,7 @@ static grpc_error *on_hdr(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p, } if (p->on_header == NULL) { GRPC_MDELEM_UNREF(exec_ctx, md); - return GRPC_ERROR_CREATE("on_header callback not set"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("on_header callback not set"); } p->on_header(exec_ctx, p->on_header_user_data, md); return GRPC_ERROR_NONE; @@ -810,7 +810,8 @@ static grpc_error *finish_indexed_field(grpc_exec_ctx *exec_ctx, grpc_mdelem md = grpc_chttp2_hptbl_lookup(&p->table, p->index); if (GRPC_MDISNULL(md)) { return grpc_error_set_int( - grpc_error_set_int(GRPC_ERROR_CREATE("Invalid HPACK index received"), + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Invalid HPACK index received"), GRPC_ERROR_INT_INDEX, (intptr_t)p->index), GRPC_ERROR_INT_SIZE, (intptr_t)p->table.num_ents); } @@ -1074,7 +1075,7 @@ static grpc_error *parse_max_tbl_size(grpc_exec_ctx *exec_ctx, if (p->dynamic_table_update_allowed == 0) { return parse_error( exec_ctx, p, cur, end, - GRPC_ERROR_CREATE( + GRPC_ERROR_CREATE_FROM_STATIC_STRING( "More than two max table size changes in a single frame")); } p->dynamic_table_update_allowed--; @@ -1092,7 +1093,7 @@ static grpc_error *parse_max_tbl_size_x(grpc_exec_ctx *exec_ctx, if (p->dynamic_table_update_allowed == 0) { return parse_error( exec_ctx, p, cur, end, - GRPC_ERROR_CREATE( + GRPC_ERROR_CREATE_FROM_STATIC_STRING( "More than two max table size changes in a single frame")); } p->dynamic_table_update_allowed--; @@ -1126,7 +1127,7 @@ static grpc_error *parse_illegal_op(grpc_exec_ctx *exec_ctx, GPR_ASSERT(cur != end); char *msg; gpr_asprintf(&msg, "Illegal hpack op code %d", *cur); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return parse_error(exec_ctx, p, cur, end, err); } @@ -1246,7 +1247,7 @@ error: "integer overflow in hpack integer decoding: have 0x%08x, " "got byte 0x%02x on byte 5", *p->parsing.value, *cur); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return parse_error(exec_ctx, p, cur, end, err); } @@ -1275,7 +1276,7 @@ static grpc_error *parse_value5up(grpc_exec_ctx *exec_ctx, "integer overflow in hpack integer decoding: have 0x%08x, " "got byte 0x%02x sometime after byte 5", *p->parsing.value, *cur); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return parse_error(exec_ctx, p, cur, end, err); } @@ -1333,8 +1334,9 @@ static grpc_error *append_string(grpc_exec_ctx *exec_ctx, bits = inverse_base64[*cur]; ++cur; if (bits == 255) - return parse_error(exec_ctx, p, cur, end, - GRPC_ERROR_CREATE("Illegal base64 character")); + return parse_error( + exec_ctx, p, cur, end, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character")); else if (bits == 64) goto b64_byte0; p->base64_buffer = bits << 18; @@ -1348,8 +1350,9 @@ static grpc_error *append_string(grpc_exec_ctx *exec_ctx, bits = inverse_base64[*cur]; ++cur; if (bits == 255) - return parse_error(exec_ctx, p, cur, end, - GRPC_ERROR_CREATE("Illegal base64 character")); + return parse_error( + exec_ctx, p, cur, end, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character")); else if (bits == 64) goto b64_byte1; p->base64_buffer |= bits << 12; @@ -1363,8 +1366,9 @@ static grpc_error *append_string(grpc_exec_ctx *exec_ctx, bits = inverse_base64[*cur]; ++cur; if (bits == 255) - return parse_error(exec_ctx, p, cur, end, - GRPC_ERROR_CREATE("Illegal base64 character")); + return parse_error( + exec_ctx, p, cur, end, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character")); else if (bits == 64) goto b64_byte2; p->base64_buffer |= bits << 6; @@ -1378,8 +1382,9 @@ static grpc_error *append_string(grpc_exec_ctx *exec_ctx, bits = inverse_base64[*cur]; ++cur; if (bits == 255) - return parse_error(exec_ctx, p, cur, end, - GRPC_ERROR_CREATE("Illegal base64 character")); + return parse_error( + exec_ctx, p, cur, end, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character")); else if (bits == 64) goto b64_byte3; p->base64_buffer |= bits; @@ -1391,7 +1396,8 @@ static grpc_error *append_string(grpc_exec_ctx *exec_ctx, goto b64_byte0; } GPR_UNREACHABLE_CODE(return parse_error( - exec_ctx, p, cur, end, GRPC_ERROR_CREATE("Should never reach here"))); + exec_ctx, p, cur, end, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here"))); } static grpc_error *finish_str(grpc_exec_ctx *exec_ctx, @@ -1406,16 +1412,16 @@ static grpc_error *finish_str(grpc_exec_ctx *exec_ctx, case B64_BYTE0: break; case B64_BYTE1: - return parse_error( - exec_ctx, p, cur, end, - GRPC_ERROR_CREATE("illegal base64 encoding")); /* illegal encoding */ + return parse_error(exec_ctx, p, cur, end, + GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "illegal base64 encoding")); /* illegal encoding */ case B64_BYTE2: bits = p->base64_buffer; if (bits & 0xffff) { char *msg; gpr_asprintf(&msg, "trailing bits in base64 encoding: 0x%04x", bits & 0xffff); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return parse_error(exec_ctx, p, cur, end, err); } @@ -1428,7 +1434,7 @@ static grpc_error *finish_str(grpc_exec_ctx *exec_ctx, char *msg; gpr_asprintf(&msg, "trailing bits in base64 encoding: 0x%02x", bits & 0xff); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return parse_error(exec_ctx, p, cur, end, err); } @@ -1550,7 +1556,8 @@ static grpc_error *is_binary_indexed_header(grpc_chttp2_hpack_parser *p, grpc_mdelem elem = grpc_chttp2_hptbl_lookup(&p->table, p->index); if (GRPC_MDISNULL(elem)) { return grpc_error_set_int( - grpc_error_set_int(GRPC_ERROR_CREATE("Invalid HPACK index received"), + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Invalid HPACK index received"), GRPC_ERROR_INT_INDEX, (intptr_t)p->index), GRPC_ERROR_INT_SIZE, (intptr_t)p->table.num_ents); } @@ -1620,13 +1627,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; } @@ -1670,7 +1682,7 @@ grpc_error *grpc_chttp2_header_parser_parse(grpc_exec_ctx *exec_ctx, if (is_last) { if (parser->is_boundary && parser->state != parse_begin) { GPR_TIMER_END("grpc_chttp2_hpack_parser_parse", 0); - return GRPC_ERROR_CREATE( + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( "end of header frame not aligned with a hpack record boundary"); } /* need to check for null stream: this can occur if we receive an invalid @@ -1678,7 +1690,8 @@ grpc_error *grpc_chttp2_header_parser_parse(grpc_exec_ctx *exec_ctx, if (s != NULL) { if (parser->is_boundary) { if (s->header_frames_received == GPR_ARRAY_SIZE(s->metadata_buffer)) { - return GRPC_ERROR_CREATE("Too many trailer frames"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Too many trailer frames"); } s->published_metadata[s->header_frames_received] = GRPC_METADATA_PUBLISHED_FROM_WIRE; diff --git a/src/core/ext/transport/chttp2/transport/hpack_table.c b/src/core/ext/transport/chttp2/transport/hpack_table.c index 62dd1b8cab..9dd41fdbe1 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_table.c +++ b/src/core/ext/transport/chttp2/transport/hpack_table.c @@ -280,7 +280,7 @@ grpc_error *grpc_chttp2_hptbl_set_current_table_size(grpc_exec_ctx *exec_ctx, gpr_asprintf(&msg, "Attempt to make hpack table %d bytes when max is %d bytes", bytes, tbl->max_bytes); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -317,7 +317,7 @@ grpc_error *grpc_chttp2_hptbl_add(grpc_exec_ctx *exec_ctx, "HPACK max table size reduced to %d but not reflected by hpack " "stream (still at %d)", tbl->max_bytes, tbl->current_table_bytes); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } diff --git a/src/core/ext/transport/chttp2/transport/incoming_metadata.c b/src/core/ext/transport/chttp2/transport/incoming_metadata.c index c91b019aa0..da0a34d32a 100644 --- a/src/core/ext/transport/chttp2/transport/incoming_metadata.c +++ b/src/core/ext/transport/chttp2/transport/incoming_metadata.c @@ -41,69 +41,48 @@ #include <grpc/support/log.h> void grpc_chttp2_incoming_metadata_buffer_init( - grpc_chttp2_incoming_metadata_buffer *buffer) { - buffer->deadline = gpr_inf_future(GPR_CLOCK_REALTIME); + grpc_chttp2_incoming_metadata_buffer *buffer, gpr_arena *arena) { + buffer->arena = arena; + grpc_metadata_batch_init(&buffer->batch); + buffer->batch.deadline = gpr_inf_future(GPR_CLOCK_REALTIME); } void grpc_chttp2_incoming_metadata_buffer_destroy( grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer) { - size_t i; - if (!buffer->published) { - for (i = 0; i < buffer->count; i++) { - GRPC_MDELEM_UNREF(exec_ctx, buffer->elems[i].md); - } - } - gpr_free(buffer->elems); + grpc_metadata_batch_destroy(exec_ctx, &buffer->batch); } -void grpc_chttp2_incoming_metadata_buffer_add( - grpc_chttp2_incoming_metadata_buffer *buffer, grpc_mdelem elem) { - GPR_ASSERT(!buffer->published); - if (buffer->capacity == buffer->count) { - buffer->capacity = GPR_MAX(8, 2 * buffer->capacity); - buffer->elems = - gpr_realloc(buffer->elems, sizeof(*buffer->elems) * buffer->capacity); - } - buffer->elems[buffer->count++].md = elem; +grpc_error *grpc_chttp2_incoming_metadata_buffer_add( + grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer, + grpc_mdelem elem) { buffer->size += GRPC_MDELEM_LENGTH(elem); + return grpc_metadata_batch_add_tail( + exec_ctx, &buffer->batch, + gpr_arena_alloc(buffer->arena, sizeof(grpc_linked_mdelem)), elem); } -void grpc_chttp2_incoming_metadata_buffer_replace_or_add( +grpc_error *grpc_chttp2_incoming_metadata_buffer_replace_or_add( grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer, grpc_mdelem elem) { - for (size_t i = 0; i < buffer->count; i++) { - if (grpc_slice_eq(GRPC_MDKEY(buffer->elems[i].md), GRPC_MDKEY(elem))) { - GRPC_MDELEM_UNREF(exec_ctx, buffer->elems[i].md); - buffer->elems[i].md = elem; - return; + for (grpc_linked_mdelem *l = buffer->batch.list.head; l != NULL; + l = l->next) { + if (grpc_slice_eq(GRPC_MDKEY(l->md), GRPC_MDKEY(elem))) { + GRPC_MDELEM_UNREF(exec_ctx, l->md); + l->md = elem; + return GRPC_ERROR_NONE; } } - grpc_chttp2_incoming_metadata_buffer_add(buffer, elem); + return grpc_chttp2_incoming_metadata_buffer_add(exec_ctx, buffer, elem); } void grpc_chttp2_incoming_metadata_buffer_set_deadline( grpc_chttp2_incoming_metadata_buffer *buffer, gpr_timespec deadline) { - GPR_ASSERT(!buffer->published); - buffer->deadline = deadline; + buffer->batch.deadline = deadline; } void grpc_chttp2_incoming_metadata_buffer_publish( grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer, grpc_metadata_batch *batch) { - GPR_ASSERT(!buffer->published); - buffer->published = 1; - if (buffer->count > 0) { - size_t i; - for (i = 0; i < buffer->count; i++) { - /* TODO(ctiller): do something better here */ - if (!GRPC_LOG_IF_ERROR("grpc_chttp2_incoming_metadata_buffer_publish", - grpc_metadata_batch_link_tail( - exec_ctx, batch, &buffer->elems[i]))) { - GRPC_MDELEM_UNREF(exec_ctx, buffer->elems[i].md); - } - } - } else { - batch->list.head = batch->list.tail = NULL; - } - batch->deadline = buffer->deadline; + *batch = buffer->batch; + grpc_metadata_batch_init(&buffer->batch); } diff --git a/src/core/ext/transport/chttp2/transport/incoming_metadata.h b/src/core/ext/transport/chttp2/transport/incoming_metadata.h index 1eac6fc150..288c917e65 100644 --- a/src/core/ext/transport/chttp2/transport/incoming_metadata.h +++ b/src/core/ext/transport/chttp2/transport/incoming_metadata.h @@ -37,28 +37,26 @@ #include "src/core/lib/transport/transport.h" typedef struct { - grpc_linked_mdelem *elems; - size_t count; - size_t capacity; - gpr_timespec deadline; - int published; + gpr_arena *arena; + grpc_metadata_batch batch; size_t size; // total size of metadata } grpc_chttp2_incoming_metadata_buffer; /** assumes everything initially zeroed */ void grpc_chttp2_incoming_metadata_buffer_init( - grpc_chttp2_incoming_metadata_buffer *buffer); + grpc_chttp2_incoming_metadata_buffer *buffer, gpr_arena *arena); void grpc_chttp2_incoming_metadata_buffer_destroy( grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer); void grpc_chttp2_incoming_metadata_buffer_publish( grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer, grpc_metadata_batch *batch); -void grpc_chttp2_incoming_metadata_buffer_add( - grpc_chttp2_incoming_metadata_buffer *buffer, grpc_mdelem elem); -void grpc_chttp2_incoming_metadata_buffer_replace_or_add( +grpc_error *grpc_chttp2_incoming_metadata_buffer_add( grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer, - grpc_mdelem elem); + grpc_mdelem elem) GRPC_MUST_USE_RESULT; +grpc_error *grpc_chttp2_incoming_metadata_buffer_replace_or_add( + grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer, + grpc_mdelem elem) GRPC_MUST_USE_RESULT; void grpc_chttp2_incoming_metadata_buffer_set_deadline( grpc_chttp2_incoming_metadata_buffer *buffer, gpr_timespec deadline); diff --git a/src/core/ext/transport/chttp2/transport/internal.h b/src/core/ext/transport/chttp2/transport/internal.h index d26812ad6b..3c56c21599 100644 --- a/src/core/ext/transport/chttp2/transport/internal.h +++ b/src/core/ext/transport/chttp2/transport/internal.h @@ -425,7 +425,7 @@ struct grpc_chttp2_stream { grpc_stream_refcount *refcount; grpc_closure destroy_stream; - void *destroy_stream_arg; + grpc_closure *destroy_stream_arg; grpc_chttp2_stream_link links[STREAM_LIST_COUNT]; uint8_t included[STREAM_LIST_COUNT]; diff --git a/src/core/ext/transport/chttp2/transport/parsing.c b/src/core/ext/transport/chttp2/transport/parsing.c index e7f2597f89..7e457ced27 100644 --- a/src/core/ext/transport/chttp2/transport/parsing.c +++ b/src/core/ext/transport/chttp2/transport/parsing.c @@ -116,7 +116,7 @@ grpc_error *grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state], (int)(uint8_t)GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state], *cur, (int)*cur, t->deframe_state); - err = GRPC_ERROR_CREATE(msg); + err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -219,7 +219,7 @@ grpc_error *grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx, t->incoming_frame_size, t->settings[GRPC_ACKED_SETTINGS] [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]); - err = GRPC_ERROR_CREATE(msg); + err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -278,7 +278,7 @@ static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx, gpr_asprintf( &msg, "Expected SETTINGS frame as the first frame, got frame type %d", t->incoming_frame_type); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -288,7 +288,7 @@ static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx, char *msg; gpr_asprintf(&msg, "Expected CONTINUATION frame, got frame type %02x", t->incoming_frame_type); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -299,7 +299,7 @@ static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx, "Expected CONTINUATION frame for grpc_chttp2_stream %08x, got " "grpc_chttp2_stream %08x", t->expect_continuation_stream_id, t->incoming_stream_id); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -311,7 +311,8 @@ static grpc_error *init_frame_parser(grpc_exec_ctx *exec_ctx, case GRPC_CHTTP2_FRAME_HEADER: return init_header_frame_parser(exec_ctx, t, 0); case GRPC_CHTTP2_FRAME_CONTINUATION: - return GRPC_ERROR_CREATE("Unexpected CONTINUATION frame"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Unexpected CONTINUATION frame"); case GRPC_CHTTP2_FRAME_RST_STREAM: return init_rst_stream_parser(exec_ctx, t); case GRPC_CHTTP2_FRAME_SETTINGS: @@ -371,7 +372,7 @@ static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx, char *msg; gpr_asprintf(&msg, "frame of size %d overflows incoming window of %" PRId64, t->incoming_frame_size, t->incoming_window); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -409,7 +410,7 @@ static grpc_error *update_incoming_window(grpc_exec_ctx *exec_ctx, s->incoming_window_delta + t->settings[GRPC_ACKED_SETTINGS] [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]); - grpc_error *err = GRPC_ERROR_CREATE(msg); + grpc_error *err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return err; } @@ -542,13 +543,21 @@ static void on_initial_header(grpc_exec_ctx *exec_ctx, void *tp, grpc_chttp2_cancel_stream( exec_ctx, t, s, grpc_error_set_int( - GRPC_ERROR_CREATE("received initial metadata size exceeds limit"), + GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "received initial metadata size exceeds limit"), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED)); grpc_chttp2_parsing_become_skip_parser(exec_ctx, t); 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); + } } } @@ -591,14 +600,22 @@ static void on_trailing_header(grpc_exec_ctx *exec_ctx, void *tp, new_size, metadata_size_limit); grpc_chttp2_cancel_stream( exec_ctx, t, s, - grpc_error_set_int( - GRPC_ERROR_CREATE("received trailing metadata size exceeds limit"), - GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED)); + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "received trailing metadata size exceeds limit"), + GRPC_ERROR_INT_GRPC_STATUS, + GRPC_STATUS_RESOURCE_EXHAUSTED)); grpc_chttp2_parsing_become_skip_parser(exec_ctx, t); 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); @@ -757,7 +774,8 @@ static grpc_error *init_goaway_parser(grpc_exec_ctx *exec_ctx, static grpc_error *init_settings_frame_parser(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) { if (t->incoming_stream_id != 0) { - return GRPC_ERROR_CREATE("Settings frame received for grpc_chttp2_stream"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Settings frame received for grpc_chttp2_stream"); } grpc_error *err = grpc_chttp2_settings_parser_begin_frame( diff --git a/src/core/ext/transport/cronet/transport/cronet_transport.c b/src/core/ext/transport/cronet/transport/cronet_transport.c index 01a03533da..952690eba7 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,16 +257,40 @@ 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; + } + } } } static grpc_error *make_error_with_desc(int error_code, const char *desc) { - grpc_error *error = GRPC_ERROR_CREATE(desc); + grpc_error *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc); error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS, error_code); return error; } @@ -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 3fb2a60ac7..6d53b0576e 100644 --- a/src/core/lib/channel/channel_stack.c +++ b/src/core/lib/channel/channel_stack.c @@ -166,41 +166,32 @@ void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx, } } -grpc_error *grpc_call_stack_init( - grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack, - int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg, - grpc_call_context_element *context, const void *transport_server_data, - grpc_slice path, gpr_timespec start_time, gpr_timespec deadline, - grpc_call_stack *call_stack) { +grpc_error *grpc_call_stack_init(grpc_exec_ctx *exec_ctx, + grpc_channel_stack *channel_stack, + int initial_refs, grpc_iomgr_cb_func destroy, + void *destroy_arg, + const grpc_call_element_args *elem_args) { grpc_channel_element *channel_elems = CHANNEL_ELEMS_FROM_STACK(channel_stack); size_t count = channel_stack->count; grpc_call_element *call_elems; char *user_data; size_t i; - call_stack->count = count; - GRPC_STREAM_REF_INIT(&call_stack->refcount, initial_refs, destroy, + elem_args->call_stack->count = count; + GRPC_STREAM_REF_INIT(&elem_args->call_stack->refcount, initial_refs, destroy, destroy_arg, "CALL_STACK"); - call_elems = CALL_ELEMS_FROM_STACK(call_stack); + call_elems = CALL_ELEMS_FROM_STACK(elem_args->call_stack); user_data = ((char *)call_elems) + ROUND_UP_TO_ALIGNMENT_SIZE(count * sizeof(grpc_call_element)); /* init per-filter data */ grpc_error *first_error = GRPC_ERROR_NONE; - const grpc_call_element_args args = { - .start_time = start_time, - .call_stack = call_stack, - .server_transport_data = transport_server_data, - .context = context, - .path = path, - .deadline = deadline, - }; for (i = 0; i < count; i++) { call_elems[i].filter = channel_elems[i].filter; call_elems[i].channel_data = channel_elems[i].channel_data; call_elems[i].call_data = user_data; - grpc_error *error = - call_elems[i].filter->init_call_elem(exec_ctx, &call_elems[i], &args); + grpc_error *error = call_elems[i].filter->init_call_elem( + exec_ctx, &call_elems[i], elem_args); if (error != GRPC_ERROR_NONE) { if (first_error == GRPC_ERROR_NONE) { first_error = error; @@ -241,15 +232,16 @@ void grpc_call_stack_ignore_set_pollset_or_pollset_set( void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack, const grpc_call_final_info *final_info, - void *and_free_memory) { + grpc_closure *then_schedule_closure) { grpc_call_element *elems = CALL_ELEMS_FROM_STACK(stack); size_t count = stack->count; size_t i; /* destroy per-filter data */ for (i = 0; i < count; i++) { - elems[i].filter->destroy_call_elem(exec_ctx, &elems[i], final_info, - i == count - 1 ? and_free_memory : NULL); + elems[i].filter->destroy_call_elem( + exec_ctx, &elems[i], final_info, + i == count - 1 ? then_schedule_closure : NULL); } } diff --git a/src/core/lib/channel/channel_stack.h b/src/core/lib/channel/channel_stack.h index 6d3340bcbf..80e3603e8d 100644 --- a/src/core/lib/channel/channel_stack.h +++ b/src/core/lib/channel/channel_stack.h @@ -56,6 +56,7 @@ #include "src/core/lib/debug/trace.h" #include "src/core/lib/iomgr/polling_entity.h" +#include "src/core/lib/support/arena.h" #include "src/core/lib/transport/transport.h" #ifdef __cplusplus @@ -84,6 +85,7 @@ typedef struct { grpc_slice path; gpr_timespec start_time; gpr_timespec deadline; + gpr_arena *arena; } grpc_call_element_args; typedef struct { @@ -139,12 +141,12 @@ typedef struct { /* Destroy per call data. The filter does not need to do any chaining. The bottom filter of a stack will be passed a non-NULL pointer to - \a and_free_memory that should be passed to gpr_free when destruction - is complete. \a final_info contains data about the completed call, mainly - for reporting purposes. */ + \a then_schedule_closure that should be passed to grpc_closure_sched when + destruction is complete. \a final_info contains data about the completed + call, mainly for reporting purposes. */ void (*destroy_call_elem)(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *and_free_memory); + grpc_closure *then_schedule_closure); /* sizeof(per channel data) */ size_t sizeof_channel_data; @@ -236,12 +238,11 @@ void grpc_channel_stack_destroy(grpc_exec_ctx *exec_ctx, /* Initialize a call stack given a channel stack. transport_server_data is expected to be NULL on a client, or an opaque transport owned pointer on the server. */ -grpc_error *grpc_call_stack_init( - grpc_exec_ctx *exec_ctx, grpc_channel_stack *channel_stack, - int initial_refs, grpc_iomgr_cb_func destroy, void *destroy_arg, - grpc_call_context_element *context, const void *transport_server_data, - grpc_slice path, gpr_timespec start_time, gpr_timespec deadline, - grpc_call_stack *call_stack); +grpc_error *grpc_call_stack_init(grpc_exec_ctx *exec_ctx, + grpc_channel_stack *channel_stack, + int initial_refs, grpc_iomgr_cb_func destroy, + void *destroy_arg, + const grpc_call_element_args *elem_args); /* Set a pollset or a pollset_set for a call stack: must occur before the first * op is started */ void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx, @@ -271,7 +272,7 @@ void grpc_call_stack_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx, /* Destroy a call stack */ void grpc_call_stack_destroy(grpc_exec_ctx *exec_ctx, grpc_call_stack *stack, const grpc_call_final_info *final_info, - void *and_free_memory); + grpc_closure *then_schedule_closure); /* Ignore set pollset{_set} - used by filters if they don't care about pollsets * at all. Does nothing. */ diff --git a/src/core/lib/channel/compress_filter.c b/src/core/lib/channel/compress_filter.c index aa41014a21..02dc479f3a 100644 --- a/src/core/lib/channel/compress_filter.c +++ b/src/core/lib/channel/compress_filter.c @@ -292,7 +292,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, /* Destructor for call_data */ static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *ignored) { + grpc_closure *ignored) { /* grab pointers to our data from the call element */ call_data *calld = elem->call_data; grpc_slice_buffer_destroy_internal(exec_ctx, &calld->slices); diff --git a/src/core/lib/channel/connected_channel.c b/src/core/lib/channel/connected_channel.c index 29796f7ca7..75c68a5534 100644 --- a/src/core/lib/channel/connected_channel.c +++ b/src/core/lib/channel/connected_channel.c @@ -88,9 +88,10 @@ 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"); + : GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "transport stream initialization failed"); } static void set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx, @@ -105,12 +106,12 @@ static void set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx, /* Destructor for call_data */ static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *and_free_memory) { + grpc_closure *then_schedule_closure) { call_data *calld = elem->call_data; channel_data *chand = elem->channel_data; grpc_transport_destroy_stream(exec_ctx, chand->transport, TRANSPORT_STREAM_FROM_CALL_DATA(calld), - and_free_memory); + then_schedule_closure); } /* Constructor for channel_data */ diff --git a/src/core/lib/channel/deadline_filter.c b/src/core/lib/channel/deadline_filter.c index 5a12d62f1d..ca701ed457 100644 --- a/src/core/lib/channel/deadline_filter.c +++ b/src/core/lib/channel/deadline_filter.c @@ -55,9 +55,9 @@ static void timer_callback(grpc_exec_ctx* exec_ctx, void* arg, if (error != GRPC_ERROR_CANCELLED) { grpc_call_element_signal_error( exec_ctx, elem, - grpc_error_set_int(GRPC_ERROR_CREATE("Deadline Exceeded"), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_DEADLINE_EXCEEDED)); + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Deadline Exceeded"), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_DEADLINE_EXCEEDED)); } GRPC_CALL_STACK_UNREF(exec_ctx, deadline_state->call_stack, "deadline_timer"); } @@ -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/handshaker.c b/src/core/lib/channel/handshaker.c index 1b4240bb10..5861fa6f54 100644 --- a/src/core/lib/channel/handshaker.c +++ b/src/core/lib/channel/handshaker.c @@ -236,8 +236,9 @@ static void call_next_handshaker(grpc_exec_ctx* exec_ctx, void* arg, static void on_timeout(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) { grpc_handshake_manager* mgr = arg; if (error == GRPC_ERROR_NONE) { // Timer fired, rather than being cancelled. - grpc_handshake_manager_shutdown(exec_ctx, mgr, - GRPC_ERROR_CREATE("Handshake timed out")); + grpc_handshake_manager_shutdown( + exec_ctx, mgr, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshake timed out")); } grpc_handshake_manager_unref(exec_ctx, mgr); } diff --git a/src/core/lib/channel/http_client_filter.c b/src/core/lib/channel/http_client_filter.c index c031533dd8..028e9a5d04 100644 --- a/src/core/lib/channel/http_client_filter.c +++ b/src/core/lib/channel/http_client_filter.c @@ -108,11 +108,11 @@ static grpc_error *client_filter_incoming_metadata(grpc_exec_ctx *exec_ctx, grpc_error *e = grpc_error_set_str( grpc_error_set_int( grpc_error_set_str( - GRPC_ERROR_CREATE( + GRPC_ERROR_CREATE_FROM_STATIC_STRING( "Received http2 :status header with non-200 OK status"), - GRPC_ERROR_STR_VALUE, val), + GRPC_ERROR_STR_VALUE, grpc_slice_from_copied_string(val)), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_CANCELLED), - GRPC_ERROR_STR_GRPC_MESSAGE, msg); + GRPC_ERROR_STR_GRPC_MESSAGE, grpc_slice_from_copied_string(msg)); gpr_free(val); gpr_free(msg); return e; @@ -412,7 +412,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, /* Destructor for call_data */ static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *ignored) { + grpc_closure *ignored) { call_data *calld = elem->call_data; grpc_slice_buffer_destroy_internal(exec_ctx, &calld->slices); } diff --git a/src/core/lib/channel/http_server_filter.c b/src/core/lib/channel/http_server_filter.c index fb70de8e96..41a325bc04 100644 --- a/src/core/lib/channel/http_server_filter.c +++ b/src/core/lib/channel/http_server_filter.c @@ -101,7 +101,7 @@ static void add_error(const char *error_name, grpc_error **cumulative, grpc_error *new) { if (new == GRPC_ERROR_NONE) return; if (*cumulative == GRPC_ERROR_NONE) { - *cumulative = GRPC_ERROR_CREATE(error_name); + *cumulative = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_name); } *cumulative = grpc_error_add_child(*cumulative, new); } @@ -125,27 +125,32 @@ static grpc_error *server_filter_incoming_metadata(grpc_exec_ctx *exec_ctx, *calld->recv_cacheable_request = true; } else { add_error(error_name, &error, - grpc_attach_md_to_error(GRPC_ERROR_CREATE("Bad header"), - b->idx.named.method->md)); + grpc_attach_md_to_error( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad header"), + b->idx.named.method->md)); } grpc_metadata_batch_remove(exec_ctx, b, b->idx.named.method); } else { - add_error(error_name, &error, - grpc_error_set_str(GRPC_ERROR_CREATE("Missing header"), - GRPC_ERROR_STR_KEY, ":method")); + add_error( + error_name, &error, + grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"), + GRPC_ERROR_STR_KEY, grpc_slice_from_static_string(":method"))); } if (b->idx.named.te != NULL) { if (!grpc_mdelem_eq(b->idx.named.te->md, GRPC_MDELEM_TE_TRAILERS)) { add_error(error_name, &error, - grpc_attach_md_to_error(GRPC_ERROR_CREATE("Bad header"), - b->idx.named.te->md)); + grpc_attach_md_to_error( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad header"), + b->idx.named.te->md)); } grpc_metadata_batch_remove(exec_ctx, b, b->idx.named.te); } else { add_error(error_name, &error, - grpc_error_set_str(GRPC_ERROR_CREATE("Missing header"), - GRPC_ERROR_STR_KEY, "te")); + grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"), + GRPC_ERROR_STR_KEY, grpc_slice_from_static_string("te"))); } if (b->idx.named.scheme != NULL) { @@ -153,14 +158,17 @@ static grpc_error *server_filter_incoming_metadata(grpc_exec_ctx *exec_ctx, !grpc_mdelem_eq(b->idx.named.scheme->md, GRPC_MDELEM_SCHEME_HTTPS) && !grpc_mdelem_eq(b->idx.named.scheme->md, GRPC_MDELEM_SCHEME_GRPC)) { add_error(error_name, &error, - grpc_attach_md_to_error(GRPC_ERROR_CREATE("Bad header"), - b->idx.named.scheme->md)); + grpc_attach_md_to_error( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad header"), + b->idx.named.scheme->md)); } grpc_metadata_batch_remove(exec_ctx, b, b->idx.named.scheme); } else { - add_error(error_name, &error, - grpc_error_set_str(GRPC_ERROR_CREATE("Missing header"), - GRPC_ERROR_STR_KEY, ":scheme")); + add_error( + error_name, &error, + grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"), + GRPC_ERROR_STR_KEY, grpc_slice_from_static_string(":scheme"))); } if (b->idx.named.content_type != NULL) { @@ -194,8 +202,9 @@ static grpc_error *server_filter_incoming_metadata(grpc_exec_ctx *exec_ctx, if (b->idx.named.path == NULL) { add_error(error_name, &error, - grpc_error_set_str(GRPC_ERROR_CREATE("Missing header"), - GRPC_ERROR_STR_KEY, ":path")); + grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"), + GRPC_ERROR_STR_KEY, grpc_slice_from_static_string(":path"))); } if (b->idx.named.host != NULL && b->idx.named.authority == NULL) { @@ -212,9 +221,11 @@ static grpc_error *server_filter_incoming_metadata(grpc_exec_ctx *exec_ctx, } if (b->idx.named.authority == NULL) { - add_error(error_name, &error, - grpc_error_set_str(GRPC_ERROR_CREATE("Missing header"), - GRPC_ERROR_STR_KEY, ":authority")); + add_error( + error_name, &error, + grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"), + GRPC_ERROR_STR_KEY, grpc_slice_from_static_string(":authority"))); } if (b->idx.named.grpc_payload_bin != NULL) { @@ -358,7 +369,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, /* Destructor for call_data */ static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *ignored) { + grpc_closure *ignored) { call_data *calld = elem->call_data; grpc_slice_buffer_destroy_internal(exec_ctx, &calld->read_slice_buffer); } diff --git a/src/core/lib/channel/message_size_filter.c b/src/core/lib/channel/message_size_filter.c index b424c0d2ac..63136650a5 100644 --- a/src/core/lib/channel/message_size_filter.c +++ b/src/core/lib/channel/message_size_filter.c @@ -121,8 +121,8 @@ static void recv_message_ready(grpc_exec_ctx* exec_ctx, void* user_data, "Received message larger than max (%u vs. %d)", (*calld->recv_message)->length, calld->max_recv_size); grpc_error* new_error = grpc_error_set_int( - GRPC_ERROR_CREATE(message_string), GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_INVALID_ARGUMENT); + GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INVALID_ARGUMENT); if (error == GRPC_ERROR_NONE) { error = new_error; } else { @@ -147,9 +147,10 @@ static void start_transport_stream_op(grpc_exec_ctx* exec_ctx, gpr_asprintf(&message_string, "Sent message larger than max (%u vs. %d)", op->send_message->length, calld->max_send_size); grpc_transport_stream_op_finish_with_failure( - exec_ctx, op, grpc_error_set_int(GRPC_ERROR_CREATE(message_string), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_INVALID_ARGUMENT)); + exec_ctx, op, + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(message_string), + GRPC_ERROR_INT_GRPC_STATUS, + GRPC_STATUS_INVALID_ARGUMENT)); gpr_free(message_string); return; } @@ -200,7 +201,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/http/httpcli.c b/src/core/lib/http/httpcli.c index 6d7aa43b81..453a64b049 100644 --- a/src/core/lib/http/httpcli.c +++ b/src/core/lib/http/httpcli.c @@ -126,13 +126,15 @@ static void finish(grpc_exec_ctx *exec_ctx, internal_request *req, static void append_error(internal_request *req, grpc_error *error) { if (req->overall_error == GRPC_ERROR_NONE) { - req->overall_error = GRPC_ERROR_CREATE("Failed HTTP/1 client request"); + req->overall_error = + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed HTTP/1 client request"); } grpc_resolved_address *addr = &req->addresses->addrs[req->next_address - 1]; char *addr_text = grpc_sockaddr_to_uri(addr); req->overall_error = grpc_error_add_child( req->overall_error, - grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, addr_text)); + grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, + grpc_slice_from_copied_string(addr_text))); gpr_free(addr_text); } @@ -190,8 +192,8 @@ static void on_handshake_done(grpc_exec_ctx *exec_ctx, void *arg, internal_request *req = arg; if (!ep) { - next_address(exec_ctx, req, - GRPC_ERROR_CREATE("Unexplained handshake failure")); + next_address(exec_ctx, req, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Unexplained handshake failure")); return; } @@ -221,8 +223,8 @@ static void next_address(grpc_exec_ctx *exec_ctx, internal_request *req, } if (req->next_address == req->addresses->naddrs) { finish(exec_ctx, req, - GRPC_ERROR_CREATE_REFERENCING("Failed HTTP requests to all targets", - &req->overall_error, 1)); + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Failed HTTP requests to all targets", &req->overall_error, 1)); return; } addr = &req->addresses->addrs[req->next_address++]; diff --git a/src/core/lib/http/httpcli_security_connector.c b/src/core/lib/http/httpcli_security_connector.c index 354d2f4a09..be6a6d618a 100644 --- a/src/core/lib/http/httpcli_security_connector.c +++ b/src/core/lib/http/httpcli_security_connector.c @@ -95,7 +95,7 @@ static void httpcli_ssl_check_peer(grpc_exec_ctx *exec_ctx, char *msg; gpr_asprintf(&msg, "Peer name %s is not in peer certificate", c->secure_peer_name); - error = GRPC_ERROR_CREATE(msg); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); } grpc_closure_sched(exec_ctx, on_peer_checked, error); diff --git a/src/core/lib/http/parser.c b/src/core/lib/http/parser.c index b9c56c103c..aac506b800 100644 --- a/src/core/lib/http/parser.c +++ b/src/core/lib/http/parser.c @@ -54,26 +54,36 @@ static grpc_error *handle_response_line(grpc_http_parser *parser) { uint8_t *cur = beg; uint8_t *end = beg + parser->cur_line_length; - if (cur == end || *cur++ != 'H') return GRPC_ERROR_CREATE("Expected 'H'"); - if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); - if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); - if (cur == end || *cur++ != 'P') return GRPC_ERROR_CREATE("Expected 'P'"); - if (cur == end || *cur++ != '/') return GRPC_ERROR_CREATE("Expected '/'"); - if (cur == end || *cur++ != '1') return GRPC_ERROR_CREATE("Expected '1'"); - if (cur == end || *cur++ != '.') return GRPC_ERROR_CREATE("Expected '.'"); + if (cur == end || *cur++ != 'H') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected 'H'"); + if (cur == end || *cur++ != 'T') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected 'T'"); + if (cur == end || *cur++ != 'T') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected 'T'"); + if (cur == end || *cur++ != 'P') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected 'P'"); + if (cur == end || *cur++ != '/') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected '/'"); + if (cur == end || *cur++ != '1') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected '1'"); + if (cur == end || *cur++ != '.') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected '.'"); if (cur == end || *cur < '0' || *cur++ > '1') { - return GRPC_ERROR_CREATE("Expected HTTP/1.0 or HTTP/1.1"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Expected HTTP/1.0 or HTTP/1.1"); } - if (cur == end || *cur++ != ' ') return GRPC_ERROR_CREATE("Expected ' '"); + if (cur == end || *cur++ != ' ') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected ' '"); if (cur == end || *cur < '1' || *cur++ > '9') - return GRPC_ERROR_CREATE("Expected status code"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected status code"); if (cur == end || *cur < '0' || *cur++ > '9') - return GRPC_ERROR_CREATE("Expected status code"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected status code"); if (cur == end || *cur < '0' || *cur++ > '9') - return GRPC_ERROR_CREATE("Expected status code"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected status code"); parser->http.response->status = (cur[-3] - '0') * 100 + (cur[-2] - '0') * 10 + (cur[-1] - '0'); - if (cur == end || *cur++ != ' ') return GRPC_ERROR_CREATE("Expected ' '"); + if (cur == end || *cur++ != ' ') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected ' '"); /* we don't really care about the status code message */ @@ -89,24 +99,33 @@ static grpc_error *handle_request_line(grpc_http_parser *parser) { while (cur != end && *cur++ != ' ') ; - if (cur == end) return GRPC_ERROR_CREATE("No method on HTTP request line"); + if (cur == end) + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "No method on HTTP request line"); parser->http.request->method = buf2str(beg, (size_t)(cur - beg - 1)); beg = cur; while (cur != end && *cur++ != ' ') ; - if (cur == end) return GRPC_ERROR_CREATE("No path on HTTP request line"); + if (cur == end) + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No path on HTTP request line"); parser->http.request->path = buf2str(beg, (size_t)(cur - beg - 1)); - if (cur == end || *cur++ != 'H') return GRPC_ERROR_CREATE("Expected 'H'"); - if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); - if (cur == end || *cur++ != 'T') return GRPC_ERROR_CREATE("Expected 'T'"); - if (cur == end || *cur++ != 'P') return GRPC_ERROR_CREATE("Expected 'P'"); - if (cur == end || *cur++ != '/') return GRPC_ERROR_CREATE("Expected '/'"); + if (cur == end || *cur++ != 'H') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected 'H'"); + if (cur == end || *cur++ != 'T') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected 'T'"); + if (cur == end || *cur++ != 'T') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected 'T'"); + if (cur == end || *cur++ != 'P') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected 'P'"); + if (cur == end || *cur++ != '/') + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Expected '/'"); vers_major = (uint8_t)(*cur++ - '1' + 1); ++cur; if (cur == end) - return GRPC_ERROR_CREATE("End of line in HTTP version string"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "End of line in HTTP version string"); vers_minor = (uint8_t)(*cur++ - '1' + 1); if (vers_major == 1) { @@ -115,18 +134,19 @@ static grpc_error *handle_request_line(grpc_http_parser *parser) { } else if (vers_minor == 1) { parser->http.request->version = GRPC_HTTP_HTTP11; } else { - return GRPC_ERROR_CREATE( + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( "Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); } } else if (vers_major == 2) { if (vers_minor == 0) { parser->http.request->version = GRPC_HTTP_HTTP20; } else { - return GRPC_ERROR_CREATE( + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( "Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); } } else { - return GRPC_ERROR_CREATE("Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Expected one of HTTP/1.0, HTTP/1.1, or HTTP/2.0"); } return GRPC_ERROR_NONE; @@ -139,7 +159,8 @@ static grpc_error *handle_first_line(grpc_http_parser *parser) { case GRPC_HTTP_RESPONSE: return handle_response_line(parser); } - GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); + GPR_UNREACHABLE_CODE( + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here")); } static grpc_error *add_header(grpc_http_parser *parser) { @@ -154,7 +175,8 @@ static grpc_error *add_header(grpc_http_parser *parser) { GPR_ASSERT(cur != end); if (*cur == ' ' || *cur == '\t') { - error = GRPC_ERROR_CREATE("Continued header lines not supported yet"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Continued header lines not supported yet"); goto done; } @@ -162,7 +184,8 @@ static grpc_error *add_header(grpc_http_parser *parser) { cur++; } if (cur == end) { - error = GRPC_ERROR_CREATE("Didn't find ':' in header string"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Didn't find ':' in header string"); goto done; } GPR_ASSERT(cur >= beg); @@ -222,7 +245,8 @@ static grpc_error *finish_line(grpc_http_parser *parser, } break; case GRPC_HTTP_BODY: - GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); + GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Should never reach here")); } parser->cur_line_length = 0; @@ -240,7 +264,8 @@ static grpc_error *addbyte_body(grpc_http_parser *parser, uint8_t byte) { body_length = &parser->http.request->body_length; body = &parser->http.request->body; } else { - GPR_UNREACHABLE_CODE(return GRPC_ERROR_CREATE("Should never reach here")); + GPR_UNREACHABLE_CODE( + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here")); } if (*body_length == parser->body_capacity) { @@ -286,7 +311,8 @@ static grpc_error *addbyte(grpc_http_parser *parser, uint8_t byte, if (grpc_http1_trace) gpr_log(GPR_ERROR, "HTTP header max line length (%d) exceeded", GRPC_HTTP_PARSER_MAX_HEADER_LENGTH); - return GRPC_ERROR_CREATE("HTTP header max line length exceeded"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "HTTP header max line length exceeded"); } parser->cur_line[parser->cur_line_length] = byte; parser->cur_line_length++; @@ -347,7 +373,7 @@ grpc_error *grpc_http_parser_parse(grpc_http_parser *parser, grpc_slice slice, grpc_error *grpc_http_parser_eof(grpc_http_parser *parser) { if (parser->state != GRPC_HTTP_BODY) { - return GRPC_ERROR_CREATE("Did not finish headers"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Did not finish headers"); } return GRPC_ERROR_NONE; } diff --git a/src/core/lib/iomgr/closure.c b/src/core/lib/iomgr/closure.c index 509c1ff95d..6633fb68ec 100644 --- a/src/core/lib/iomgr/closure.c +++ b/src/core/lib/iomgr/closure.c @@ -33,6 +33,7 @@ #include "src/core/lib/iomgr/closure.h" +#include <assert.h> #include <grpc/support/alloc.h> #include <grpc/support/log.h> @@ -124,6 +125,7 @@ void grpc_closure_run(grpc_exec_ctx *exec_ctx, grpc_closure *c, grpc_error *error) { GPR_TIMER_BEGIN("grpc_closure_run", 0); if (c != NULL) { + assert(c->cb); c->scheduler->vtable->run(exec_ctx, c, error); } else { GRPC_ERROR_UNREF(error); @@ -135,6 +137,7 @@ void grpc_closure_sched(grpc_exec_ctx *exec_ctx, grpc_closure *c, grpc_error *error) { GPR_TIMER_BEGIN("grpc_closure_sched", 0); if (c != NULL) { + assert(c->cb); c->scheduler->vtable->sched(exec_ctx, c, error); } else { GRPC_ERROR_UNREF(error); @@ -146,6 +149,7 @@ void grpc_closure_list_sched(grpc_exec_ctx *exec_ctx, grpc_closure_list *list) { grpc_closure *c = list->head; while (c != NULL) { grpc_closure *next = c->next_data.next; + assert(c->cb); c->scheduler->vtable->sched(exec_ctx, c, c->error_data.error); c = next; } diff --git a/src/core/lib/iomgr/combiner.c b/src/core/lib/iomgr/combiner.c index fa9966c3a6..2bc476bbef 100644 --- a/src/core/lib/iomgr/combiner.c +++ b/src/core/lib/iomgr/combiner.c @@ -33,6 +33,7 @@ #include "src/core/lib/iomgr/combiner.h" +#include <assert.h> #include <string.h> #include <grpc/support/alloc.h> @@ -216,6 +217,7 @@ static void combiner_exec(grpc_exec_ctx *exec_ctx, grpc_combiner *lock, GPR_DEBUG, "C:%p grpc_combiner_execute c=%p cov=%d last=%" PRIdPTR, lock, cl, covered_by_poller, last)); GPR_ASSERT(last & STATE_UNORPHANED); // ensure lock has not been destroyed + assert(cl->cb); cl->error_data.scratch = pack_error_data((error_data){error, covered_by_poller}); if (covered_by_poller) { diff --git a/src/core/lib/iomgr/error.c b/src/core/lib/iomgr/error.c index 7cdbe30198..1dbb64e8f3 100644 --- a/src/core/lib/iomgr/error.c +++ b/src/core/lib/iomgr/error.c @@ -35,7 +35,6 @@ #include <string.h> -#include <grpc/slice.h> #include <grpc/status.h> #include <grpc/support/alloc.h> #include <grpc/support/log.h> @@ -140,14 +139,16 @@ 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 @@ -182,7 +183,7 @@ static void error_destroy(grpc_error *err) { GPR_ASSERT(!grpc_error_is_special(err)); unref_errs(err); unref_strs(err); - gpr_free((void *)gpr_atm_acq_load(&err->error_string)); + gpr_free((void *)gpr_atm_acq_load(&err->atomics.error_string)); gpr_free(err); } @@ -191,15 +192,17 @@ 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); } } @@ -283,7 +286,7 @@ static void internal_add_error(grpc_error **err, grpc_error *new) { // 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 *grpc_error_create(grpc_slice file, int line, grpc_slice desc, grpc_error **referencing, size_t num_referencing) { GPR_TIMER_BEGIN("grpc_error_create", 0); @@ -309,14 +312,8 @@ grpc_error *grpc_error_create(const char *file, int line, const char *desc, 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. + internal_set_str(&err, GRPC_ERROR_STR_FILE, file); + internal_set_str(&err, GRPC_ERROR_STR_DESCRIPTION, desc); for (size_t i = 0; i < num_referencing; ++i) { if (referencing[i] == GRPC_ERROR_NONE) continue; @@ -328,8 +325,8 @@ grpc_error *grpc_error_create(const char *file, int line, const char *desc, internal_set_time(&err, GRPC_ERROR_TIME_CREATED, gpr_now(GPR_CLOCK_REALTIME)); - gpr_atm_no_barrier_store(&err->error_string, 0); - gpr_ref_init(&err->refs, 1); + 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; } @@ -356,7 +353,7 @@ 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)) { - out = GRPC_ERROR_CREATE("unknown"); + out = GRPC_ERROR_CREATE_FROM_STATIC_STRING("unknown"); if (in == GRPC_ERROR_NONE) { internal_set_str(&out, GRPC_ERROR_STR_DESCRIPTION, grpc_slice_from_static_string("no error")); @@ -369,7 +366,7 @@ static grpc_error *copy_error_and_unref(grpc_error *in) { 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->refs)) { + } else if (gpr_ref_is_unique(&in->atomics.refs)) { out = in; } else { uint8_t new_arena_capacity = in->arena_capacity; @@ -382,10 +379,14 @@ static grpc_error *copy_error_and_unref(grpc_error *in) { #ifdef GRPC_ERROR_REFCOUNT_DEBUG gpr_log(GPR_DEBUG, "%p create copying %p", out, in); #endif - memcpy(out, in, sizeof(*in) + in->arena_size * sizeof(intptr_t)); + // 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; - gpr_atm_no_barrier_store(&out->error_string, 0); - gpr_ref_init(&out->refs, 1); ref_strs(out); ref_errs(out); GRPC_ERROR_UNREF(in); @@ -409,7 +410,7 @@ typedef struct { const char *msg; } special_error_status_map; static special_error_status_map error_status_map[] = { - {GRPC_ERROR_NONE, GRPC_STATUS_OK, NULL}, + {GRPC_ERROR_NONE, GRPC_STATUS_OK, ""}, {GRPC_ERROR_CANCELLED, GRPC_STATUS_CANCELLED, "Cancelled"}, {GRPC_ERROR_OOM, GRPC_STATUS_RESOURCE_EXHAUSTED, "Out of memory"}, }; @@ -440,33 +441,33 @@ bool grpc_error_get_int(grpc_error *err, grpc_error_ints which, intptr_t *p) { } grpc_error *grpc_error_set_str(grpc_error *src, grpc_error_strs which, - const char *value) { + grpc_slice str) { GPR_TIMER_BEGIN("grpc_error_set_str", 0); grpc_error *new = copy_error_and_unref(src); - internal_set_str(&new, which, - grpc_slice_from_copied_buffer( - value, strlen(value) + 1)); // TODO, pull this up. + internal_set_str(&new, which, str); GPR_TIMER_END("grpc_error_set_str", 0); return new; } -const char *grpc_error_get_str(grpc_error *err, grpc_error_strs which) { +bool grpc_error_get_str(grpc_error *err, grpc_error_strs which, + grpc_slice *str) { if (grpc_error_is_special(err)) { if (which == GRPC_ERROR_STR_GRPC_MESSAGE) { for (size_t i = 0; i < GPR_ARRAY_SIZE(error_status_map); i++) { if (error_status_map[i].error == err) { - return error_status_map[i].msg; + *str = grpc_slice_from_static_string(error_status_map[i].msg); + return true; } } } - return NULL; + return false; } uint8_t slot = err->strs[which]; if (slot != UINT8_MAX) { - return (const char *)GRPC_SLICE_START_PTR( - *(grpc_slice *)(err->arena + slot)); + *str = *(grpc_slice *)(err->arena + slot); + return true; } else { - return NULL; + return false; } } @@ -507,13 +508,14 @@ static void append_str(const char *str, char **s, size_t *sz, size_t *cap) { } } -static void append_esc_str(const char *str, char **s, size_t *sz, size_t *cap) { +static void append_esc_str(const uint8_t *str, size_t len, char **s, size_t *sz, + size_t *cap) { static const char *hex = "0123456789abcdef"; append_chr('"', s, sz, cap); - for (const uint8_t *c = (const uint8_t *)str; *c; c++) { - if (*c < 32 || *c >= 127) { + for (size_t i = 0; i < len; i++, str++) { + if (*str < 32 || *str >= 127) { append_chr('\\', s, sz, cap); - switch (*c) { + switch (*str) { case '\b': append_chr('b', s, sz, cap); break; @@ -533,12 +535,12 @@ static void append_esc_str(const char *str, char **s, size_t *sz, size_t *cap) { append_chr('u', s, sz, cap); append_chr('0', s, sz, cap); append_chr('0', s, sz, cap); - append_chr(hex[*c >> 4], s, sz, cap); - append_chr(hex[*c & 0x0f], s, sz, cap); + append_chr(hex[*str >> 4], s, sz, cap); + append_chr(hex[*str & 0x0f], s, sz, cap); break; } } else { - append_chr((char)*c, s, sz, cap); + append_chr((char)*str, s, sz, cap); } } append_chr('"', s, sz, cap); @@ -578,11 +580,12 @@ static char *key_str(grpc_error_strs which) { return gpr_strdup(error_str_name(which)); } -static char *fmt_str(void *p) { +static char *fmt_str(grpc_slice slice) { char *s = NULL; size_t sz = 0; size_t cap = 0; - append_esc_str(p, &s, &sz, &cap); + append_esc_str((const uint8_t *)GRPC_SLICE_START_PTR(slice), + GRPC_SLICE_LENGTH(slice), &s, &sz, &cap); append_chr(0, &s, &sz, &cap); return s; } @@ -591,9 +594,8 @@ 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)))); + append_kv(kvs, key_str((grpc_error_strs)which), + fmt_str(*(grpc_slice *)(err->arena + slot))); } } } @@ -673,7 +675,8 @@ static char *finish_kvs(kv_pairs *kvs) { append_chr('{', &s, &sz, &cap); for (size_t i = 0; i < kvs->num_kvs; i++) { if (i != 0) append_chr(',', &s, &sz, &cap); - append_esc_str(kvs->kvs[i].key, &s, &sz, &cap); + append_esc_str((const uint8_t *)kvs->kvs[i].key, strlen(kvs->kvs[i].key), + &s, &sz, &cap); gpr_free(kvs->kvs[i].key); append_chr(':', &s, &sz, &cap); append_str(kvs->kvs[i].value, &s, &sz, &cap); @@ -692,7 +695,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; @@ -712,9 +715,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); @@ -725,10 +728,14 @@ grpc_error *grpc_os_error(const char *file, int line, int err, const char *call_name) { return grpc_error_set_str( grpc_error_set_str( - grpc_error_set_int(grpc_error_create(file, line, "OS Error", NULL, 0), - GRPC_ERROR_INT_ERRNO, err), - GRPC_ERROR_STR_OS_ERROR, strerror(err)), - GRPC_ERROR_STR_SYSCALL, call_name); + grpc_error_set_int( + grpc_error_create(grpc_slice_from_static_string(file), line, + grpc_slice_from_static_string("OS Error"), NULL, + 0), + GRPC_ERROR_INT_ERRNO, err), + GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(strerror(err))), + GRPC_ERROR_STR_SYSCALL, grpc_slice_from_static_string(call_name)); } #ifdef GPR_WINDOWS @@ -737,10 +744,13 @@ grpc_error *grpc_wsa_error(const char *file, int line, int err, char *utf8_message = gpr_format_message(err); grpc_error *error = grpc_error_set_str( grpc_error_set_str( - grpc_error_set_int(grpc_error_create(file, line, "OS Error", NULL, 0), - GRPC_ERROR_INT_WSA_ERROR, err), - GRPC_ERROR_STR_OS_ERROR, utf8_message), - GRPC_ERROR_STR_SYSCALL, call_name); + grpc_error_set_int( + grpc_error_create(grpc_slice_from_static_string(file), line, + grpc_slice_from_static_string("OS Error"), NULL, + 0), + GRPC_ERROR_INT_WSA_ERROR, err), + GRPC_ERROR_STR_OS_ERROR, grpc_slice_from_copied_string(utf8_message)), + GRPC_ERROR_STR_SYSCALL, grpc_slice_from_static_string(call_name)); gpr_free(utf8_message); return error; } diff --git a/src/core/lib/iomgr/error.h b/src/core/lib/iomgr/error.h index eb953947ae..2a44fcfe25 100644 --- a/src/core/lib/iomgr/error.h +++ b/src/core/lib/iomgr/error.h @@ -37,6 +37,7 @@ #include <stdbool.h> #include <stdint.h> +#include <grpc/slice.h> #include <grpc/status.h> #include <grpc/support/time.h> @@ -45,28 +46,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 { @@ -156,7 +138,7 @@ typedef enum { const char *grpc_error_string(grpc_error *error); /// Create an error - but use GRPC_ERROR_CREATE instead -grpc_error *grpc_error_create(const char *file, int line, const char *desc, +grpc_error *grpc_error_create(grpc_slice file, int line, grpc_slice desc, grpc_error **referencing, size_t num_referencing); /// Create an error (this is the preferred way of generating an error that is /// not due to a system call - for system calls, use GRPC_OS_ERROR or @@ -166,13 +148,21 @@ grpc_error *grpc_error_create(const char *file, int line, const char *desc, /// err = grpc_error_create(x, y, z, r, nr) is equivalent to: /// err = grpc_error_create(x, y, z, NULL, 0); /// for (i=0; i<nr; i++) err = grpc_error_add_child(err, r[i]); -#define GRPC_ERROR_CREATE(desc) \ - grpc_error_create(__FILE__, __LINE__, desc, NULL, 0) +#define GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc) \ + grpc_error_create(grpc_slice_from_static_string(__FILE__), __LINE__, \ + grpc_slice_from_static_string(desc), NULL, 0) +#define GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc) \ + grpc_error_create(grpc_slice_from_static_string(__FILE__), __LINE__, \ + grpc_slice_from_copied_string(desc), NULL, 0) // Create an error that references some other errors. This function adds a // reference to each error in errs - it does not consume an existing reference -#define GRPC_ERROR_CREATE_REFERENCING(desc, errs, count) \ - grpc_error_create(__FILE__, __LINE__, desc, errs, count) +#define GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(desc, errs, count) \ + grpc_error_create(grpc_slice_from_static_string(__FILE__), __LINE__, \ + grpc_slice_from_static_string(desc), errs, count) +#define GRPC_ERROR_CREATE_REFERENCING_FROM_COPIED_STRING(desc, errs, count) \ + grpc_error_create(grpc_slice_from_static_string(__FILE__), __LINE__, \ + grpc_slice_from_copied_string(desc), errs, count) //#define GRPC_ERROR_REFCOUNT_DEBUG #ifdef GRPC_ERROR_REFCOUNT_DEBUG @@ -194,10 +184,11 @@ 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_str(grpc_error *src, grpc_error_strs which, - const char *value) GRPC_MUST_USE_RESULT; -/// Returns NULL if the specified string is not set. -/// Caller does NOT own return value. -const char *grpc_error_get_str(grpc_error *error, grpc_error_strs which); + grpc_slice str) GRPC_MUST_USE_RESULT; +/// Returns false if the specified string is not set. +/// Caller does NOT own the slice. +bool grpc_error_get_str(grpc_error *error, grpc_error_strs which, + grpc_slice *s); /// Add a child error: an error that is believed to have contributed to this /// error occurring. Allows root causing high level errors from lower level diff --git a/src/core/lib/iomgr/error_internal.h b/src/core/lib/iomgr/error_internal.h index fb4814e41f..7f204df1b2 100644 --- a/src/core/lib/iomgr/error_internal.h +++ b/src/core/lib/iomgr/error_internal.h @@ -46,14 +46,25 @@ struct grpc_linked_error { 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; + // 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; - gpr_atm error_string; + // The arena is dynamically reallocated with a grow factor of 1.5. uint8_t arena_size; uint8_t arena_capacity; intptr_t arena[0]; diff --git a/src/core/lib/iomgr/ev_epoll_linux.c b/src/core/lib/iomgr/ev_epoll_linux.c index 11208b9ad1..1924e76f13 100644 --- a/src/core/lib/iomgr/ev_epoll_linux.c +++ b/src/core/lib/iomgr/ev_epoll_linux.c @@ -321,7 +321,7 @@ static bool append_error(grpc_error **composite, grpc_error *error, const char *desc) { if (error == GRPC_ERROR_NONE) return true; if (*composite == GRPC_ERROR_NONE) { - *composite = GRPC_ERROR_CREATE(desc); + *composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(desc); } *composite = grpc_error_add_child(*composite, error); return false; @@ -1146,9 +1146,9 @@ static void notify_on(grpc_exec_ctx *exec_ctx, grpc_fd *fd, gpr_atm *state, schedule the closure with the shutdown error */ if ((curr & FD_SHUTDOWN_BIT) > 0) { grpc_error *shutdown_err = (grpc_error *)(curr & ~FD_SHUTDOWN_BIT); - grpc_closure_sched( - exec_ctx, closure, - GRPC_ERROR_CREATE_REFERENCING("FD Shutdown", &shutdown_err, 1)); + grpc_closure_sched(exec_ctx, closure, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "FD Shutdown", &shutdown_err, 1)); return; } @@ -1203,9 +1203,9 @@ static void set_shutdown(grpc_exec_ctx *exec_ctx, grpc_fd *fd, gpr_atm *state, notify_on to ensure that the closure it schedules 'happens-after' the set_shutdown is called on the fd */ if (gpr_atm_rel_cas(state, curr, new_state)) { - grpc_closure_sched( - exec_ctx, (grpc_closure *)curr, - GRPC_ERROR_CREATE_REFERENCING("FD Shutdown", &shutdown_err, 1)); + grpc_closure_sched(exec_ctx, (grpc_closure *)curr, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "FD Shutdown", &shutdown_err, 1)); return; } diff --git a/src/core/lib/iomgr/ev_poll_posix.c b/src/core/lib/iomgr/ev_poll_posix.c index 5ddd5313e2..ca6e855611 100644 --- a/src/core/lib/iomgr/ev_poll_posix.c +++ b/src/core/lib/iomgr/ev_poll_posix.c @@ -451,14 +451,16 @@ static grpc_error *fd_shutdown_error(grpc_fd *fd) { if (!fd->shutdown) { return GRPC_ERROR_NONE; } else { - return GRPC_ERROR_CREATE_REFERENCING("FD shutdown", &fd->shutdown_error, 1); + return GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "FD shutdown", &fd->shutdown_error, 1); } } static void notify_on_locked(grpc_exec_ctx *exec_ctx, grpc_fd *fd, grpc_closure **st, grpc_closure *closure) { if (fd->shutdown) { - grpc_closure_sched(exec_ctx, closure, GRPC_ERROR_CREATE("FD shutdown")); + grpc_closure_sched(exec_ctx, closure, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("FD shutdown")); } else if (*st == CLOSURE_NOT_READY) { /* not ready ==> switch to a waiting state by setting the closure */ *st = closure; @@ -696,7 +698,7 @@ static void push_front_worker(grpc_pollset *p, grpc_pollset_worker *worker) { static void kick_append_error(grpc_error **composite, grpc_error *error) { if (error == GRPC_ERROR_NONE) return; if (*composite == GRPC_ERROR_NONE) { - *composite = GRPC_ERROR_CREATE("Kick Failure"); + *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Kick Failure"); } *composite = grpc_error_add_child(*composite, error); } @@ -859,7 +861,7 @@ static void finish_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset) { static void work_combine_error(grpc_error **composite, grpc_error *error) { if (error == GRPC_ERROR_NONE) return; if (*composite == GRPC_ERROR_NONE) { - *composite = GRPC_ERROR_CREATE("pollset_work"); + *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("pollset_work"); } *composite = grpc_error_add_child(*composite, error); } @@ -1421,7 +1423,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 a5b62aa888..ae3e2eabc3 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/load_file.c b/src/core/lib/iomgr/load_file.c index f40c8b28cc..208f74e20c 100644 --- a/src/core/lib/iomgr/load_file.c +++ b/src/core/lib/iomgr/load_file.c @@ -78,9 +78,12 @@ end: *output = result; if (file != NULL) fclose(file); if (error != GRPC_ERROR_NONE) { - grpc_error *error_out = grpc_error_set_str( - GRPC_ERROR_CREATE_REFERENCING("Failed to load file", &error, 1), - GRPC_ERROR_STR_FILENAME, filename); + grpc_error *error_out = + grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Failed to load file", &error, 1), + GRPC_ERROR_STR_FILENAME, + grpc_slice_from_copied_string( + filename)); // TODO(ncteisen), always static? GRPC_ERROR_UNREF(error); error = error_out; } diff --git a/src/core/lib/iomgr/pollset_uv.c b/src/core/lib/iomgr/pollset_uv.c index af33949c69..a2f81bcd78 100644 --- a/src/core/lib/iomgr/pollset_uv.c +++ b/src/core/lib/iomgr/pollset_uv.c @@ -39,6 +39,7 @@ #include <string.h> +#include <grpc/support/alloc.h> #include <grpc/support/log.h> #include <grpc/support/sync.h> @@ -61,25 +62,30 @@ gpr_mu grpc_polling_mu; immediately in the next loop iteration. Note: In the future, if there is a bug that involves missing wakeups in the future, try adding a uv_async_t to kick the loop differently */ -uv_timer_t dummy_uv_handle; +uv_timer_t *dummy_uv_handle; size_t grpc_pollset_size() { return sizeof(grpc_pollset); } void dummy_timer_cb(uv_timer_t *handle) {} +void dummy_handle_close_cb(uv_handle_t *handle) { gpr_free(handle); } + void grpc_pollset_global_init(void) { gpr_mu_init(&grpc_polling_mu); - uv_timer_init(uv_default_loop(), &dummy_uv_handle); + dummy_uv_handle = gpr_malloc(sizeof(uv_timer_t)); + uv_timer_init(uv_default_loop(), dummy_uv_handle); grpc_pollset_work_run_loop = 1; } -static void timer_close_cb(uv_handle_t *handle) { handle->data = (void *)1; } - void grpc_pollset_global_shutdown(void) { gpr_mu_destroy(&grpc_polling_mu); - uv_close((uv_handle_t *)&dummy_uv_handle, timer_close_cb); + uv_close((uv_handle_t *)dummy_uv_handle, dummy_handle_close_cb); } +static void timer_run_cb(uv_timer_t *timer) {} + +static void timer_close_cb(uv_handle_t *handle) { handle->data = (void *)1; } + void grpc_pollset_init(grpc_pollset *pollset, gpr_mu **mu) { *mu = &grpc_polling_mu; uv_timer_init(uv_default_loop(), &pollset->timer); @@ -95,7 +101,7 @@ void grpc_pollset_shutdown(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, uv_run(uv_default_loop(), UV_RUN_NOWAIT); } else { // kick the loop once - uv_timer_start(&dummy_uv_handle, dummy_timer_cb, 0, 0); + uv_timer_start(dummy_uv_handle, dummy_timer_cb, 0, 0); } grpc_closure_sched(exec_ctx, closure, GRPC_ERROR_NONE); } @@ -111,8 +117,6 @@ void grpc_pollset_destroy(grpc_pollset *pollset) { } } -static void timer_run_cb(uv_timer_t *timer) {} - grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_pollset_worker **worker_hdl, gpr_timespec now, gpr_timespec deadline) { @@ -145,7 +149,7 @@ grpc_error *grpc_pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, grpc_error *grpc_pollset_kick(grpc_pollset *pollset, grpc_pollset_worker *specific_worker) { - uv_timer_start(&dummy_uv_handle, dummy_timer_cb, 0, 0); + uv_timer_start(dummy_uv_handle, dummy_timer_cb, 0, 0); return GRPC_ERROR_NONE; } diff --git a/src/core/lib/iomgr/port.h b/src/core/lib/iomgr/port.h index f1897bb91f..94a454c0b7 100644 --- a/src/core/lib/iomgr/port.h +++ b/src/core/lib/iomgr/port.h @@ -39,6 +39,7 @@ #if defined(GRPC_UV) // Do nothing #elif defined(GPR_MANYLINUX1) +#define GRPC_HAVE_IFADDRS 1 #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IP_PKTINFO 1 #define GRPC_HAVE_MSG_NOSIGNAL 1 @@ -65,6 +66,7 @@ #define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_TIMER_USE_GENERIC 1 #elif defined(GPR_LINUX) +#define GRPC_HAVE_IFADDRS 1 #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_IP_PKTINFO 1 #define GRPC_HAVE_MSG_NOSIGNAL 1 @@ -90,6 +92,7 @@ #define GRPC_POSIX_SOCKETUTILS #endif #elif defined(GPR_APPLE) +#define GRPC_HAVE_IFADDRS 1 #define GRPC_HAVE_SO_NOSIGPIPE 1 #define GRPC_HAVE_UNIX_SOCKET 1 #define GRPC_MSG_IOVLEN_TYPE int @@ -100,6 +103,7 @@ #define GRPC_POSIX_WAKEUP_FD 1 #define GRPC_TIMER_USE_GENERIC 1 #elif defined(GPR_FREEBSD) +#define GRPC_HAVE_IFADDRS 1 #define GRPC_HAVE_IPV6_RECVPKTINFO 1 #define GRPC_HAVE_SO_NOSIGPIPE 1 #define GRPC_HAVE_UNIX_SOCKET 1 diff --git a/src/core/lib/iomgr/resolve_address_posix.c b/src/core/lib/iomgr/resolve_address_posix.c index 50e470d149..d0ede0f2d5 100644 --- a/src/core/lib/iomgr/resolve_address_posix.c +++ b/src/core/lib/iomgr/resolve_address_posix.c @@ -73,14 +73,16 @@ static grpc_error *blocking_resolve_address_impl( /* parse name, splitting it into host and port parts */ gpr_split_host_port(name, &host, &port); if (host == NULL) { - err = grpc_error_set_str(GRPC_ERROR_CREATE("unparseable host:port"), - GRPC_ERROR_STR_TARGET_ADDRESS, name); + err = grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("unparseable host:port"), + GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name)); goto done; } if (port == NULL) { if (default_port == NULL) { - err = grpc_error_set_str(GRPC_ERROR_CREATE("no port in name"), - GRPC_ERROR_STR_TARGET_ADDRESS, name); + err = grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("no port in name"), + GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name)); goto done; } port = gpr_strdup(default_port); @@ -112,11 +114,15 @@ static grpc_error *blocking_resolve_address_impl( if (s != 0) { err = grpc_error_set_str( grpc_error_set_str( - grpc_error_set_str(grpc_error_set_int(GRPC_ERROR_CREATE("OS Error"), - GRPC_ERROR_INT_ERRNO, s), - GRPC_ERROR_STR_OS_ERROR, gai_strerror(s)), - GRPC_ERROR_STR_SYSCALL, "getaddrinfo"), - GRPC_ERROR_STR_TARGET_ADDRESS, name); + grpc_error_set_str( + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("OS Error"), + GRPC_ERROR_INT_ERRNO, s), + GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(gai_strerror(s))), + GRPC_ERROR_STR_SYSCALL, + grpc_slice_from_static_string("getaddrinfo")), + GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(name)); goto done; } diff --git a/src/core/lib/iomgr/resolve_address_uv.c b/src/core/lib/iomgr/resolve_address_uv.c index 79ff910738..102d1aa290 100644 --- a/src/core/lib/iomgr/resolve_address_uv.c +++ b/src/core/lib/iomgr/resolve_address_uv.c @@ -40,6 +40,7 @@ #include <grpc/support/host_port.h> #include <grpc/support/log.h> #include <grpc/support/string_util.h> +#include <grpc/support/useful.h> #include "src/core/lib/iomgr/closure.h" #include "src/core/lib/iomgr/error.h" @@ -54,8 +55,36 @@ typedef struct request { grpc_closure *on_done; grpc_resolved_addresses **addresses; struct addrinfo *hints; + char *host; + char *port; } request; +static int retry_named_port_failure(int status, request *r, + uv_getaddrinfo_cb getaddrinfo_cb) { + if (status != 0) { + // This loop is copied from resolve_address_posix.c + char *svc[][2] = {{"http", "80"}, {"https", "443"}}; + for (size_t i = 0; i < GPR_ARRAY_SIZE(svc); i++) { + if (strcmp(r->port, svc[i][0]) == 0) { + int retry_status; + uv_getaddrinfo_t *req = gpr_malloc(sizeof(uv_getaddrinfo_t)); + req->data = r; + retry_status = uv_getaddrinfo(uv_default_loop(), req, getaddrinfo_cb, + r->host, svc[i][1], r->hints); + if (retry_status < 0 || getaddrinfo_cb == NULL) { + // The callback will not be called + gpr_free(req); + } + return retry_status; + } + } + } + /* If this function calls uv_getaddrinfo, it will return that function's + return value. That function only returns numbers <=0, so we can safely + return 1 to indicate that we never retried */ + return 1; +} + static grpc_error *handle_addrinfo_result(int status, struct addrinfo *result, grpc_resolved_addresses **addresses) { struct addrinfo *resp; @@ -63,9 +92,10 @@ static grpc_error *handle_addrinfo_result(int status, struct addrinfo *result, if (status != 0) { grpc_error *error; *addresses = NULL; - error = GRPC_ERROR_CREATE("getaddrinfo failed"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("getaddrinfo failed"); error = - grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(status))); return error; } (*addresses) = gpr_malloc(sizeof(grpc_resolved_addresses)); @@ -97,13 +127,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); } @@ -116,7 +154,7 @@ static grpc_error *try_split_host_port(const char *name, if (*host == NULL) { char *msg; gpr_asprintf(&msg, "unparseable host:port: '%s'", name); - error = GRPC_ERROR_CREATE(msg); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return error; } @@ -125,7 +163,7 @@ static grpc_error *try_split_host_port(const char *name, if (default_port == NULL) { char *msg; gpr_asprintf(&msg, "no port in name '%s'", name); - error = GRPC_ERROR_CREATE(msg); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return error; } @@ -143,6 +181,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 +197,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 +245,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; @@ -216,12 +263,15 @@ static void resolve_address_impl(grpc_exec_ctx *exec_ctx, const char *name, if (s != 0) { *addrs = NULL; - err = GRPC_ERROR_CREATE("getaddrinfo failed"); - err = grpc_error_set_str(err, GRPC_ERROR_STR_OS_ERROR, uv_strerror(s)); + err = GRPC_ERROR_CREATE_FROM_STATIC_STRING("getaddrinfo failed"); + err = grpc_error_set_str(err, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(s))); grpc_closure_sched(exec_ctx, on_done, err); gpr_free(r); gpr_free(req); gpr_free(hints); + gpr_free(host); + gpr_free(port); } } diff --git a/src/core/lib/iomgr/resolve_address_windows.c b/src/core/lib/iomgr/resolve_address_windows.c index 2439ce3cb7..22eca1fd3b 100644 --- a/src/core/lib/iomgr/resolve_address_windows.c +++ b/src/core/lib/iomgr/resolve_address_windows.c @@ -78,7 +78,7 @@ static grpc_error *blocking_resolve_address_impl( if (host == NULL) { char *msg; gpr_asprintf(&msg, "unparseable host:port: '%s'", name); - error = GRPC_ERROR_CREATE(msg); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); goto done; } @@ -86,7 +86,7 @@ static grpc_error *blocking_resolve_address_impl( if (default_port == NULL) { char *msg; gpr_asprintf(&msg, "no port in name '%s'", name); - error = GRPC_ERROR_CREATE(msg); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); goto done; } diff --git a/src/core/lib/iomgr/socket_utils_common_posix.c b/src/core/lib/iomgr/socket_utils_common_posix.c index 88e9ade253..b69c924d4a 100644 --- a/src/core/lib/iomgr/socket_utils_common_posix.c +++ b/src/core/lib/iomgr/socket_utils_common_posix.c @@ -90,7 +90,7 @@ grpc_error *grpc_set_socket_no_sigpipe_if_possible(int fd) { return GRPC_OS_ERROR(errno, "getsockopt(SO_NOSIGPIPE)"); } if ((newval != 0) != (val != 0)) { - return GRPC_ERROR_CREATE("Failed to set SO_NOSIGPIPE"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to set SO_NOSIGPIPE"); } #endif return GRPC_ERROR_NONE; @@ -164,7 +164,7 @@ grpc_error *grpc_set_socket_reuse_addr(int fd, int reuse) { return GRPC_OS_ERROR(errno, "getsockopt(SO_REUSEADDR)"); } if ((newval != 0) != val) { - return GRPC_ERROR_CREATE("Failed to set SO_REUSEADDR"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to set SO_REUSEADDR"); } return GRPC_ERROR_NONE; @@ -173,7 +173,8 @@ grpc_error *grpc_set_socket_reuse_addr(int fd, int reuse) { /* set a socket to reuse old addresses */ grpc_error *grpc_set_socket_reuse_port(int fd, int reuse) { #ifndef SO_REUSEPORT - return GRPC_ERROR_CREATE("SO_REUSEPORT unavailable on compiling system"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "SO_REUSEPORT unavailable on compiling system"); #else int val = (reuse != 0); int newval; @@ -185,7 +186,7 @@ grpc_error *grpc_set_socket_reuse_port(int fd, int reuse) { return GRPC_OS_ERROR(errno, "getsockopt(SO_REUSEPORT)"); } if ((newval != 0) != val) { - return GRPC_ERROR_CREATE("Failed to set SO_REUSEPORT"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to set SO_REUSEPORT"); } return GRPC_ERROR_NONE; @@ -204,7 +205,7 @@ grpc_error *grpc_set_socket_low_latency(int fd, int low_latency) { return GRPC_OS_ERROR(errno, "getsockopt(TCP_NODELAY)"); } if ((newval != 0) != val) { - return GRPC_ERROR_CREATE("Failed to set TCP_NODELAY"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to set TCP_NODELAY"); } return GRPC_ERROR_NONE; } @@ -213,7 +214,7 @@ grpc_error *grpc_set_socket_low_latency(int fd, int low_latency) { grpc_error *grpc_set_socket_with_mutator(int fd, grpc_socket_mutator *mutator) { GPR_ASSERT(mutator); if (!grpc_socket_mutator_mutate_fd(mutator, fd)) { - return GRPC_ERROR_CREATE("grpc_socket_mutator failed."); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("grpc_socket_mutator failed."); } return GRPC_ERROR_NONE; } @@ -268,7 +269,8 @@ static grpc_error *error_for_fd(int fd, const grpc_resolved_address *addr) { char *addr_str; grpc_sockaddr_to_string(&addr_str, addr, 0); grpc_error *err = grpc_error_set_str(GRPC_OS_ERROR(errno, "socket"), - GRPC_ERROR_STR_TARGET_ADDRESS, addr_str); + GRPC_ERROR_STR_TARGET_ADDRESS, + grpc_slice_from_copied_string(addr_str)); gpr_free(addr_str); return err; } diff --git a/src/core/lib/iomgr/tcp_client_posix.c b/src/core/lib/iomgr/tcp_client_posix.c index 0144192b71..a108b10da6 100644 --- a/src/core/lib/iomgr/tcp_client_posix.c +++ b/src/core/lib/iomgr/tcp_client_posix.c @@ -121,8 +121,8 @@ static void tc_on_alarm(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { } gpr_mu_lock(&ac->mu); if (ac->fd != NULL) { - grpc_fd_shutdown(exec_ctx, ac->fd, - GRPC_ERROR_CREATE("connect() timed out")); + grpc_fd_shutdown(exec_ctx, ac->fd, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "connect() timed out")); } done = (--ac->refs == 0); gpr_mu_unlock(&ac->mu); @@ -191,7 +191,8 @@ static void on_writable(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { gpr_mu_lock(&ac->mu); if (error != GRPC_ERROR_NONE) { error = - grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, "Timeout occurred"); + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string("Timeout occurred")); goto finish; } @@ -252,12 +253,17 @@ finish: gpr_mu_unlock(&ac->mu); if (error != GRPC_ERROR_NONE) { char *error_descr; - gpr_asprintf(&error_descr, "Failed to connect to remote host: %s", - grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION)); - error = grpc_error_set_str(error, GRPC_ERROR_STR_DESCRIPTION, error_descr); + grpc_slice str; + bool ret = grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION, &str); + GPR_ASSERT(ret); + char *desc = grpc_slice_to_c_string(str); + gpr_asprintf(&error_descr, "Failed to connect to remote host: %s", desc); + error = grpc_error_set_str(error, GRPC_ERROR_STR_DESCRIPTION, + grpc_slice_from_copied_string(error_descr)); gpr_free(error_descr); - error = - grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, ac->addr_str); + gpr_free(desc); + error = grpc_error_set_str(error, GRPC_ERROR_STR_TARGET_ADDRESS, + grpc_slice_from_copied_string(ac->addr_str)); } if (done) { gpr_mu_destroy(&ac->mu); diff --git a/src/core/lib/iomgr/tcp_client_uv.c b/src/core/lib/iomgr/tcp_client_uv.c index ae66577caf..682c24ed56 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 @@ -101,17 +100,21 @@ static void uv_tc_on_connect(uv_connect_t *req, int status) { *connect->endpoint = grpc_tcp_create( connect->tcp_handle, connect->resource_quota, connect->addr_name); } else { - error = GRPC_ERROR_CREATE("Failed to connect to remote host"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Failed to connect to remote host"); error = grpc_error_set_int(error, GRPC_ERROR_INT_ERRNO, -status); error = - grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(status))); if (status == UV_ECANCELED) { - error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, - "Timeout occurred"); + error = + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string("Timeout occurred")); // This should only happen if the handle is already closed } else { - error = grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, - uv_strerror(status)); + error = grpc_error_set_str( + error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(status))); uv_close((uv_handle_t *)connect->tcp_handle, tcp_close_callback); } } diff --git a/src/core/lib/iomgr/tcp_client_windows.c b/src/core/lib/iomgr/tcp_client_windows.c index c8dc9e64bd..a356564766 100644 --- a/src/core/lib/iomgr/tcp_client_windows.c +++ b/src/core/lib/iomgr/tcp_client_windows.c @@ -123,7 +123,7 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *acp, grpc_error *error) { socket = NULL; } } else { - error = GRPC_ERROR_CREATE("socket is null"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("socket is null"); } } @@ -238,8 +238,9 @@ failure: GPR_ASSERT(error != GRPC_ERROR_NONE); char *target_uri = grpc_sockaddr_to_uri(addr); grpc_error *final_error = grpc_error_set_str( - GRPC_ERROR_CREATE_REFERENCING("Failed to connect", &error, 1), - GRPC_ERROR_STR_TARGET_ADDRESS, target_uri); + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Failed to connect", + &error, 1), + GRPC_ERROR_STR_TARGET_ADDRESS, grpc_slice_from_copied_string(target_uri)); GRPC_ERROR_UNREF(error); if (socket != NULL) { grpc_winsocket_destroy(socket); diff --git a/src/core/lib/iomgr/tcp_posix.c b/src/core/lib/iomgr/tcp_posix.c index a4381f8fc9..4d7cf3ff51 100644 --- a/src/core/lib/iomgr/tcp_posix.c +++ b/src/core/lib/iomgr/tcp_posix.c @@ -111,7 +111,8 @@ typedef struct { static grpc_error *tcp_annotate_error(grpc_error *src_error, grpc_tcp *tcp) { return grpc_error_set_str( grpc_error_set_int(src_error, GRPC_ERROR_INT_FD, tcp->fd), - GRPC_ERROR_STR_TARGET_ADDRESS, tcp->peer_string); + GRPC_ERROR_STR_TARGET_ADDRESS, + grpc_slice_from_copied_string(tcp->peer_string)); } static void tcp_handle_read(grpc_exec_ctx *exec_ctx, void *arg /* grpc_tcp */, @@ -246,8 +247,10 @@ static void tcp_do_read(grpc_exec_ctx *exec_ctx, grpc_tcp *tcp) { } else if (read_bytes == 0) { /* 0 read size ==> end of stream */ grpc_slice_buffer_reset_and_unref_internal(exec_ctx, tcp->incoming_buffer); - call_read_cb(exec_ctx, tcp, - tcp_annotate_error(GRPC_ERROR_CREATE("Socket closed"), tcp)); + call_read_cb( + exec_ctx, tcp, + tcp_annotate_error( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Socket closed"), tcp)); TCP_UNREF(exec_ctx, tcp, "read"); } else { GPR_ASSERT((size_t)read_bytes <= tcp->incoming_buffer->length); @@ -464,10 +467,12 @@ static void tcp_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, if (buf->length == 0) { GPR_TIMER_END("tcp_write", 0); - grpc_closure_sched(exec_ctx, cb, - grpc_fd_is_shutdown(tcp->em_fd) - ? tcp_annotate_error(GRPC_ERROR_CREATE("EOF"), tcp) - : GRPC_ERROR_NONE); + grpc_closure_sched( + exec_ctx, cb, + grpc_fd_is_shutdown(tcp->em_fd) + ? tcp_annotate_error(GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF"), + tcp) + : GRPC_ERROR_NONE); return; } tcp->outgoing_buffer = buf; diff --git a/src/core/lib/iomgr/tcp_server_posix.c b/src/core/lib/iomgr/tcp_server_posix.c index 5f286a6723..e1efbd414f 100644 --- a/src/core/lib/iomgr/tcp_server_posix.c +++ b/src/core/lib/iomgr/tcp_server_posix.c @@ -44,11 +44,8 @@ #include <errno.h> #include <fcntl.h> -#include <ifaddrs.h> -#include <limits.h> #include <netinet/in.h> #include <netinet/tcp.h> -#include <stdio.h> #include <string.h> #include <sys/socket.h> #include <sys/stat.h> @@ -67,82 +64,10 @@ #include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/iomgr/socket_utils_posix.h" #include "src/core/lib/iomgr/tcp_posix.h" +#include "src/core/lib/iomgr/tcp_server_utils_posix.h" #include "src/core/lib/iomgr/unix_sockets_posix.h" #include "src/core/lib/support/string.h" -#define MIN_SAFE_ACCEPT_QUEUE_SIZE 100 - -static gpr_once s_init_max_accept_queue_size; -static int s_max_accept_queue_size; - -/* one listening port */ -typedef struct grpc_tcp_listener grpc_tcp_listener; -struct grpc_tcp_listener { - int fd; - grpc_fd *emfd; - grpc_tcp_server *server; - grpc_resolved_address addr; - int port; - unsigned port_index; - unsigned fd_index; - grpc_closure read_closure; - grpc_closure destroyed_closure; - struct grpc_tcp_listener *next; - /* sibling is a linked list of all listeners for a given port. add_port and - clone_port place all new listeners in the same sibling list. A member of - the 'sibling' list is also a member of the 'next' list. The head of each - sibling list has is_sibling==0, and subsequent members of sibling lists - have is_sibling==1. is_sibling allows separate sibling lists to be - identified while iterating through 'next'. */ - struct grpc_tcp_listener *sibling; - int is_sibling; -}; - -/* the overall server */ -struct grpc_tcp_server { - gpr_refcount refs; - /* Called whenever accept() succeeds on a server port. */ - grpc_tcp_server_cb on_accept_cb; - void *on_accept_cb_arg; - - gpr_mu mu; - - /* active port count: how many ports are actually still listening */ - size_t active_ports; - /* destroyed port count: how many ports are completely destroyed */ - size_t destroyed_ports; - - /* is this server shutting down? */ - bool shutdown; - /* have listeners been shutdown? */ - bool shutdown_listeners; - /* use SO_REUSEPORT */ - bool so_reuseport; - /* expand wildcard addresses to a list of all local addresses */ - bool expand_wildcard_addrs; - - /* linked list of server ports */ - grpc_tcp_listener *head; - grpc_tcp_listener *tail; - unsigned nports; - - /* List of closures passed to shutdown_starting_add(). */ - grpc_closure_list shutdown_starting; - - /* shutdown callback */ - grpc_closure *shutdown_complete; - - /* all pollsets interested in new connections */ - grpc_pollset **pollsets; - /* number of pollsets in the pollsets array */ - size_t pollset_count; - - /* next pollset to assign a channel to */ - gpr_atm next_pollset_to_assign; - - grpc_resource_quota *resource_quota; -}; - static gpr_once check_init = GPR_ONCE_INIT; static bool has_so_reuseport = false; @@ -175,8 +100,8 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, } else { grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota); gpr_free(s); - return GRPC_ERROR_CREATE(GRPC_ARG_ALLOW_REUSEPORT - " must be an integer"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING(GRPC_ARG_ALLOW_REUSEPORT + " must be an integer"); } } else if (0 == strcmp(GRPC_ARG_RESOURCE_QUOTA, args->args[i].key)) { if (args->args[i].type == GRPC_ARG_POINTER) { @@ -186,8 +111,8 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, } else { grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota); gpr_free(s); - return GRPC_ERROR_CREATE(GRPC_ARG_RESOURCE_QUOTA - " must be a pointer to a buffer pool"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + GRPC_ARG_RESOURCE_QUOTA " must be a pointer to a buffer pool"); } } else if (0 == strcmp(GRPC_ARG_EXPAND_WILDCARD_ADDRS, args->args[i].key)) { if (args->args[i].type == GRPC_ARG_INTEGER) { @@ -195,8 +120,8 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, } else { grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota); gpr_free(s); - return GRPC_ERROR_CREATE(GRPC_ARG_EXPAND_WILDCARD_ADDRS - " must be an integer"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + GRPC_ARG_EXPAND_WILDCARD_ADDRS " must be an integer"); } } } @@ -291,8 +216,8 @@ static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { if (s->active_ports) { grpc_tcp_listener *sp; for (sp = s->head; sp; sp = sp->next) { - grpc_fd_shutdown(exec_ctx, sp->emfd, - GRPC_ERROR_CREATE("Server destroyed")); + grpc_fd_shutdown(exec_ctx, sp->emfd, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Server destroyed")); } gpr_mu_unlock(&s->mu); } else { @@ -301,99 +226,6 @@ static void tcp_server_destroy(grpc_exec_ctx *exec_ctx, grpc_tcp_server *s) { } } -/* get max listen queue size on linux */ -static void init_max_accept_queue_size(void) { - int n = SOMAXCONN; - char buf[64]; - FILE *fp = fopen("/proc/sys/net/core/somaxconn", "r"); - if (fp == NULL) { - /* 2.4 kernel. */ - s_max_accept_queue_size = SOMAXCONN; - return; - } - if (fgets(buf, sizeof buf, fp)) { - char *end; - long i = strtol(buf, &end, 10); - if (i > 0 && i <= INT_MAX && end && *end == 0) { - n = (int)i; - } - } - fclose(fp); - s_max_accept_queue_size = n; - - if (s_max_accept_queue_size < MIN_SAFE_ACCEPT_QUEUE_SIZE) { - gpr_log(GPR_INFO, - "Suspiciously small accept queue (%d) will probably lead to " - "connection drops", - s_max_accept_queue_size); - } -} - -static int get_max_accept_queue_size(void) { - gpr_once_init(&s_init_max_accept_queue_size, init_max_accept_queue_size); - return s_max_accept_queue_size; -} - -/* Prepare a recently-created socket for listening. */ -static grpc_error *prepare_socket(int fd, const grpc_resolved_address *addr, - bool so_reuseport, int *port) { - grpc_resolved_address sockname_temp; - grpc_error *err = GRPC_ERROR_NONE; - - GPR_ASSERT(fd >= 0); - - if (so_reuseport && !grpc_is_unix_socket(addr)) { - err = grpc_set_socket_reuse_port(fd, 1); - if (err != GRPC_ERROR_NONE) goto error; - } - - err = grpc_set_socket_nonblocking(fd, 1); - if (err != GRPC_ERROR_NONE) goto error; - err = grpc_set_socket_cloexec(fd, 1); - if (err != GRPC_ERROR_NONE) goto error; - if (!grpc_is_unix_socket(addr)) { - err = grpc_set_socket_low_latency(fd, 1); - if (err != GRPC_ERROR_NONE) goto error; - err = grpc_set_socket_reuse_addr(fd, 1); - if (err != GRPC_ERROR_NONE) goto error; - } - err = grpc_set_socket_no_sigpipe_if_possible(fd); - if (err != GRPC_ERROR_NONE) goto error; - - GPR_ASSERT(addr->len < ~(socklen_t)0); - if (bind(fd, (struct sockaddr *)addr->addr, (socklen_t)addr->len) < 0) { - err = GRPC_OS_ERROR(errno, "bind"); - goto error; - } - - if (listen(fd, get_max_accept_queue_size()) < 0) { - err = GRPC_OS_ERROR(errno, "listen"); - goto error; - } - - sockname_temp.len = sizeof(struct sockaddr_storage); - - if (getsockname(fd, (struct sockaddr *)sockname_temp.addr, - (socklen_t *)&sockname_temp.len) < 0) { - err = GRPC_OS_ERROR(errno, "getsockname"); - goto error; - } - - *port = grpc_sockaddr_get_port(&sockname_temp); - return GRPC_ERROR_NONE; - -error: - GPR_ASSERT(err != GRPC_ERROR_NONE); - if (fd >= 0) { - close(fd); - } - grpc_error *ret = grpc_error_set_int( - GRPC_ERROR_CREATE_REFERENCING("Unable to configure socket", &err, 1), - GRPC_ERROR_INT_FD, fd); - GRPC_ERROR_UNREF(err); - return ret; -} - /* event manager callback when reads are ready */ static void on_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *err) { grpc_tcp_listener *sp = arg; @@ -477,216 +309,6 @@ error: } } -static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd, - const grpc_resolved_address *addr, - unsigned port_index, unsigned fd_index, - grpc_tcp_listener **listener) { - grpc_tcp_listener *sp = NULL; - int port = -1; - char *addr_str; - char *name; - - grpc_error *err = prepare_socket(fd, addr, s->so_reuseport, &port); - if (err == GRPC_ERROR_NONE) { - GPR_ASSERT(port > 0); - grpc_sockaddr_to_string(&addr_str, addr, 1); - gpr_asprintf(&name, "tcp-server-listener:%s", addr_str); - gpr_mu_lock(&s->mu); - s->nports++; - GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server"); - sp = gpr_malloc(sizeof(grpc_tcp_listener)); - sp->next = NULL; - if (s->head == NULL) { - s->head = sp; - } else { - s->tail->next = sp; - } - s->tail = sp; - sp->server = s; - sp->fd = fd; - sp->emfd = grpc_fd_create(fd, name); - memcpy(&sp->addr, addr, sizeof(grpc_resolved_address)); - sp->port = port; - sp->port_index = port_index; - sp->fd_index = fd_index; - sp->is_sibling = 0; - sp->sibling = NULL; - GPR_ASSERT(sp->emfd); - gpr_mu_unlock(&s->mu); - gpr_free(addr_str); - gpr_free(name); - } - - *listener = sp; - return err; -} - -/* If successful, add a listener to s for addr, set *dsmode for the socket, and - return the *listener. */ -static grpc_error *add_addr_to_server(grpc_tcp_server *s, - const grpc_resolved_address *addr, - unsigned port_index, unsigned fd_index, - grpc_dualstack_mode *dsmode, - grpc_tcp_listener **listener) { - grpc_resolved_address addr4_copy; - int fd; - grpc_error *err = - grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, dsmode, &fd); - if (err != GRPC_ERROR_NONE) { - return err; - } - if (*dsmode == GRPC_DSMODE_IPV4 && - grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) { - addr = &addr4_copy; - } - return add_socket_to_server(s, fd, addr, port_index, fd_index, listener); -} - -/* Bind to "::" to get a port number not used by any address. */ -static grpc_error *get_unused_port(int *port) { - grpc_resolved_address wild; - grpc_sockaddr_make_wildcard6(0, &wild); - grpc_dualstack_mode dsmode; - int fd; - grpc_error *err = - grpc_create_dualstack_socket(&wild, SOCK_STREAM, 0, &dsmode, &fd); - if (err != GRPC_ERROR_NONE) { - return err; - } - if (dsmode == GRPC_DSMODE_IPV4) { - grpc_sockaddr_make_wildcard4(0, &wild); - } - if (bind(fd, (const struct sockaddr *)wild.addr, (socklen_t)wild.len) != 0) { - err = GRPC_OS_ERROR(errno, "bind"); - close(fd); - return err; - } - if (getsockname(fd, (struct sockaddr *)wild.addr, (socklen_t *)&wild.len) != - 0) { - err = GRPC_OS_ERROR(errno, "getsockname"); - close(fd); - return err; - } - close(fd); - *port = grpc_sockaddr_get_port(&wild); - return *port <= 0 ? GRPC_ERROR_CREATE("Bad port") : GRPC_ERROR_NONE; -} - -/* Return the listener in s with address addr or NULL. */ -static grpc_tcp_listener *find_listener_with_addr(grpc_tcp_server *s, - grpc_resolved_address *addr) { - grpc_tcp_listener *l; - gpr_mu_lock(&s->mu); - for (l = s->head; l != NULL; l = l->next) { - if (l->addr.len != addr->len) { - continue; - } - if (memcmp(l->addr.addr, addr->addr, addr->len) == 0) { - break; - } - } - gpr_mu_unlock(&s->mu); - return l; -} - -/* Get all addresses assigned to network interfaces on the machine and create a - listener for each. requested_port is the port to use for every listener, or 0 - to select one random port that will be used for every listener. Set *out_port - to the port selected. Return GRPC_ERROR_NONE only if all listeners were - added. */ -static grpc_error *add_all_local_addrs_to_server(grpc_tcp_server *s, - unsigned port_index, - int requested_port, - int *out_port) { - struct ifaddrs *ifa = NULL; - struct ifaddrs *ifa_it; - unsigned fd_index = 0; - grpc_tcp_listener *sp = NULL; - grpc_error *err = GRPC_ERROR_NONE; - if (requested_port == 0) { - /* Note: There could be a race where some local addrs can listen on the - selected port and some can't. The sane way to handle this would be to - retry by recreating the whole grpc_tcp_server. Backing out individual - listeners and orphaning the FDs looks like too much trouble. */ - if ((err = get_unused_port(&requested_port)) != GRPC_ERROR_NONE) { - return err; - } else if (requested_port <= 0) { - return GRPC_ERROR_CREATE("Bad get_unused_port()"); - } - gpr_log(GPR_DEBUG, "Picked unused port %d", requested_port); - } - if (getifaddrs(&ifa) != 0 || ifa == NULL) { - return GRPC_OS_ERROR(errno, "getifaddrs"); - } - for (ifa_it = ifa; ifa_it != NULL; ifa_it = ifa_it->ifa_next) { - grpc_resolved_address addr; - char *addr_str = NULL; - grpc_dualstack_mode dsmode; - grpc_tcp_listener *new_sp = NULL; - const char *ifa_name = (ifa_it->ifa_name ? ifa_it->ifa_name : "<unknown>"); - if (ifa_it->ifa_addr == NULL) { - continue; - } else if (ifa_it->ifa_addr->sa_family == AF_INET) { - addr.len = sizeof(struct sockaddr_in); - } else if (ifa_it->ifa_addr->sa_family == AF_INET6) { - addr.len = sizeof(struct sockaddr_in6); - } else { - continue; - } - memcpy(addr.addr, ifa_it->ifa_addr, addr.len); - if (!grpc_sockaddr_set_port(&addr, requested_port)) { - /* Should never happen, because we check sa_family above. */ - err = GRPC_ERROR_CREATE("Failed to set port"); - break; - } - if (grpc_sockaddr_to_string(&addr_str, &addr, 0) < 0) { - addr_str = gpr_strdup("<error>"); - } - gpr_log(GPR_DEBUG, - "Adding local addr from interface %s flags 0x%x to server: %s", - ifa_name, ifa_it->ifa_flags, addr_str); - /* We could have multiple interfaces with the same address (e.g., bonding), - so look for duplicates. */ - if (find_listener_with_addr(s, &addr) != NULL) { - gpr_log(GPR_DEBUG, "Skipping duplicate addr %s on interface %s", addr_str, - ifa_name); - gpr_free(addr_str); - continue; - } - if ((err = add_addr_to_server(s, &addr, port_index, fd_index, &dsmode, - &new_sp)) != GRPC_ERROR_NONE) { - char *err_str = NULL; - grpc_error *root_err; - if (gpr_asprintf(&err_str, "Failed to add listener: %s", addr_str) < 0) { - err_str = gpr_strdup("Failed to add listener"); - } - root_err = GRPC_ERROR_CREATE(err_str); - gpr_free(err_str); - gpr_free(addr_str); - err = grpc_error_add_child(root_err, err); - break; - } else { - GPR_ASSERT(requested_port == new_sp->port); - ++fd_index; - if (sp != NULL) { - new_sp->is_sibling = 1; - sp->sibling = new_sp; - } - sp = new_sp; - } - gpr_free(addr_str); - } - freeifaddrs(ifa); - if (err != GRPC_ERROR_NONE) { - return err; - } else if (sp == NULL) { - return GRPC_ERROR_CREATE("No local addresses"); - } else { - *out_port = sp->port; - return GRPC_ERROR_NONE; - } -} - /* Treat :: or 0.0.0.0 as a family-agnostic wildcard. */ static grpc_error *add_wildcard_addrs_to_server(grpc_tcp_server *s, unsigned port_index, @@ -701,14 +323,16 @@ static grpc_error *add_wildcard_addrs_to_server(grpc_tcp_server *s, grpc_error *v6_err = GRPC_ERROR_NONE; grpc_error *v4_err = GRPC_ERROR_NONE; *out_port = -1; - if (s->expand_wildcard_addrs) { - return add_all_local_addrs_to_server(s, port_index, requested_port, - out_port); + + if (grpc_tcp_server_have_ifaddrs() && s->expand_wildcard_addrs) { + return grpc_tcp_server_add_all_local_addrs(s, port_index, requested_port, + out_port); } + grpc_sockaddr_make_wildcards(requested_port, &wild4, &wild6); /* Try listening on IPv6 first. */ - if ((v6_err = add_addr_to_server(s, &wild6, port_index, fd_index, &dsmode, - &sp)) == GRPC_ERROR_NONE) { + if ((v6_err = grpc_tcp_server_add_addr(s, &wild6, port_index, fd_index, + &dsmode, &sp)) == GRPC_ERROR_NONE) { ++fd_index; requested_port = *out_port = sp->port; if (dsmode == GRPC_DSMODE_DUALSTACK || dsmode == GRPC_DSMODE_IPV4) { @@ -717,8 +341,8 @@ static grpc_error *add_wildcard_addrs_to_server(grpc_tcp_server *s, } /* If we got a v6-only socket or nothing, try adding 0.0.0.0. */ grpc_sockaddr_set_port(&wild4, requested_port); - if ((v4_err = add_addr_to_server(s, &wild4, port_index, fd_index, &dsmode, - &sp2)) == GRPC_ERROR_NONE) { + if ((v4_err = grpc_tcp_server_add_addr(s, &wild4, port_index, fd_index, + &dsmode, &sp2)) == GRPC_ERROR_NONE) { *out_port = sp2->port; if (sp != NULL) { sp2->is_sibling = 1; @@ -726,12 +350,24 @@ 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 = - GRPC_ERROR_CREATE("Failed to add any wildcard listeners"); + grpc_error *root_err = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Failed to add any wildcard listeners"); GPR_ASSERT(v6_err != GRPC_ERROR_NONE && v4_err != GRPC_ERROR_NONE); root_err = grpc_error_add_child(root_err, v6_err); root_err = grpc_error_add_child(root_err, v4_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; } @@ -951,7 +587,7 @@ void grpc_tcp_server_shutdown_listeners(grpc_exec_ctx *exec_ctx, grpc_tcp_listener *sp; for (sp = s->head; sp; sp = sp->next) { grpc_fd_shutdown(exec_ctx, sp->emfd, - GRPC_ERROR_CREATE("Server shutdown")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown")); } } gpr_mu_unlock(&s->mu); diff --git a/src/core/lib/iomgr/tcp_server_utils_posix.h b/src/core/lib/iomgr/tcp_server_utils_posix.h new file mode 100644 index 0000000000..f5dc8532f9 --- /dev/null +++ b/src/core/lib/iomgr/tcp_server_utils_posix.h @@ -0,0 +1,134 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H +#define GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H + +#include "src/core/lib/iomgr/ev_posix.h" +#include "src/core/lib/iomgr/resolve_address.h" +#include "src/core/lib/iomgr/socket_utils_posix.h" +#include "src/core/lib/iomgr/tcp_server.h" + +/* one listening port */ +typedef struct grpc_tcp_listener { + int fd; + grpc_fd *emfd; + grpc_tcp_server *server; + grpc_resolved_address addr; + int port; + unsigned port_index; + unsigned fd_index; + grpc_closure read_closure; + grpc_closure destroyed_closure; + struct grpc_tcp_listener *next; + /* sibling is a linked list of all listeners for a given port. add_port and + clone_port place all new listeners in the same sibling list. A member of + the 'sibling' list is also a member of the 'next' list. The head of each + sibling list has is_sibling==0, and subsequent members of sibling lists + have is_sibling==1. is_sibling allows separate sibling lists to be + identified while iterating through 'next'. */ + struct grpc_tcp_listener *sibling; + int is_sibling; +} grpc_tcp_listener; + +/* the overall server */ +struct grpc_tcp_server { + gpr_refcount refs; + /* Called whenever accept() succeeds on a server port. */ + grpc_tcp_server_cb on_accept_cb; + void *on_accept_cb_arg; + + gpr_mu mu; + + /* active port count: how many ports are actually still listening */ + size_t active_ports; + /* destroyed port count: how many ports are completely destroyed */ + size_t destroyed_ports; + + /* is this server shutting down? */ + bool shutdown; + /* have listeners been shutdown? */ + bool shutdown_listeners; + /* use SO_REUSEPORT */ + bool so_reuseport; + /* expand wildcard addresses to a list of all local addresses */ + bool expand_wildcard_addrs; + + /* linked list of server ports */ + grpc_tcp_listener *head; + grpc_tcp_listener *tail; + unsigned nports; + + /* List of closures passed to shutdown_starting_add(). */ + grpc_closure_list shutdown_starting; + + /* shutdown callback */ + grpc_closure *shutdown_complete; + + /* all pollsets interested in new connections */ + grpc_pollset **pollsets; + /* number of pollsets in the pollsets array */ + size_t pollset_count; + + /* next pollset to assign a channel to */ + gpr_atm next_pollset_to_assign; + + grpc_resource_quota *resource_quota; +}; + +/* If successful, add a listener to \a s for \a addr, set \a dsmode for the + socket, and return the \a listener. */ +grpc_error *grpc_tcp_server_add_addr(grpc_tcp_server *s, + const grpc_resolved_address *addr, + unsigned port_index, unsigned fd_index, + grpc_dualstack_mode *dsmode, + grpc_tcp_listener **listener); + +/* Get all addresses assigned to network interfaces on the machine and create a + listener for each. requested_port is the port to use for every listener, or 0 + to select one random port that will be used for every listener. Set *out_port + to the port selected. Return GRPC_ERROR_NONE only if all listeners were + added. */ +grpc_error *grpc_tcp_server_add_all_local_addrs(grpc_tcp_server *s, + unsigned port_index, + int requested_port, + int *out_port); + +/* Prepare a recently-created socket for listening. */ +grpc_error *grpc_tcp_server_prepare_socket(int fd, + const grpc_resolved_address *addr, + bool so_reuseport, int *port); +/* Ruturn true if the platform supports ifaddrs */ +bool grpc_tcp_server_have_ifaddrs(void); + +#endif /* GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H */ diff --git a/src/core/lib/iomgr/tcp_server_utils_posix_common.c b/src/core/lib/iomgr/tcp_server_utils_posix_common.c new file mode 100644 index 0000000000..283b92b0a2 --- /dev/null +++ b/src/core/lib/iomgr/tcp_server_utils_posix_common.c @@ -0,0 +1,221 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_HAVE_IFADDRS + +#include "src/core/lib/iomgr/tcp_server_utils_posix.h" + +#include <errno.h> +#include <limits.h> +#include <stdio.h> +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <grpc/support/sync.h> + +#include "src/core/lib/iomgr/error.h" +#include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/sockaddr_utils.h" +#include "src/core/lib/iomgr/unix_sockets_posix.h" + +#define MIN_SAFE_ACCEPT_QUEUE_SIZE 100 + +static gpr_once s_init_max_accept_queue_size; +static int s_max_accept_queue_size; + +/* get max listen queue size on linux */ +static void init_max_accept_queue_size(void) { + int n = SOMAXCONN; + char buf[64]; + FILE *fp = fopen("/proc/sys/net/core/somaxconn", "r"); + if (fp == NULL) { + /* 2.4 kernel. */ + s_max_accept_queue_size = SOMAXCONN; + return; + } + if (fgets(buf, sizeof buf, fp)) { + char *end; + long i = strtol(buf, &end, 10); + if (i > 0 && i <= INT_MAX && end && *end == 0) { + n = (int)i; + } + } + fclose(fp); + s_max_accept_queue_size = n; + + if (s_max_accept_queue_size < MIN_SAFE_ACCEPT_QUEUE_SIZE) { + gpr_log(GPR_INFO, + "Suspiciously small accept queue (%d) will probably lead to " + "connection drops", + s_max_accept_queue_size); + } +} + +static int get_max_accept_queue_size(void) { + gpr_once_init(&s_init_max_accept_queue_size, init_max_accept_queue_size); + return s_max_accept_queue_size; +} + +static grpc_error *add_socket_to_server(grpc_tcp_server *s, int fd, + const grpc_resolved_address *addr, + unsigned port_index, unsigned fd_index, + grpc_tcp_listener **listener) { + grpc_tcp_listener *sp = NULL; + int port = -1; + char *addr_str; + char *name; + + grpc_error *err = + grpc_tcp_server_prepare_socket(fd, addr, s->so_reuseport, &port); + if (err == GRPC_ERROR_NONE) { + GPR_ASSERT(port > 0); + grpc_sockaddr_to_string(&addr_str, addr, 1); + gpr_asprintf(&name, "tcp-server-listener:%s", addr_str); + gpr_mu_lock(&s->mu); + s->nports++; + GPR_ASSERT(!s->on_accept_cb && "must add ports before starting server"); + sp = gpr_malloc(sizeof(grpc_tcp_listener)); + sp->next = NULL; + if (s->head == NULL) { + s->head = sp; + } else { + s->tail->next = sp; + } + s->tail = sp; + sp->server = s; + sp->fd = fd; + sp->emfd = grpc_fd_create(fd, name); + memcpy(&sp->addr, addr, sizeof(grpc_resolved_address)); + sp->port = port; + sp->port_index = port_index; + sp->fd_index = fd_index; + sp->is_sibling = 0; + sp->sibling = NULL; + GPR_ASSERT(sp->emfd); + gpr_mu_unlock(&s->mu); + gpr_free(addr_str); + gpr_free(name); + } + + *listener = sp; + return err; +} + +/* If successful, add a listener to s for addr, set *dsmode for the socket, and + return the *listener. */ +grpc_error *grpc_tcp_server_add_addr(grpc_tcp_server *s, + const grpc_resolved_address *addr, + unsigned port_index, unsigned fd_index, + grpc_dualstack_mode *dsmode, + grpc_tcp_listener **listener) { + grpc_resolved_address addr4_copy; + int fd; + grpc_error *err = + grpc_create_dualstack_socket(addr, SOCK_STREAM, 0, dsmode, &fd); + if (err != GRPC_ERROR_NONE) { + return err; + } + if (*dsmode == GRPC_DSMODE_IPV4 && + grpc_sockaddr_is_v4mapped(addr, &addr4_copy)) { + addr = &addr4_copy; + } + return add_socket_to_server(s, fd, addr, port_index, fd_index, listener); +} + +/* Prepare a recently-created socket for listening. */ +grpc_error *grpc_tcp_server_prepare_socket(int fd, + const grpc_resolved_address *addr, + bool so_reuseport, int *port) { + grpc_resolved_address sockname_temp; + grpc_error *err = GRPC_ERROR_NONE; + + GPR_ASSERT(fd >= 0); + + if (so_reuseport && !grpc_is_unix_socket(addr)) { + err = grpc_set_socket_reuse_port(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + } + + err = grpc_set_socket_nonblocking(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + err = grpc_set_socket_cloexec(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + if (!grpc_is_unix_socket(addr)) { + err = grpc_set_socket_low_latency(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + err = grpc_set_socket_reuse_addr(fd, 1); + if (err != GRPC_ERROR_NONE) goto error; + } + err = grpc_set_socket_no_sigpipe_if_possible(fd); + if (err != GRPC_ERROR_NONE) goto error; + + GPR_ASSERT(addr->len < ~(socklen_t)0); + if (bind(fd, (struct sockaddr *)addr->addr, (socklen_t)addr->len) < 0) { + err = GRPC_OS_ERROR(errno, "bind"); + goto error; + } + + if (listen(fd, get_max_accept_queue_size()) < 0) { + err = GRPC_OS_ERROR(errno, "listen"); + goto error; + } + + sockname_temp.len = sizeof(struct sockaddr_storage); + + if (getsockname(fd, (struct sockaddr *)sockname_temp.addr, + (socklen_t *)&sockname_temp.len) < 0) { + err = GRPC_OS_ERROR(errno, "getsockname"); + goto error; + } + + *port = grpc_sockaddr_get_port(&sockname_temp); + return GRPC_ERROR_NONE; + +error: + GPR_ASSERT(err != GRPC_ERROR_NONE); + if (fd >= 0) { + close(fd); + } + grpc_error *ret = + grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Unable to configure socket", &err, 1), + GRPC_ERROR_INT_FD, fd); + GRPC_ERROR_UNREF(err); + return ret; +} + +#endif /* GRPC_HAVE_IFADDRS */ diff --git a/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c b/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c new file mode 100644 index 0000000000..2078a68126 --- /dev/null +++ b/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c @@ -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. + * + */ + +#include "src/core/lib/iomgr/port.h" + +#ifdef GRPC_HAVE_IFADDRS + +#include "src/core/lib/iomgr/tcp_server_utils_posix.h" + +#include <errno.h> +#include <ifaddrs.h> +#include <stddef.h> +#include <string.h> + +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/string_util.h> + +#include "src/core/lib/iomgr/error.h" +#include "src/core/lib/iomgr/sockaddr.h" +#include "src/core/lib/iomgr/sockaddr_utils.h" + +/* Return the listener in s with address addr or NULL. */ +static grpc_tcp_listener *find_listener_with_addr(grpc_tcp_server *s, + grpc_resolved_address *addr) { + grpc_tcp_listener *l; + gpr_mu_lock(&s->mu); + for (l = s->head; l != NULL; l = l->next) { + if (l->addr.len != addr->len) { + continue; + } + if (memcmp(l->addr.addr, addr->addr, addr->len) == 0) { + break; + } + } + gpr_mu_unlock(&s->mu); + return l; +} + +/* Bind to "::" to get a port number not used by any address. */ +static grpc_error *get_unused_port(int *port) { + grpc_resolved_address wild; + grpc_sockaddr_make_wildcard6(0, &wild); + grpc_dualstack_mode dsmode; + int fd; + grpc_error *err = + grpc_create_dualstack_socket(&wild, SOCK_STREAM, 0, &dsmode, &fd); + if (err != GRPC_ERROR_NONE) { + return err; + } + if (dsmode == GRPC_DSMODE_IPV4) { + grpc_sockaddr_make_wildcard4(0, &wild); + } + if (bind(fd, (const struct sockaddr *)wild.addr, (socklen_t)wild.len) != 0) { + err = GRPC_OS_ERROR(errno, "bind"); + close(fd); + return err; + } + if (getsockname(fd, (struct sockaddr *)wild.addr, (socklen_t *)&wild.len) != + 0) { + err = GRPC_OS_ERROR(errno, "getsockname"); + close(fd); + return err; + } + close(fd); + *port = grpc_sockaddr_get_port(&wild); + return *port <= 0 ? GRPC_ERROR_CREATE_FROM_STATIC_STRING("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_FROM_STATIC_STRING("Bad get_unused_port()"); + } + gpr_log(GPR_DEBUG, "Picked unused port %d", requested_port); + } + if (getifaddrs(&ifa) != 0 || ifa == NULL) { + return GRPC_OS_ERROR(errno, "getifaddrs"); + } + for (ifa_it = ifa; ifa_it != NULL; ifa_it = ifa_it->ifa_next) { + grpc_resolved_address addr; + char *addr_str = NULL; + grpc_dualstack_mode dsmode; + grpc_tcp_listener *new_sp = NULL; + const char *ifa_name = (ifa_it->ifa_name ? ifa_it->ifa_name : "<unknown>"); + if (ifa_it->ifa_addr == NULL) { + continue; + } else if (ifa_it->ifa_addr->sa_family == AF_INET) { + addr.len = sizeof(struct sockaddr_in); + } else if (ifa_it->ifa_addr->sa_family == AF_INET6) { + addr.len = sizeof(struct sockaddr_in6); + } else { + continue; + } + memcpy(addr.addr, ifa_it->ifa_addr, addr.len); + if (!grpc_sockaddr_set_port(&addr, requested_port)) { + /* Should never happen, because we check sa_family above. */ + err = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to set port"); + break; + } + if (grpc_sockaddr_to_string(&addr_str, &addr, 0) < 0) { + addr_str = gpr_strdup("<error>"); + } + gpr_log(GPR_DEBUG, + "Adding local addr from interface %s flags 0x%x to server: %s", + ifa_name, ifa_it->ifa_flags, addr_str); + /* We could have multiple interfaces with the same address (e.g., bonding), + so look for duplicates. */ + if (find_listener_with_addr(s, &addr) != NULL) { + gpr_log(GPR_DEBUG, "Skipping duplicate addr %s on interface %s", addr_str, + ifa_name); + gpr_free(addr_str); + continue; + } + if ((err = grpc_tcp_server_add_addr(s, &addr, port_index, fd_index, &dsmode, + &new_sp)) != GRPC_ERROR_NONE) { + char *err_str = NULL; + grpc_error *root_err; + if (gpr_asprintf(&err_str, "Failed to add listener: %s", addr_str) < 0) { + err_str = gpr_strdup("Failed to add listener"); + } + root_err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(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_FROM_STATIC_STRING("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 index 8ebd06c458..d6a1a0693e 100644 --- a/src/core/ext/client_channel/initial_connect_string.c +++ b/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2017, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,22 +31,19 @@ * */ -#include "src/core/ext/client_channel/initial_connect_string.h" +#include "src/core/lib/iomgr/port.h" -#include <stddef.h> +#if defined(GRPC_POSIX_SOCKET) && !defined(GRPC_HAVE_IFADDRS) -extern void grpc_set_default_initial_connect_string( - grpc_resolved_address **addr, grpc_slice *initial_str); +#include "src/core/lib/iomgr/tcp_server_utils_posix.h" -static grpc_set_initial_connect_string_func g_set_initial_connect_string_func = - grpc_set_default_initial_connect_string; - -void grpc_test_set_initial_connect_string_function( - grpc_set_initial_connect_string_func func) { - g_set_initial_connect_string_func = func; +grpc_error *grpc_tcp_server_add_all_local_addrs(grpc_tcp_server *s, + unsigned port_index, + int requested_port, + int *out_port) { + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("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/tcp_server_uv.c b/src/core/lib/iomgr/tcp_server_uv.c index eed2773f8a..e9246948f5 100644 --- a/src/core/lib/iomgr/tcp_server_uv.c +++ b/src/core/lib/iomgr/tcp_server_uv.c @@ -95,8 +95,8 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, } else { grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota); gpr_free(s); - return GRPC_ERROR_CREATE(GRPC_ARG_RESOURCE_QUOTA - " must be a pointer to a buffer pool"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + GRPC_ARG_RESOURCE_QUOTA " must be a pointer to a buffer pool"); } } } @@ -244,17 +244,19 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, uv_tcp_t *handle, // The last argument to uv_tcp_bind is flags status = uv_tcp_bind(handle, (struct sockaddr *)addr->addr, 0); if (status != 0) { - error = GRPC_ERROR_CREATE("Failed to bind to port"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to bind to port"); error = - grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(status))); return error; } status = uv_listen((uv_stream_t *)handle, SOMAXCONN, on_connect); if (status != 0) { - error = GRPC_ERROR_CREATE("Failed to listen to port"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to listen to port"); error = - grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(status))); return error; } @@ -262,9 +264,10 @@ static grpc_error *add_socket_to_server(grpc_tcp_server *s, uv_tcp_t *handle, status = uv_tcp_getsockname(handle, (struct sockaddr *)&sockname_temp.addr, (int *)&sockname_temp.len); if (status != 0) { - error = GRPC_ERROR_CREATE("getsockname failed"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("getsockname failed"); error = - grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(status))); return error; } @@ -346,15 +349,17 @@ grpc_error *grpc_tcp_server_add_port(grpc_tcp_server *s, if (status == 0) { error = add_socket_to_server(s, handle, addr, port_index, &sp); } else { - error = GRPC_ERROR_CREATE("Failed to initialize UV tcp handle"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Failed to initialize UV tcp handle"); error = - grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(status))); } gpr_free(allocated_addr); if (error != GRPC_ERROR_NONE) { - grpc_error *error_out = GRPC_ERROR_CREATE_REFERENCING( + grpc_error *error_out = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( "Failed to add port to server", &error, 1); GRPC_ERROR_UNREF(error); error = error_out; diff --git a/src/core/lib/iomgr/tcp_server_windows.c b/src/core/lib/iomgr/tcp_server_windows.c index bd4b9b2df1..12ce7d3fdd 100644 --- a/src/core/lib/iomgr/tcp_server_windows.c +++ b/src/core/lib/iomgr/tcp_server_windows.c @@ -122,8 +122,8 @@ grpc_error *grpc_tcp_server_create(grpc_exec_ctx *exec_ctx, } else { grpc_resource_quota_unref_internal(exec_ctx, s->resource_quota); gpr_free(s); - return GRPC_ERROR_CREATE(GRPC_ARG_RESOURCE_QUOTA - " must be a pointer to a buffer pool"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + GRPC_ARG_RESOURCE_QUOTA " must be a pointer to a buffer pool"); } } } @@ -248,9 +248,10 @@ failure: GPR_ASSERT(error != GRPC_ERROR_NONE); char *tgtaddr = grpc_sockaddr_to_uri(addr); grpc_error_set_int( - grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING( + grpc_error_set_str(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( "Failed to prepare server socket", &error, 1), - GRPC_ERROR_STR_TARGET_ADDRESS, tgtaddr), + GRPC_ERROR_STR_TARGET_ADDRESS, + grpc_slice_from_copied_string(tgtaddr)), GRPC_ERROR_INT_FD, (intptr_t)sock); gpr_free(tgtaddr); GRPC_ERROR_UNREF(error); @@ -533,7 +534,7 @@ done: gpr_free(allocated_addr); if (error != GRPC_ERROR_NONE) { - grpc_error *error_out = GRPC_ERROR_CREATE_REFERENCING( + grpc_error *error_out = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( "Failed to add port to server", &error, 1); GRPC_ERROR_UNREF(error); error = error_out; diff --git a/src/core/lib/iomgr/tcp_uv.c b/src/core/lib/iomgr/tcp_uv.c index 5541c62068..8e8db9f7b4 100644 --- a/src/core/lib/iomgr/tcp_uv.c +++ b/src/core/lib/iomgr/tcp_uv.c @@ -152,7 +152,7 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, // TODO(murgatroid99): figure out what the return value here means uv_read_stop(stream); if (nread == UV_EOF) { - error = GRPC_ERROR_CREATE("EOF"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF"); } else if (nread > 0) { // Successful read sub = grpc_slice_sub_no_ref(tcp->read_slice, 0, (size_t)nread); @@ -173,7 +173,7 @@ static void read_callback(uv_stream_t *stream, ssize_t nread, } } else { // nread < 0: Error - error = GRPC_ERROR_CREATE("TCP Read failed"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP Read failed"); } grpc_closure_sched(&exec_ctx, cb, error); grpc_exec_ctx_finish(&exec_ctx); @@ -193,9 +193,10 @@ static void uv_endpoint_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, status = uv_read_start((uv_stream_t *)tcp->handle, alloc_uv_buf, read_callback); if (status != 0) { - error = GRPC_ERROR_CREATE("TCP Read failed at start"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP Read failed at start"); error = - grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, uv_strerror(status)); + grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR, + grpc_slice_from_static_string(uv_strerror(status))); grpc_closure_sched(exec_ctx, cb, error); } if (grpc_tcp_trace) { @@ -214,7 +215,7 @@ static void write_callback(uv_write_t *req, int status) { if (status == 0) { error = GRPC_ERROR_NONE; } else { - error = GRPC_ERROR_CREATE("TCP Write failed"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP Write failed"); } if (grpc_tcp_trace) { const char *str = grpc_error_string(error); @@ -249,8 +250,8 @@ static void uv_endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, } if (tcp->shutting_down) { - grpc_closure_sched(exec_ctx, cb, - GRPC_ERROR_CREATE("TCP socket is shutting down")); + grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "TCP socket is shutting down")); return; } diff --git a/src/core/lib/iomgr/tcp_windows.c b/src/core/lib/iomgr/tcp_windows.c index 6c413971e3..9134883226 100644 --- a/src/core/lib/iomgr/tcp_windows.c +++ b/src/core/lib/iomgr/tcp_windows.c @@ -175,7 +175,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) { if (error == GRPC_ERROR_NONE) { if (info->wsa_error != 0 && !tcp->shutting_down) { char *utf8_message = gpr_format_message(info->wsa_error); - error = GRPC_ERROR_CREATE(utf8_message); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(utf8_message); gpr_free(utf8_message); grpc_slice_unref_internal(exec_ctx, tcp->read_slice); } else { @@ -185,9 +185,9 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *tcpp, grpc_error *error) { } else { grpc_slice_unref_internal(exec_ctx, tcp->read_slice); error = tcp->shutting_down - ? GRPC_ERROR_CREATE_REFERENCING("TCP stream shutting down", - &tcp->shutdown_error, 1) - : GRPC_ERROR_CREATE("End of TCP stream"); + ? GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "TCP stream shutting down", &tcp->shutdown_error, 1) + : GRPC_ERROR_CREATE_FROM_STATIC_STRING("End of TCP stream"); } } } @@ -208,9 +208,10 @@ static void win_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, WSABUF buffer; if (tcp->shutting_down) { - grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_CREATE_REFERENCING( - "TCP socket is shutting down", - &tcp->shutdown_error, 1)); + grpc_closure_sched( + exec_ctx, cb, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "TCP socket is shutting down", &tcp->shutdown_error, 1)); return; } @@ -297,9 +298,10 @@ static void win_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, size_t len; if (tcp->shutting_down) { - grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_CREATE_REFERENCING( - "TCP socket is shutting down", - &tcp->shutdown_error, 1)); + grpc_closure_sched( + exec_ctx, cb, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "TCP socket is shutting down", &tcp->shutdown_error, 1)); return; } diff --git a/src/core/lib/iomgr/timer_generic.c b/src/core/lib/iomgr/timer_generic.c index d4df96c214..e53c801929 100644 --- a/src/core/lib/iomgr/timer_generic.c +++ b/src/core/lib/iomgr/timer_generic.c @@ -109,8 +109,9 @@ void grpc_timer_list_init(gpr_timespec now) { void grpc_timer_list_shutdown(grpc_exec_ctx *exec_ctx) { int i; - run_some_expired_timers(exec_ctx, gpr_inf_future(g_clock_type), NULL, - GRPC_ERROR_CREATE("Timer list shutdown")); + run_some_expired_timers( + exec_ctx, gpr_inf_future(g_clock_type), NULL, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Timer list shutdown")); for (i = 0; i < NUM_SHARDS; i++) { shard_type *shard = &g_shards[i]; gpr_mu_destroy(&shard->mu); @@ -182,9 +183,9 @@ void grpc_timer_init(grpc_exec_ctx *exec_ctx, grpc_timer *timer, if (!g_initialized) { timer->pending = false; - grpc_closure_sched( - exec_ctx, timer->closure, - GRPC_ERROR_CREATE("Attempt to create timer before initialization")); + grpc_closure_sched(exec_ctx, timer->closure, + GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Attempt to create timer before initialization")); return; } @@ -376,7 +377,7 @@ bool grpc_timer_check(grpc_exec_ctx *exec_ctx, gpr_timespec now, exec_ctx, now, next, gpr_time_cmp(now, gpr_inf_future(now.clock_type)) != 0 ? GRPC_ERROR_NONE - : GRPC_ERROR_CREATE("Shutting down timer system")); + : GRPC_ERROR_CREATE_FROM_STATIC_STRING("Shutting down timer system")); } #endif /* GRPC_TIMER_USE_GENERIC */ diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c index d1bcd89af1..28f2bd9359 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,9 +204,9 @@ 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); - grpc_fd_shutdown(exec_ctx, sp->emfd, - GRPC_ERROR_CREATE("Server destroyed")); + sp->orphan_cb(exec_ctx, sp->emfd, sp->server->user_data); + grpc_fd_shutdown(exec_ctx, sp->emfd, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Server destroyed")); } gpr_mu_unlock(&s->mu); } else { @@ -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 ed63fa7d81..90842a47f0 100644 --- a/src/core/lib/iomgr/udp_server.h +++ b/src/core/lib/iomgr/udp_server.h @@ -47,23 +47,23 @@ typedef struct grpc_udp_server grpc_udp_server; /* Called when data is available to read from the socket. */ typedef void (*grpc_udp_server_read_cb)(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, - struct grpc_server *server); + void *user_data); /* Called when the socket is writeable. */ -typedef void (*grpc_udp_server_write_cb)(grpc_exec_ctx *exec_ctx, - grpc_fd *emfd); +typedef void (*grpc_udp_server_write_cb)(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, + void *user_data); /* Called when the grpc_fd is about to be orphaned (and the FD closed). */ typedef void (*grpc_udp_server_orphan_cb)(grpc_exec_ctx *exec_ctx, - grpc_fd *emfd); + grpc_fd *emfd, void *user_data); /* Create a server, initially not bound to any ports */ grpc_udp_server *grpc_udp_server_create(void); -/* Start listening to bound ports */ +/* Start listening to bound ports. user_data is passed to callbacks. */ void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *udp_server, grpc_pollset **pollsets, size_t pollset_count, - struct grpc_server *server); + void *user_data); int grpc_udp_server_get_fd(grpc_udp_server *s, unsigned port_index); diff --git a/src/core/lib/iomgr/unix_sockets_posix.c b/src/core/lib/iomgr/unix_sockets_posix.c index 1233cec04e..281865aece 100644 --- a/src/core/lib/iomgr/unix_sockets_posix.c +++ b/src/core/lib/iomgr/unix_sockets_posix.c @@ -60,7 +60,7 @@ grpc_error *grpc_resolve_unix_domain_address(const char *name, gpr_asprintf(&err_msg, "Path name should not have more than %" PRIuPTR " characters.", GPR_ARRAY_SIZE(un->sun_path) - 1); - err = GRPC_ERROR_CREATE(err_msg); + err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(err_msg); gpr_free(err_msg); return err; } diff --git a/src/core/lib/iomgr/unix_sockets_posix_noop.c b/src/core/lib/iomgr/unix_sockets_posix_noop.c index 1daf5152c1..b9602cbf8b 100644 --- a/src/core/lib/iomgr/unix_sockets_posix_noop.c +++ b/src/core/lib/iomgr/unix_sockets_posix_noop.c @@ -47,7 +47,8 @@ void grpc_create_socketpair_if_unix(int sv[2]) { grpc_error *grpc_resolve_unix_domain_address( const char *name, grpc_resolved_addresses **addresses) { *addresses = NULL; - return GRPC_ERROR_CREATE("Unix domain sockets are not supported on Windows"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Unix domain sockets are not supported on Windows"); } int grpc_is_unix_socket(const grpc_resolved_address *addr) { return false; } diff --git a/src/core/lib/profiling/basic_timers.c b/src/core/lib/profiling/basic_timers.c index 1f1987fb8e..bc8e27714c 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/credentials/google_default/google_default_credentials.c b/src/core/lib/security/credentials/google_default/google_default_credentials.c index dd44621347..97501e6788 100644 --- a/src/core/lib/security/credentials/google_default/google_default_credentials.c +++ b/src/core/lib/security/credentials/google_default/google_default_credentials.c @@ -180,7 +180,7 @@ static grpc_error *create_default_creds_from_path( grpc_slice creds_data = grpc_empty_slice(); grpc_error *error = GRPC_ERROR_NONE; if (creds_path == NULL) { - error = GRPC_ERROR_CREATE("creds_path unset"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("creds_path unset"); goto end; } error = grpc_load_file(creds_path, 0, &creds_data); @@ -190,10 +190,9 @@ static grpc_error *create_default_creds_from_path( json = grpc_json_parse_string_with_len( (char *)GRPC_SLICE_START_PTR(creds_data), GRPC_SLICE_LENGTH(creds_data)); if (json == NULL) { - char *dump = grpc_dump_slice(creds_data, GPR_DUMP_HEX | GPR_DUMP_ASCII); - error = grpc_error_set_str(GRPC_ERROR_CREATE("Failed to parse JSON"), - GRPC_ERROR_STR_RAW_BYTES, dump); - gpr_free(dump); + error = grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Failed to parse JSON"), + GRPC_ERROR_STR_RAW_BYTES, grpc_slice_ref_internal(creds_data)); goto end; } @@ -204,7 +203,7 @@ static grpc_error *create_default_creds_from_path( grpc_service_account_jwt_access_credentials_create_from_auth_json_key( exec_ctx, key, grpc_max_auth_token_lifetime()); if (result == NULL) { - error = GRPC_ERROR_CREATE( + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( "grpc_service_account_jwt_access_credentials_create_from_auth_json_" "key failed"); } @@ -217,7 +216,7 @@ static grpc_error *create_default_creds_from_path( result = grpc_refresh_token_credentials_create_from_auth_refresh_token(token); if (result == NULL) { - error = GRPC_ERROR_CREATE( + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( "grpc_refresh_token_credentials_create_from_auth_refresh_token " "failed"); } @@ -236,7 +235,8 @@ end: grpc_channel_credentials *grpc_google_default_credentials_create(void) { grpc_channel_credentials *result = NULL; grpc_call_credentials *call_creds = NULL; - grpc_error *error = GRPC_ERROR_CREATE("Failed to create Google credentials"); + grpc_error *error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Failed to create Google credentials"); grpc_error *err; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; @@ -274,7 +274,8 @@ grpc_channel_credentials *grpc_google_default_credentials_create(void) { call_creds = grpc_google_compute_engine_credentials_create(NULL); if (call_creds == NULL) { error = grpc_error_add_child( - error, GRPC_ERROR_CREATE("Failed to get credentials from network")); + error, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Failed to get credentials from network")); } } } diff --git a/src/core/lib/security/transport/client_auth_filter.c b/src/core/lib/security/transport/client_auth_filter.c index a23082a866..8f321b9911 100644 --- a/src/core/lib/security/transport/client_auth_filter.c +++ b/src/core/lib/security/transport/client_auth_filter.c @@ -95,7 +95,8 @@ static void reset_auth_metadata_context( static void add_error(grpc_error **combined, grpc_error *error) { if (error == GRPC_ERROR_NONE) return; if (*combined == GRPC_ERROR_NONE) { - *combined = GRPC_ERROR_CREATE("Client auth metadata plugin error"); + *combined = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Client auth metadata plugin error"); } *combined = grpc_error_add_child(*combined, error); } @@ -114,9 +115,10 @@ static void on_credentials_metadata(grpc_exec_ctx *exec_ctx, void *user_data, grpc_error *error = GRPC_ERROR_NONE; if (status != GRPC_CREDENTIALS_OK) { error = grpc_error_set_int( - GRPC_ERROR_CREATE(error_details != NULL && strlen(error_details) > 0 - ? error_details - : "Credentials failed to get metadata."), + GRPC_ERROR_CREATE_FROM_COPIED_STRING( + error_details != NULL && strlen(error_details) > 0 + ? error_details + : "Credentials failed to get metadata."), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAUTHENTICATED); } else { GPR_ASSERT(num_md <= MAX_CREDENTIALS_METADATA_COUNT); @@ -192,7 +194,7 @@ static void send_security_metadata(grpc_exec_ctx *exec_ctx, grpc_transport_stream_op_finish_with_failure( exec_ctx, op, grpc_error_set_int( - GRPC_ERROR_CREATE( + GRPC_ERROR_CREATE_FROM_STATIC_STRING( "Incompatible credentials set on channel and call."), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAUTHENTICATED)); return; @@ -225,9 +227,10 @@ static void on_host_checked(grpc_exec_ctx *exec_ctx, void *user_data, host); gpr_free(host); grpc_call_element_signal_error( - exec_ctx, elem, grpc_error_set_int(GRPC_ERROR_CREATE(error_msg), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_UNAUTHENTICATED)); + exec_ctx, elem, + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_msg), + GRPC_ERROR_INT_GRPC_STATUS, + GRPC_STATUS_UNAUTHENTICATED)); gpr_free(error_msg); } } @@ -318,7 +321,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/secure_endpoint.c b/src/core/lib/security/transport/secure_endpoint.c index 7d58843d69..568d70fa38 100644 --- a/src/core/lib/security/transport/secure_endpoint.c +++ b/src/core/lib/security/transport/secure_endpoint.c @@ -162,7 +162,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, if (error != GRPC_ERROR_NONE) { grpc_slice_buffer_reset_and_unref_internal(exec_ctx, ep->read_buffer); - call_read_cb(exec_ctx, ep, GRPC_ERROR_CREATE_REFERENCING( + call_read_cb(exec_ctx, ep, GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( "Secure read failed", &error, 1)); return; } @@ -220,8 +220,10 @@ static void on_read(grpc_exec_ctx *exec_ctx, void *user_data, if (result != TSI_OK) { grpc_slice_buffer_reset_and_unref_internal(exec_ctx, ep->read_buffer); - call_read_cb(exec_ctx, ep, grpc_set_tsi_error_result( - GRPC_ERROR_CREATE("Unwrap failed"), result)); + call_read_cb( + exec_ctx, ep, + grpc_set_tsi_error_result( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unwrap failed"), result)); return; } @@ -332,7 +334,8 @@ static void endpoint_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *secure_ep, grpc_slice_buffer_reset_and_unref_internal(exec_ctx, &ep->output_buffer); grpc_closure_sched( exec_ctx, cb, - grpc_set_tsi_error_result(GRPC_ERROR_CREATE("Wrap failed"), result)); + grpc_set_tsi_error_result( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Wrap failed"), result)); GPR_TIMER_END("secure_endpoint.endpoint_write", 0); return; } diff --git a/src/core/lib/security/transport/security_connector.c b/src/core/lib/security/transport/security_connector.c index ad083a730f..b0cbc83639 100644 --- a/src/core/lib/security/transport/security_connector.c +++ b/src/core/lib/security/transport/security_connector.c @@ -137,9 +137,9 @@ void grpc_security_connector_check_peer(grpc_exec_ctx *exec_ctx, grpc_auth_context **auth_context, grpc_closure *on_peer_checked) { if (sc == NULL) { - grpc_closure_sched( - exec_ctx, on_peer_checked, - GRPC_ERROR_CREATE("cannot check peer -- no security connector")); + grpc_closure_sched(exec_ctx, on_peer_checked, + GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "cannot check peer -- no security connector")); tsi_peer_destruct(&peer); } else { sc->vtable->check_peer(exec_ctx, sc, peer, auth_context, on_peer_checked); @@ -330,7 +330,8 @@ static void fake_check_peer(grpc_exec_ctx *exec_ctx, grpc_error *error = GRPC_ERROR_NONE; *auth_context = NULL; if (peer.property_count != 1) { - error = GRPC_ERROR_CREATE("Fake peers should only have 1 property."); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Fake peers should only have 1 property."); goto end; } prop_name = peer.properties[0].name; @@ -339,13 +340,14 @@ static void fake_check_peer(grpc_exec_ctx *exec_ctx, char *msg; gpr_asprintf(&msg, "Unexpected property in fake peer: %s.", prop_name == NULL ? "<EMPTY>" : prop_name); - error = GRPC_ERROR_CREATE(msg); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); goto end; } if (strncmp(peer.properties[0].value.data, TSI_FAKE_CERTIFICATE_TYPE, peer.properties[0].value.length)) { - error = GRPC_ERROR_CREATE("Invalid value for cert type property."); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Invalid value for cert type property."); goto end; } *auth_context = grpc_auth_context_create(NULL); @@ -586,18 +588,19 @@ static grpc_error *ssl_check_peer(grpc_security_connector *sc, const tsi_peer_property *p = tsi_peer_get_property_by_name(peer, TSI_SSL_ALPN_SELECTED_PROTOCOL); if (p == NULL) { - return GRPC_ERROR_CREATE( + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( "Cannot check peer: missing selected ALPN property."); } if (!grpc_chttp2_is_alpn_version_supported(p->value.data, p->value.length)) { - return GRPC_ERROR_CREATE("Cannot check peer: invalid ALPN value."); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Cannot check peer: invalid ALPN value."); } /* Check the peer name if specified. */ if (peer_name != NULL && !ssl_host_matches_name(peer, peer_name)) { char *msg; gpr_asprintf(&msg, "Peer name %s is not in peer certificate", peer_name); - grpc_error *error = GRPC_ERROR_CREATE(msg); + grpc_error *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); return error; } diff --git a/src/core/lib/security/transport/security_handshaker.c b/src/core/lib/security/transport/security_handshaker.c index 7065d261ba..2f39327670 100644 --- a/src/core/lib/security/transport/security_handshaker.c +++ b/src/core/lib/security/transport/security_handshaker.c @@ -120,7 +120,7 @@ static void security_handshake_failed_locked(grpc_exec_ctx *exec_ctx, if (error == GRPC_ERROR_NONE) { // If we were shut down after the handshake succeeded but before an // endpoint callback was invoked, we need to generate our own error. - error = GRPC_ERROR_CREATE("Handshaker shutdown"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshaker shutdown"); } const char *msg = grpc_error_string(error); gpr_log(GPR_DEBUG, "Security handshake failed: %s", msg); @@ -156,7 +156,8 @@ static void on_peer_checked(grpc_exec_ctx *exec_ctx, void *arg, tsi_handshaker_create_frame_protector(h->handshaker, NULL, &protector); if (result != TSI_OK) { error = grpc_set_tsi_error_result( - GRPC_ERROR_CREATE("Frame protector creation failed"), result); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Frame protector creation failed"), + result); security_handshake_failed_locked(exec_ctx, h, error); goto done; } @@ -191,7 +192,7 @@ static grpc_error *check_peer_locked(grpc_exec_ctx *exec_ctx, tsi_result result = tsi_handshaker_extract_peer(h->handshaker, &peer); if (result != TSI_OK) { return grpc_set_tsi_error_result( - GRPC_ERROR_CREATE("Peer extraction failed"), result); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Peer extraction failed"), result); } grpc_security_connector_check_peer(exec_ctx, h->connector, peer, &h->auth_context, &h->on_peer_checked); @@ -215,8 +216,8 @@ static grpc_error *send_handshake_bytes_to_peer_locked(grpc_exec_ctx *exec_ctx, } } while (result == TSI_INCOMPLETE_DATA); if (result != TSI_OK) { - return grpc_set_tsi_error_result(GRPC_ERROR_CREATE("Handshake failed"), - result); + return grpc_set_tsi_error_result( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshake failed"), result); } // Send data. grpc_slice to_send = @@ -234,8 +235,8 @@ static void on_handshake_data_received_from_peer(grpc_exec_ctx *exec_ctx, gpr_mu_lock(&h->mu); if (error != GRPC_ERROR_NONE || h->shutdown) { security_handshake_failed_locked( - exec_ctx, h, - GRPC_ERROR_CREATE_REFERENCING("Handshake read failed", &error, 1)); + exec_ctx, h, GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Handshake read failed", &error, 1)); gpr_mu_unlock(&h->mu); security_handshaker_unref(exec_ctx, h); return; @@ -270,8 +271,9 @@ static void on_handshake_data_received_from_peer(grpc_exec_ctx *exec_ctx, } if (result != TSI_OK) { security_handshake_failed_locked( - exec_ctx, h, grpc_set_tsi_error_result( - GRPC_ERROR_CREATE("Handshake failed"), result)); + exec_ctx, h, + grpc_set_tsi_error_result( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshake failed"), result)); gpr_mu_unlock(&h->mu); security_handshaker_unref(exec_ctx, h); return; @@ -314,8 +316,8 @@ static void on_handshake_data_sent_to_peer(grpc_exec_ctx *exec_ctx, void *arg, gpr_mu_lock(&h->mu); if (error != GRPC_ERROR_NONE || h->shutdown) { security_handshake_failed_locked( - exec_ctx, h, - GRPC_ERROR_CREATE_REFERENCING("Handshake write failed", &error, 1)); + exec_ctx, h, GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Handshake write failed", &error, 1)); gpr_mu_unlock(&h->mu); security_handshaker_unref(exec_ctx, h); return; @@ -429,7 +431,8 @@ static void fail_handshaker_do_handshake(grpc_exec_ctx *exec_ctx, grpc_closure *on_handshake_done, grpc_handshaker_args *args) { grpc_closure_sched(exec_ctx, on_handshake_done, - GRPC_ERROR_CREATE("Failed to create security handshaker")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Failed to create security handshaker")); } static const grpc_handshaker_vtable fail_handshaker_vtable = { diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c index 14619d97ca..3cf0632220 100644 --- a/src/core/lib/security/transport/server_auth_filter.c +++ b/src/core/lib/security/transport/server_auth_filter.c @@ -144,9 +144,10 @@ static void on_md_processing_done( calld->transport_op->send_message = NULL; } calld->transport_op->send_trailing_metadata = NULL; - grpc_closure_sched(&exec_ctx, calld->on_done_recv, - grpc_error_set_int(GRPC_ERROR_CREATE(error_details), - GRPC_ERROR_INT_GRPC_STATUS, status)); + grpc_closure_sched( + &exec_ctx, calld->on_done_recv, + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_details), + GRPC_ERROR_INT_GRPC_STATUS, status)); } grpc_exec_ctx_finish(&exec_ctx); @@ -158,7 +159,7 @@ static void auth_on_recv(grpc_exec_ctx *exec_ctx, void *user_data, call_data *calld = elem->call_data; channel_data *chand = elem->channel_data; if (error == GRPC_ERROR_NONE) { - if (chand->creds->processor.process != NULL) { + if (chand->creds != NULL && chand->creds->processor.process != NULL) { calld->md = metadata_batch_to_md_array(calld->recv_initial_metadata); chand->creds->processor.process( chand->creds->processor.state, calld->auth_context, @@ -227,7 +228,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, @@ -242,7 +243,6 @@ static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx, GPR_ASSERT(!args->is_last); GPR_ASSERT(auth_context != NULL); - GPR_ASSERT(creds != NULL); /* initialize members */ chand->auth_context = diff --git a/src/core/lib/security/transport/tsi_error.c b/src/core/lib/security/transport/tsi_error.c index afc1733567..eae0a676b0 100644 --- a/src/core/lib/security/transport/tsi_error.c +++ b/src/core/lib/security/transport/tsi_error.c @@ -34,7 +34,9 @@ #include "src/core/lib/security/transport/tsi_error.h" grpc_error *grpc_set_tsi_error_result(grpc_error *error, tsi_result result) { - return grpc_error_set_int(grpc_error_set_str(error, GRPC_ERROR_STR_TSI_ERROR, - tsi_result_to_string(result)), - GRPC_ERROR_INT_TSI_CODE, result); + return grpc_error_set_int( + grpc_error_set_str( + error, GRPC_ERROR_STR_TSI_ERROR, + grpc_slice_from_static_string(tsi_result_to_string(result))), + GRPC_ERROR_INT_TSI_CODE, result); } diff --git a/src/core/lib/support/arena.c b/src/core/lib/support/arena.c new file mode 100644 index 0000000000..7bcb983f24 --- /dev/null +++ b/src/core/lib/support/arena.c @@ -0,0 +1,98 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/support/arena.h" +#include <grpc/support/alloc.h> +#include <grpc/support/atm.h> +#include <grpc/support/log.h> +#include <grpc/support/useful.h> + +#define ROUND_UP_TO_ALIGNMENT_SIZE(x) \ + (((x) + GPR_MAX_ALIGNMENT - 1u) & ~(GPR_MAX_ALIGNMENT - 1u)) + +typedef struct zone { + size_t size_begin; + size_t size_end; + gpr_atm next_atm; +} zone; + +struct gpr_arena { + gpr_atm size_so_far; + zone initial_zone; +}; + +gpr_arena *gpr_arena_create(size_t initial_size) { + initial_size = ROUND_UP_TO_ALIGNMENT_SIZE(initial_size); + gpr_arena *a = gpr_zalloc(sizeof(gpr_arena) + initial_size); + a->initial_zone.size_end = initial_size; + return a; +} + +size_t gpr_arena_destroy(gpr_arena *arena) { + gpr_atm size = gpr_atm_no_barrier_load(&arena->size_so_far); + zone *z = (zone *)gpr_atm_no_barrier_load(&arena->initial_zone.next_atm); + gpr_free(arena); + while (z) { + zone *next_z = (zone *)gpr_atm_no_barrier_load(&z->next_atm); + gpr_free(z); + z = next_z; + } + return (size_t)size; +} + +void *gpr_arena_alloc(gpr_arena *arena, size_t size) { + size = ROUND_UP_TO_ALIGNMENT_SIZE(size); + size_t start = + (size_t)gpr_atm_no_barrier_fetch_add(&arena->size_so_far, size); + zone *z = &arena->initial_zone; + while (start > z->size_end) { + zone *next_z = (zone *)gpr_atm_acq_load(&z->next_atm); + if (next_z == NULL) { + size_t next_z_size = (size_t)gpr_atm_no_barrier_load(&arena->size_so_far); + next_z = gpr_zalloc(sizeof(zone) + next_z_size); + next_z->size_begin = z->size_end; + next_z->size_end = z->size_end + next_z_size; + if (!gpr_atm_rel_cas(&z->next_atm, (gpr_atm)NULL, (gpr_atm)next_z)) { + gpr_free(next_z); + next_z = (zone *)gpr_atm_acq_load(&z->next_atm); + } + } + z = next_z; + } + if (start + size > z->size_end) { + return gpr_arena_alloc(arena, size); + } + GPR_ASSERT(start >= z->size_begin); + GPR_ASSERT(start + size <= z->size_end); + return ((char *)(z + 1)) + start - z->size_begin; +} diff --git a/src/core/ext/client_channel/initial_connect_string.h b/src/core/lib/support/arena.h index 876abea40e..c28033ffc3 100644 --- a/src/core/ext/client_channel/initial_connect_string.h +++ b/src/core/lib/support/arena.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,24 @@ * */ -#ifndef GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H -#define GRPC_CORE_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H +// \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 -#include <grpc/slice.h> -#include "src/core/lib/iomgr/resolve_address.h" +#ifndef GRPC_CORE_LIB_SUPPORT_ARENA_H +#define GRPC_CORE_LIB_SUPPORT_ARENA_H -typedef void (*grpc_set_initial_connect_string_func)( - grpc_resolved_address **addr, grpc_slice *initial_str); +#include <stddef.h> -void grpc_test_set_initial_connect_string_function( - grpc_set_initial_connect_string_func func); +typedef struct gpr_arena gpr_arena; -/** 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); +// 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_EXT_CLIENT_CHANNEL_INITIAL_CONNECT_STRING_H */ +#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 index 6db82d84ef..06e8432caf 100644 --- a/src/core/ext/client_channel/default_initial_connect_string.c +++ b/src/core/lib/support/atm.c @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2017, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -31,8 +31,17 @@ * */ -#include <grpc/slice.h> -#include "src/core/lib/iomgr/resolve_address.h" +#include <grpc/support/atm.h> +#include <grpc/support/useful.h> -void grpc_set_default_initial_connect_string(grpc_resolved_address **addr, - grpc_slice *initial_str) {} +gpr_atm gpr_atm_no_barrier_clamped_add(gpr_atm *value, gpr_atm delta, + gpr_atm min, gpr_atm max) { + gpr_atm current; + gpr_atm new; + do { + current = gpr_atm_no_barrier_load(value); + new = GPR_CLAMP(current + delta, min, max); + if (new == current) break; + } while (!gpr_atm_no_barrier_cas(value, current, new)); + return new; +} diff --git a/src/core/lib/surface/call.c b/src/core/lib/surface/call.c index c2547c5147..895a8a3b06 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; @@ -260,7 +264,7 @@ static void add_batch_error(grpc_exec_ctx *exec_ctx, batch_control *bctl, static void add_init_error(grpc_error **composite, grpc_error *new) { if (new == GRPC_ERROR_NONE) return; if (*composite == GRPC_ERROR_NONE) - *composite = GRPC_ERROR_CREATE("Call creation failed"); + *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Call creation failed"); *composite = grpc_error_add_child(*composite, new); } @@ -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( @@ -327,20 +335,24 @@ grpc_error *grpc_call_create(grpc_exec_ctx *exec_ctx, * call. */ if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) { if (0 == (args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) { - add_init_error(&error, - GRPC_ERROR_CREATE("Census tracing propagation requested " - "without Census context propagation")); + add_init_error(&error, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Census tracing propagation requested " + "without Census context propagation")); } grpc_call_context_set( call, GRPC_CONTEXT_TRACING, args->parent_call->context[GRPC_CONTEXT_TRACING].value, NULL); } else if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) { - add_init_error(&error, - GRPC_ERROR_CREATE("Census context propagation requested " - "without Census tracing propagation")); + add_init_error(&error, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Census context propagation requested " + "without Census tracing propagation")); } 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,60 +579,33 @@ 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, - 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, +static void done_termination(grpc_exec_ctx *exec_ctx, void *call, 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, const char *description) { return grpc_error_set_int( - grpc_error_set_str(GRPC_ERROR_CREATE(description), - GRPC_ERROR_STR_GRPC_MESSAGE, description), + grpc_error_set_str(GRPC_ERROR_CREATE_FROM_COPIED_STRING(description), + GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_copied_string(description)), GRPC_ERROR_INT_GRPC_STATUS, status); } @@ -628,16 +625,15 @@ static bool get_final_status_from( void (*set_value)(grpc_status_code code, void *user_data), void *set_value_user_data, grpc_slice *details) { grpc_status_code code; - const char *msg = NULL; - grpc_error_get_status(error, call->send_deadline, &code, &msg, NULL); + grpc_slice slice; + grpc_error_get_status(error, call->send_deadline, &code, &slice, NULL); if (code == GRPC_STATUS_OK && !allow_ok_status) { return false; } set_value(code, set_value_user_data); if (details != NULL) { - *details = - msg == NULL ? grpc_empty_slice() : grpc_slice_from_copied_string(msg); + *details = grpc_slice_ref_internal(slice); } return true; } @@ -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; } @@ -906,18 +896,19 @@ static void recv_common_filter(grpc_exec_ctx *exec_ctx, grpc_call *call, grpc_error *error = status_code == GRPC_STATUS_OK ? GRPC_ERROR_NONE - : grpc_error_set_int(GRPC_ERROR_CREATE("Error received from peer"), + : grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Error received from peer"), GRPC_ERROR_INT_GRPC_STATUS, (intptr_t)status_code); if (b->idx.named.grpc_message != NULL) { - char *msg = - grpc_slice_to_c_string(GRPC_MDVALUE(b->idx.named.grpc_message->md)); - error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, msg); - gpr_free(msg); + error = grpc_error_set_str( + error, GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_ref_internal(GRPC_MDVALUE(b->idx.named.grpc_message->md))); grpc_metadata_batch_remove(exec_ctx, b, b->idx.named.grpc_message); } else if (error != GRPC_ERROR_NONE) { - error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, ""); + error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_empty_slice()); } set_status_from_error(exec_ctx, call, STATUS_FROM_WIRE, error); @@ -1056,7 +1047,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) { @@ -1066,8 +1057,8 @@ static grpc_error *consolidate_batch_errors(batch_control *bctl) { bctl->errors[0] = NULL; return e; } else { - grpc_error *error = - GRPC_ERROR_CREATE_REFERENCING("Call batch failed", bctl->errors, n); + grpc_error *error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Call batch failed", bctl->errors, n); for (size_t i = 0; i < n; i++) { GRPC_ERROR_UNREF(bctl->errors[i]); bctl->errors[i] = NULL; @@ -1083,8 +1074,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 +1092,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 +1122,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 +1212,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 +1223,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 +1284,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 +1297,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 +1322,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 +1377,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; @@ -1539,7 +1522,8 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx, { grpc_error *override_error = GRPC_ERROR_NONE; if (op->data.send_status_from_server.status != GRPC_STATUS_OK) { - override_error = GRPC_ERROR_CREATE("Error from server send status"); + override_error = GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Error from server send status"); } if (op->data.send_status_from_server.status_details != NULL) { call->send_extra_metadata[1].md = grpc_mdelem_from_slices( @@ -1549,8 +1533,9 @@ static grpc_call_error call_start_batch(grpc_exec_ctx *exec_ctx, call->send_extra_metadata_count++; char *msg = grpc_slice_to_c_string( GRPC_MDVALUE(call->send_extra_metadata[1].md)); - override_error = grpc_error_set_str( - override_error, GRPC_ERROR_STR_GRPC_MESSAGE, msg); + override_error = + grpc_error_set_str(override_error, GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_copied_string(msg)); gpr_free(msg); } set_status_from_error(exec_ctx, call, STATUS_FROM_API_OVERRIDE, @@ -1679,8 +1664,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 +1695,6 @@ done_with_error: if (bctl->recv_final_op) { call->requested_final_op = 0; } - gpr_mu_unlock(&call->mu); goto done; } @@ -1760,10 +1743,8 @@ uint8_t grpc_call_is_client(grpc_call *call) { return call->is_client; } grpc_compression_algorithm grpc_call_compression_for_level( grpc_call *call, grpc_compression_level level) { - gpr_mu_lock(&call->mu); grpc_compression_algorithm algo = compression_algorithm_for_level_locked(call, level); - gpr_mu_unlock(&call->mu); return algo; } diff --git a/src/core/lib/surface/channel.c b/src/core/lib/surface/channel.c index d6acd392c1..d6c7aee40d 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; @@ -83,19 +85,10 @@ struct grpc_channel { static void destroy_channel(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error); -grpc_channel *grpc_channel_create(grpc_exec_ctx *exec_ctx, const char *target, - const grpc_channel_args *input_args, - grpc_channel_stack_type channel_stack_type, - grpc_transport *optional_transport) { - grpc_channel_stack_builder *builder = grpc_channel_stack_builder_create(); - grpc_channel_stack_builder_set_channel_arguments(exec_ctx, builder, - input_args); - grpc_channel_stack_builder_set_target(builder, target); - grpc_channel_stack_builder_set_transport(builder, optional_transport); - if (!grpc_channel_init_create_stack(exec_ctx, builder, channel_stack_type)) { - grpc_channel_stack_builder_destroy(exec_ctx, builder); - return NULL; - } +grpc_channel *grpc_channel_create_with_builder( + grpc_exec_ctx *exec_ctx, grpc_channel_stack_builder *builder, + grpc_channel_stack_type channel_stack_type) { + char *target = gpr_strdup(grpc_channel_stack_builder_get_target(builder)); grpc_channel_args *args = grpc_channel_args_copy( grpc_channel_stack_builder_get_channel_arguments(builder)); grpc_channel *channel; @@ -106,15 +99,20 @@ grpc_channel *grpc_channel_create(grpc_exec_ctx *exec_ctx, const char *target, gpr_log(GPR_ERROR, "channel stack builder failed: %s", grpc_error_string(error)); GRPC_ERROR_UNREF(error); + gpr_free(target); goto done; } memset(channel, 0, sizeof(*channel)); - channel->target = gpr_strdup(target); + channel->target = target; channel->is_client = grpc_channel_stack_type_is_client(channel_stack_type); 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 +175,49 @@ done: return channel; } +grpc_channel *grpc_channel_create(grpc_exec_ctx *exec_ctx, const char *target, + const grpc_channel_args *input_args, + grpc_channel_stack_type channel_stack_type, + grpc_transport *optional_transport) { + grpc_channel_stack_builder *builder = grpc_channel_stack_builder_create(); + grpc_channel_stack_builder_set_channel_arguments(exec_ctx, builder, + input_args); + grpc_channel_stack_builder_set_target(builder, target); + grpc_channel_stack_builder_set_transport(builder, optional_transport); + if (!grpc_channel_init_create_stack(exec_ctx, builder, channel_stack_type)) { + grpc_channel_stack_builder_destroy(exec_ctx, builder); + return NULL; + } + return grpc_channel_create_with_builder(exec_ctx, builder, + channel_stack_type); +} + +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); @@ -348,7 +389,8 @@ void grpc_channel_destroy(grpc_channel *channel) { grpc_channel_element *elem; grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; GRPC_API_TRACE("grpc_channel_destroy(channel=%p)", 1, (channel)); - op->disconnect_with_error = GRPC_ERROR_CREATE("Channel Destroyed"); + op->disconnect_with_error = + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Channel Destroyed"); elem = grpc_channel_stack_element(CHANNEL_STACK_FROM_CHANNEL(channel), 0); elem->filter->start_transport_op(&exec_ctx, elem, op); diff --git a/src/core/lib/surface/channel.h b/src/core/lib/surface/channel.h index 3a441d7add..0f203a3e59 100644 --- a/src/core/lib/surface/channel.h +++ b/src/core/lib/surface/channel.h @@ -35,6 +35,7 @@ #define GRPC_CORE_LIB_SURFACE_CHANNEL_H #include "src/core/lib/channel/channel_stack.h" +#include "src/core/lib/channel/channel_stack_builder.h" #include "src/core/lib/surface/channel_stack_type.h" grpc_channel *grpc_channel_create(grpc_exec_ctx *exec_ctx, const char *target, @@ -42,6 +43,10 @@ grpc_channel *grpc_channel_create(grpc_exec_ctx *exec_ctx, const char *target, grpc_channel_stack_type channel_stack_type, grpc_transport *optional_transport); +grpc_channel *grpc_channel_create_with_builder( + grpc_exec_ctx *exec_ctx, grpc_channel_stack_builder *builder, + grpc_channel_stack_type channel_stack_type); + /** Create a call given a grpc_channel, in order to call \a method. Progress is tied to activity on \a pollset_set. The returned call object is meant to be used with \a grpc_call_start_batch_and_execute, which relies on @@ -66,6 +71,9 @@ grpc_mdelem grpc_channel_get_reffed_status_elem(grpc_exec_ctx *exec_ctx, grpc_channel *channel, int status_code); +size_t grpc_channel_get_call_size_estimate(grpc_channel *channel); +void grpc_channel_update_call_size_estimate(grpc_channel *channel, size_t size); + #ifdef GRPC_STREAM_REFCOUNT_DEBUG void grpc_channel_internal_ref(grpc_channel *channel, const char *reason); void grpc_channel_internal_unref(grpc_exec_ctx *exec_ctx, grpc_channel *channel, diff --git a/src/core/lib/surface/lame_client.c b/src/core/lib/surface/lame_client.c index 49bc4c114b..0c408aa288 100644 --- a/src/core/lib/surface/lame_client.c +++ b/src/core/lib/surface/lame_client.c @@ -90,7 +90,8 @@ static void lame_start_transport_stream_op(grpc_exec_ctx *exec_ctx, fill_metadata(exec_ctx, elem, op->recv_trailing_metadata); } grpc_transport_stream_op_finish_with_failure( - exec_ctx, op, GRPC_ERROR_CREATE("lame client channel")); + exec_ctx, op, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel")); } static char *lame_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) { @@ -111,8 +112,9 @@ static void lame_start_transport_op(grpc_exec_ctx *exec_ctx, GRPC_ERROR_NONE); } if (op->send_ping != NULL) { - grpc_closure_sched(exec_ctx, op->send_ping, - GRPC_ERROR_CREATE("lame client channel")); + grpc_closure_sched( + exec_ctx, op->send_ping, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("lame client channel")); } GRPC_ERROR_UNREF(op->disconnect_with_error); if (op->on_consumed != NULL) { @@ -130,8 +132,8 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *and_free_memory) { - gpr_free(and_free_memory); + grpc_closure *then_schedule_closure) { + grpc_closure_sched(exec_ctx, then_schedule_closure, GRPC_ERROR_NONE); } static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx, diff --git a/src/core/lib/surface/server.c b/src/core/lib/surface/server.c index b360579553..a123c9ca43 100644 --- a/src/core/lib/surface/server.c +++ b/src/core/lib/surface/server.c @@ -288,10 +288,10 @@ static void send_shutdown(grpc_exec_ctx *exec_ctx, grpc_channel *channel, grpc_channel_element *elem; op->goaway_error = - send_goaway - ? grpc_error_set_int(GRPC_ERROR_CREATE("Server shutdown"), - GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK) - : GRPC_ERROR_NONE; + send_goaway ? grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown"), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_OK) + : GRPC_ERROR_NONE; op->set_accept_stream = true; sc->slice = grpc_slice_from_copied_string("Server shutdown"); op->disconnect_with_error = send_disconnect; @@ -712,8 +712,9 @@ static void maybe_finish_shutdown(grpc_exec_ctx *exec_ctx, return; } - kill_pending_work_locked(exec_ctx, server, - GRPC_ERROR_CREATE("Server Shutdown")); + kill_pending_work_locked( + exec_ctx, server, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown")); if (server->root_channel_data.next != &server->root_channel_data || server->listeners_destroyed < num_listeners(server)) { @@ -771,8 +772,8 @@ static void server_on_recv_initial_metadata(grpc_exec_ctx *exec_ctx, void *ptr, /* do nothing */ } else { grpc_error *src_error = error; - error = - GRPC_ERROR_CREATE_REFERENCING("Missing :authority or :path", &error, 1); + error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Missing :authority or :path", &error, 1); GRPC_ERROR_UNREF(src_error); } @@ -898,7 +899,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; @@ -1219,7 +1220,8 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s, op->on_connectivity_state_change = &chand->channel_connectivity_changed; op->connectivity_state = &chand->connectivity_state; if (gpr_atm_acq_load(&s->shutdown_flag) != 0) { - op->disconnect_with_error = GRPC_ERROR_CREATE("Server shutdown"); + op->disconnect_with_error = + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server shutdown"); } grpc_transport_perform_op(exec_ctx, transport, op); } @@ -1277,8 +1279,9 @@ void grpc_server_shutdown_and_notify(grpc_server *server, /* collect all unregistered then registered calls */ gpr_mu_lock(&server->mu_call); - kill_pending_work_locked(&exec_ctx, server, - GRPC_ERROR_CREATE("Server Shutdown")); + kill_pending_work_locked( + &exec_ctx, server, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown")); gpr_mu_unlock(&server->mu_call); maybe_finish_shutdown(&exec_ctx, server); @@ -1308,8 +1311,9 @@ void grpc_server_cancel_all_calls(grpc_server *server) { channel_broadcaster_init(server, &broadcaster); gpr_mu_unlock(&server->mu_global); - channel_broadcaster_shutdown(&exec_ctx, &broadcaster, false /* send_goaway */, - GRPC_ERROR_CREATE("Cancelling all calls")); + channel_broadcaster_shutdown( + &exec_ctx, &broadcaster, false /* send_goaway */, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Cancelling all calls")); grpc_exec_ctx_finish(&exec_ctx); } @@ -1357,16 +1361,16 @@ static grpc_call_error queue_call_request(grpc_exec_ctx *exec_ctx, int request_id; if (gpr_atm_acq_load(&server->shutdown_flag)) { fail_call(exec_ctx, server, cq_idx, rc, - GRPC_ERROR_CREATE("Server Shutdown")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Server Shutdown")); return GRPC_CALL_OK; } request_id = gpr_stack_lockfree_pop(server->request_freelist_per_cq[cq_idx]); if (request_id == -1) { /* out of request ids: just fail this one */ fail_call(exec_ctx, server, cq_idx, rc, - grpc_error_set_int(GRPC_ERROR_CREATE("Out of request ids"), - GRPC_ERROR_INT_LIMIT, - server->max_requested_calls_per_cq)); + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Out of request ids"), + GRPC_ERROR_INT_LIMIT, server->max_requested_calls_per_cq)); return GRPC_CALL_OK; } switch (rc->type) { diff --git a/src/core/lib/surface/validate_metadata.c b/src/core/lib/surface/validate_metadata.c index 7ec9137265..6e76c4efe7 100644 --- a/src/core/lib/surface/validate_metadata.c +++ b/src/core/lib/surface/validate_metadata.c @@ -39,6 +39,7 @@ #include <grpc/support/port_platform.h> #include "src/core/lib/iomgr/error.h" +#include "src/core/lib/slice/slice_internal.h" #include "src/core/lib/slice/slice_string_helpers.h" static grpc_error *conforms_to(grpc_slice slice, const uint8_t *legal_bits, @@ -52,9 +53,10 @@ static grpc_error *conforms_to(grpc_slice slice, const uint8_t *legal_bits, if ((legal_bits[byte] & (1 << bit)) == 0) { char *dump = grpc_dump_slice(slice, GPR_DUMP_HEX | GPR_DUMP_ASCII); grpc_error *error = grpc_error_set_str( - grpc_error_set_int(GRPC_ERROR_CREATE(err_desc), GRPC_ERROR_INT_OFFSET, + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_COPIED_STRING(err_desc), + GRPC_ERROR_INT_OFFSET, p - GRPC_SLICE_START_PTR(slice)), - GRPC_ERROR_STR_RAW_BYTES, dump); + GRPC_ERROR_STR_RAW_BYTES, grpc_slice_from_copied_string(dump)); gpr_free(dump); return error; } @@ -74,10 +76,12 @@ grpc_error *grpc_validate_header_key_is_legal(grpc_slice slice) { 0x80, 0xfe, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; if (GRPC_SLICE_LENGTH(slice) == 0) { - return GRPC_ERROR_CREATE("Metadata keys cannot be zero length"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Metadata keys cannot be zero length"); } if (GRPC_SLICE_START_PTR(slice)[0] == ':') { - return GRPC_ERROR_CREATE("Metadata keys cannot start with :"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Metadata keys cannot start with :"); } return conforms_to(slice, legal_header_bits, "Illegal header key"); } diff --git a/src/core/lib/surface/version.c b/src/core/lib/surface/version.c index 1143a9e044..ba80bd801e 100644 --- a/src/core/lib/surface/version.c +++ b/src/core/lib/surface/version.c @@ -38,4 +38,4 @@ const char *grpc_version_string(void) { return "3.0.0-dev"; } -const char *grpc_g_stands_for(void) { return "green"; } +const char *grpc_g_stands_for(void) { return "gentle"; } diff --git a/src/core/lib/transport/connectivity_state.c b/src/core/lib/transport/connectivity_state.c index afe1f6164d..3757b25267 100644 --- a/src/core/lib/transport/connectivity_state.c +++ b/src/core/lib/transport/connectivity_state.c @@ -79,7 +79,8 @@ void grpc_connectivity_state_destroy(grpc_exec_ctx *exec_ctx, *w->current = GRPC_CHANNEL_SHUTDOWN; error = GRPC_ERROR_NONE; } else { - error = GRPC_ERROR_CREATE("Shutdown connectivity owner"); + error = + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Shutdown connectivity owner"); } grpc_closure_sched(exec_ctx, w->notify, error); gpr_free(w); diff --git a/src/core/lib/transport/error_utils.c b/src/core/lib/transport/error_utils.c index ef55e561fb..4e70f8749d 100644 --- a/src/core/lib/transport/error_utils.c +++ b/src/core/lib/transport/error_utils.c @@ -55,7 +55,7 @@ static grpc_error *recursively_find_error_with_field(grpc_error *error, } void grpc_error_get_status(grpc_error *error, gpr_timespec deadline, - grpc_status_code *code, const char **msg, + grpc_status_code *code, grpc_slice *slice, grpc_http2_error_code *http_error) { // Start with the parent error and recurse through the tree of children // until we find the first one that has a status code. @@ -97,11 +97,11 @@ void grpc_error_get_status(grpc_error *error, gpr_timespec deadline, // If the error has a status message, use it. Otherwise, fall back to // the error description. - if (msg != NULL) { - *msg = grpc_error_get_str(found_error, GRPC_ERROR_STR_GRPC_MESSAGE); - if (*msg == NULL && error != GRPC_ERROR_NONE) { - *msg = grpc_error_get_str(found_error, GRPC_ERROR_STR_DESCRIPTION); - if (*msg == NULL) *msg = "unknown error"; // Just in case. + if (slice != NULL) { + if (!grpc_error_get_str(found_error, GRPC_ERROR_STR_GRPC_MESSAGE, slice)) { + if (!grpc_error_get_str(found_error, GRPC_ERROR_STR_DESCRIPTION, slice)) { + *slice = grpc_slice_from_static_string("unknown error"); + } } } diff --git a/src/core/lib/transport/error_utils.h b/src/core/lib/transport/error_utils.h index 105338880a..3b44466ab8 100644 --- a/src/core/lib/transport/error_utils.h +++ b/src/core/lib/transport/error_utils.h @@ -44,7 +44,7 @@ /// attributes (code, msg, http_status) are unneeded, they can be passed as /// NULL. void grpc_error_get_status(grpc_error *error, gpr_timespec deadline, - grpc_status_code *code, const char **msg, + grpc_status_code *code, grpc_slice *slice, grpc_http2_error_code *http_status); /// A utility function to check whether there is a clear status code that diff --git a/src/core/lib/transport/metadata_batch.c b/src/core/lib/transport/metadata_batch.c index fc2c52bd8a..fa73244aa4 100644 --- a/src/core/lib/transport/metadata_batch.c +++ b/src/core/lib/transport/metadata_batch.c @@ -101,12 +101,10 @@ void grpc_metadata_batch_destroy(grpc_exec_ctx *exec_ctx, } grpc_error *grpc_attach_md_to_error(grpc_error *src, grpc_mdelem md) { - char *k = grpc_slice_to_c_string(GRPC_MDKEY(md)); - char *v = grpc_slice_to_c_string(GRPC_MDVALUE(md)); grpc_error *out = grpc_error_set_str( - grpc_error_set_str(src, GRPC_ERROR_STR_KEY, k), GRPC_ERROR_STR_VALUE, v); - gpr_free(k); - gpr_free(v); + grpc_error_set_str(src, GRPC_ERROR_STR_KEY, + grpc_slice_ref_internal(GRPC_MDKEY(md))), + GRPC_ERROR_STR_VALUE, grpc_slice_ref_internal(GRPC_MDVALUE(md))); return out; } @@ -126,7 +124,8 @@ static grpc_error *maybe_link_callout(grpc_metadata_batch *batch, return GRPC_ERROR_NONE; } return grpc_attach_md_to_error( - GRPC_ERROR_CREATE("Unallowed duplicate metadata"), storage->md); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unallowed duplicate metadata"), + storage->md); } static void maybe_unlink_callout(grpc_metadata_batch *batch, @@ -302,7 +301,7 @@ static void add_error(grpc_error **composite, grpc_error *error, const char *composite_error_string) { if (error == GRPC_ERROR_NONE) return; if (*composite == GRPC_ERROR_NONE) { - *composite = GRPC_ERROR_CREATE(composite_error_string); + *composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(composite_error_string); } *composite = grpc_error_add_child(*composite, error); } diff --git a/src/core/lib/transport/service_config.c b/src/core/lib/transport/service_config.c index 12da2a88fe..1195f75044 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 cd739a593c..ebfc59b534 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 165950e288..d56cb31ee0 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 cc1c277b35..950b18aeda 100644 --- a/src/core/lib/transport/transport.h +++ b/src/core/lib/transport/transport.h @@ -41,6 +41,7 @@ #include "src/core/lib/iomgr/polling_entity.h" #include "src/core/lib/iomgr/pollset.h" #include "src/core/lib/iomgr/pollset_set.h" +#include "src/core/lib/support/arena.h" #include "src/core/lib/transport/byte_stream.h" #include "src/core/lib/transport/metadata_batch.h" @@ -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 8553148c35..6f688bf8d2 100644 --- a/src/core/lib/transport/transport_impl.h +++ b/src/core/lib/transport/transport_impl.h @@ -47,7 +47,7 @@ typedef struct grpc_transport_vtable { /* implementation of grpc_transport_init_stream */ int (*init_stream)(grpc_exec_ctx *exec_ctx, grpc_transport *self, grpc_stream *stream, grpc_stream_refcount *refcount, - const void *server_data); + const void *server_data, gpr_arena *arena); /* implementation of grpc_transport_set_pollset */ void (*set_pollset)(grpc_exec_ctx *exec_ctx, grpc_transport *self, @@ -67,7 +67,8 @@ typedef struct grpc_transport_vtable { /* implementation of grpc_transport_destroy_stream */ void (*destroy_stream)(grpc_exec_ctx *exec_ctx, grpc_transport *self, - grpc_stream *stream, void *and_free_memory); + grpc_stream *stream, + grpc_closure *then_schedule_closure); /* implementation of grpc_transport_destroy */ void (*destroy)(grpc_exec_ctx *exec_ctx, grpc_transport *self); diff --git a/src/cpp/common/channel_arguments.cc b/src/cpp/common/channel_arguments.cc index 65f3277499..eddcacc332 100644 --- a/src/cpp/common/channel_arguments.cc +++ b/src/cpp/common/channel_arguments.cc @@ -81,6 +81,16 @@ ChannelArguments::ChannelArguments(const ChannelArguments& other) } } +ChannelArguments::~ChannelArguments() { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + for (auto it = args_.begin(); it != args_.end(); ++it) { + if (it->type == GRPC_ARG_POINTER) { + it->value.pointer.vtable->destroy(&exec_ctx, it->value.pointer.p); + } + } + grpc_exec_ctx_finish(&exec_ctx); +} + void ChannelArguments::Swap(ChannelArguments& other) { args_.swap(other.args_); strings_.swap(other.strings_); @@ -101,8 +111,10 @@ void ChannelArguments::SetSocketMutator(grpc_socket_mutator* mutator) { for (auto it = args_.begin(); it != args_.end(); ++it) { if (it->type == mutator_arg.type && grpc::string(it->key) == grpc::string(mutator_arg.key)) { + GPR_ASSERT(!replaced); it->value.pointer.vtable->destroy(&exec_ctx, it->value.pointer.p); it->value.pointer = mutator_arg.value.pointer; + replaced = true; } } grpc_exec_ctx_finish(&exec_ctx); @@ -185,7 +197,7 @@ void ChannelArguments::SetPointerWithVtable( arg.type = GRPC_ARG_POINTER; strings_.push_back(key); arg.key = const_cast<char*>(strings_.back().c_str()); - arg.value.pointer.p = value; + arg.value.pointer.p = vtable->copy(value); arg.value.pointer.vtable = vtable; args_.push_back(arg); } diff --git a/src/cpp/common/channel_filter.h b/src/cpp/common/channel_filter.h index 79c4bab985..494d5d64d7 100644 --- a/src/cpp/common/channel_filter.h +++ b/src/cpp/common/channel_filter.h @@ -318,7 +318,8 @@ class ChannelFilter final { static void DestroyCallElement(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *and_free_memory) { + grpc_closure *then_call_closure) { + GPR_ASSERT(then_call_closure == NULL); reinterpret_cast<CallDataType *>(elem->call_data)->~CallDataType(); } diff --git a/src/node/src/server.js b/src/node/src/server.js index 8a7eff507d..a5a0ea2642 100644 --- a/src/node/src/server.js +++ b/src/node/src/server.js @@ -728,7 +728,7 @@ var defaultHandler = { * method implementation for the provided service. */ Server.prototype.addService = function(service, implementation) { - if (!_.isObjectLike(service) || !_.isObjectLike(implementation)) { + if (!_.isObject(service) || !_.isObject(implementation)) { throw new Error('addService requires two objects as arguments'); } if (_.keys(service).length === 0) { diff --git a/src/objective-c/tests/CoreCronetEnd2EndTests/CoreCronetEnd2EndTests.m b/src/objective-c/tests/CoreCronetEnd2EndTests/CoreCronetEnd2EndTests.m index 1e0c8024ca..3b442645e8 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 5584246ad9..d964f53e8e 100644 --- a/src/objective-c/tests/InteropTests.m +++ b/src/objective-c/tests/InteropTests.m @@ -90,6 +90,9 @@ return nil; } +// This number indicates how many bytes of overhead does Protocol Buffers encoding add onto the +// message. The number varies as different message.proto is used on different servers. The actual +// number for each interop server is overridden in corresponding derived test classes. - (int32_t)encodingOverhead { return 0; } @@ -169,8 +172,6 @@ [self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil]; } -#ifndef GRPC_COMPILE_WITH_CRONET -// TODO (mxyan): Fix this test - (void)testResponsesOverMaxSizeFailWithActionableMessage { XCTAssertNotNil(self.class.host); __weak XCTestExpectation *expectation = [self expectationWithDescription:@"ResponseOverMaxSize"]; @@ -191,7 +192,6 @@ [self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil]; } -#endif - (void)testResponsesOver4MBAreAcceptedIfOptedIn { XCTAssertNotNil(self.class.host); @@ -327,8 +327,6 @@ [self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil]; } -#ifndef GRPC_COMPILE_WITH_CRONET -// TODO(makdharma@): Fix this test - (void)testEmptyStreamRPC { XCTAssertNotNil(self.class.host); __weak XCTestExpectation *expectation = [self expectationWithDescription:@"EmptyStream"]; @@ -342,7 +340,6 @@ }]; [self waitForExpectationsWithTimeout:TEST_TIMEOUT handler:nil]; } -#endif - (void)testCancelAfterBeginRPC { XCTAssertNotNil(self.class.host); diff --git a/src/objective-c/tests/InteropTestsLocalCleartext.m b/src/objective-c/tests/InteropTestsLocalCleartext.m index b41210f50f..4987660808 100644 --- a/src/objective-c/tests/InteropTestsLocalCleartext.m +++ b/src/objective-c/tests/InteropTestsLocalCleartext.m @@ -37,6 +37,10 @@ static NSString * const kLocalCleartextHost = @"localhost:5050"; +// The Protocol Buffers encoding overhead of local interop server. Acquired +// by experiment. Adjust this when server's proto file changes. +static int32_t kLocalInteropServerOverhead = 10; + /** Tests in InteropTests.m, sending the RPCs to a local cleartext server. */ @interface InteropTestsLocalCleartext : InteropTests @end @@ -48,7 +52,7 @@ static NSString * const kLocalCleartextHost = @"localhost:5050"; } - (int32_t)encodingOverhead { - return 10; // bytes + return kLocalInteropServerOverhead; // bytes } - (void)setUp { diff --git a/src/objective-c/tests/InteropTestsLocalSSL.m b/src/objective-c/tests/InteropTestsLocalSSL.m index 1479c5896c..934d500abc 100644 --- a/src/objective-c/tests/InteropTestsLocalSSL.m +++ b/src/objective-c/tests/InteropTestsLocalSSL.m @@ -37,6 +37,10 @@ static NSString * const kLocalSSLHost = @"localhost:5051"; +// The Protocol Buffers encoding overhead of local interop server. Acquired +// by experiment. Adjust this when server's proto file changes. +static int32_t kLocalInteropServerOverhead = 10; + /** Tests in InteropTests.m, sending the RPCs to a local SSL server. */ @interface InteropTestsLocalSSL : InteropTests @end @@ -48,7 +52,7 @@ static NSString * const kLocalSSLHost = @"localhost:5051"; } - (int32_t)encodingOverhead { - return 10; // bytes + return kLocalInteropServerOverhead; // bytes } - (void)setUp { diff --git a/src/objective-c/tests/InteropTestsRemote.m b/src/objective-c/tests/InteropTestsRemote.m index 70f84753bb..9fb30aa43d 100644 --- a/src/objective-c/tests/InteropTestsRemote.m +++ b/src/objective-c/tests/InteropTestsRemote.m @@ -37,6 +37,10 @@ static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.googleapis.com"; +// The Protocol Buffers encoding overhead of remote interop server. Acquired +// by experiment. Adjust this when server's proto file changes. +static int32_t kRemoteInteropServerOverhead = 12; + /** Tests in InteropTests.m, sending the RPCs to a remote SSL server. */ @interface InteropTestsRemote : InteropTests @end @@ -48,7 +52,7 @@ static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.googleapis.com"; } - (int32_t)encodingOverhead { - return 12; // bytes + return kRemoteInteropServerOverhead; // bytes } @end diff --git a/src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m b/src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m index fab8ad8d25..005bac0a0d 100644 --- a/src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m +++ b/src/objective-c/tests/InteropTestsRemoteWithCronet/InteropTestsRemoteWithCronet.m @@ -37,6 +37,10 @@ static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.googleapis.com"; +// The Protocol Buffers encoding overhead of remote interop server. Acquired +// by experiment. Adjust this when server's proto file changes. +static int32_t kRemoteInteropServerOverhead = 12; + /** Tests in InteropTests.m, sending the RPCs to a remote SSL server. */ @interface InteropTestsRemoteWithCronet : InteropTests @end @@ -47,4 +51,8 @@ static NSString * const kRemoteSSLHost = @"grpc-test.sandbox.googleapis.com"; return kRemoteSSLHost; } +- (int32_t)encodingOverhead { + return kRemoteInteropServerOverhead; // bytes +} + @end diff --git a/src/php/tests/qps/client.php b/src/php/tests/qps/client.php new file mode 100644 index 0000000000..d9ca35ba43 --- /dev/null +++ b/src/php/tests/qps/client.php @@ -0,0 +1,166 @@ +<?php +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* + * PHP client for QPS testing works as follows: + * 1. Gets initiated by a call from a proxy that implements the worker service. The + * argument to this client is the proxy connection information + * 2. Initiate an RPC to the proxy to get ClientConfig + * 3. Initiate a client-side telemetry RPC to the proxy + * 4. Parse the client config, which includes server target information and then start + * a unary or streaming test as appropriate. + * 5. After each completed RPC, send its timing to the proxy. The proxy does all histogramming + * 6. Proxy will respond on the timing channel when it's time to complete. Our + * next timing write will fail and we know that it's time to stop + * The above complex dance is since threading and async are not idiomatic and we + * shouldn't ever be waiting to read a mark + * + * This test only supports a single channel since threading/async is not idiomatic + * This test supports unary or streaming ping-pongs, as well as open-loop + * + */ + +require dirname(__FILE__).'/vendor/autoload.php'; + +/** + * Assertion function that always exits with an error code if the assertion is + * falsy. + * + * @param $value Assertion value. Should be true. + * @param $error_message Message to display if the assertion is false + */ +function hardAssert($value, $error_message) +{ + if (!$value) { + echo $error_message."\n"; + exit(1); + } +} + +function hardAssertIfStatusOk($status) +{ + if ($status->code !== Grpc\STATUS_OK) { + echo "Call did not complete successfully. Status object:\n"; + var_dump($status); + exit(1); + } +} + +/* Start the actual client */ + +function qps_client_main($proxy_address) { + echo "Initiating php client\n"; + + $proxystubopts = []; + $proxystubopts['credentials'] = Grpc\ChannelCredentials::createInsecure(); + $proxystub = new Grpc\Testing\ProxyClientServiceClient($proxy_address, $proxystubopts); + list($config, $status) = $proxystub->GetConfig(new Grpc\Testing\Void())->wait(); + hardAssertIfStatusOk($status); + hardAssert($config->getClientChannels() == 1, "Only 1 channel supported"); + hardAssert($config->getOutstandingRpcsPerChannel() == 1, "Only 1 outstanding RPC supported"); + + echo "Got configuration from proxy, target is " . $config->getServerTargets()[0] . "\n"; + + $stubopts = []; + if ($config->getSecurityParams()) { + if ($config->getSecurityParams()->getUseTestCa()) { + $stubopts['credentials'] = Grpc\ChannelCredentials::createSsl( + file_get_contents(dirname(__FILE__).'/../data/ca.pem')); + } else { + $stubopts['credentials'] = Grpc\ChannelCredentials::createSsl(null); + } + $override = $config->getSecurityParams()->getServerHostOverride(); + if ($override) { + $stubopts['grpc.ssl_target_name_override'] = $override; + $stubopts['grpc.default_authority'] = $override; + } + } else { + $stubopts['credentials'] = Grpc\ChannelCredentials::createInsecure(); + } + echo "Initiating php benchmarking client\n"; + + $stub = new Grpc\Testing\BenchmarkServiceClient( + $config->getServerTargets()[0], $stubopts); + $req = new Grpc\Testing\SimpleRequest(); + + $req->setResponseType(Grpc\Testing\PayloadType::COMPRESSABLE); + $req->setResponseSize($config->getPayloadConfig()->getSimpleParams()->getRespSize()); + $payload = new Grpc\Testing\Payload(); + $payload->setType(Grpc\Testing\PayloadType::COMPRESSABLE); + $payload->setBody(str_repeat("\0", $config->getPayloadConfig()->getSimpleParams()->getReqSize())); + $req->setPayload($payload); + + /* TODO(stanley-cheung): Enable the following by removing the 0&& once protobuf + * properly supports oneof in PHP */ + if (0 && $config->getLoadParams()->getLoad() == "poisson") { + $poisson = true; + $lamrecip = 1.0/($config->getLoadParams()->getPoisson()->getOfferedLoad()); + $issue = microtime(true) + $lamrecip * -log(1.0-rand()/(getrandmax()+1)); + } else { + $poisson = false; + } + $metric = new Grpc\Testing\ProxyStat; + $telemetry = $proxystub->ReportTime(); + if ($config->getRpcType() == Grpc\Testing\RpcType::UNARY) { + while (1) { + if ($poisson) { + time_sleep_until($issue); + $issue = $issue + $lamrecip * -log(1.0-rand()/(getrandmax()+1)); + } + $startreq = microtime(true); + list($resp,$status) = $stub->UnaryCall($req)->wait(); + hardAssertIfStatusOk($status); + $metric->setLatency(microtime(true)-$startreq); + $telemetry->write($metric); + } + } else { + $stream = $stub->StreamingCall(); + while (1) { + if ($poisson) { + time_sleep_until($issue); + $issue = $issue + $lamrecip * -log(1.0-rand()/(getrandmax()+1)); + } + $startreq = microtime(true); + $stream->write($req); + $resp = $stream->read(); + $metric->setLatency(microtime(true)-$startreq); + $telemetry->write($metric); + } + } +} + +ini_set('display_startup_errors', 1); +ini_set('display_errors', 1); +error_reporting(-1); +qps_client_main($argv[1]); diff --git a/src/php/tests/qps/composer.json b/src/php/tests/qps/composer.json new file mode 100644 index 0000000000..0fc87098f5 --- /dev/null +++ b/src/php/tests/qps/composer.json @@ -0,0 +1,11 @@ +{ + "minimum-stability": "dev", + "require": { + "grpc/grpc": "dev-master" + }, + "autoload": { + "psr-4": { + "": "generated_code/" + } + } +} diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Control.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Control.php new file mode 100644 index 0000000000..efca18a0cb --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Control.php @@ -0,0 +1,127 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace GPBMetadata\Src\Proto\Grpc\Testing; + +class Control +{ + public static $is_initialized = false; + + public static function initOnce() { + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + + if (static::$is_initialized == true) { + return; + } + \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce(); + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + $pool->internalAddGeneratedFile(hex2bin( + "0add170a247372632f70726f746f2f677270632f74657374696e672f636f" . + "6e74726f6c2e70726f746f120c677270632e74657374696e671a25737263" . + "2f70726f746f2f677270632f74657374696e672f7061796c6f6164732e70" . + "726f746f1a227372632f70726f746f2f677270632f74657374696e672f73" . + "746174732e70726f746f22250a0d506f6973736f6e506172616d7312140a" . + "0c6f6666657265645f6c6f616418012001280122120a10436c6f7365644c" . + "6f6f70506172616d73227b0a0a4c6f6164506172616d7312350a0b636c6f" . + "7365645f6c6f6f7018012001280b321e2e677270632e74657374696e672e" . + "436c6f7365644c6f6f70506172616d734800122e0a07706f6973736f6e18" . + "022001280b321b2e677270632e74657374696e672e506f6973736f6e5061" . + "72616d73480042060a046c6f616422430a0e536563757269747950617261" . + "6d7312130a0b7573655f746573745f6361180120012808121c0a14736572" . + "7665725f686f73745f6f76657272696465180220012809224d0a0a436861" . + "6e6e656c417267120c0a046e616d6518012001280912130a097374725f76" . + "616c7565180220012809480012130a09696e745f76616c75651803200128" . + "05480042070a0576616c756522a0040a0c436c69656e74436f6e66696712" . + "160a0e7365727665725f74617267657473180120032809122d0a0b636c69" . + "656e745f7479706518022001280e32182e677270632e74657374696e672e" . + "436c69656e745479706512350a0f73656375726974795f706172616d7318" . + "032001280b321c2e677270632e74657374696e672e536563757269747950" . + "6172616d7312240a1c6f75747374616e64696e675f727063735f7065725f" . + "6368616e6e656c18042001280512170a0f636c69656e745f6368616e6e65" . + "6c73180520012805121c0a146173796e635f636c69656e745f7468726561" . + "647318072001280512270a087270635f7479706518082001280e32152e67" . + "7270632e74657374696e672e52706354797065122d0a0b6c6f61645f7061" . + "72616d73180a2001280b32182e677270632e74657374696e672e4c6f6164" . + "506172616d7312330a0e7061796c6f61645f636f6e666967180b2001280b" . + "321b2e677270632e74657374696e672e5061796c6f6164436f6e66696712" . + "370a10686973746f6772616d5f706172616d73180c2001280b321d2e6772" . + "70632e74657374696e672e486973746f6772616d506172616d7312110a09" . + "636f72655f6c697374180d2003280512120a0a636f72655f6c696d697418" . + "0e2001280512180a106f746865725f636c69656e745f617069180f200128" . + "09122e0a0c6368616e6e656c5f6172677318102003280b32182e67727063" . + "2e74657374696e672e4368616e6e656c41726722380a0c436c69656e7453" . + "746174757312280a05737461747318012001280b32192e677270632e7465" . + "7374696e672e436c69656e74537461747322150a044d61726b120d0a0572" . + "6573657418012001280822680a0a436c69656e7441726773122b0a057365" . + "74757018012001280b321a2e677270632e74657374696e672e436c69656e" . + "74436f6e666967480012220a046d61726b18022001280b32122e67727063" . + "2e74657374696e672e4d61726b480042090a076172677479706522b4020a" . + "0c536572766572436f6e666967122d0a0b7365727665725f747970651801" . + "2001280e32182e677270632e74657374696e672e53657276657254797065" . + "12350a0f73656375726974795f706172616d7318022001280b321c2e6772" . + "70632e74657374696e672e5365637572697479506172616d73120c0a0470" . + "6f7274180420012805121c0a146173796e635f7365727665725f74687265" . + "61647318072001280512120a0a636f72655f6c696d697418082001280512" . + "330a0e7061796c6f61645f636f6e66696718092001280b321b2e67727063" . + "2e74657374696e672e5061796c6f6164436f6e66696712110a09636f7265" . + "5f6c697374180a2003280512180a106f746865725f7365727665725f6170" . + "69180b20012809121c0a137265736f757263655f71756f74615f73697a65" . + "18e9072001280522680a0a53657276657241726773122b0a057365747570" . + "18012001280b321a2e677270632e74657374696e672e536572766572436f" . + "6e666967480012220a046d61726b18022001280b32122e677270632e7465" . + "7374696e672e4d61726b480042090a076172677479706522550a0c536572" . + "76657253746174757312280a05737461747318012001280b32192e677270" . + "632e74657374696e672e5365727665725374617473120c0a04706f727418" . + "0220012805120d0a05636f726573180320012805220d0a0b436f72655265" . + "7175657374221d0a0c436f7265526573706f6e7365120d0a05636f726573" . + "18012001280522060a04566f696422fd010a085363656e6172696f120c0a" . + "046e616d6518012001280912310a0d636c69656e745f636f6e6669671802" . + "2001280b321a2e677270632e74657374696e672e436c69656e74436f6e66" . + "696712130a0b6e756d5f636c69656e747318032001280512310a0d736572" . + "7665725f636f6e66696718042001280b321a2e677270632e74657374696e" . + "672e536572766572436f6e66696712130a0b6e756d5f7365727665727318" . + "052001280512160a0e7761726d75705f7365636f6e647318062001280512" . + "190a1162656e63686d61726b5f7365636f6e647318072001280512200a18" . + "737061776e5f6c6f63616c5f776f726b65725f636f756e74180820012805" . + "22360a095363656e6172696f7312290a097363656e6172696f7318012003" . + "280b32162e677270632e74657374696e672e5363656e6172696f22f8020a" . + "155363656e6172696f526573756c7453756d6d617279120b0a0371707318" . + "0120012801121b0a137170735f7065725f7365727665725f636f72651802" . + "20012801121a0a127365727665725f73797374656d5f74696d6518032001" . + "280112180a107365727665725f757365725f74696d65180420012801121a" . + "0a12636c69656e745f73797374656d5f74696d6518052001280112180a10" . + "636c69656e745f757365725f74696d6518062001280112120a0a6c617465" . + "6e63795f353018072001280112120a0a6c6174656e63795f393018082001" . + "280112120a0a6c6174656e63795f393518092001280112120a0a6c617465" . + "6e63795f3939180a2001280112130a0b6c6174656e63795f393939180b20" . + "01280112180a107365727665725f6370755f7573616765180c2001280112" . + "260a1e7375636365737366756c5f72657175657374735f7065725f736563" . + "6f6e64180d2001280112220a1a6661696c65645f72657175657374735f70" . + "65725f7365636f6e64180e200128012283030a0e5363656e6172696f5265" . + "73756c7412280a087363656e6172696f18012001280b32162e677270632e" . + "74657374696e672e5363656e6172696f122e0a096c6174656e6369657318" . + "022001280b321b2e677270632e74657374696e672e486973746f6772616d" . + "44617461122f0a0c636c69656e745f737461747318032003280b32192e67" . + "7270632e74657374696e672e436c69656e745374617473122f0a0c736572" . + "7665725f737461747318042003280b32192e677270632e74657374696e67" . + "2e536572766572537461747312140a0c7365727665725f636f7265731805" . + "2003280512340a0773756d6d61727918062001280b32232e677270632e74" . + "657374696e672e5363656e6172696f526573756c7453756d6d6172791216" . + "0a0e636c69656e745f7375636365737318072003280812160a0e73657276" . + "65725f7375636365737318082003280812390a0f726571756573745f7265" . + "73756c747318092003280b32202e677270632e74657374696e672e526571" . + "75657374526573756c74436f756e742a410a0a436c69656e745479706512" . + "0f0a0b53594e435f434c49454e54100012100a0c4153594e435f434c4945" . + "4e54100112100a0c4f544845525f434c49454e5410022a5b0a0a53657276" . + "657254797065120f0a0b53594e435f534552564552100012100a0c415359" . + "4e435f534552564552100112180a144153594e435f47454e455249435f53" . + "4552564552100212100a0c4f544845525f53455256455210032a230a0752" . + "70635479706512090a05554e4152591000120d0a0953545245414d494e47" . + "1001620670726f746f33" + )); + + static::$is_initialized = true; + } +} + diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php new file mode 100644 index 0000000000..c088002626 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php @@ -0,0 +1,69 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace GPBMetadata\Src\Proto\Grpc\Testing; + +class Messages +{ + public static $is_initialized = false; + + public static function initOnce() { + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + + if (static::$is_initialized == true) { + return; + } + $pool->internalAddGeneratedFile(hex2bin( + "0ad50a0a257372632f70726f746f2f677270632f74657374696e672f6d65" . + "7373616765732e70726f746f120c677270632e74657374696e67221a0a09" . + "426f6f6c56616c7565120d0a0576616c756518012001280822400a075061" . + "796c6f616412270a047479706518012001280e32192e677270632e746573" . + "74696e672e5061796c6f616454797065120c0a04626f647918022001280c" . + "222b0a0a4563686f537461747573120c0a04636f6465180120012805120f" . + "0a076d65737361676518022001280922ce020a0d53696d706c6552657175" . + "65737412300a0d726573706f6e73655f7479706518012001280e32192e67" . + "7270632e74657374696e672e5061796c6f61645479706512150a0d726573" . + "706f6e73655f73697a6518022001280512260a077061796c6f6164180320" . + "01280b32152e677270632e74657374696e672e5061796c6f616412150a0d" . + "66696c6c5f757365726e616d6518042001280812180a1066696c6c5f6f61" . + "7574685f73636f706518052001280812340a13726573706f6e73655f636f" . + "6d7072657373656418062001280b32172e677270632e74657374696e672e" . + "426f6f6c56616c756512310a0f726573706f6e73655f7374617475731807" . + "2001280b32182e677270632e74657374696e672e4563686f537461747573" . + "12320a116578706563745f636f6d7072657373656418082001280b32172e" . + "677270632e74657374696e672e426f6f6c56616c7565225f0a0e53696d70" . + "6c65526573706f6e736512260a077061796c6f616418012001280b32152e" . + "677270632e74657374696e672e5061796c6f616412100a08757365726e61" . + "6d6518022001280912130a0b6f617574685f73636f706518032001280922" . + "770a1953747265616d696e67496e70757443616c6c526571756573741226" . + "0a077061796c6f616418012001280b32152e677270632e74657374696e67" . + "2e5061796c6f616412320a116578706563745f636f6d7072657373656418" . + "022001280b32172e677270632e74657374696e672e426f6f6c56616c7565" . + "223d0a1a53747265616d696e67496e70757443616c6c526573706f6e7365" . + "121f0a17616767726567617465645f7061796c6f61645f73697a65180120" . + "01280522640a12526573706f6e7365506172616d6574657273120c0a0473" . + "697a6518012001280512130a0b696e74657276616c5f7573180220012805" . + "122b0a0a636f6d7072657373656418032001280b32172e677270632e7465" . + "7374696e672e426f6f6c56616c756522e8010a1a53747265616d696e674f" . + "757470757443616c6c5265717565737412300a0d726573706f6e73655f74" . + "79706518012001280e32192e677270632e74657374696e672e5061796c6f" . + "616454797065123d0a13726573706f6e73655f706172616d657465727318" . + "022003280b32202e677270632e74657374696e672e526573706f6e736550" . + "6172616d657465727312260a077061796c6f616418032001280b32152e67" . + "7270632e74657374696e672e5061796c6f616412310a0f726573706f6e73" . + "655f73746174757318072001280b32182e677270632e74657374696e672e" . + "4563686f53746174757322450a1b53747265616d696e674f757470757443" . + "616c6c526573706f6e736512260a077061796c6f616418012001280b3215" . + "2e677270632e74657374696e672e5061796c6f616422330a0f5265636f6e" . + "6e656374506172616d7312200a186d61785f7265636f6e6e6563745f6261" . + "636b6f66665f6d7318012001280522330a0d5265636f6e6e656374496e66" . + "6f120e0a0670617373656418012001280812120a0a6261636b6f66665f6d" . + "731802200328052a1f0a0b5061796c6f61645479706512100a0c434f4d50" . + "5245535341424c451000620670726f746f33" + )); + + static::$is_initialized = true; + } +} + diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Payloads.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Payloads.php new file mode 100644 index 0000000000..279fe00ac8 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Payloads.php @@ -0,0 +1,37 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/payloads.proto + +namespace GPBMetadata\Src\Proto\Grpc\Testing; + +class Payloads +{ + public static $is_initialized = false; + + public static function initOnce() { + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + + if (static::$is_initialized == true) { + return; + } + $pool->internalAddGeneratedFile(hex2bin( + "0a93030a257372632f70726f746f2f677270632f74657374696e672f7061" . + "796c6f6164732e70726f746f120c677270632e74657374696e6722370a10" . + "42797465427566666572506172616d7312100a087265715f73697a651801" . + "2001280512110a09726573705f73697a6518022001280522380a1153696d" . + "706c6550726f746f506172616d7312100a087265715f73697a6518012001" . + "280512110a09726573705f73697a6518022001280522140a12436f6d706c" . + "657850726f746f506172616d7322ca010a0d5061796c6f6164436f6e6669" . + "6712380a0e627974656275665f706172616d7318012001280b321e2e6772" . + "70632e74657374696e672e42797465427566666572506172616d73480012" . + "380a0d73696d706c655f706172616d7318022001280b321f2e677270632e" . + "74657374696e672e53696d706c6550726f746f506172616d734800123a0a" . + "0e636f6d706c65785f706172616d7318032001280b32202e677270632e74" . + "657374696e672e436f6d706c657850726f746f506172616d73480042090a" . + "077061796c6f6164620670726f746f33" + )); + + static::$is_initialized = true; + } +} + diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/ProxyService.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/ProxyService.php new file mode 100644 index 0000000000..e35944e1d8 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/ProxyService.php @@ -0,0 +1,34 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/proxy-service.proto + +namespace GPBMetadata\Src\Proto\Grpc\Testing; + +class ProxyService +{ + public static $is_initialized = false; + + public static function initOnce() { + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + + if (static::$is_initialized == true) { + return; + } + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + $pool->internalAddGeneratedFile(hex2bin( + "0a97020a2a7372632f70726f746f2f677270632f74657374696e672f7072" . + "6f78792d736572766963652e70726f746f120c677270632e74657374696e" . + "671a247372632f70726f746f2f677270632f74657374696e672f636f6e74" . + "726f6c2e70726f746f221c0a0950726f787953746174120f0a076c617465" . + "6e6379180120012801328e010a1250726f7879436c69656e745365727669" . + "6365123b0a09476574436f6e66696712122e677270632e74657374696e67" . + "2e566f69641a1a2e677270632e74657374696e672e436c69656e74436f6e" . + "666967123b0a0a5265706f727454696d6512172e677270632e7465737469" . + "6e672e50726f7879537461741a122e677270632e74657374696e672e566f" . + "69642801620670726f746f33" + )); + + static::$is_initialized = true; + } +} + diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Services.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Services.php new file mode 100644 index 0000000000..7a9439a5b9 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Services.php @@ -0,0 +1,45 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/services.proto + +namespace GPBMetadata\Src\Proto\Grpc\Testing; + +class Services +{ + public static $is_initialized = false; + + public static function initOnce() { + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + + if (static::$is_initialized == true) { + return; + } + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + $pool->internalAddGeneratedFile(hex2bin( + "0ad1040a257372632f70726f746f2f677270632f74657374696e672f7365" . + "7276696365732e70726f746f120c677270632e74657374696e671a257372" . + "632f70726f746f2f677270632f74657374696e672f6d657373616765732e" . + "70726f746f1a247372632f70726f746f2f677270632f74657374696e672f" . + "636f6e74726f6c2e70726f746f32aa010a1042656e63686d61726b536572" . + "7669636512460a09556e61727943616c6c121b2e677270632e7465737469" . + "6e672e53696d706c65526571756573741a1c2e677270632e74657374696e" . + "672e53696d706c65526573706f6e7365124e0a0d53747265616d696e6743" . + "616c6c121b2e677270632e74657374696e672e53696d706c655265717565" . + "73741a1c2e677270632e74657374696e672e53696d706c65526573706f6e" . + "7365280130013297020a0d576f726b65725365727669636512450a095275" . + "6e53657276657212182e677270632e74657374696e672e53657276657241" . + "7267731a1a2e677270632e74657374696e672e5365727665725374617475" . + "732801300112450a0952756e436c69656e7412182e677270632e74657374" . + "696e672e436c69656e74417267731a1a2e677270632e74657374696e672e" . + "436c69656e745374617475732801300112420a09436f7265436f756e7412" . + "192e677270632e74657374696e672e436f7265526571756573741a1a2e67" . + "7270632e74657374696e672e436f7265526573706f6e736512340a0a5175" . + "6974576f726b657212122e677270632e74657374696e672e566f69641a12" . + "2e677270632e74657374696e672e566f6964620670726f746f33" + )); + + static::$is_initialized = true; + } +} + diff --git a/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Stats.php b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Stats.php new file mode 100644 index 0000000000..99c0000a52 --- /dev/null +++ b/src/php/tests/qps/generated_code/GPBMetadata/Src/Proto/Grpc/Testing/Stats.php @@ -0,0 +1,44 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/stats.proto + +namespace GPBMetadata\Src\Proto\Grpc\Testing; + +class Stats +{ + public static $is_initialized = false; + + public static function initOnce() { + $pool = \Google\Protobuf\Internal\DescriptorPool::getGeneratedPool(); + + if (static::$is_initialized == true) { + return; + } + $pool->internalAddGeneratedFile(hex2bin( + "0adf040a227372632f70726f746f2f677270632f74657374696e672f7374" . + "6174732e70726f746f120c677270632e74657374696e67227a0a0b536572" . + "766572537461747312140a0c74696d655f656c6170736564180120012801" . + "12110a0974696d655f7573657218022001280112130a0b74696d655f7379" . + "7374656d18032001280112160a0e746f74616c5f6370755f74696d651804" . + "2001280412150a0d69646c655f6370755f74696d65180520012804223b0a" . + "0f486973746f6772616d506172616d7312120a0a7265736f6c7574696f6e" . + "18012001280112140a0c6d61785f706f737369626c651802200128012277" . + "0a0d486973746f6772616d44617461120e0a066275636b65741801200328" . + "0d12100a086d696e5f7365656e18022001280112100a086d61785f736565" . + "6e180320012801120b0a0373756d18042001280112160a0e73756d5f6f66" . + "5f73717561726573180520012801120d0a05636f756e7418062001280122" . + "380a1252657175657374526573756c74436f756e7412130a0b7374617475" . + "735f636f6465180120012805120d0a05636f756e7418022001280322b601" . + "0a0b436c69656e745374617473122e0a096c6174656e6369657318012001" . + "280b321b2e677270632e74657374696e672e486973746f6772616d446174" . + "6112140a0c74696d655f656c617073656418022001280112110a0974696d" . + "655f7573657218032001280112130a0b74696d655f73797374656d180420" . + "01280112390a0f726571756573745f726573756c747318052003280b3220" . + "2e677270632e74657374696e672e52657175657374526573756c74436f75" . + "6e74620670726f746f33" + )); + + static::$is_initialized = true; + } +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/BenchmarkServiceClient.php b/src/php/tests/qps/generated_code/Grpc/Testing/BenchmarkServiceClient.php new file mode 100644 index 0000000000..daf17800cd --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/BenchmarkServiceClient.php @@ -0,0 +1,78 @@ +<?php +// GENERATED CODE -- DO NOT EDIT! + +// Original file comments: +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// An integration test service that covers all the method signature permutations +// of unary/streaming requests/responses. +namespace Grpc\Testing { + + class BenchmarkServiceClient extends \Grpc\BaseStub { + + /** + * @param string $hostname hostname + * @param array $opts channel options + * @param Grpc\Channel $channel (optional) re-use channel object + */ + public function __construct($hostname, $opts, $channel = null) { + parent::__construct($hostname, $opts, $channel); + } + + /** + * One request followed by one response. + * The server returns the client payload as-is. + * @param \Grpc\Testing\SimpleRequest $argument input argument + * @param array $metadata metadata + * @param array $options call options + */ + public function UnaryCall(\Grpc\Testing\SimpleRequest $argument, + $metadata = [], $options = []) { + return $this->_simpleRequest('/grpc.testing.BenchmarkService/UnaryCall', + $argument, + ['\Grpc\Testing\SimpleResponse', 'decode'], + $metadata, $options); + } + + /** + * One request followed by one response. + * The server returns the client payload as-is. + * @param array $metadata metadata + * @param array $options call options + */ + public function StreamingCall($metadata = [], $options = []) { + return $this->_bidiRequest('/grpc.testing.BenchmarkService/StreamingCall', + ['\Grpc\Testing\SimpleResponse','decode'], + $metadata, $options); + } + + } + +} diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/BoolValue.php b/src/php/tests/qps/generated_code/Grpc/Testing/BoolValue.php new file mode 100644 index 0000000000..f0497accfb --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/BoolValue.php @@ -0,0 +1,62 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * TODO(dgq): Go back to using well-known types once + * https://github.com/grpc/grpc/issues/6980 has been fixed. + * import "google/protobuf/wrappers.proto"; + * </pre> + * + * Protobuf type <code>grpc.testing.BoolValue</code> + */ +class BoolValue extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * The bool value. + * </pre> + * + * <code>bool value = 1;</code> + */ + private $value = false; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * The bool value. + * </pre> + * + * <code>bool value = 1;</code> + */ + public function getValue() + { + return $this->value; + } + + /** + * <pre> + * The bool value. + * </pre> + * + * <code>bool value = 1;</code> + */ + public function setValue($var) + { + GPBUtil::checkBool($var); + $this->value = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ByteBufferParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/ByteBufferParams.php new file mode 100644 index 0000000000..0057d38748 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ByteBufferParams.php @@ -0,0 +1,65 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/payloads.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ByteBufferParams</code> + */ +class ByteBufferParams extends \Google\Protobuf\Internal\Message +{ + /** + * <code>int32 req_size = 1;</code> + */ + private $req_size = 0; + /** + * <code>int32 resp_size = 2;</code> + */ + private $resp_size = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce(); + parent::__construct(); + } + + /** + * <code>int32 req_size = 1;</code> + */ + public function getReqSize() + { + return $this->req_size; + } + + /** + * <code>int32 req_size = 1;</code> + */ + public function setReqSize($var) + { + GPBUtil::checkInt32($var); + $this->req_size = $var; + } + + /** + * <code>int32 resp_size = 2;</code> + */ + public function getRespSize() + { + return $this->resp_size; + } + + /** + * <code>int32 resp_size = 2;</code> + */ + public function setRespSize($var) + { + GPBUtil::checkInt32($var); + $this->resp_size = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ChannelArg.php b/src/php/tests/qps/generated_code/Grpc/Testing/ChannelArg.php new file mode 100644 index 0000000000..d2fe3ae5ff --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ChannelArg.php @@ -0,0 +1,84 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ChannelArg</code> + */ +class ChannelArg extends \Google\Protobuf\Internal\Message +{ + /** + * <code>string name = 1;</code> + */ + private $name = ''; + protected $value; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>string name = 1;</code> + */ + public function getName() + { + return $this->name; + } + + /** + * <code>string name = 1;</code> + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + } + + /** + * <code>string str_value = 2;</code> + */ + public function getStrValue() + { + return $this->readOneof(2); + } + + /** + * <code>string str_value = 2;</code> + */ + public function setStrValue($var) + { + GPBUtil::checkString($var, True); + $this->writeOneof(2, $var); + } + + /** + * <code>int32 int_value = 3;</code> + */ + public function getIntValue() + { + return $this->readOneof(3); + } + + /** + * <code>int32 int_value = 3;</code> + */ + public function setIntValue($var) + { + GPBUtil::checkInt32($var); + $this->writeOneof(3, $var); + } + + public function getValue() + { + return $this->whichOneof("value"); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientArgs.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientArgs.php new file mode 100644 index 0000000000..c878c5a7bc --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientArgs.php @@ -0,0 +1,63 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ClientArgs</code> + */ +class ClientArgs extends \Google\Protobuf\Internal\Message +{ + protected $argtype; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>.grpc.testing.ClientConfig setup = 1;</code> + */ + public function getSetup() + { + return $this->readOneof(1); + } + + /** + * <code>.grpc.testing.ClientConfig setup = 1;</code> + */ + public function setSetup(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ClientConfig::class); + $this->writeOneof(1, $var); + } + + /** + * <code>.grpc.testing.Mark mark = 2;</code> + */ + public function getMark() + { + return $this->readOneof(2); + } + + /** + * <code>.grpc.testing.Mark mark = 2;</code> + */ + public function setMark(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Mark::class); + $this->writeOneof(2, $var); + } + + public function getArgtype() + { + return $this->whichOneof("argtype"); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientConfig.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientConfig.php new file mode 100644 index 0000000000..52d6a75fb0 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientConfig.php @@ -0,0 +1,407 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ClientConfig</code> + */ +class ClientConfig extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * List of targets to connect to. At least one target needs to be specified. + * </pre> + * + * <code>repeated string server_targets = 1;</code> + */ + private $server_targets; + /** + * <code>.grpc.testing.ClientType client_type = 2;</code> + */ + private $client_type = 0; + /** + * <code>.grpc.testing.SecurityParams security_params = 3;</code> + */ + private $security_params = null; + /** + * <pre> + * How many concurrent RPCs to start for each channel. + * For synchronous client, use a separate thread for each outstanding RPC. + * </pre> + * + * <code>int32 outstanding_rpcs_per_channel = 4;</code> + */ + private $outstanding_rpcs_per_channel = 0; + /** + * <pre> + * Number of independent client channels to create. + * i-th channel will connect to server_target[i % server_targets.size()] + * </pre> + * + * <code>int32 client_channels = 5;</code> + */ + private $client_channels = 0; + /** + * <pre> + * Only for async client. Number of threads to use to start/manage RPCs. + * </pre> + * + * <code>int32 async_client_threads = 7;</code> + */ + private $async_client_threads = 0; + /** + * <code>.grpc.testing.RpcType rpc_type = 8;</code> + */ + private $rpc_type = 0; + /** + * <pre> + * The requested load for the entire client (aggregated over all the threads). + * </pre> + * + * <code>.grpc.testing.LoadParams load_params = 10;</code> + */ + private $load_params = null; + /** + * <code>.grpc.testing.PayloadConfig payload_config = 11;</code> + */ + private $payload_config = null; + /** + * <code>.grpc.testing.HistogramParams histogram_params = 12;</code> + */ + private $histogram_params = null; + /** + * <pre> + * Specify the cores we should run the client on, if desired + * </pre> + * + * <code>repeated int32 core_list = 13;</code> + */ + private $core_list; + /** + * <code>int32 core_limit = 14;</code> + */ + private $core_limit = 0; + /** + * <pre> + * If we use an OTHER_CLIENT client_type, this string gives more detail + * </pre> + * + * <code>string other_client_api = 15;</code> + */ + private $other_client_api = ''; + /** + * <code>repeated .grpc.testing.ChannelArg channel_args = 16;</code> + */ + private $channel_args; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * List of targets to connect to. At least one target needs to be specified. + * </pre> + * + * <code>repeated string server_targets = 1;</code> + */ + public function getServerTargets() + { + return $this->server_targets; + } + + /** + * <pre> + * List of targets to connect to. At least one target needs to be specified. + * </pre> + * + * <code>repeated string server_targets = 1;</code> + */ + public function setServerTargets(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING); + $this->server_targets = $var; + } + + /** + * <code>.grpc.testing.ClientType client_type = 2;</code> + */ + public function getClientType() + { + return $this->client_type; + } + + /** + * <code>.grpc.testing.ClientType client_type = 2;</code> + */ + public function setClientType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\ClientType::class); + $this->client_type = $var; + } + + /** + * <code>.grpc.testing.SecurityParams security_params = 3;</code> + */ + public function getSecurityParams() + { + return $this->security_params; + } + + /** + * <code>.grpc.testing.SecurityParams security_params = 3;</code> + */ + public function setSecurityParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\SecurityParams::class); + $this->security_params = $var; + } + + /** + * <pre> + * How many concurrent RPCs to start for each channel. + * For synchronous client, use a separate thread for each outstanding RPC. + * </pre> + * + * <code>int32 outstanding_rpcs_per_channel = 4;</code> + */ + public function getOutstandingRpcsPerChannel() + { + return $this->outstanding_rpcs_per_channel; + } + + /** + * <pre> + * How many concurrent RPCs to start for each channel. + * For synchronous client, use a separate thread for each outstanding RPC. + * </pre> + * + * <code>int32 outstanding_rpcs_per_channel = 4;</code> + */ + public function setOutstandingRpcsPerChannel($var) + { + GPBUtil::checkInt32($var); + $this->outstanding_rpcs_per_channel = $var; + } + + /** + * <pre> + * Number of independent client channels to create. + * i-th channel will connect to server_target[i % server_targets.size()] + * </pre> + * + * <code>int32 client_channels = 5;</code> + */ + public function getClientChannels() + { + return $this->client_channels; + } + + /** + * <pre> + * Number of independent client channels to create. + * i-th channel will connect to server_target[i % server_targets.size()] + * </pre> + * + * <code>int32 client_channels = 5;</code> + */ + public function setClientChannels($var) + { + GPBUtil::checkInt32($var); + $this->client_channels = $var; + } + + /** + * <pre> + * Only for async client. Number of threads to use to start/manage RPCs. + * </pre> + * + * <code>int32 async_client_threads = 7;</code> + */ + public function getAsyncClientThreads() + { + return $this->async_client_threads; + } + + /** + * <pre> + * Only for async client. Number of threads to use to start/manage RPCs. + * </pre> + * + * <code>int32 async_client_threads = 7;</code> + */ + public function setAsyncClientThreads($var) + { + GPBUtil::checkInt32($var); + $this->async_client_threads = $var; + } + + /** + * <code>.grpc.testing.RpcType rpc_type = 8;</code> + */ + public function getRpcType() + { + return $this->rpc_type; + } + + /** + * <code>.grpc.testing.RpcType rpc_type = 8;</code> + */ + public function setRpcType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\RpcType::class); + $this->rpc_type = $var; + } + + /** + * <pre> + * The requested load for the entire client (aggregated over all the threads). + * </pre> + * + * <code>.grpc.testing.LoadParams load_params = 10;</code> + */ + public function getLoadParams() + { + return $this->load_params; + } + + /** + * <pre> + * The requested load for the entire client (aggregated over all the threads). + * </pre> + * + * <code>.grpc.testing.LoadParams load_params = 10;</code> + */ + public function setLoadParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\LoadParams::class); + $this->load_params = $var; + } + + /** + * <code>.grpc.testing.PayloadConfig payload_config = 11;</code> + */ + public function getPayloadConfig() + { + return $this->payload_config; + } + + /** + * <code>.grpc.testing.PayloadConfig payload_config = 11;</code> + */ + public function setPayloadConfig(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\PayloadConfig::class); + $this->payload_config = $var; + } + + /** + * <code>.grpc.testing.HistogramParams histogram_params = 12;</code> + */ + public function getHistogramParams() + { + return $this->histogram_params; + } + + /** + * <code>.grpc.testing.HistogramParams histogram_params = 12;</code> + */ + public function setHistogramParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\HistogramParams::class); + $this->histogram_params = $var; + } + + /** + * <pre> + * Specify the cores we should run the client on, if desired + * </pre> + * + * <code>repeated int32 core_list = 13;</code> + */ + public function getCoreList() + { + return $this->core_list; + } + + /** + * <pre> + * Specify the cores we should run the client on, if desired + * </pre> + * + * <code>repeated int32 core_list = 13;</code> + */ + public function setCoreList(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->core_list = $var; + } + + /** + * <code>int32 core_limit = 14;</code> + */ + public function getCoreLimit() + { + return $this->core_limit; + } + + /** + * <code>int32 core_limit = 14;</code> + */ + public function setCoreLimit($var) + { + GPBUtil::checkInt32($var); + $this->core_limit = $var; + } + + /** + * <pre> + * If we use an OTHER_CLIENT client_type, this string gives more detail + * </pre> + * + * <code>string other_client_api = 15;</code> + */ + public function getOtherClientApi() + { + return $this->other_client_api; + } + + /** + * <pre> + * If we use an OTHER_CLIENT client_type, this string gives more detail + * </pre> + * + * <code>string other_client_api = 15;</code> + */ + public function setOtherClientApi($var) + { + GPBUtil::checkString($var, True); + $this->other_client_api = $var; + } + + /** + * <code>repeated .grpc.testing.ChannelArg channel_args = 16;</code> + */ + public function getChannelArgs() + { + return $this->channel_args; + } + + /** + * <code>repeated .grpc.testing.ChannelArg channel_args = 16;</code> + */ + public function setChannelArgs(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ChannelArg::class); + $this->channel_args = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientStats.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStats.php new file mode 100644 index 0000000000..8b9a0c33a4 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStats.php @@ -0,0 +1,164 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/stats.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ClientStats</code> + */ +class ClientStats extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Latency histogram. Data points are in nanoseconds. + * </pre> + * + * <code>.grpc.testing.HistogramData latencies = 1;</code> + */ + private $latencies = null; + /** + * <pre> + * See ServerStats for details. + * </pre> + * + * <code>double time_elapsed = 2;</code> + */ + private $time_elapsed = 0.0; + /** + * <code>double time_user = 3;</code> + */ + private $time_user = 0.0; + /** + * <code>double time_system = 4;</code> + */ + private $time_system = 0.0; + /** + * <pre> + * Number of failed requests (one row per status code seen) + * </pre> + * + * <code>repeated .grpc.testing.RequestResultCount request_results = 5;</code> + */ + private $request_results; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Latency histogram. Data points are in nanoseconds. + * </pre> + * + * <code>.grpc.testing.HistogramData latencies = 1;</code> + */ + public function getLatencies() + { + return $this->latencies; + } + + /** + * <pre> + * Latency histogram. Data points are in nanoseconds. + * </pre> + * + * <code>.grpc.testing.HistogramData latencies = 1;</code> + */ + public function setLatencies(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\HistogramData::class); + $this->latencies = $var; + } + + /** + * <pre> + * See ServerStats for details. + * </pre> + * + * <code>double time_elapsed = 2;</code> + */ + public function getTimeElapsed() + { + return $this->time_elapsed; + } + + /** + * <pre> + * See ServerStats for details. + * </pre> + * + * <code>double time_elapsed = 2;</code> + */ + public function setTimeElapsed($var) + { + GPBUtil::checkDouble($var); + $this->time_elapsed = $var; + } + + /** + * <code>double time_user = 3;</code> + */ + public function getTimeUser() + { + return $this->time_user; + } + + /** + * <code>double time_user = 3;</code> + */ + public function setTimeUser($var) + { + GPBUtil::checkDouble($var); + $this->time_user = $var; + } + + /** + * <code>double time_system = 4;</code> + */ + public function getTimeSystem() + { + return $this->time_system; + } + + /** + * <code>double time_system = 4;</code> + */ + public function setTimeSystem($var) + { + GPBUtil::checkDouble($var); + $this->time_system = $var; + } + + /** + * <pre> + * Number of failed requests (one row per status code seen) + * </pre> + * + * <code>repeated .grpc.testing.RequestResultCount request_results = 5;</code> + */ + public function getRequestResults() + { + return $this->request_results; + } + + /** + * <pre> + * Number of failed requests (one row per status code seen) + * </pre> + * + * <code>repeated .grpc.testing.RequestResultCount request_results = 5;</code> + */ + public function setRequestResults(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\RequestResultCount::class); + $this->request_results = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientStatus.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStatus.php new file mode 100644 index 0000000000..a59f87a962 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientStatus.php @@ -0,0 +1,44 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ClientStatus</code> + */ +class ClientStatus extends \Google\Protobuf\Internal\Message +{ + /** + * <code>.grpc.testing.ClientStats stats = 1;</code> + */ + private $stats = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>.grpc.testing.ClientStats stats = 1;</code> + */ + public function getStats() + { + return $this->stats; + } + + /** + * <code>.grpc.testing.ClientStats stats = 1;</code> + */ + public function setStats(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ClientStats::class); + $this->stats = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClientType.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClientType.php new file mode 100644 index 0000000000..4f59da992f --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClientType.php @@ -0,0 +1,34 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +/** + * Protobuf enum <code>grpc.testing.ClientType</code> + */ +class ClientType +{ + /** + * <pre> + * Many languages support a basic distinction between using + * sync or async client, and this allows the specification + * </pre> + * + * <code>SYNC_CLIENT = 0;</code> + */ + const SYNC_CLIENT = 0; + /** + * <code>ASYNC_CLIENT = 1;</code> + */ + const ASYNC_CLIENT = 1; + /** + * <pre> + * used for some language-specific variants + * </pre> + * + * <code>OTHER_CLIENT = 2;</code> + */ + const OTHER_CLIENT = 2; +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ClosedLoopParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/ClosedLoopParams.php new file mode 100644 index 0000000000..53f2948af2 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ClosedLoopParams.php @@ -0,0 +1,28 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Once an RPC finishes, immediately start a new one. + * No configuration parameters needed. + * </pre> + * + * Protobuf type <code>grpc.testing.ClosedLoopParams</code> + */ +class ClosedLoopParams extends \Google\Protobuf\Internal\Message +{ + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ComplexProtoParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/ComplexProtoParams.php new file mode 100644 index 0000000000..6d990f1b06 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ComplexProtoParams.php @@ -0,0 +1,28 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/payloads.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * TODO (vpai): Fill this in once the details of complex, representative + * protos are decided + * </pre> + * + * Protobuf type <code>grpc.testing.ComplexProtoParams</code> + */ +class ComplexProtoParams extends \Google\Protobuf\Internal\Message +{ + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce(); + parent::__construct(); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/CoreRequest.php b/src/php/tests/qps/generated_code/Grpc/Testing/CoreRequest.php new file mode 100644 index 0000000000..2e078b3fcd --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/CoreRequest.php @@ -0,0 +1,23 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.CoreRequest</code> + */ +class CoreRequest extends \Google\Protobuf\Internal\Message +{ + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/CoreResponse.php b/src/php/tests/qps/generated_code/Grpc/Testing/CoreResponse.php new file mode 100644 index 0000000000..85cb3418ad --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/CoreResponse.php @@ -0,0 +1,56 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.CoreResponse</code> + */ +class CoreResponse extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Number of cores available on the server + * </pre> + * + * <code>int32 cores = 1;</code> + */ + private $cores = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Number of cores available on the server + * </pre> + * + * <code>int32 cores = 1;</code> + */ + public function getCores() + { + return $this->cores; + } + + /** + * <pre> + * Number of cores available on the server + * </pre> + * + * <code>int32 cores = 1;</code> + */ + public function setCores($var) + { + GPBUtil::checkInt32($var); + $this->cores = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/EchoStatus.php b/src/php/tests/qps/generated_code/Grpc/Testing/EchoStatus.php new file mode 100644 index 0000000000..27340fb0ef --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/EchoStatus.php @@ -0,0 +1,70 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * A protobuf representation for grpc status. This is used by test + * clients to specify a status that the server should attempt to return. + * </pre> + * + * Protobuf type <code>grpc.testing.EchoStatus</code> + */ +class EchoStatus extends \Google\Protobuf\Internal\Message +{ + /** + * <code>int32 code = 1;</code> + */ + private $code = 0; + /** + * <code>string message = 2;</code> + */ + private $message = ''; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <code>int32 code = 1;</code> + */ + public function getCode() + { + return $this->code; + } + + /** + * <code>int32 code = 1;</code> + */ + public function setCode($var) + { + GPBUtil::checkInt32($var); + $this->code = $var; + } + + /** + * <code>string message = 2;</code> + */ + public function getMessage() + { + return $this->message; + } + + /** + * <code>string message = 2;</code> + */ + public function setMessage($var) + { + GPBUtil::checkString($var, True); + $this->message = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/HistogramData.php b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramData.php new file mode 100644 index 0000000000..056da6e5de --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramData.php @@ -0,0 +1,153 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/stats.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Histogram data based on grpc/support/histogram.c + * </pre> + * + * Protobuf type <code>grpc.testing.HistogramData</code> + */ +class HistogramData extends \Google\Protobuf\Internal\Message +{ + /** + * <code>repeated uint32 bucket = 1;</code> + */ + private $bucket; + /** + * <code>double min_seen = 2;</code> + */ + private $min_seen = 0.0; + /** + * <code>double max_seen = 3;</code> + */ + private $max_seen = 0.0; + /** + * <code>double sum = 4;</code> + */ + private $sum = 0.0; + /** + * <code>double sum_of_squares = 5;</code> + */ + private $sum_of_squares = 0.0; + /** + * <code>double count = 6;</code> + */ + private $count = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + * <code>repeated uint32 bucket = 1;</code> + */ + public function getBucket() + { + return $this->bucket; + } + + /** + * <code>repeated uint32 bucket = 1;</code> + */ + public function setBucket(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::UINT32); + $this->bucket = $var; + } + + /** + * <code>double min_seen = 2;</code> + */ + public function getMinSeen() + { + return $this->min_seen; + } + + /** + * <code>double min_seen = 2;</code> + */ + public function setMinSeen($var) + { + GPBUtil::checkDouble($var); + $this->min_seen = $var; + } + + /** + * <code>double max_seen = 3;</code> + */ + public function getMaxSeen() + { + return $this->max_seen; + } + + /** + * <code>double max_seen = 3;</code> + */ + public function setMaxSeen($var) + { + GPBUtil::checkDouble($var); + $this->max_seen = $var; + } + + /** + * <code>double sum = 4;</code> + */ + public function getSum() + { + return $this->sum; + } + + /** + * <code>double sum = 4;</code> + */ + public function setSum($var) + { + GPBUtil::checkDouble($var); + $this->sum = $var; + } + + /** + * <code>double sum_of_squares = 5;</code> + */ + public function getSumOfSquares() + { + return $this->sum_of_squares; + } + + /** + * <code>double sum_of_squares = 5;</code> + */ + public function setSumOfSquares($var) + { + GPBUtil::checkDouble($var); + $this->sum_of_squares = $var; + } + + /** + * <code>double count = 6;</code> + */ + public function getCount() + { + return $this->count; + } + + /** + * <code>double count = 6;</code> + */ + public function setCount($var) + { + GPBUtil::checkDouble($var); + $this->count = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/HistogramParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramParams.php new file mode 100644 index 0000000000..836c94b01d --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/HistogramParams.php @@ -0,0 +1,93 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/stats.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Histogram params based on grpc/support/histogram.c + * </pre> + * + * Protobuf type <code>grpc.testing.HistogramParams</code> + */ +class HistogramParams extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * first bucket is [0, 1 + resolution) + * </pre> + * + * <code>double resolution = 1;</code> + */ + private $resolution = 0.0; + /** + * <pre> + * use enough buckets to allow this value + * </pre> + * + * <code>double max_possible = 2;</code> + */ + private $max_possible = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * first bucket is [0, 1 + resolution) + * </pre> + * + * <code>double resolution = 1;</code> + */ + public function getResolution() + { + return $this->resolution; + } + + /** + * <pre> + * first bucket is [0, 1 + resolution) + * </pre> + * + * <code>double resolution = 1;</code> + */ + public function setResolution($var) + { + GPBUtil::checkDouble($var); + $this->resolution = $var; + } + + /** + * <pre> + * use enough buckets to allow this value + * </pre> + * + * <code>double max_possible = 2;</code> + */ + public function getMaxPossible() + { + return $this->max_possible; + } + + /** + * <pre> + * use enough buckets to allow this value + * </pre> + * + * <code>double max_possible = 2;</code> + */ + public function setMaxPossible($var) + { + GPBUtil::checkDouble($var); + $this->max_possible = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/LoadParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/LoadParams.php new file mode 100644 index 0000000000..1f32e49c8a --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/LoadParams.php @@ -0,0 +1,63 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.LoadParams</code> + */ +class LoadParams extends \Google\Protobuf\Internal\Message +{ + protected $load; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>.grpc.testing.ClosedLoopParams closed_loop = 1;</code> + */ + public function getClosedLoop() + { + return $this->readOneof(1); + } + + /** + * <code>.grpc.testing.ClosedLoopParams closed_loop = 1;</code> + */ + public function setClosedLoop(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ClosedLoopParams::class); + $this->writeOneof(1, $var); + } + + /** + * <code>.grpc.testing.PoissonParams poisson = 2;</code> + */ + public function getPoisson() + { + return $this->readOneof(2); + } + + /** + * <code>.grpc.testing.PoissonParams poisson = 2;</code> + */ + public function setPoisson(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\PoissonParams::class); + $this->writeOneof(2, $var); + } + + public function getLoad() + { + return $this->whichOneof("load"); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Mark.php b/src/php/tests/qps/generated_code/Grpc/Testing/Mark.php new file mode 100644 index 0000000000..ce006efacd --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Mark.php @@ -0,0 +1,60 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Request current stats + * </pre> + * + * Protobuf type <code>grpc.testing.Mark</code> + */ +class Mark extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * if true, the stats will be reset after taking their snapshot. + * </pre> + * + * <code>bool reset = 1;</code> + */ + private $reset = false; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * if true, the stats will be reset after taking their snapshot. + * </pre> + * + * <code>bool reset = 1;</code> + */ + public function getReset() + { + return $this->reset; + } + + /** + * <pre> + * if true, the stats will be reset after taking their snapshot. + * </pre> + * + * <code>bool reset = 1;</code> + */ + public function setReset($var) + { + GPBUtil::checkBool($var); + $this->reset = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Payload.php b/src/php/tests/qps/generated_code/Grpc/Testing/Payload.php new file mode 100644 index 0000000000..d17c271af7 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Payload.php @@ -0,0 +1,96 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * A block of data, to simply increase gRPC message size. + * </pre> + * + * Protobuf type <code>grpc.testing.Payload</code> + */ +class Payload extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * The type of data in body. + * </pre> + * + * <code>.grpc.testing.PayloadType type = 1;</code> + */ + private $type = 0; + /** + * <pre> + * Primary contents of payload. + * </pre> + * + * <code>bytes body = 2;</code> + */ + private $body = ''; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * The type of data in body. + * </pre> + * + * <code>.grpc.testing.PayloadType type = 1;</code> + */ + public function getType() + { + return $this->type; + } + + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * The type of data in body. + * </pre> + * + * <code>.grpc.testing.PayloadType type = 1;</code> + */ + public function setType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class); + $this->type = $var; + } + + /** + * <pre> + * Primary contents of payload. + * </pre> + * + * <code>bytes body = 2;</code> + */ + public function getBody() + { + return $this->body; + } + + /** + * <pre> + * Primary contents of payload. + * </pre> + * + * <code>bytes body = 2;</code> + */ + public function setBody($var) + { + GPBUtil::checkString($var, False); + $this->body = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/PayloadConfig.php b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadConfig.php new file mode 100644 index 0000000000..a2fe7109ba --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadConfig.php @@ -0,0 +1,80 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/payloads.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.PayloadConfig</code> + */ +class PayloadConfig extends \Google\Protobuf\Internal\Message +{ + protected $payload; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce(); + parent::__construct(); + } + + /** + * <code>.grpc.testing.ByteBufferParams bytebuf_params = 1;</code> + */ + public function getBytebufParams() + { + return $this->readOneof(1); + } + + /** + * <code>.grpc.testing.ByteBufferParams bytebuf_params = 1;</code> + */ + public function setBytebufParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ByteBufferParams::class); + $this->writeOneof(1, $var); + } + + /** + * <code>.grpc.testing.SimpleProtoParams simple_params = 2;</code> + */ + public function getSimpleParams() + { + return $this->readOneof(2); + } + + /** + * <code>.grpc.testing.SimpleProtoParams simple_params = 2;</code> + */ + public function setSimpleParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\SimpleProtoParams::class); + $this->writeOneof(2, $var); + } + + /** + * <code>.grpc.testing.ComplexProtoParams complex_params = 3;</code> + */ + public function getComplexParams() + { + return $this->readOneof(3); + } + + /** + * <code>.grpc.testing.ComplexProtoParams complex_params = 3;</code> + */ + public function setComplexParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ComplexProtoParams::class); + $this->writeOneof(3, $var); + } + + public function getPayload() + { + return $this->whichOneof("payload"); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/PayloadType.php b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadType.php new file mode 100644 index 0000000000..189ef034b4 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/PayloadType.php @@ -0,0 +1,26 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +/** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * The type of payload that should be returned. + * </pre> + * + * Protobuf enum <code>grpc.testing.PayloadType</code> + */ +class PayloadType +{ + /** + * <pre> + * Compressable text format. + * </pre> + * + * <code>COMPRESSABLE = 0;</code> + */ + const COMPRESSABLE = 0; +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/PoissonParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/PoissonParams.php new file mode 100644 index 0000000000..d64edd45f0 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/PoissonParams.php @@ -0,0 +1,61 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Parameters of poisson process distribution, which is a good representation + * of activity coming in from independent identical stationary sources. + * </pre> + * + * Protobuf type <code>grpc.testing.PoissonParams</code> + */ +class PoissonParams extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * The rate of arrivals (a.k.a. lambda parameter of the exp distribution). + * </pre> + * + * <code>double offered_load = 1;</code> + */ + private $offered_load = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * The rate of arrivals (a.k.a. lambda parameter of the exp distribution). + * </pre> + * + * <code>double offered_load = 1;</code> + */ + public function getOfferedLoad() + { + return $this->offered_load; + } + + /** + * <pre> + * The rate of arrivals (a.k.a. lambda parameter of the exp distribution). + * </pre> + * + * <code>double offered_load = 1;</code> + */ + public function setOfferedLoad($var) + { + GPBUtil::checkDouble($var); + $this->offered_load = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ProxyClientServiceClient.php b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyClientServiceClient.php new file mode 100644 index 0000000000..23c041b470 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyClientServiceClient.php @@ -0,0 +1,72 @@ +<?php +// GENERATED CODE -- DO NOT EDIT! + +// Original file comments: +// Copyright 2017, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +namespace Grpc\Testing { + + class ProxyClientServiceClient extends \Grpc\BaseStub { + + /** + * @param string $hostname hostname + * @param array $opts channel options + * @param Grpc\Channel $channel (optional) re-use channel object + */ + public function __construct($hostname, $opts, $channel = null) { + parent::__construct($hostname, $opts, $channel); + } + + /** + * @param \Grpc\Testing\Void $argument input argument + * @param array $metadata metadata + * @param array $options call options + */ + public function GetConfig(\Grpc\Testing\Void $argument, + $metadata = [], $options = []) { + return $this->_simpleRequest('/grpc.testing.ProxyClientService/GetConfig', + $argument, + ['\Grpc\Testing\ClientConfig', 'decode'], + $metadata, $options); + } + + /** + * @param array $metadata metadata + * @param array $options call options + */ + public function ReportTime($metadata = [], $options = []) { + return $this->_clientStreamRequest('/grpc.testing.ProxyClientService/ReportTime', + ['\Grpc\Testing\Void','decode'], + $metadata, $options); + } + + } + +} diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ProxyStat.php b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyStat.php new file mode 100644 index 0000000000..ed43be99ce --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ProxyStat.php @@ -0,0 +1,44 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/proxy-service.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ProxyStat</code> + */ +class ProxyStat extends \Google\Protobuf\Internal\Message +{ + /** + * <code>double latency = 1;</code> + */ + private $latency = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\ProxyService::initOnce(); + parent::__construct(); + } + + /** + * <code>double latency = 1;</code> + */ + public function getLatency() + { + return $this->latency; + } + + /** + * <code>double latency = 1;</code> + */ + public function setLatency($var) + { + GPBUtil::checkDouble($var); + $this->latency = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectInfo.php b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectInfo.php new file mode 100644 index 0000000000..dfaaa606c3 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectInfo.php @@ -0,0 +1,71 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * For reconnect interop test only. + * Server tells client whether its reconnects are following the spec and the + * reconnect backoffs it saw. + * </pre> + * + * Protobuf type <code>grpc.testing.ReconnectInfo</code> + */ +class ReconnectInfo extends \Google\Protobuf\Internal\Message +{ + /** + * <code>bool passed = 1;</code> + */ + private $passed = false; + /** + * <code>repeated int32 backoff_ms = 2;</code> + */ + private $backoff_ms; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <code>bool passed = 1;</code> + */ + public function getPassed() + { + return $this->passed; + } + + /** + * <code>bool passed = 1;</code> + */ + public function setPassed($var) + { + GPBUtil::checkBool($var); + $this->passed = $var; + } + + /** + * <code>repeated int32 backoff_ms = 2;</code> + */ + public function getBackoffMs() + { + return $this->backoff_ms; + } + + /** + * <code>repeated int32 backoff_ms = 2;</code> + */ + public function setBackoffMs(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->backoff_ms = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectParams.php new file mode 100644 index 0000000000..9715855783 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ReconnectParams.php @@ -0,0 +1,49 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * For reconnect interop test only. + * Client tells server what reconnection parameters it used. + * </pre> + * + * Protobuf type <code>grpc.testing.ReconnectParams</code> + */ +class ReconnectParams extends \Google\Protobuf\Internal\Message +{ + /** + * <code>int32 max_reconnect_backoff_ms = 1;</code> + */ + private $max_reconnect_backoff_ms = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <code>int32 max_reconnect_backoff_ms = 1;</code> + */ + public function getMaxReconnectBackoffMs() + { + return $this->max_reconnect_backoff_ms; + } + + /** + * <code>int32 max_reconnect_backoff_ms = 1;</code> + */ + public function setMaxReconnectBackoffMs($var) + { + GPBUtil::checkInt32($var); + $this->max_reconnect_backoff_ms = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/RequestResultCount.php b/src/php/tests/qps/generated_code/Grpc/Testing/RequestResultCount.php new file mode 100644 index 0000000000..1be42b2ac9 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/RequestResultCount.php @@ -0,0 +1,65 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/stats.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.RequestResultCount</code> + */ +class RequestResultCount extends \Google\Protobuf\Internal\Message +{ + /** + * <code>int32 status_code = 1;</code> + */ + private $status_code = 0; + /** + * <code>int64 count = 2;</code> + */ + private $count = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + * <code>int32 status_code = 1;</code> + */ + public function getStatusCode() + { + return $this->status_code; + } + + /** + * <code>int32 status_code = 1;</code> + */ + public function setStatusCode($var) + { + GPBUtil::checkInt32($var); + $this->status_code = $var; + } + + /** + * <code>int64 count = 2;</code> + */ + public function getCount() + { + return $this->count; + } + + /** + * <code>int64 count = 2;</code> + */ + public function setCount($var) + { + GPBUtil::checkInt64($var); + $this->count = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ResponseParameters.php b/src/php/tests/qps/generated_code/Grpc/Testing/ResponseParameters.php new file mode 100644 index 0000000000..b7a8e5ece7 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ResponseParameters.php @@ -0,0 +1,138 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Configuration for a particular response. + * </pre> + * + * Protobuf type <code>grpc.testing.ResponseParameters</code> + */ +class ResponseParameters extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Desired payload sizes in responses from the server. + * </pre> + * + * <code>int32 size = 1;</code> + */ + private $size = 0; + /** + * <pre> + * Desired interval between consecutive responses in the response stream in + * microseconds. + * </pre> + * + * <code>int32 interval_us = 2;</code> + */ + private $interval_us = 0; + /** + * <pre> + * Whether to request the server to compress the response. This field is + * "nullable" in order to interoperate seamlessly with clients not able to + * implement the full compression tests by introspecting the call to verify + * the response's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue compressed = 3;</code> + */ + private $compressed = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Desired payload sizes in responses from the server. + * </pre> + * + * <code>int32 size = 1;</code> + */ + public function getSize() + { + return $this->size; + } + + /** + * <pre> + * Desired payload sizes in responses from the server. + * </pre> + * + * <code>int32 size = 1;</code> + */ + public function setSize($var) + { + GPBUtil::checkInt32($var); + $this->size = $var; + } + + /** + * <pre> + * Desired interval between consecutive responses in the response stream in + * microseconds. + * </pre> + * + * <code>int32 interval_us = 2;</code> + */ + public function getIntervalUs() + { + return $this->interval_us; + } + + /** + * <pre> + * Desired interval between consecutive responses in the response stream in + * microseconds. + * </pre> + * + * <code>int32 interval_us = 2;</code> + */ + public function setIntervalUs($var) + { + GPBUtil::checkInt32($var); + $this->interval_us = $var; + } + + /** + * <pre> + * Whether to request the server to compress the response. This field is + * "nullable" in order to interoperate seamlessly with clients not able to + * implement the full compression tests by introspecting the call to verify + * the response's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue compressed = 3;</code> + */ + public function getCompressed() + { + return $this->compressed; + } + + /** + * <pre> + * Whether to request the server to compress the response. This field is + * "nullable" in order to interoperate seamlessly with clients not able to + * implement the full compression tests by introspecting the call to verify + * the response's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue compressed = 3;</code> + */ + public function setCompressed(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class); + $this->compressed = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/RpcType.php b/src/php/tests/qps/generated_code/Grpc/Testing/RpcType.php new file mode 100644 index 0000000000..2e664fff47 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/RpcType.php @@ -0,0 +1,21 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +/** + * Protobuf enum <code>grpc.testing.RpcType</code> + */ +class RpcType +{ + /** + * <code>UNARY = 0;</code> + */ + const UNARY = 0; + /** + * <code>STREAMING = 1;</code> + */ + const STREAMING = 1; +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Scenario.php b/src/php/tests/qps/generated_code/Grpc/Testing/Scenario.php new file mode 100644 index 0000000000..136ed299ea --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Scenario.php @@ -0,0 +1,291 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * A single performance scenario: input to qps_json_driver + * </pre> + * + * Protobuf type <code>grpc.testing.Scenario</code> + */ +class Scenario extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Human readable name for this scenario + * </pre> + * + * <code>string name = 1;</code> + */ + private $name = ''; + /** + * <pre> + * Client configuration + * </pre> + * + * <code>.grpc.testing.ClientConfig client_config = 2;</code> + */ + private $client_config = null; + /** + * <pre> + * Number of clients to start for the test + * </pre> + * + * <code>int32 num_clients = 3;</code> + */ + private $num_clients = 0; + /** + * <pre> + * Server configuration + * </pre> + * + * <code>.grpc.testing.ServerConfig server_config = 4;</code> + */ + private $server_config = null; + /** + * <pre> + * Number of servers to start for the test + * </pre> + * + * <code>int32 num_servers = 5;</code> + */ + private $num_servers = 0; + /** + * <pre> + * Warmup period, in seconds + * </pre> + * + * <code>int32 warmup_seconds = 6;</code> + */ + private $warmup_seconds = 0; + /** + * <pre> + * Benchmark time, in seconds + * </pre> + * + * <code>int32 benchmark_seconds = 7;</code> + */ + private $benchmark_seconds = 0; + /** + * <pre> + * Number of workers to spawn locally (usually zero) + * </pre> + * + * <code>int32 spawn_local_worker_count = 8;</code> + */ + private $spawn_local_worker_count = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Human readable name for this scenario + * </pre> + * + * <code>string name = 1;</code> + */ + public function getName() + { + return $this->name; + } + + /** + * <pre> + * Human readable name for this scenario + * </pre> + * + * <code>string name = 1;</code> + */ + public function setName($var) + { + GPBUtil::checkString($var, True); + $this->name = $var; + } + + /** + * <pre> + * Client configuration + * </pre> + * + * <code>.grpc.testing.ClientConfig client_config = 2;</code> + */ + public function getClientConfig() + { + return $this->client_config; + } + + /** + * <pre> + * Client configuration + * </pre> + * + * <code>.grpc.testing.ClientConfig client_config = 2;</code> + */ + public function setClientConfig(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ClientConfig::class); + $this->client_config = $var; + } + + /** + * <pre> + * Number of clients to start for the test + * </pre> + * + * <code>int32 num_clients = 3;</code> + */ + public function getNumClients() + { + return $this->num_clients; + } + + /** + * <pre> + * Number of clients to start for the test + * </pre> + * + * <code>int32 num_clients = 3;</code> + */ + public function setNumClients($var) + { + GPBUtil::checkInt32($var); + $this->num_clients = $var; + } + + /** + * <pre> + * Server configuration + * </pre> + * + * <code>.grpc.testing.ServerConfig server_config = 4;</code> + */ + public function getServerConfig() + { + return $this->server_config; + } + + /** + * <pre> + * Server configuration + * </pre> + * + * <code>.grpc.testing.ServerConfig server_config = 4;</code> + */ + public function setServerConfig(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ServerConfig::class); + $this->server_config = $var; + } + + /** + * <pre> + * Number of servers to start for the test + * </pre> + * + * <code>int32 num_servers = 5;</code> + */ + public function getNumServers() + { + return $this->num_servers; + } + + /** + * <pre> + * Number of servers to start for the test + * </pre> + * + * <code>int32 num_servers = 5;</code> + */ + public function setNumServers($var) + { + GPBUtil::checkInt32($var); + $this->num_servers = $var; + } + + /** + * <pre> + * Warmup period, in seconds + * </pre> + * + * <code>int32 warmup_seconds = 6;</code> + */ + public function getWarmupSeconds() + { + return $this->warmup_seconds; + } + + /** + * <pre> + * Warmup period, in seconds + * </pre> + * + * <code>int32 warmup_seconds = 6;</code> + */ + public function setWarmupSeconds($var) + { + GPBUtil::checkInt32($var); + $this->warmup_seconds = $var; + } + + /** + * <pre> + * Benchmark time, in seconds + * </pre> + * + * <code>int32 benchmark_seconds = 7;</code> + */ + public function getBenchmarkSeconds() + { + return $this->benchmark_seconds; + } + + /** + * <pre> + * Benchmark time, in seconds + * </pre> + * + * <code>int32 benchmark_seconds = 7;</code> + */ + public function setBenchmarkSeconds($var) + { + GPBUtil::checkInt32($var); + $this->benchmark_seconds = $var; + } + + /** + * <pre> + * Number of workers to spawn locally (usually zero) + * </pre> + * + * <code>int32 spawn_local_worker_count = 8;</code> + */ + public function getSpawnLocalWorkerCount() + { + return $this->spawn_local_worker_count; + } + + /** + * <pre> + * Number of workers to spawn locally (usually zero) + * </pre> + * + * <code>int32 spawn_local_worker_count = 8;</code> + */ + public function setSpawnLocalWorkerCount($var) + { + GPBUtil::checkInt32($var); + $this->spawn_local_worker_count = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResult.php b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResult.php new file mode 100644 index 0000000000..809cd96244 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResult.php @@ -0,0 +1,312 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Results of a single benchmark scenario. + * </pre> + * + * Protobuf type <code>grpc.testing.ScenarioResult</code> + */ +class ScenarioResult extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Inputs used to run the scenario. + * </pre> + * + * <code>.grpc.testing.Scenario scenario = 1;</code> + */ + private $scenario = null; + /** + * <pre> + * Histograms from all clients merged into one histogram. + * </pre> + * + * <code>.grpc.testing.HistogramData latencies = 2;</code> + */ + private $latencies = null; + /** + * <pre> + * Client stats for each client + * </pre> + * + * <code>repeated .grpc.testing.ClientStats client_stats = 3;</code> + */ + private $client_stats; + /** + * <pre> + * Server stats for each server + * </pre> + * + * <code>repeated .grpc.testing.ServerStats server_stats = 4;</code> + */ + private $server_stats; + /** + * <pre> + * Number of cores available to each server + * </pre> + * + * <code>repeated int32 server_cores = 5;</code> + */ + private $server_cores; + /** + * <pre> + * An after-the-fact computed summary + * </pre> + * + * <code>.grpc.testing.ScenarioResultSummary summary = 6;</code> + */ + private $summary = null; + /** + * <pre> + * Information on success or failure of each worker + * </pre> + * + * <code>repeated bool client_success = 7;</code> + */ + private $client_success; + /** + * <code>repeated bool server_success = 8;</code> + */ + private $server_success; + /** + * <pre> + * Number of failed requests (one row per status code seen) + * </pre> + * + * <code>repeated .grpc.testing.RequestResultCount request_results = 9;</code> + */ + private $request_results; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Inputs used to run the scenario. + * </pre> + * + * <code>.grpc.testing.Scenario scenario = 1;</code> + */ + public function getScenario() + { + return $this->scenario; + } + + /** + * <pre> + * Inputs used to run the scenario. + * </pre> + * + * <code>.grpc.testing.Scenario scenario = 1;</code> + */ + public function setScenario(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Scenario::class); + $this->scenario = $var; + } + + /** + * <pre> + * Histograms from all clients merged into one histogram. + * </pre> + * + * <code>.grpc.testing.HistogramData latencies = 2;</code> + */ + public function getLatencies() + { + return $this->latencies; + } + + /** + * <pre> + * Histograms from all clients merged into one histogram. + * </pre> + * + * <code>.grpc.testing.HistogramData latencies = 2;</code> + */ + public function setLatencies(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\HistogramData::class); + $this->latencies = $var; + } + + /** + * <pre> + * Client stats for each client + * </pre> + * + * <code>repeated .grpc.testing.ClientStats client_stats = 3;</code> + */ + public function getClientStats() + { + return $this->client_stats; + } + + /** + * <pre> + * Client stats for each client + * </pre> + * + * <code>repeated .grpc.testing.ClientStats client_stats = 3;</code> + */ + public function setClientStats(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ClientStats::class); + $this->client_stats = $var; + } + + /** + * <pre> + * Server stats for each server + * </pre> + * + * <code>repeated .grpc.testing.ServerStats server_stats = 4;</code> + */ + public function getServerStats() + { + return $this->server_stats; + } + + /** + * <pre> + * Server stats for each server + * </pre> + * + * <code>repeated .grpc.testing.ServerStats server_stats = 4;</code> + */ + public function setServerStats(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ServerStats::class); + $this->server_stats = $var; + } + + /** + * <pre> + * Number of cores available to each server + * </pre> + * + * <code>repeated int32 server_cores = 5;</code> + */ + public function getServerCores() + { + return $this->server_cores; + } + + /** + * <pre> + * Number of cores available to each server + * </pre> + * + * <code>repeated int32 server_cores = 5;</code> + */ + public function setServerCores(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->server_cores = $var; + } + + /** + * <pre> + * An after-the-fact computed summary + * </pre> + * + * <code>.grpc.testing.ScenarioResultSummary summary = 6;</code> + */ + public function getSummary() + { + return $this->summary; + } + + /** + * <pre> + * An after-the-fact computed summary + * </pre> + * + * <code>.grpc.testing.ScenarioResultSummary summary = 6;</code> + */ + public function setSummary(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ScenarioResultSummary::class); + $this->summary = $var; + } + + /** + * <pre> + * Information on success or failure of each worker + * </pre> + * + * <code>repeated bool client_success = 7;</code> + */ + public function getClientSuccess() + { + return $this->client_success; + } + + /** + * <pre> + * Information on success or failure of each worker + * </pre> + * + * <code>repeated bool client_success = 7;</code> + */ + public function setClientSuccess(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::BOOL); + $this->client_success = $var; + } + + /** + * <code>repeated bool server_success = 8;</code> + */ + public function getServerSuccess() + { + return $this->server_success; + } + + /** + * <code>repeated bool server_success = 8;</code> + */ + public function setServerSuccess(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::BOOL); + $this->server_success = $var; + } + + /** + * <pre> + * Number of failed requests (one row per status code seen) + * </pre> + * + * <code>repeated .grpc.testing.RequestResultCount request_results = 9;</code> + */ + public function getRequestResults() + { + return $this->request_results; + } + + /** + * <pre> + * Number of failed requests (one row per status code seen) + * </pre> + * + * <code>repeated .grpc.testing.RequestResultCount request_results = 9;</code> + */ + public function setRequestResults(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\RequestResultCount::class); + $this->request_results = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResultSummary.php b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResultSummary.php new file mode 100644 index 0000000000..7520cff78e --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ScenarioResultSummary.php @@ -0,0 +1,430 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Basic summary that can be computed from ClientStats and ServerStats + * once the scenario has finished. + * </pre> + * + * Protobuf type <code>grpc.testing.ScenarioResultSummary</code> + */ +class ScenarioResultSummary extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Total number of operations per second over all clients. + * </pre> + * + * <code>double qps = 1;</code> + */ + private $qps = 0.0; + /** + * <pre> + * QPS per one server core. + * </pre> + * + * <code>double qps_per_server_core = 2;</code> + */ + private $qps_per_server_core = 0.0; + /** + * <pre> + * server load based on system_time (0.85 => 85%) + * </pre> + * + * <code>double server_system_time = 3;</code> + */ + private $server_system_time = 0.0; + /** + * <pre> + * server load based on user_time (0.85 => 85%) + * </pre> + * + * <code>double server_user_time = 4;</code> + */ + private $server_user_time = 0.0; + /** + * <pre> + * client load based on system_time (0.85 => 85%) + * </pre> + * + * <code>double client_system_time = 5;</code> + */ + private $client_system_time = 0.0; + /** + * <pre> + * client load based on user_time (0.85 => 85%) + * </pre> + * + * <code>double client_user_time = 6;</code> + */ + private $client_user_time = 0.0; + /** + * <pre> + * X% latency percentiles (in nanoseconds) + * </pre> + * + * <code>double latency_50 = 7;</code> + */ + private $latency_50 = 0.0; + /** + * <code>double latency_90 = 8;</code> + */ + private $latency_90 = 0.0; + /** + * <code>double latency_95 = 9;</code> + */ + private $latency_95 = 0.0; + /** + * <code>double latency_99 = 10;</code> + */ + private $latency_99 = 0.0; + /** + * <code>double latency_999 = 11;</code> + */ + private $latency_999 = 0.0; + /** + * <pre> + * server cpu usage percentage + * </pre> + * + * <code>double server_cpu_usage = 12;</code> + */ + private $server_cpu_usage = 0.0; + /** + * <pre> + * Number of requests that succeeded/failed + * </pre> + * + * <code>double successful_requests_per_second = 13;</code> + */ + private $successful_requests_per_second = 0.0; + /** + * <code>double failed_requests_per_second = 14;</code> + */ + private $failed_requests_per_second = 0.0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Total number of operations per second over all clients. + * </pre> + * + * <code>double qps = 1;</code> + */ + public function getQps() + { + return $this->qps; + } + + /** + * <pre> + * Total number of operations per second over all clients. + * </pre> + * + * <code>double qps = 1;</code> + */ + public function setQps($var) + { + GPBUtil::checkDouble($var); + $this->qps = $var; + } + + /** + * <pre> + * QPS per one server core. + * </pre> + * + * <code>double qps_per_server_core = 2;</code> + */ + public function getQpsPerServerCore() + { + return $this->qps_per_server_core; + } + + /** + * <pre> + * QPS per one server core. + * </pre> + * + * <code>double qps_per_server_core = 2;</code> + */ + public function setQpsPerServerCore($var) + { + GPBUtil::checkDouble($var); + $this->qps_per_server_core = $var; + } + + /** + * <pre> + * server load based on system_time (0.85 => 85%) + * </pre> + * + * <code>double server_system_time = 3;</code> + */ + public function getServerSystemTime() + { + return $this->server_system_time; + } + + /** + * <pre> + * server load based on system_time (0.85 => 85%) + * </pre> + * + * <code>double server_system_time = 3;</code> + */ + public function setServerSystemTime($var) + { + GPBUtil::checkDouble($var); + $this->server_system_time = $var; + } + + /** + * <pre> + * server load based on user_time (0.85 => 85%) + * </pre> + * + * <code>double server_user_time = 4;</code> + */ + public function getServerUserTime() + { + return $this->server_user_time; + } + + /** + * <pre> + * server load based on user_time (0.85 => 85%) + * </pre> + * + * <code>double server_user_time = 4;</code> + */ + public function setServerUserTime($var) + { + GPBUtil::checkDouble($var); + $this->server_user_time = $var; + } + + /** + * <pre> + * client load based on system_time (0.85 => 85%) + * </pre> + * + * <code>double client_system_time = 5;</code> + */ + public function getClientSystemTime() + { + return $this->client_system_time; + } + + /** + * <pre> + * client load based on system_time (0.85 => 85%) + * </pre> + * + * <code>double client_system_time = 5;</code> + */ + public function setClientSystemTime($var) + { + GPBUtil::checkDouble($var); + $this->client_system_time = $var; + } + + /** + * <pre> + * client load based on user_time (0.85 => 85%) + * </pre> + * + * <code>double client_user_time = 6;</code> + */ + public function getClientUserTime() + { + return $this->client_user_time; + } + + /** + * <pre> + * client load based on user_time (0.85 => 85%) + * </pre> + * + * <code>double client_user_time = 6;</code> + */ + public function setClientUserTime($var) + { + GPBUtil::checkDouble($var); + $this->client_user_time = $var; + } + + /** + * <pre> + * X% latency percentiles (in nanoseconds) + * </pre> + * + * <code>double latency_50 = 7;</code> + */ + public function getLatency50() + { + return $this->latency_50; + } + + /** + * <pre> + * X% latency percentiles (in nanoseconds) + * </pre> + * + * <code>double latency_50 = 7;</code> + */ + public function setLatency50($var) + { + GPBUtil::checkDouble($var); + $this->latency_50 = $var; + } + + /** + * <code>double latency_90 = 8;</code> + */ + public function getLatency90() + { + return $this->latency_90; + } + + /** + * <code>double latency_90 = 8;</code> + */ + public function setLatency90($var) + { + GPBUtil::checkDouble($var); + $this->latency_90 = $var; + } + + /** + * <code>double latency_95 = 9;</code> + */ + public function getLatency95() + { + return $this->latency_95; + } + + /** + * <code>double latency_95 = 9;</code> + */ + public function setLatency95($var) + { + GPBUtil::checkDouble($var); + $this->latency_95 = $var; + } + + /** + * <code>double latency_99 = 10;</code> + */ + public function getLatency99() + { + return $this->latency_99; + } + + /** + * <code>double latency_99 = 10;</code> + */ + public function setLatency99($var) + { + GPBUtil::checkDouble($var); + $this->latency_99 = $var; + } + + /** + * <code>double latency_999 = 11;</code> + */ + public function getLatency999() + { + return $this->latency_999; + } + + /** + * <code>double latency_999 = 11;</code> + */ + public function setLatency999($var) + { + GPBUtil::checkDouble($var); + $this->latency_999 = $var; + } + + /** + * <pre> + * server cpu usage percentage + * </pre> + * + * <code>double server_cpu_usage = 12;</code> + */ + public function getServerCpuUsage() + { + return $this->server_cpu_usage; + } + + /** + * <pre> + * server cpu usage percentage + * </pre> + * + * <code>double server_cpu_usage = 12;</code> + */ + public function setServerCpuUsage($var) + { + GPBUtil::checkDouble($var); + $this->server_cpu_usage = $var; + } + + /** + * <pre> + * Number of requests that succeeded/failed + * </pre> + * + * <code>double successful_requests_per_second = 13;</code> + */ + public function getSuccessfulRequestsPerSecond() + { + return $this->successful_requests_per_second; + } + + /** + * <pre> + * Number of requests that succeeded/failed + * </pre> + * + * <code>double successful_requests_per_second = 13;</code> + */ + public function setSuccessfulRequestsPerSecond($var) + { + GPBUtil::checkDouble($var); + $this->successful_requests_per_second = $var; + } + + /** + * <code>double failed_requests_per_second = 14;</code> + */ + public function getFailedRequestsPerSecond() + { + return $this->failed_requests_per_second; + } + + /** + * <code>double failed_requests_per_second = 14;</code> + */ + public function setFailedRequestsPerSecond($var) + { + GPBUtil::checkDouble($var); + $this->failed_requests_per_second = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Scenarios.php b/src/php/tests/qps/generated_code/Grpc/Testing/Scenarios.php new file mode 100644 index 0000000000..278f555b76 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Scenarios.php @@ -0,0 +1,48 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * A set of scenarios to be run with qps_json_driver + * </pre> + * + * Protobuf type <code>grpc.testing.Scenarios</code> + */ +class Scenarios extends \Google\Protobuf\Internal\Message +{ + /** + * <code>repeated .grpc.testing.Scenario scenarios = 1;</code> + */ + private $scenarios; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>repeated .grpc.testing.Scenario scenarios = 1;</code> + */ + public function getScenarios() + { + return $this->scenarios; + } + + /** + * <code>repeated .grpc.testing.Scenario scenarios = 1;</code> + */ + public function setScenarios(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\Scenario::class); + $this->scenarios = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/SecurityParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/SecurityParams.php new file mode 100644 index 0000000000..27a5b95cc9 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/SecurityParams.php @@ -0,0 +1,69 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * presence of SecurityParams implies use of TLS + * </pre> + * + * Protobuf type <code>grpc.testing.SecurityParams</code> + */ +class SecurityParams extends \Google\Protobuf\Internal\Message +{ + /** + * <code>bool use_test_ca = 1;</code> + */ + private $use_test_ca = false; + /** + * <code>string server_host_override = 2;</code> + */ + private $server_host_override = ''; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>bool use_test_ca = 1;</code> + */ + public function getUseTestCa() + { + return $this->use_test_ca; + } + + /** + * <code>bool use_test_ca = 1;</code> + */ + public function setUseTestCa($var) + { + GPBUtil::checkBool($var); + $this->use_test_ca = $var; + } + + /** + * <code>string server_host_override = 2;</code> + */ + public function getServerHostOverride() + { + return $this->server_host_override; + } + + /** + * <code>string server_host_override = 2;</code> + */ + public function setServerHostOverride($var) + { + GPBUtil::checkString($var, True); + $this->server_host_override = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerArgs.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerArgs.php new file mode 100644 index 0000000000..0d84b80124 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerArgs.php @@ -0,0 +1,63 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ServerArgs</code> + */ +class ServerArgs extends \Google\Protobuf\Internal\Message +{ + protected $argtype; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>.grpc.testing.ServerConfig setup = 1;</code> + */ + public function getSetup() + { + return $this->readOneof(1); + } + + /** + * <code>.grpc.testing.ServerConfig setup = 1;</code> + */ + public function setSetup(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ServerConfig::class); + $this->writeOneof(1, $var); + } + + /** + * <code>.grpc.testing.Mark mark = 2;</code> + */ + public function getMark() + { + return $this->readOneof(2); + } + + /** + * <code>.grpc.testing.Mark mark = 2;</code> + */ + public function setMark(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Mark::class); + $this->writeOneof(2, $var); + } + + public function getArgtype() + { + return $this->whichOneof("argtype"); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerConfig.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerConfig.php new file mode 100644 index 0000000000..e2bcede48c --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerConfig.php @@ -0,0 +1,305 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ServerConfig</code> + */ +class ServerConfig extends \Google\Protobuf\Internal\Message +{ + /** + * <code>.grpc.testing.ServerType server_type = 1;</code> + */ + private $server_type = 0; + /** + * <code>.grpc.testing.SecurityParams security_params = 2;</code> + */ + private $security_params = null; + /** + * <pre> + * Port on which to listen. Zero means pick unused port. + * </pre> + * + * <code>int32 port = 4;</code> + */ + private $port = 0; + /** + * <pre> + * Only for async server. Number of threads used to serve the requests. + * </pre> + * + * <code>int32 async_server_threads = 7;</code> + */ + private $async_server_threads = 0; + /** + * <pre> + * Specify the number of cores to limit server to, if desired + * </pre> + * + * <code>int32 core_limit = 8;</code> + */ + private $core_limit = 0; + /** + * <pre> + * payload config, used in generic server. + * Note this must NOT be used in proto (non-generic) servers. For proto servers, + * 'response sizes' must be configured from the 'response_size' field of the + * 'SimpleRequest' objects in RPC requests. + * </pre> + * + * <code>.grpc.testing.PayloadConfig payload_config = 9;</code> + */ + private $payload_config = null; + /** + * <pre> + * Specify the cores we should run the server on, if desired + * </pre> + * + * <code>repeated int32 core_list = 10;</code> + */ + private $core_list; + /** + * <pre> + * If we use an OTHER_SERVER client_type, this string gives more detail + * </pre> + * + * <code>string other_server_api = 11;</code> + */ + private $other_server_api = ''; + /** + * <pre> + * Buffer pool size (no buffer pool specified if unset) + * </pre> + * + * <code>int32 resource_quota_size = 1001;</code> + */ + private $resource_quota_size = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>.grpc.testing.ServerType server_type = 1;</code> + */ + public function getServerType() + { + return $this->server_type; + } + + /** + * <code>.grpc.testing.ServerType server_type = 1;</code> + */ + public function setServerType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\ServerType::class); + $this->server_type = $var; + } + + /** + * <code>.grpc.testing.SecurityParams security_params = 2;</code> + */ + public function getSecurityParams() + { + return $this->security_params; + } + + /** + * <code>.grpc.testing.SecurityParams security_params = 2;</code> + */ + public function setSecurityParams(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\SecurityParams::class); + $this->security_params = $var; + } + + /** + * <pre> + * Port on which to listen. Zero means pick unused port. + * </pre> + * + * <code>int32 port = 4;</code> + */ + public function getPort() + { + return $this->port; + } + + /** + * <pre> + * Port on which to listen. Zero means pick unused port. + * </pre> + * + * <code>int32 port = 4;</code> + */ + public function setPort($var) + { + GPBUtil::checkInt32($var); + $this->port = $var; + } + + /** + * <pre> + * Only for async server. Number of threads used to serve the requests. + * </pre> + * + * <code>int32 async_server_threads = 7;</code> + */ + public function getAsyncServerThreads() + { + return $this->async_server_threads; + } + + /** + * <pre> + * Only for async server. Number of threads used to serve the requests. + * </pre> + * + * <code>int32 async_server_threads = 7;</code> + */ + public function setAsyncServerThreads($var) + { + GPBUtil::checkInt32($var); + $this->async_server_threads = $var; + } + + /** + * <pre> + * Specify the number of cores to limit server to, if desired + * </pre> + * + * <code>int32 core_limit = 8;</code> + */ + public function getCoreLimit() + { + return $this->core_limit; + } + + /** + * <pre> + * Specify the number of cores to limit server to, if desired + * </pre> + * + * <code>int32 core_limit = 8;</code> + */ + public function setCoreLimit($var) + { + GPBUtil::checkInt32($var); + $this->core_limit = $var; + } + + /** + * <pre> + * payload config, used in generic server. + * Note this must NOT be used in proto (non-generic) servers. For proto servers, + * 'response sizes' must be configured from the 'response_size' field of the + * 'SimpleRequest' objects in RPC requests. + * </pre> + * + * <code>.grpc.testing.PayloadConfig payload_config = 9;</code> + */ + public function getPayloadConfig() + { + return $this->payload_config; + } + + /** + * <pre> + * payload config, used in generic server. + * Note this must NOT be used in proto (non-generic) servers. For proto servers, + * 'response sizes' must be configured from the 'response_size' field of the + * 'SimpleRequest' objects in RPC requests. + * </pre> + * + * <code>.grpc.testing.PayloadConfig payload_config = 9;</code> + */ + public function setPayloadConfig(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\PayloadConfig::class); + $this->payload_config = $var; + } + + /** + * <pre> + * Specify the cores we should run the server on, if desired + * </pre> + * + * <code>repeated int32 core_list = 10;</code> + */ + public function getCoreList() + { + return $this->core_list; + } + + /** + * <pre> + * Specify the cores we should run the server on, if desired + * </pre> + * + * <code>repeated int32 core_list = 10;</code> + */ + public function setCoreList(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT32); + $this->core_list = $var; + } + + /** + * <pre> + * If we use an OTHER_SERVER client_type, this string gives more detail + * </pre> + * + * <code>string other_server_api = 11;</code> + */ + public function getOtherServerApi() + { + return $this->other_server_api; + } + + /** + * <pre> + * If we use an OTHER_SERVER client_type, this string gives more detail + * </pre> + * + * <code>string other_server_api = 11;</code> + */ + public function setOtherServerApi($var) + { + GPBUtil::checkString($var, True); + $this->other_server_api = $var; + } + + /** + * <pre> + * Buffer pool size (no buffer pool specified if unset) + * </pre> + * + * <code>int32 resource_quota_size = 1001;</code> + */ + public function getResourceQuotaSize() + { + return $this->resource_quota_size; + } + + /** + * <pre> + * Buffer pool size (no buffer pool specified if unset) + * </pre> + * + * <code>int32 resource_quota_size = 1001;</code> + */ + public function setResourceQuotaSize($var) + { + GPBUtil::checkInt32($var); + $this->resource_quota_size = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerStats.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStats.php new file mode 100644 index 0000000000..98b2af764c --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStats.php @@ -0,0 +1,191 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/stats.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ServerStats</code> + */ +class ServerStats extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * wall clock time change in seconds since last reset + * </pre> + * + * <code>double time_elapsed = 1;</code> + */ + private $time_elapsed = 0.0; + /** + * <pre> + * change in user time (in seconds) used by the server since last reset + * </pre> + * + * <code>double time_user = 2;</code> + */ + private $time_user = 0.0; + /** + * <pre> + * change in server time (in seconds) used by the server process and all + * threads since last reset + * </pre> + * + * <code>double time_system = 3;</code> + */ + private $time_system = 0.0; + /** + * <pre> + * change in total cpu time of the server (data from proc/stat) + * </pre> + * + * <code>uint64 total_cpu_time = 4;</code> + */ + private $total_cpu_time = 0; + /** + * <pre> + * change in idle time of the server (data from proc/stat) + * </pre> + * + * <code>uint64 idle_cpu_time = 5;</code> + */ + private $idle_cpu_time = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Stats::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * wall clock time change in seconds since last reset + * </pre> + * + * <code>double time_elapsed = 1;</code> + */ + public function getTimeElapsed() + { + return $this->time_elapsed; + } + + /** + * <pre> + * wall clock time change in seconds since last reset + * </pre> + * + * <code>double time_elapsed = 1;</code> + */ + public function setTimeElapsed($var) + { + GPBUtil::checkDouble($var); + $this->time_elapsed = $var; + } + + /** + * <pre> + * change in user time (in seconds) used by the server since last reset + * </pre> + * + * <code>double time_user = 2;</code> + */ + public function getTimeUser() + { + return $this->time_user; + } + + /** + * <pre> + * change in user time (in seconds) used by the server since last reset + * </pre> + * + * <code>double time_user = 2;</code> + */ + public function setTimeUser($var) + { + GPBUtil::checkDouble($var); + $this->time_user = $var; + } + + /** + * <pre> + * change in server time (in seconds) used by the server process and all + * threads since last reset + * </pre> + * + * <code>double time_system = 3;</code> + */ + public function getTimeSystem() + { + return $this->time_system; + } + + /** + * <pre> + * change in server time (in seconds) used by the server process and all + * threads since last reset + * </pre> + * + * <code>double time_system = 3;</code> + */ + public function setTimeSystem($var) + { + GPBUtil::checkDouble($var); + $this->time_system = $var; + } + + /** + * <pre> + * change in total cpu time of the server (data from proc/stat) + * </pre> + * + * <code>uint64 total_cpu_time = 4;</code> + */ + public function getTotalCpuTime() + { + return $this->total_cpu_time; + } + + /** + * <pre> + * change in total cpu time of the server (data from proc/stat) + * </pre> + * + * <code>uint64 total_cpu_time = 4;</code> + */ + public function setTotalCpuTime($var) + { + GPBUtil::checkUint64($var); + $this->total_cpu_time = $var; + } + + /** + * <pre> + * change in idle time of the server (data from proc/stat) + * </pre> + * + * <code>uint64 idle_cpu_time = 5;</code> + */ + public function getIdleCpuTime() + { + return $this->idle_cpu_time; + } + + /** + * <pre> + * change in idle time of the server (data from proc/stat) + * </pre> + * + * <code>uint64 idle_cpu_time = 5;</code> + */ + public function setIdleCpuTime($var) + { + GPBUtil::checkUint64($var); + $this->idle_cpu_time = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerStatus.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStatus.php new file mode 100644 index 0000000000..d293f03fbd --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerStatus.php @@ -0,0 +1,110 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.ServerStatus</code> + */ +class ServerStatus extends \Google\Protobuf\Internal\Message +{ + /** + * <code>.grpc.testing.ServerStats stats = 1;</code> + */ + private $stats = null; + /** + * <pre> + * the port bound by the server + * </pre> + * + * <code>int32 port = 2;</code> + */ + private $port = 0; + /** + * <pre> + * Number of cores available to the server + * </pre> + * + * <code>int32 cores = 3;</code> + */ + private $cores = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + + /** + * <code>.grpc.testing.ServerStats stats = 1;</code> + */ + public function getStats() + { + return $this->stats; + } + + /** + * <code>.grpc.testing.ServerStats stats = 1;</code> + */ + public function setStats(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\ServerStats::class); + $this->stats = $var; + } + + /** + * <pre> + * the port bound by the server + * </pre> + * + * <code>int32 port = 2;</code> + */ + public function getPort() + { + return $this->port; + } + + /** + * <pre> + * the port bound by the server + * </pre> + * + * <code>int32 port = 2;</code> + */ + public function setPort($var) + { + GPBUtil::checkInt32($var); + $this->port = $var; + } + + /** + * <pre> + * Number of cores available to the server + * </pre> + * + * <code>int32 cores = 3;</code> + */ + public function getCores() + { + return $this->cores; + } + + /** + * <pre> + * Number of cores available to the server + * </pre> + * + * <code>int32 cores = 3;</code> + */ + public function setCores($var) + { + GPBUtil::checkInt32($var); + $this->cores = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/ServerType.php b/src/php/tests/qps/generated_code/Grpc/Testing/ServerType.php new file mode 100644 index 0000000000..605c83c3f7 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/ServerType.php @@ -0,0 +1,33 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +/** + * Protobuf enum <code>grpc.testing.ServerType</code> + */ +class ServerType +{ + /** + * <code>SYNC_SERVER = 0;</code> + */ + const SYNC_SERVER = 0; + /** + * <code>ASYNC_SERVER = 1;</code> + */ + const ASYNC_SERVER = 1; + /** + * <code>ASYNC_GENERIC_SERVER = 2;</code> + */ + const ASYNC_GENERIC_SERVER = 2; + /** + * <pre> + * used for some language-specific variants + * </pre> + * + * <code>OTHER_SERVER = 3;</code> + */ + const OTHER_SERVER = 3; +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/SimpleProtoParams.php b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleProtoParams.php new file mode 100644 index 0000000000..29834a3be7 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleProtoParams.php @@ -0,0 +1,65 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/payloads.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.SimpleProtoParams</code> + */ +class SimpleProtoParams extends \Google\Protobuf\Internal\Message +{ + /** + * <code>int32 req_size = 1;</code> + */ + private $req_size = 0; + /** + * <code>int32 resp_size = 2;</code> + */ + private $resp_size = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Payloads::initOnce(); + parent::__construct(); + } + + /** + * <code>int32 req_size = 1;</code> + */ + public function getReqSize() + { + return $this->req_size; + } + + /** + * <code>int32 req_size = 1;</code> + */ + public function setReqSize($var) + { + GPBUtil::checkInt32($var); + $this->req_size = $var; + } + + /** + * <code>int32 resp_size = 2;</code> + */ + public function getRespSize() + { + return $this->resp_size; + } + + /** + * <code>int32 resp_size = 2;</code> + */ + public function setRespSize($var) + { + GPBUtil::checkInt32($var); + $this->resp_size = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/SimpleRequest.php b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleRequest.php new file mode 100644 index 0000000000..f84c95319f --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleRequest.php @@ -0,0 +1,306 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Unary request. + * </pre> + * + * Protobuf type <code>grpc.testing.SimpleRequest</code> + */ +class SimpleRequest extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * Desired payload type in the response from the server. + * If response_type is RANDOM, server randomly chooses one from other formats. + * </pre> + * + * <code>.grpc.testing.PayloadType response_type = 1;</code> + */ + private $response_type = 0; + /** + * <pre> + * Desired payload size in the response from the server. + * </pre> + * + * <code>int32 response_size = 2;</code> + */ + private $response_size = 0; + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 3;</code> + */ + private $payload = null; + /** + * <pre> + * Whether SimpleResponse should include username. + * </pre> + * + * <code>bool fill_username = 4;</code> + */ + private $fill_username = false; + /** + * <pre> + * Whether SimpleResponse should include OAuth scope. + * </pre> + * + * <code>bool fill_oauth_scope = 5;</code> + */ + private $fill_oauth_scope = false; + /** + * <pre> + * Whether to request the server to compress the response. This field is + * "nullable" in order to interoperate seamlessly with clients not able to + * implement the full compression tests by introspecting the call to verify + * the response's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue response_compressed = 6;</code> + */ + private $response_compressed = null; + /** + * <pre> + * Whether server should return a given status + * </pre> + * + * <code>.grpc.testing.EchoStatus response_status = 7;</code> + */ + private $response_status = null; + /** + * <pre> + * Whether the server should expect this request to be compressed. + * </pre> + * + * <code>.grpc.testing.BoolValue expect_compressed = 8;</code> + */ + private $expect_compressed = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * Desired payload type in the response from the server. + * If response_type is RANDOM, server randomly chooses one from other formats. + * </pre> + * + * <code>.grpc.testing.PayloadType response_type = 1;</code> + */ + public function getResponseType() + { + return $this->response_type; + } + + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * Desired payload type in the response from the server. + * If response_type is RANDOM, server randomly chooses one from other formats. + * </pre> + * + * <code>.grpc.testing.PayloadType response_type = 1;</code> + */ + public function setResponseType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class); + $this->response_type = $var; + } + + /** + * <pre> + * Desired payload size in the response from the server. + * </pre> + * + * <code>int32 response_size = 2;</code> + */ + public function getResponseSize() + { + return $this->response_size; + } + + /** + * <pre> + * Desired payload size in the response from the server. + * </pre> + * + * <code>int32 response_size = 2;</code> + */ + public function setResponseSize($var) + { + GPBUtil::checkInt32($var); + $this->response_size = $var; + } + + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 3;</code> + */ + public function getPayload() + { + return $this->payload; + } + + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 3;</code> + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + + /** + * <pre> + * Whether SimpleResponse should include username. + * </pre> + * + * <code>bool fill_username = 4;</code> + */ + public function getFillUsername() + { + return $this->fill_username; + } + + /** + * <pre> + * Whether SimpleResponse should include username. + * </pre> + * + * <code>bool fill_username = 4;</code> + */ + public function setFillUsername($var) + { + GPBUtil::checkBool($var); + $this->fill_username = $var; + } + + /** + * <pre> + * Whether SimpleResponse should include OAuth scope. + * </pre> + * + * <code>bool fill_oauth_scope = 5;</code> + */ + public function getFillOauthScope() + { + return $this->fill_oauth_scope; + } + + /** + * <pre> + * Whether SimpleResponse should include OAuth scope. + * </pre> + * + * <code>bool fill_oauth_scope = 5;</code> + */ + public function setFillOauthScope($var) + { + GPBUtil::checkBool($var); + $this->fill_oauth_scope = $var; + } + + /** + * <pre> + * Whether to request the server to compress the response. This field is + * "nullable" in order to interoperate seamlessly with clients not able to + * implement the full compression tests by introspecting the call to verify + * the response's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue response_compressed = 6;</code> + */ + public function getResponseCompressed() + { + return $this->response_compressed; + } + + /** + * <pre> + * Whether to request the server to compress the response. This field is + * "nullable" in order to interoperate seamlessly with clients not able to + * implement the full compression tests by introspecting the call to verify + * the response's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue response_compressed = 6;</code> + */ + public function setResponseCompressed(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class); + $this->response_compressed = $var; + } + + /** + * <pre> + * Whether server should return a given status + * </pre> + * + * <code>.grpc.testing.EchoStatus response_status = 7;</code> + */ + public function getResponseStatus() + { + return $this->response_status; + } + + /** + * <pre> + * Whether server should return a given status + * </pre> + * + * <code>.grpc.testing.EchoStatus response_status = 7;</code> + */ + public function setResponseStatus(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\EchoStatus::class); + $this->response_status = $var; + } + + /** + * <pre> + * Whether the server should expect this request to be compressed. + * </pre> + * + * <code>.grpc.testing.BoolValue expect_compressed = 8;</code> + */ + public function getExpectCompressed() + { + return $this->expect_compressed; + } + + /** + * <pre> + * Whether the server should expect this request to be compressed. + * </pre> + * + * <code>.grpc.testing.BoolValue expect_compressed = 8;</code> + */ + public function setExpectCompressed(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class); + $this->expect_compressed = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/SimpleResponse.php b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleResponse.php new file mode 100644 index 0000000000..ccc628ec4c --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/SimpleResponse.php @@ -0,0 +1,129 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Unary response, as configured by the request. + * </pre> + * + * Protobuf type <code>grpc.testing.SimpleResponse</code> + */ +class SimpleResponse extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Payload to increase message size. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + private $payload = null; + /** + * <pre> + * The user the request came from, for verifying authentication was + * successful when the client expected it. + * </pre> + * + * <code>string username = 2;</code> + */ + private $username = ''; + /** + * <pre> + * OAuth scope. + * </pre> + * + * <code>string oauth_scope = 3;</code> + */ + private $oauth_scope = ''; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Payload to increase message size. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + public function getPayload() + { + return $this->payload; + } + + /** + * <pre> + * Payload to increase message size. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + + /** + * <pre> + * The user the request came from, for verifying authentication was + * successful when the client expected it. + * </pre> + * + * <code>string username = 2;</code> + */ + public function getUsername() + { + return $this->username; + } + + /** + * <pre> + * The user the request came from, for verifying authentication was + * successful when the client expected it. + * </pre> + * + * <code>string username = 2;</code> + */ + public function setUsername($var) + { + GPBUtil::checkString($var, True); + $this->username = $var; + } + + /** + * <pre> + * OAuth scope. + * </pre> + * + * <code>string oauth_scope = 3;</code> + */ + public function getOauthScope() + { + return $this->oauth_scope; + } + + /** + * <pre> + * OAuth scope. + * </pre> + * + * <code>string oauth_scope = 3;</code> + */ + public function setOauthScope($var) + { + GPBUtil::checkString($var, True); + $this->oauth_scope = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallRequest.php b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallRequest.php new file mode 100644 index 0000000000..d7bbc70779 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallRequest.php @@ -0,0 +1,102 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Client-streaming request. + * </pre> + * + * Protobuf type <code>grpc.testing.StreamingInputCallRequest</code> + */ +class StreamingInputCallRequest extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + private $payload = null; + /** + * <pre> + * Whether the server should expect this request to be compressed. This field + * is "nullable" in order to interoperate seamlessly with servers not able to + * implement the full compression tests by introspecting the call to verify + * the request's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue expect_compressed = 2;</code> + */ + private $expect_compressed = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + public function getPayload() + { + return $this->payload; + } + + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + + /** + * <pre> + * Whether the server should expect this request to be compressed. This field + * is "nullable" in order to interoperate seamlessly with servers not able to + * implement the full compression tests by introspecting the call to verify + * the request's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue expect_compressed = 2;</code> + */ + public function getExpectCompressed() + { + return $this->expect_compressed; + } + + /** + * <pre> + * Whether the server should expect this request to be compressed. This field + * is "nullable" in order to interoperate seamlessly with servers not able to + * implement the full compression tests by introspecting the call to verify + * the request's compression status. + * </pre> + * + * <code>.grpc.testing.BoolValue expect_compressed = 2;</code> + */ + public function setExpectCompressed(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\BoolValue::class); + $this->expect_compressed = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallResponse.php b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallResponse.php new file mode 100644 index 0000000000..fdd1d0dbf8 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingInputCallResponse.php @@ -0,0 +1,60 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Client-streaming response. + * </pre> + * + * Protobuf type <code>grpc.testing.StreamingInputCallResponse</code> + */ +class StreamingInputCallResponse extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Aggregated size of payloads received from the client. + * </pre> + * + * <code>int32 aggregated_payload_size = 1;</code> + */ + private $aggregated_payload_size = 0; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Aggregated size of payloads received from the client. + * </pre> + * + * <code>int32 aggregated_payload_size = 1;</code> + */ + public function getAggregatedPayloadSize() + { + return $this->aggregated_payload_size; + } + + /** + * <pre> + * Aggregated size of payloads received from the client. + * </pre> + * + * <code>int32 aggregated_payload_size = 1;</code> + */ + public function setAggregatedPayloadSize($var) + { + GPBUtil::checkInt32($var); + $this->aggregated_payload_size = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallRequest.php b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallRequest.php new file mode 100644 index 0000000000..2aab5fadad --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallRequest.php @@ -0,0 +1,171 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Server-streaming request. + * </pre> + * + * Protobuf type <code>grpc.testing.StreamingOutputCallRequest</code> + */ +class StreamingOutputCallRequest extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * Desired payload type in the response from the server. + * If response_type is RANDOM, the payload from each response in the stream + * might be of different types. This is to simulate a mixed type of payload + * stream. + * </pre> + * + * <code>.grpc.testing.PayloadType response_type = 1;</code> + */ + private $response_type = 0; + /** + * <pre> + * Configuration for each expected response message. + * </pre> + * + * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code> + */ + private $response_parameters; + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 3;</code> + */ + private $payload = null; + /** + * <pre> + * Whether server should return a given status + * </pre> + * + * <code>.grpc.testing.EchoStatus response_status = 7;</code> + */ + private $response_status = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * Desired payload type in the response from the server. + * If response_type is RANDOM, the payload from each response in the stream + * might be of different types. This is to simulate a mixed type of payload + * stream. + * </pre> + * + * <code>.grpc.testing.PayloadType response_type = 1;</code> + */ + public function getResponseType() + { + return $this->response_type; + } + + /** + * <pre> + * DEPRECATED, don't use. To be removed shortly. + * Desired payload type in the response from the server. + * If response_type is RANDOM, the payload from each response in the stream + * might be of different types. This is to simulate a mixed type of payload + * stream. + * </pre> + * + * <code>.grpc.testing.PayloadType response_type = 1;</code> + */ + public function setResponseType($var) + { + GPBUtil::checkEnum($var, \Grpc\Testing\PayloadType::class); + $this->response_type = $var; + } + + /** + * <pre> + * Configuration for each expected response message. + * </pre> + * + * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code> + */ + public function getResponseParameters() + { + return $this->response_parameters; + } + + /** + * <pre> + * Configuration for each expected response message. + * </pre> + * + * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code> + */ + public function setResponseParameters(&$var) + { + GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Grpc\Testing\ResponseParameters::class); + $this->response_parameters = $var; + } + + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 3;</code> + */ + public function getPayload() + { + return $this->payload; + } + + /** + * <pre> + * Optional input payload sent along with the request. + * </pre> + * + * <code>.grpc.testing.Payload payload = 3;</code> + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + + /** + * <pre> + * Whether server should return a given status + * </pre> + * + * <code>.grpc.testing.EchoStatus response_status = 7;</code> + */ + public function getResponseStatus() + { + return $this->response_status; + } + + /** + * <pre> + * Whether server should return a given status + * </pre> + * + * <code>.grpc.testing.EchoStatus response_status = 7;</code> + */ + public function setResponseStatus(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\EchoStatus::class); + $this->response_status = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallResponse.php b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallResponse.php new file mode 100644 index 0000000000..c06c78c9d8 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/StreamingOutputCallResponse.php @@ -0,0 +1,60 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/messages.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * <pre> + * Server-streaming response, as configured by the request and parameters. + * </pre> + * + * Protobuf type <code>grpc.testing.StreamingOutputCallResponse</code> + */ +class StreamingOutputCallResponse extends \Google\Protobuf\Internal\Message +{ + /** + * <pre> + * Payload to increase response size. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + private $payload = null; + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Messages::initOnce(); + parent::__construct(); + } + + /** + * <pre> + * Payload to increase response size. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + public function getPayload() + { + return $this->payload; + } + + /** + * <pre> + * Payload to increase response size. + * </pre> + * + * <code>.grpc.testing.Payload payload = 1;</code> + */ + public function setPayload(&$var) + { + GPBUtil::checkMessage($var, \Grpc\Testing\Payload::class); + $this->payload = $var; + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/Void.php b/src/php/tests/qps/generated_code/Grpc/Testing/Void.php new file mode 100644 index 0000000000..38c100845a --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/Void.php @@ -0,0 +1,23 @@ +<?php +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/control.proto + +namespace Grpc\Testing; + +use Google\Protobuf\Internal\GPBType; +use Google\Protobuf\Internal\RepeatedField; +use Google\Protobuf\Internal\GPBUtil; + +/** + * Protobuf type <code>grpc.testing.Void</code> + */ +class Void extends \Google\Protobuf\Internal\Message +{ + + public function __construct() { + \GPBMetadata\Src\Proto\Grpc\Testing\Control::initOnce(); + parent::__construct(); + } + +} + diff --git a/src/php/tests/qps/generated_code/Grpc/Testing/WorkerServiceClient.php b/src/php/tests/qps/generated_code/Grpc/Testing/WorkerServiceClient.php new file mode 100644 index 0000000000..0a68e41269 --- /dev/null +++ b/src/php/tests/qps/generated_code/Grpc/Testing/WorkerServiceClient.php @@ -0,0 +1,111 @@ +<?php +// GENERATED CODE -- DO NOT EDIT! + +// Original file comments: +// Copyright 2015, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// An integration test service that covers all the method signature permutations +// of unary/streaming requests/responses. +namespace Grpc\Testing { + + class WorkerServiceClient extends \Grpc\BaseStub { + + /** + * @param string $hostname hostname + * @param array $opts channel options + * @param Grpc\Channel $channel (optional) re-use channel object + */ + public function __construct($hostname, $opts, $channel = null) { + parent::__construct($hostname, $opts, $channel); + } + + /** + * Start server with specified workload. + * First request sent specifies the ServerConfig followed by ServerStatus + * response. After that, a "Mark" can be sent anytime to request the latest + * stats. Closing the stream will initiate shutdown of the test server + * and once the shutdown has finished, the OK status is sent to terminate + * this RPC. + * @param array $metadata metadata + * @param array $options call options + */ + public function RunServer($metadata = [], $options = []) { + return $this->_bidiRequest('/grpc.testing.WorkerService/RunServer', + ['\Grpc\Testing\ServerStatus','decode'], + $metadata, $options); + } + + /** + * Start client with specified workload. + * First request sent specifies the ClientConfig followed by ClientStatus + * response. After that, a "Mark" can be sent anytime to request the latest + * stats. Closing the stream will initiate shutdown of the test client + * and once the shutdown has finished, the OK status is sent to terminate + * this RPC. + * @param array $metadata metadata + * @param array $options call options + */ + public function RunClient($metadata = [], $options = []) { + return $this->_bidiRequest('/grpc.testing.WorkerService/RunClient', + ['\Grpc\Testing\ClientStatus','decode'], + $metadata, $options); + } + + /** + * Just return the core count - unary call + * @param \Grpc\Testing\CoreRequest $argument input argument + * @param array $metadata metadata + * @param array $options call options + */ + public function CoreCount(\Grpc\Testing\CoreRequest $argument, + $metadata = [], $options = []) { + return $this->_simpleRequest('/grpc.testing.WorkerService/CoreCount', + $argument, + ['\Grpc\Testing\CoreResponse', 'decode'], + $metadata, $options); + } + + /** + * Quit this worker + * @param \Grpc\Testing\Void $argument input argument + * @param array $metadata metadata + * @param array $options call options + */ + public function QuitWorker(\Grpc\Testing\Void $argument, + $metadata = [], $options = []) { + return $this->_simpleRequest('/grpc.testing.WorkerService/QuitWorker', + $argument, + ['\Grpc\Testing\Void', 'decode'], + $metadata, $options); + } + + } + +} diff --git a/src/proto/grpc/testing/proxy-service.proto b/src/proto/grpc/testing/proxy-service.proto new file mode 100644 index 0000000000..7b7de8d549 --- /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 a9f20e6d2a..cb6ca34dc6 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_health_checking/grpc_health/v1/health.py b/src/python/grpcio_health_checking/grpc_health/v1/health.py index f0f11cf84b..e92c2659b7 100644 --- a/src/python/grpcio_health_checking/grpc_health/v1/health.py +++ b/src/python/grpcio_health_checking/grpc_health/v1/health.py @@ -33,9 +33,10 @@ import threading import grpc from grpc_health.v1 import health_pb2 +from grpc_health.v1 import health_pb2_grpc -class HealthServicer(health_pb2.HealthServicer): +class HealthServicer(health_pb2_grpc.HealthServicer): """Servicer handling RPCs for service statuses.""" def __init__(self): diff --git a/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py b/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py index 363b4c5f99..1bc8669dad 100644 --- a/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py +++ b/src/python/grpcio_tests/tests/health_check/_health_servicer_test.py @@ -34,6 +34,7 @@ import grpc from grpc.framework.foundation import logging_pool from grpc_health.v1 import health from grpc_health.v1 import health_pb2 +from grpc_health.v1 import health_pb2_grpc from tests.unit.framework.common import test_constants @@ -52,11 +53,11 @@ class HealthServicerTest(unittest.TestCase): server_pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY) self._server = grpc.server(server_pool) port = self._server.add_insecure_port('[::]:0') - health_pb2.add_HealthServicer_to_server(servicer, self._server) + health_pb2_grpc.add_HealthServicer_to_server(servicer, self._server) self._server.start() channel = grpc.insecure_channel('localhost:%d' % port) - self._stub = health_pb2.HealthStub(channel) + self._stub = health_pb2_grpc.HealthStub(channel) def test_empty_service(self): request = health_pb2.HealthCheckRequest() diff --git a/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py b/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py index 58f3b364ba..3325d54375 100644 --- a/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py +++ b/src/python/grpcio_tests/tests/interop/_insecure_intraop_test.py @@ -32,7 +32,7 @@ from concurrent import futures import unittest import grpc -from src.proto.grpc.testing import test_pb2 +from src.proto.grpc.testing import test_pb2_grpc from tests.interop import _intraop_test_case from tests.interop import methods @@ -44,11 +44,11 @@ class InsecureIntraopTest(_intraop_test_case.IntraopTestCase, def setUp(self): self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) - test_pb2.add_TestServiceServicer_to_server(methods.TestService(), - self.server) + test_pb2_grpc.add_TestServiceServicer_to_server(methods.TestService(), + self.server) port = self.server.add_insecure_port('[::]:0') self.server.start() - self.stub = test_pb2.TestServiceStub( + self.stub = test_pb2_grpc.TestServiceStub( grpc.insecure_channel('localhost:{}'.format(port))) diff --git a/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py b/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py index 5fe929b99e..857e00efb3 100644 --- a/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py +++ b/src/python/grpcio_tests/tests/interop/_secure_intraop_test.py @@ -32,7 +32,7 @@ from concurrent import futures import unittest import grpc -from src.proto.grpc.testing import test_pb2 +from src.proto.grpc.testing import test_pb2_grpc from tests.interop import _intraop_test_case from tests.interop import methods @@ -45,14 +45,14 @@ class SecureIntraopTest(_intraop_test_case.IntraopTestCase, unittest.TestCase): def setUp(self): self.server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) - test_pb2.add_TestServiceServicer_to_server(methods.TestService(), - self.server) + test_pb2_grpc.add_TestServiceServicer_to_server(methods.TestService(), + self.server) port = self.server.add_secure_port( '[::]:0', grpc.ssl_server_credentials( [(resources.private_key(), resources.certificate_chain())])) self.server.start() - self.stub = test_pb2.TestServiceStub( + self.stub = test_pb2_grpc.TestServiceStub( grpc.secure_channel('localhost:{}'.format(port), grpc.ssl_channel_credentials( resources.test_root_certificates()), ( diff --git a/src/python/grpcio_tests/tests/interop/methods.py b/src/python/grpcio_tests/tests/interop/methods.py index 662ea9ce57..e1016f7c0d 100644 --- a/src/python/grpcio_tests/tests/interop/methods.py +++ b/src/python/grpcio_tests/tests/interop/methods.py @@ -40,7 +40,7 @@ from grpc.beta import implementations from src.proto.grpc.testing import empty_pb2 from src.proto.grpc.testing import messages_pb2 -from src.proto.grpc.testing import test_pb2 +from src.proto.grpc.testing import test_pb2_grpc _INITIAL_METADATA_KEY = "x-grpc-test-echo-initial" _TRAILING_METADATA_KEY = "x-grpc-test-echo-trailing-bin" @@ -66,7 +66,7 @@ def _maybe_echo_status_and_message(request, servicer_context): servicer_context.set_details(request.response_status.message) -class TestService(test_pb2.TestServiceServicer): +class TestService(test_pb2_grpc.TestServiceServicer): def EmptyCall(self, request, context): _maybe_echo_metadata(context) diff --git a/src/python/grpcio_tests/tests/interop/server.py b/src/python/grpcio_tests/tests/interop/server.py index 65f1604eb8..0ae2c97b42 100644 --- a/src/python/grpcio_tests/tests/interop/server.py +++ b/src/python/grpcio_tests/tests/interop/server.py @@ -34,7 +34,7 @@ import logging import time import grpc -from src.proto.grpc.testing import test_pb2 +from src.proto.grpc.testing import test_pb2_grpc from tests.interop import methods from tests.interop import resources @@ -53,7 +53,8 @@ def serve(): args = parser.parse_args() server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) - test_pb2.add_TestServiceServicer_to_server(methods.TestService(), server) + test_pb2_grpc.add_TestServiceServicer_to_server(methods.TestService(), + server) if args.use_tls: private_key = resources.private_key() certificate_chain = resources.certificate_chain() diff --git a/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py b/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py index db938e6545..6f9269dd40 100644 --- a/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py +++ b/src/python/grpcio_tests/tests/protoc_plugin/_split_definitions_test.py @@ -42,6 +42,7 @@ import sys import tempfile import threading import unittest +import platform import grpc from grpc_tools import protoc @@ -150,6 +151,8 @@ class CommonTestMixin(object): self.assertEqual(expected_response, response) +@unittest.skipIf(platform.python_implementation() == "PyPy", + "Skip test if run with PyPy") class SameSeparateTest(unittest.TestCase, SeparateTestMixin): def setUp(self): @@ -191,6 +194,8 @@ class SameSeparateTest(unittest.TestCase, SeparateTestMixin): shutil.rmtree(self.directory) +@unittest.skipIf(platform.python_implementation() == "PyPy", + "Skip test if run with PyPy") class SameCommonTest(unittest.TestCase, CommonTestMixin): def setUp(self): @@ -228,6 +233,8 @@ class SameCommonTest(unittest.TestCase, CommonTestMixin): shutil.rmtree(self.directory) +@unittest.skipIf(platform.python_implementation() == "PyPy", + "Skip test if run with PyPy") class SplitCommonTest(unittest.TestCase, CommonTestMixin): def setUp(self): @@ -277,6 +284,8 @@ class SplitCommonTest(unittest.TestCase, CommonTestMixin): shutil.rmtree(self.directory) +@unittest.skipIf(platform.python_implementation() == "PyPy", + "Skip test if run with PyPy") class SplitSeparateTest(unittest.TestCase, SeparateTestMixin): def setUp(self): diff --git a/src/python/grpcio_tests/tests/qps/qps_worker.py b/src/python/grpcio_tests/tests/qps/qps_worker.py index 025dfb9d4a..7cd53e7bd9 100644 --- a/src/python/grpcio_tests/tests/qps/qps_worker.py +++ b/src/python/grpcio_tests/tests/qps/qps_worker.py @@ -33,7 +33,7 @@ import time from concurrent import futures import grpc -from src.proto.grpc.testing import services_pb2 +from src.proto.grpc.testing import services_pb2_grpc from tests.qps import worker_server @@ -41,7 +41,7 @@ from tests.qps import worker_server def run_worker_server(port): server = grpc.server(futures.ThreadPoolExecutor(max_workers=5)) servicer = worker_server.WorkerServer() - services_pb2.add_WorkerServiceServicer_to_server(servicer, server) + services_pb2_grpc.add_WorkerServiceServicer_to_server(servicer, server) server.add_insecure_port('[::]:{}'.format(port)) server.start() servicer.wait_for_quit() diff --git a/src/python/grpcio_tests/tests/qps/worker_server.py b/src/python/grpcio_tests/tests/qps/worker_server.py index ca1a777611..de9535f46e 100644 --- a/src/python/grpcio_tests/tests/qps/worker_server.py +++ b/src/python/grpcio_tests/tests/qps/worker_server.py @@ -35,7 +35,7 @@ import time from concurrent import futures import grpc from src.proto.grpc.testing import control_pb2 -from src.proto.grpc.testing import services_pb2 +from src.proto.grpc.testing import services_pb2_grpc from src.proto.grpc.testing import stats_pb2 from tests.qps import benchmark_client @@ -45,7 +45,7 @@ from tests.qps import histogram from tests.unit import resources -class WorkerServer(services_pb2.WorkerServiceServicer): +class WorkerServer(services_pb2_grpc.WorkerServiceServicer): """Python Worker Server implementation.""" def __init__(self): @@ -87,8 +87,8 @@ class WorkerServer(services_pb2.WorkerServiceServicer): futures.ThreadPoolExecutor(max_workers=server_threads)) if config.server_type == control_pb2.ASYNC_SERVER: servicer = benchmark_server.BenchmarkServer() - services_pb2.add_BenchmarkServiceServicer_to_server(servicer, - server) + services_pb2_grpc.add_BenchmarkServiceServicer_to_server(servicer, + server) elif config.server_type == control_pb2.ASYNC_GENERIC_SERVER: resp_size = config.payload_config.bytebuf_params.resp_size servicer = benchmark_server.GenericBenchmarkServer(resp_size) diff --git a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py index d06ff064e2..4d73be6204 100644 --- a/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py +++ b/src/python/grpcio_tests/tests/reflection/_reflection_servicer_test.py @@ -34,6 +34,7 @@ import grpc from grpc.framework.foundation import logging_pool from grpc_reflection.v1alpha import reflection from grpc_reflection.v1alpha import reflection_pb2 +from grpc_reflection.v1alpha import reflection_pb2_grpc from google.protobuf import descriptor_pool from google.protobuf import descriptor_pb2 @@ -61,12 +62,12 @@ class ReflectionServicerTest(unittest.TestCase): server_pool = logging_pool.pool(test_constants.THREAD_CONCURRENCY) self._server = grpc.server(server_pool) port = self._server.add_insecure_port('[::]:0') - reflection_pb2.add_ServerReflectionServicer_to_server(servicer, - self._server) + reflection_pb2_grpc.add_ServerReflectionServicer_to_server(servicer, + self._server) self._server.start() channel = grpc.insecure_channel('localhost:%d' % port) - self._stub = reflection_pb2.ServerReflectionStub(channel) + self._stub = reflection_pb2_grpc.ServerReflectionStub(channel) def testFileByName(self): requests = (reflection_pb2.ServerReflectionRequest( diff --git a/src/python/grpcio_tests/tests/stress/client.py b/src/python/grpcio_tests/tests/stress/client.py index b9dbe61d44..b7eb12bff8 100644 --- a/src/python/grpcio_tests/tests/stress/client.py +++ b/src/python/grpcio_tests/tests/stress/client.py @@ -34,7 +34,7 @@ import threading import grpc from six.moves import queue -from src.proto.grpc.testing import metrics_pb2 +from src.proto.grpc.testing import metrics_pb2_grpc from src.proto.grpc.testing import test_pb2 from tests.interop import methods @@ -139,7 +139,7 @@ def run_test(args): runners = [] server = grpc.server(futures.ThreadPoolExecutor(max_workers=25)) - metrics_pb2.add_MetricsServiceServicer_to_server( + metrics_pb2_grpc.add_MetricsServiceServicer_to_server( metrics_server.MetricsServer(hist), server) server.add_insecure_port('[::]:{}'.format(args.metrics_port)) server.start() diff --git a/src/ruby/qps/proxy-worker.rb b/src/ruby/qps/proxy-worker.rb new file mode 100755 index 0000000000..077920d1d3 --- /dev/null +++ b/src/ruby/qps/proxy-worker.rb @@ -0,0 +1,160 @@ +#!/usr/bin/env ruby + +# Copyright 2017, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Proxy of worker service implementation for running a PHP client + +this_dir = File.expand_path(File.dirname(__FILE__)) +lib_dir = File.join(File.dirname(this_dir), 'lib') +$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir) +$LOAD_PATH.unshift(this_dir) unless $LOAD_PATH.include?(this_dir) + +require 'grpc' +require 'optparse' +require 'histogram' +require 'etc' +require 'facter' +require 'qps-common' +require 'src/proto/grpc/testing/services_services_pb' +require 'src/proto/grpc/testing/proxy-service_services_pb' + +class ProxyBenchmarkClientServiceImpl < Grpc::Testing::ProxyClientService::Service + def initialize(port) + @mytarget = "localhost:" + port.to_s + end + def setup(config) + @config = config + @histres = config.histogram_params.resolution + @histmax = config.histogram_params.max_possible + @histogram = Histogram.new(@histres, @histmax) + @start_time = Time.now + # TODO(vjpai): Support multiple client channels by spawning off a PHP client per channel + command = "php " + File.expand_path(File.dirname(__FILE__)) + "/../../php/tests/qps/client.php " + @mytarget + puts "Starting command: " + command + @php_pid = spawn(command) + end + def stop + Process.kill("TERM", @php_pid) + Process.wait(@php_pid) + end + def get_config(_args, _call) + puts "Answering get_config" + @config + end + def report_time(call) + puts "Starting a time reporting stream" + call.each_remote_read do |lat| + @histogram.add((lat.latency)*1e9) + end + Grpc::Testing::Void.new + end + def mark(reset) + lat = Grpc::Testing::HistogramData.new( + bucket: @histogram.contents, + min_seen: @histogram.minimum, + max_seen: @histogram.maximum, + sum: @histogram.sum, + sum_of_squares: @histogram.sum_of_squares, + count: @histogram.count + ) + elapsed = Time.now-@start_time + if reset + @start_time = Time.now + @histogram = Histogram.new(@histres, @histmax) + end + Grpc::Testing::ClientStats.new(latencies: lat, time_elapsed: elapsed) + end +end + +class ProxyWorkerServiceImpl < Grpc::Testing::WorkerService::Service + def cpu_cores + Facter.value('processors')['count'] + end + # Leave run_server unimplemented since this proxies for a client only. + # If the driver tries to use this as a server, it will get an unimplemented + # status return value. + def run_client(reqs) + q = EnumeratorQueue.new(self) + Thread.new { + reqs.each do |req| + case req.argtype.to_s + when 'setup' + @bmc.setup(req.setup) + q.push(Grpc::Testing::ClientStatus.new(stats: @bmc.mark(false))) + when 'mark' + q.push(Grpc::Testing::ClientStatus.new(stats: + @bmc.mark(req.mark.reset))) + end + end + @bmc.stop + q.push(self) + } + q.each_item + end + def core_count(_args, _call) + Grpc::Testing::CoreResponse.new(cores: cpu_cores) + end + def quit_worker(_args, _call) + Thread.new { + sleep 3 + @server.stop + } + Grpc::Testing::Void.new + end + def initialize(s, bmc) + @server = s + @bmc = bmc + end +end + +def proxymain + options = { + 'driver_port' => 0 + } + OptionParser.new do |opts| + opts.banner = 'Usage: [--driver_port <port>]' + opts.on('--driver_port PORT', '<port>') do |v| + options['driver_port'] = v + end + end.parse! + + # Configure any errors with client or server child threads to surface + Thread.abort_on_exception = true + + s = GRPC::RpcServer.new + port = s.add_http2_port("0.0.0.0:" + options['driver_port'].to_s, + :this_port_is_insecure) + bmc = ProxyBenchmarkClientServiceImpl.new(port) + s.handle(bmc) + s.handle(ProxyWorkerServiceImpl.new(s, bmc)) + s.run +end + +proxymain diff --git a/src/ruby/qps/src/proto/grpc/testing/proxy-service_pb.rb b/src/ruby/qps/src/proto/grpc/testing/proxy-service_pb.rb new file mode 100644 index 0000000000..d238198cca --- /dev/null +++ b/src/ruby/qps/src/proto/grpc/testing/proxy-service_pb.rb @@ -0,0 +1,17 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: src/proto/grpc/testing/proxy-service.proto + +require 'google/protobuf' + +require 'src/proto/grpc/testing/control_pb' +Google::Protobuf::DescriptorPool.generated_pool.build do + add_message "grpc.testing.ProxyStat" do + optional :latency, :double, 1 + end +end + +module Grpc + module Testing + ProxyStat = Google::Protobuf::DescriptorPool.generated_pool.lookup("grpc.testing.ProxyStat").msgclass + end +end diff --git a/src/ruby/qps/src/proto/grpc/testing/proxy-service_services_pb.rb b/src/ruby/qps/src/proto/grpc/testing/proxy-service_services_pb.rb new file mode 100644 index 0000000000..37ddbf5b03 --- /dev/null +++ b/src/ruby/qps/src/proto/grpc/testing/proxy-service_services_pb.rb @@ -0,0 +1,55 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# Source: src/proto/grpc/testing/proxy-service.proto for package 'grpc.testing' +# Original file comments: +# Copyright 2017, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +require 'grpc' +require 'src/proto/grpc/testing/proxy-service_pb' + +module Grpc + module Testing + module ProxyClientService + class Service + + include GRPC::GenericService + + self.marshal_class_method = :encode + self.unmarshal_class_method = :decode + self.service_name = 'grpc.testing.ProxyClientService' + + rpc :GetConfig, Void, ClientConfig + rpc :ReportTime, stream(ProxyStat), Void + end + + Stub = Service.rpc_stub_class + end + end +end diff --git a/templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template b/templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template index 6204c3e2cb..12b9984425 100644 --- a/templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template +++ b/templates/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile.template @@ -33,7 +33,7 @@ <%include file="../../go_path.include"/> <%include file="../../python_deps.include"/> - RUN pip install twisted h2 + RUN pip install twisted h2 hyper # Define the default command. CMD ["bash"] diff --git a/test/core/bad_client/bad_client.c b/test/core/bad_client/bad_client.c index fdedfe284e..4870dc1a53 100644 --- a/test/core/bad_client/bad_client.c +++ b/test/core/bad_client/bad_client.c @@ -163,8 +163,9 @@ void grpc_run_bad_client_test( gpr_event_wait(&a.done_write, grpc_timeout_seconds_to_deadline(5))); if (flags & GRPC_BAD_CLIENT_DISCONNECT) { - grpc_endpoint_shutdown(&exec_ctx, sfd.client, - GRPC_ERROR_CREATE("Forced Disconnect")); + grpc_endpoint_shutdown( + &exec_ctx, sfd.client, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Forced Disconnect")); grpc_endpoint_destroy(&exec_ctx, sfd.client); grpc_exec_ctx_finish(&exec_ctx); sfd.client = NULL; @@ -190,8 +191,9 @@ void grpc_run_bad_client_test( grpc_slice_buffer_destroy_internal(&exec_ctx, &args.incoming); } // Shutdown. - grpc_endpoint_shutdown(&exec_ctx, sfd.client, - GRPC_ERROR_CREATE("Test Shutdown")); + grpc_endpoint_shutdown( + &exec_ctx, sfd.client, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test Shutdown")); grpc_endpoint_destroy(&exec_ctx, sfd.client); grpc_exec_ctx_finish(&exec_ctx); } diff --git a/test/core/channel/channel_stack_test.c b/test/core/channel/channel_stack_test.c index 76bb57346c..af551c4928 100644 --- a/test/core/channel/channel_stack_test.c +++ b/test/core/channel/channel_stack_test.c @@ -68,7 +68,7 @@ static void channel_destroy_func(grpc_exec_ctx *exec_ctx, static void call_destroy_func(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *ignored) { + grpc_closure *ignored) { ++*(int *)(elem->channel_data); } @@ -139,10 +139,16 @@ static void test_create_channel_stack(void) { GPR_ASSERT(*channel_data == 0); call_stack = gpr_malloc(channel_stack->call_stack_size); - grpc_error *error = - grpc_call_stack_init(&exec_ctx, channel_stack, 1, free_call, call_stack, - NULL, NULL, path, gpr_now(GPR_CLOCK_MONOTONIC), - gpr_inf_future(GPR_CLOCK_MONOTONIC), call_stack); + const grpc_call_element_args args = { + .call_stack = call_stack, + .server_transport_data = NULL, + .context = NULL, + .path = path, + .start_time = gpr_now(GPR_CLOCK_MONOTONIC), + .deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC), + .arena = NULL}; + grpc_error *error = grpc_call_stack_init(&exec_ctx, channel_stack, 1, + free_call, call_stack, &args); GPR_ASSERT(error == GRPC_ERROR_NONE); GPR_ASSERT(call_stack->count == 1); call_elem = grpc_call_stack_element(call_stack, 0); diff --git a/test/core/client_channel/BUILD b/test/core/client_channel/BUILD index a29e9aca4e..55a74c6d01 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/resolvers/dns_resolver_connectivity_test.c b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c index 187757d5b3..b85ca89337 100644 --- a/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c +++ b/test/core/client_channel/resolvers/dns_resolver_connectivity_test.c @@ -55,7 +55,7 @@ static grpc_error *my_resolve_address(const char *name, const char *addr, if (g_fail_resolution) { g_fail_resolution = false; gpr_mu_unlock(&g_mu); - return GRPC_ERROR_CREATE("Forced Failure"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Forced Failure"); } else { gpr_mu_unlock(&g_mu); *addrs = gpr_malloc(sizeof(**addrs)); 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 a0a33667cc..0000000000 --- a/test/core/client_channel/set_initial_connect_string_test.c +++ /dev/null @@ -1,268 +0,0 @@ -/* - * - * Copyright 2015, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/* With the addition of a libuv endpoint, sockaddr.h now includes uv.h when - using that endpoint. Because of various transitive includes in uv.h, - including windows.h on Windows, uv.h must be included before other system - headers. Therefore, sockaddr.h must always be included first */ -#include "src/core/lib/iomgr/sockaddr.h" - -#include <string.h> - -#include <grpc/grpc.h> -#include <grpc/slice.h> -#include <grpc/support/alloc.h> -#include <grpc/support/host_port.h> -#include <grpc/support/log.h> -#include <grpc/support/thd.h> - -#include "src/core/ext/client_channel/initial_connect_string.h" -#include "src/core/lib/iomgr/sockaddr.h" -#include "src/core/lib/security/credentials/fake/fake_credentials.h" -#include "src/core/lib/slice/slice_string_helpers.h" -#include "src/core/lib/support/string.h" -#include "test/core/util/port.h" -#include "test/core/util/test_config.h" -#include "test/core/util/test_tcp_server.h" - -struct rpc_state { - char *target; - grpc_channel_credentials *creds; - grpc_completion_queue *cq; - grpc_channel *channel; - grpc_call *call; - grpc_op op; - grpc_slice_buffer incoming_buffer; - grpc_slice_buffer temp_incoming_buffer; - grpc_endpoint *tcp; - gpr_atm done_atm; -}; - -static const char *magic_connect_string = "magic initial string"; -static int server_port; -static struct rpc_state state; -static grpc_closure on_read; - -static void handle_read(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { - GPR_ASSERT(error == GRPC_ERROR_NONE); - grpc_slice_buffer_move_into(&state.temp_incoming_buffer, - &state.incoming_buffer); - gpr_log(GPR_DEBUG, "got %" PRIuPTR " bytes, magic is %" PRIuPTR " bytes", - state.incoming_buffer.length, strlen(magic_connect_string)); - if (state.incoming_buffer.length > strlen(magic_connect_string)) { - gpr_atm_rel_store(&state.done_atm, 1); - grpc_endpoint_shutdown( - exec_ctx, state.tcp, - GRPC_ERROR_CREATE("Incoming buffer longer than magic_connect_string")); - grpc_endpoint_destroy(exec_ctx, state.tcp); - } else { - grpc_endpoint_read(exec_ctx, state.tcp, &state.temp_incoming_buffer, - &on_read); - } -} - -static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp, - grpc_pollset *accepting_pollset, - grpc_tcp_server_acceptor *acceptor) { - gpr_free(acceptor); - test_tcp_server *server = arg; - grpc_closure_init(&on_read, handle_read, NULL, grpc_schedule_on_exec_ctx); - grpc_slice_buffer_init(&state.incoming_buffer); - grpc_slice_buffer_init(&state.temp_incoming_buffer); - state.tcp = tcp; - grpc_endpoint_add_to_pollset(exec_ctx, tcp, server->pollset); - grpc_endpoint_read(exec_ctx, tcp, &state.temp_incoming_buffer, &on_read); -} - -static void set_magic_initial_string(grpc_resolved_address **addr, - grpc_slice *connect_string) { - GPR_ASSERT(addr); - GPR_ASSERT((*addr)->len); - *connect_string = grpc_slice_from_copied_string(magic_connect_string); -} - -static void reset_addr_and_set_magic_string(grpc_resolved_address **addr, - grpc_slice *connect_string) { - struct sockaddr_in target; - *connect_string = grpc_slice_from_copied_string(magic_connect_string); - gpr_free(*addr); - target.sin_family = AF_INET; - target.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - target.sin_port = htons((uint16_t)server_port); - *addr = (grpc_resolved_address *)gpr_malloc(sizeof(grpc_resolved_address)); - (*addr)->len = sizeof(target); - memcpy((*addr)->addr, &target, sizeof(target)); -} - -static gpr_timespec n_sec_deadline(int seconds) { - return gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), - gpr_time_from_seconds(seconds, GPR_TIMESPAN)); -} - -static void start_rpc(int use_creds, int target_port) { - state.cq = grpc_completion_queue_create(NULL); - if (use_creds) { - state.creds = grpc_fake_transport_security_credentials_create(); - } else { - state.creds = NULL; - } - gpr_join_host_port(&state.target, "127.0.0.1", target_port); - if (use_creds) { - state.channel = - grpc_secure_channel_create(state.creds, state.target, NULL, NULL); - } else { - state.channel = grpc_insecure_channel_create(state.target, NULL, NULL); - } - grpc_slice host = grpc_slice_from_static_string("localhost"); - state.call = grpc_channel_create_call( - state.channel, NULL, GRPC_PROPAGATE_DEFAULTS, state.cq, - grpc_slice_from_static_string("/Service/Method"), &host, - gpr_inf_future(GPR_CLOCK_REALTIME), NULL); - memset(&state.op, 0, sizeof(state.op)); - state.op.op = GRPC_OP_SEND_INITIAL_METADATA; - state.op.data.send_initial_metadata.count = 0; - state.op.flags = 0; - state.op.reserved = NULL; - GPR_ASSERT(GRPC_CALL_OK == grpc_call_start_batch(state.call, &state.op, - (size_t)(1), NULL, NULL)); - grpc_completion_queue_next(state.cq, n_sec_deadline(5), NULL); -} - -static void cleanup_rpc(void) { - grpc_event ev; - grpc_slice_buffer_destroy(&state.incoming_buffer); - grpc_slice_buffer_destroy(&state.temp_incoming_buffer); - grpc_channel_credentials_release(state.creds); - grpc_call_destroy(state.call); - grpc_completion_queue_shutdown(state.cq); - do { - ev = grpc_completion_queue_next(state.cq, n_sec_deadline(1), NULL); - } while (ev.type != GRPC_QUEUE_SHUTDOWN); - grpc_completion_queue_destroy(state.cq); - grpc_channel_destroy(state.channel); - gpr_free(state.target); -} - -typedef struct { - test_tcp_server *server; - gpr_event *signal_when_done; -} poll_args; - -static void actually_poll_server(void *arg) { - poll_args *pa = arg; - gpr_timespec deadline = n_sec_deadline(10); - while (true) { - bool done = gpr_atm_acq_load(&state.done_atm) != 0; - gpr_timespec time_left = - gpr_time_sub(deadline, gpr_now(GPR_CLOCK_REALTIME)); - gpr_log(GPR_DEBUG, "done=%d, time_left=%" PRId64 ".%09" PRId32, done, - time_left.tv_sec, time_left.tv_nsec); - if (done || gpr_time_cmp(time_left, gpr_time_0(GPR_TIMESPAN)) < 0) { - break; - } - test_tcp_server_poll(pa->server, 1); - } - gpr_event_set(pa->signal_when_done, (void *)1); - gpr_free(pa); -} - -static void poll_server_until_read_done(test_tcp_server *server, - gpr_event *signal_when_done) { - gpr_atm_rel_store(&state.done_atm, 0); - gpr_thd_id id; - poll_args *pa = gpr_malloc(sizeof(*pa)); - pa->server = server; - pa->signal_when_done = signal_when_done; - gpr_thd_new(&id, actually_poll_server, pa, NULL); -} - -static void match_initial_magic_string(grpc_slice_buffer *buffer) { - size_t i, j, cmp_length; - size_t magic_length = strlen(magic_connect_string); - GPR_ASSERT(buffer->length >= magic_length); - for (i = 0, j = 0; i < state.incoming_buffer.count && j < magic_length; i++) { - char *dump = grpc_slice_to_c_string(state.incoming_buffer.slices[i]); - cmp_length = GPR_MIN(strlen(dump), magic_length - j); - GPR_ASSERT(strncmp(dump, magic_connect_string + j, cmp_length) == 0); - j += cmp_length; - gpr_free(dump); - } -} - -static void test_initial_string(test_tcp_server *server, int secure) { - gpr_event ev; - gpr_event_init(&ev); - grpc_test_set_initial_connect_string_function(set_magic_initial_string); - poll_server_until_read_done(server, &ev); - start_rpc(secure, server_port); - gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); - match_initial_magic_string(&state.incoming_buffer); - cleanup_rpc(); -} - -static void test_initial_string_with_redirect(test_tcp_server *server, - int secure) { - gpr_event ev; - gpr_event_init(&ev); - int another_port = grpc_pick_unused_port_or_die(); - grpc_test_set_initial_connect_string_function( - reset_addr_and_set_magic_string); - poll_server_until_read_done(server, &ev); - start_rpc(secure, another_port); - gpr_event_wait(&ev, gpr_inf_future(GPR_CLOCK_REALTIME)); - match_initial_magic_string(&state.incoming_buffer); - cleanup_rpc(); -} - -static void run_test(void (*test)(test_tcp_server *server, int secure), - int secure) { - test_tcp_server test_server; - server_port = grpc_pick_unused_port_or_die(); - test_tcp_server_init(&test_server, on_connect, &test_server); - test_tcp_server_start(&test_server, server_port); - test(&test_server, secure); - test_tcp_server_destroy(&test_server); -} - -int main(int argc, char **argv) { - grpc_test_init(argc, argv); - grpc_init(); - - run_test(test_initial_string, 0); - run_test(test_initial_string, 1); - run_test(test_initial_string_with_redirect, 0); - run_test(test_initial_string_with_redirect, 1); - - grpc_shutdown(); - return 0; -} diff --git a/test/core/end2end/bad_server_response_test.c b/test/core/end2end/bad_server_response_test.c index 39a98e84ca..c37a292af9 100644 --- a/test/core/end2end/bad_server_response_test.c +++ b/test/core/end2end/bad_server_response_test.c @@ -303,7 +303,7 @@ static void run_test(const char *response_payload, /* clean up */ grpc_endpoint_shutdown(&exec_ctx, state.tcp, - GRPC_ERROR_CREATE("Test Shutdown")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test Shutdown")); grpc_endpoint_destroy(&exec_ctx, state.tcp); cleanup_rpc(&exec_ctx); grpc_exec_ctx_finish(&exec_ctx); diff --git a/test/core/end2end/end2end_tests.h b/test/core/end2end/end2end_tests.h index cb0afd9cd9..cdb26a67e9 100644 --- a/test/core/end2end/end2end_tests.h +++ b/test/core/end2end/end2end_tests.h @@ -39,12 +39,15 @@ typedef struct grpc_end2end_test_fixture grpc_end2end_test_fixture; typedef struct grpc_end2end_test_config grpc_end2end_test_config; +/* Test feature flags. */ #define FEATURE_MASK_SUPPORTS_DELAYED_CONNECTION 1 #define FEATURE_MASK_SUPPORTS_HOSTNAME_VERIFICATION 2 #define FEATURE_MASK_SUPPORTS_PER_CALL_CREDENTIALS 4 #define FEATURE_MASK_SUPPORTS_REQUEST_PROXYING 8 #define FEATURE_MASK_SUPPORTS_CLIENT_CHANNEL 16 #define FEATURE_MASK_SUPPORTS_AUTHORITY_HEADER 32 +#define FEATURE_MASK_DOES_NOT_SUPPORT_RESOURCE_QUOTA_SERVER 64 +#define FEATURE_MASK_DOES_NOT_SUPPORT_NETWORK_STATUS_CHANGE 128 #define FAIL_AUTH_CHECK_SERVER_ARG_NAME "fail_auth_check" @@ -56,8 +59,12 @@ struct grpc_end2end_test_fixture { }; struct grpc_end2end_test_config { + /* A descriptive name for this test fixture. */ const char *name; + + /* Which features are supported by this fixture. See feature flags above. */ uint32_t feature_mask; + grpc_end2end_test_fixture (*create_fixture)(grpc_channel_args *client_args, grpc_channel_args *server_args); void (*init_client)(grpc_end2end_test_fixture *f, diff --git a/test/core/end2end/fixtures/http_proxy_fixture.c b/test/core/end2end/fixtures/http_proxy_fixture.c index bcd1c9914b..451ed268d3 100644 --- a/test/core/end2end/fixtures/http_proxy_fixture.c +++ b/test/core/end2end/fixtures/http_proxy_fixture.c @@ -342,7 +342,7 @@ static void on_read_request_done(grpc_exec_ctx* exec_ctx, void* arg, char* msg; gpr_asprintf(&msg, "HTTP proxy got request method %s", conn->http_request.method); - error = GRPC_ERROR_CREATE(msg); + error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg); gpr_free(msg); proxy_connection_failed(exec_ctx, conn, true /* is_client */, "HTTP proxy read request", error); diff --git a/test/core/end2end/fuzzers/api_fuzzer.c b/test/core/end2end/fuzzers/api_fuzzer.c index 0de8b9459a..9cc3f56437 100644 --- a/test/core/end2end/fuzzers/api_fuzzer.c +++ b/test/core/end2end/fuzzers/api_fuzzer.c @@ -390,9 +390,9 @@ static void finish_resolve(grpc_exec_ctx *exec_ctx, void *arg, *r->addrs = addrs; grpc_closure_sched(exec_ctx, r->on_done, GRPC_ERROR_NONE); } else { - grpc_closure_sched( - exec_ctx, r->on_done, - GRPC_ERROR_CREATE_REFERENCING("Resolution failed", &error, 1)); + grpc_closure_sched(exec_ctx, r->on_done, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Resolution failed", &error, 1)); } gpr_free(r->addr); @@ -461,8 +461,8 @@ static void sched_connect(grpc_exec_ctx *exec_ctx, grpc_closure *closure, grpc_endpoint **ep, gpr_timespec deadline) { if (gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) < 0) { *ep = NULL; - grpc_closure_sched(exec_ctx, closure, - GRPC_ERROR_CREATE("Connect deadline exceeded")); + grpc_closure_sched(exec_ctx, closure, GRPC_ERROR_CREATE_FROM_STATIC_STRING( + "Connect deadline exceeded")); return; } diff --git a/test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6723650944237568 b/test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6723650944237568 Binary files differnew file mode 100644 index 0000000000..e140fdc705 --- /dev/null +++ b/test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6723650944237568 diff --git a/test/core/end2end/goaway_server_test.c b/test/core/end2end/goaway_server_test.c index a9634bfbae..4bb258e3ed 100644 --- a/test/core/end2end/goaway_server_test.c +++ b/test/core/end2end/goaway_server_test.c @@ -71,7 +71,7 @@ static grpc_error *my_resolve_address(const char *name, const char *addr, gpr_mu_lock(&g_mu); if (g_resolve_port < 0) { gpr_mu_unlock(&g_mu); - return GRPC_ERROR_CREATE("Forced Failure"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Forced Failure"); } else { *addrs = gpr_malloc(sizeof(**addrs)); (*addrs)->naddrs = 1; diff --git a/test/core/end2end/tests/filter_call_init_fails.c b/test/core/end2end/tests/filter_call_init_fails.c index d2d6e82d57..ebfe3b03dc 100644 --- a/test/core/end2end/tests/filter_call_init_fails.c +++ b/test/core/end2end/tests/filter_call_init_fails.c @@ -206,14 +206,14 @@ static void test_request(grpc_end2end_test_config config) { static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_element_args *args) { - return grpc_error_set_int(GRPC_ERROR_CREATE("access denied"), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_PERMISSION_DENIED); + return grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("access denied"), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_PERMISSION_DENIED); } static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *and_free_memory) {} + grpc_closure *ignored) {} static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, diff --git a/test/core/end2end/tests/filter_causes_close.c b/test/core/end2end/tests/filter_causes_close.c index 25e606556d..e6b02eaeee 100644 --- a/test/core/end2end/tests/filter_causes_close.c +++ b/test/core/end2end/tests/filter_causes_close.c @@ -210,7 +210,7 @@ static void recv_im_ready(grpc_exec_ctx *exec_ctx, void *arg, call_data *calld = elem->call_data; grpc_closure_sched( exec_ctx, calld->recv_im_ready, - grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING( + grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( "Failure that's not preventable.", &error, 1), GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_PERMISSION_DENIED)); @@ -236,7 +236,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *and_free_memory) {} + grpc_closure *ignored) {} static grpc_error *init_channel_elem(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, diff --git a/test/core/end2end/tests/filter_latency.c b/test/core/end2end/tests/filter_latency.c index d05e9e79a1..2428c92a42 100644 --- a/test/core/end2end/tests/filter_latency.c +++ b/test/core/end2end/tests/filter_latency.c @@ -267,7 +267,7 @@ static grpc_error *init_call_elem(grpc_exec_ctx *exec_ctx, static void client_destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *and_free_memory) { + grpc_closure *ignored) { gpr_mu_lock(&g_mu); g_client_latency = final_info->stats.latency; gpr_mu_unlock(&g_mu); @@ -276,7 +276,7 @@ static void client_destroy_call_elem(grpc_exec_ctx *exec_ctx, static void server_destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, const grpc_call_final_info *final_info, - void *and_free_memory) { + grpc_closure *ignored) { gpr_mu_lock(&g_mu); g_server_latency = final_info->stats.latency; gpr_mu_unlock(&g_mu); diff --git a/test/core/end2end/tests/network_status_change.c b/test/core/end2end/tests/network_status_change.c index 7540ce93a1..d7a4106459 100644 --- a/test/core/end2end/tests/network_status_change.c +++ b/test/core/end2end/tests/network_status_change.c @@ -240,6 +240,10 @@ static void test_invoke_network_status_change(grpc_end2end_test_config config) { } void network_status_change(grpc_end2end_test_config config) { + if (config.feature_mask & + FEATURE_MASK_DOES_NOT_SUPPORT_NETWORK_STATUS_CHANGE) { + return; + } test_invoke_network_status_change(config); } diff --git a/test/core/end2end/tests/resource_quota_server.c b/test/core/end2end/tests/resource_quota_server.c index 4f9ed7a3a1..db26b4480e 100644 --- a/test/core/end2end/tests/resource_quota_server.c +++ b/test/core/end2end/tests/resource_quota_server.c @@ -113,6 +113,10 @@ static grpc_slice generate_random_slice() { } void resource_quota_server(grpc_end2end_test_config config) { + if (config.feature_mask & + FEATURE_MASK_DOES_NOT_SUPPORT_RESOURCE_QUOTA_SERVER) { + return; + } grpc_resource_quota *resource_quota = grpc_resource_quota_create("test_server"); grpc_resource_quota_resize(resource_quota, 5 * 1024 * 1024); diff --git a/test/core/iomgr/endpoint_tests.c b/test/core/iomgr/endpoint_tests.c index 94067a8ca4..e274796e23 100644 --- a/test/core/iomgr/endpoint_tests.c +++ b/test/core/iomgr/endpoint_tests.c @@ -233,11 +233,13 @@ static void read_and_write_test(grpc_endpoint_test_config config, if (shutdown) { gpr_log(GPR_DEBUG, "shutdown read"); - grpc_endpoint_shutdown(&exec_ctx, state.read_ep, - GRPC_ERROR_CREATE("Test Shutdown")); + grpc_endpoint_shutdown( + &exec_ctx, state.read_ep, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test Shutdown")); gpr_log(GPR_DEBUG, "shutdown write"); - grpc_endpoint_shutdown(&exec_ctx, state.write_ep, - GRPC_ERROR_CREATE("Test Shutdown")); + grpc_endpoint_shutdown( + &exec_ctx, state.write_ep, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test Shutdown")); } grpc_exec_ctx_flush(&exec_ctx); @@ -299,7 +301,7 @@ static void multiple_shutdown_test(grpc_endpoint_test_config config) { grpc_schedule_on_exec_ctx)); wait_for_fail_count(&exec_ctx, &fail_count, 0); grpc_endpoint_shutdown(&exec_ctx, f.client_ep, - GRPC_ERROR_CREATE("Test Shutdown")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test Shutdown")); wait_for_fail_count(&exec_ctx, &fail_count, 1); grpc_endpoint_read(&exec_ctx, f.client_ep, &slice_buffer, grpc_closure_create(inc_on_failure, &fail_count, @@ -311,7 +313,7 @@ static void multiple_shutdown_test(grpc_endpoint_test_config config) { grpc_schedule_on_exec_ctx)); wait_for_fail_count(&exec_ctx, &fail_count, 3); grpc_endpoint_shutdown(&exec_ctx, f.client_ep, - GRPC_ERROR_CREATE("Test Shutdown")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test Shutdown")); wait_for_fail_count(&exec_ctx, &fail_count, 3); grpc_slice_buffer_destroy_internal(&exec_ctx, &slice_buffer); diff --git a/test/core/iomgr/error_test.c b/test/core/iomgr/error_test.c index 2a6b1b17fd..5c60a4ddb8 100644 --- a/test/core/iomgr/error_test.c +++ b/test/core/iomgr/error_test.c @@ -44,7 +44,7 @@ #include "test/core/util/test_config.h" static void test_set_get_int() { - grpc_error* error = GRPC_ERROR_CREATE("Test"); + grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test"); GPR_ASSERT(error); intptr_t i = 0; GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_FILE_LINE, &i)); @@ -66,26 +66,27 @@ static void test_set_get_int() { } static void test_set_get_str() { - grpc_error* error = GRPC_ERROR_CREATE("Test"); + grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test"); - GPR_ASSERT(!grpc_error_get_str(error, GRPC_ERROR_STR_SYSCALL)); - GPR_ASSERT(!grpc_error_get_str(error, GRPC_ERROR_STR_TSI_ERROR)); + grpc_slice str; + GPR_ASSERT(!grpc_error_get_str(error, GRPC_ERROR_STR_SYSCALL, &str)); + GPR_ASSERT(!grpc_error_get_str(error, GRPC_ERROR_STR_TSI_ERROR, &str)); - 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 + GPR_ASSERT(grpc_error_get_str(error, GRPC_ERROR_STR_FILE, &str)); + GPR_ASSERT(strstr((char*)GRPC_SLICE_START_PTR(str), + "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")); + GPR_ASSERT(grpc_error_get_str(error, GRPC_ERROR_STR_DESCRIPTION, &str)); + GPR_ASSERT(!strncmp((char*)GRPC_SLICE_START_PTR(str), "Test", + GRPC_SLICE_LENGTH(str))); - 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")); + error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_static_string("longer message")); + GPR_ASSERT(grpc_error_get_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, &str)); + GPR_ASSERT(!strncmp((char*)GRPC_SLICE_START_PTR(str), "longer message", + GRPC_SLICE_LENGTH(str))); GRPC_ERROR_UNREF(error); } @@ -93,26 +94,28 @@ static void test_set_get_str() { 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")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Test"), GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_static_string("message")); + grpc_slice str; + GPR_ASSERT(grpc_error_get_str(error1, GRPC_ERROR_STR_GRPC_MESSAGE, &str)); + GPR_ASSERT(!strncmp((char*)GRPC_SLICE_START_PTR(str), "message", + GRPC_SLICE_LENGTH(str))); // 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"); + grpc_error* error3 = grpc_error_set_str( + error1, GRPC_ERROR_STR_SYSCALL, grpc_slice_from_static_string("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")); + GPR_ASSERT(grpc_error_get_str(error3, GRPC_ERROR_STR_GRPC_MESSAGE, &str)); + GPR_ASSERT(!strncmp((char*)GRPC_SLICE_START_PTR(str), "message", + GRPC_SLICE_LENGTH(str))); // 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")); + GPR_ASSERT(!grpc_error_get_str(error1, GRPC_ERROR_STR_SYSCALL, &str)); + GPR_ASSERT(grpc_error_get_str(error3, GRPC_ERROR_STR_SYSCALL, &str)); + GPR_ASSERT(!strncmp((char*)GRPC_SLICE_START_PTR(str), "syscall", + GRPC_SLICE_LENGTH(str))); GRPC_ERROR_UNREF(error1); GRPC_ERROR_UNREF(error3); @@ -120,8 +123,10 @@ static void test_copy_and_unref() { 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); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child"), + GRPC_ERROR_STR_GRPC_MESSAGE, grpc_slice_from_static_string("message")); + grpc_error* parent = + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Parent", &child, 1); GPR_ASSERT(parent); GRPC_ERROR_UNREF(child); @@ -130,14 +135,18 @@ static void test_create_referencing() { 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); + children[0] = grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child1"), + GRPC_ERROR_STR_GRPC_MESSAGE, grpc_slice_from_static_string("message")); + children[1] = + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child2"), + GRPC_ERROR_INT_HTTP2_ERROR, 5); + children[2] = grpc_error_set_str( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Child3"), + GRPC_ERROR_STR_GRPC_MESSAGE, grpc_slice_from_static_string("message 3")); + + grpc_error* parent = + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Parent", children, 3); GPR_ASSERT(parent); for (size_t i = 0; i < 3; ++i) { @@ -148,10 +157,11 @@ static void test_create_referencing_many() { static void print_error_string() { grpc_error* error = - grpc_error_set_int(GRPC_ERROR_CREATE("Error"), GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_UNIMPLEMENTED); + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("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"); + error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_static_string("message")); // gpr_log(GPR_DEBUG, "%s", grpc_error_string(error)); GRPC_ERROR_UNREF(error); } @@ -159,15 +169,18 @@ static void print_error_string() { 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"); + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("1"), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNIMPLEMENTED), + GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_static_string("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_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("2sd"), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_INTERNAL), + GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_static_string("message for child 2")); - grpc_error* parent = GRPC_ERROR_CREATE_REFERENCING("Parent", children, 2); + grpc_error* parent = + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Parent", children, 2); gpr_log(GPR_DEBUG, "%s", grpc_error_string(parent)); @@ -186,15 +199,17 @@ static void test_os_error() { 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_slice str; + GPR_ASSERT(grpc_error_get_str(error, GRPC_ERROR_STR_SYSCALL, &str)); + GPR_ASSERT(!strncmp((char*)GRPC_SLICE_START_PTR(str), syscall, + GRPC_SLICE_LENGTH(str))); 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")); + error = grpc_error_add_child( + error, GRPC_ERROR_CREATE_FROM_STATIC_STRING("test child")); intptr_t i; GPR_ASSERT(grpc_error_get_int(error, GRPC_ERROR_INT_GRPC_STATUS, &i)); GPR_ASSERT(i == GRPC_STATUS_OK); diff --git a/test/core/iomgr/ev_epoll_linux_test.c b/test/core/iomgr/ev_epoll_linux_test.c index 4ec959995b..d69f9a9d15 100644 --- a/test/core/iomgr/ev_epoll_linux_test.c +++ b/test/core/iomgr/ev_epoll_linux_test.c @@ -90,7 +90,7 @@ static void test_fd_cleanup(grpc_exec_ctx *exec_ctx, test_fd *tfds, for (i = 0; i < num_fds; i++) { grpc_fd_shutdown(exec_ctx, tfds[i].fd, - GRPC_ERROR_CREATE("test_fd_cleanup")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("test_fd_cleanup")); grpc_exec_ctx_flush(exec_ctx); grpc_fd_orphan(exec_ctx, tfds[i].fd, NULL, &release_fd, "test_fd_cleanup"); diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c index c1a0ef54d3..81d2692a08 100644 --- a/test/core/iomgr/fd_posix_test.c +++ b/test/core/iomgr/fd_posix_test.c @@ -133,7 +133,7 @@ static void session_shutdown_cb(grpc_exec_ctx *exec_ctx, void *arg, /*session */ gpr_free(se); /* Start to shutdown listen fd. */ grpc_fd_shutdown(exec_ctx, sv->em_fd, - GRPC_ERROR_CREATE("session_shutdown_cb")); + GRPC_ERROR_CREATE_FROM_STATIC_STRING("session_shutdown_cb")); } /* Called when data become readable in a session. */ diff --git a/test/core/iomgr/pollset_set_test.c b/test/core/iomgr/pollset_set_test.c index f27e9db8c9..3a9d459579 100644 --- a/test/core/iomgr/pollset_set_test.c +++ b/test/core/iomgr/pollset_set_test.c @@ -143,7 +143,8 @@ static void cleanup_test_fds(grpc_exec_ctx *exec_ctx, test_fd *tfds, int release_fd; for (int i = 0; i < num_fds; i++) { - grpc_fd_shutdown(exec_ctx, tfds[i].fd, GRPC_ERROR_CREATE("fd cleanup")); + grpc_fd_shutdown(exec_ctx, tfds[i].fd, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("fd cleanup")); grpc_exec_ctx_flush(exec_ctx); /* grpc_fd_orphan frees the memory allocated for grpc_fd. Normally it also diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c index b324b5a65e..2fae6774e8 100644 --- a/test/core/iomgr/tcp_client_posix_test.c +++ b/test/core/iomgr/tcp_client_posix_test.c @@ -77,8 +77,9 @@ 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_ERROR_CREATE("must_succeed called")); + grpc_endpoint_shutdown( + exec_ctx, g_connecting, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("must_succeed called")); grpc_endpoint_destroy(exec_ctx, g_connecting); g_connecting = NULL; finish_connection(); diff --git a/test/core/iomgr/tcp_client_uv_test.c b/test/core/iomgr/tcp_client_uv_test.c index f8938d0abb..92fc393422 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,9 @@ 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_FROM_STATIC_STRING("must_succeed called")); grpc_endpoint_destroy(exec_ctx, g_connecting); g_connecting = NULL; finish_connection(); @@ -133,7 +135,7 @@ void test_succeeds(void) { "pollset_work", grpc_pollset_work(&exec_ctx, g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC), - GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5)))); + grpc_timeout_seconds_to_deadline(5)))); gpr_mu_unlock(g_mu); grpc_exec_ctx_flush(&exec_ctx); gpr_mu_lock(g_mu); diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c index 6e514324a5..112743b95b 100644 --- a/test/core/iomgr/tcp_server_posix_test.c +++ b/test/core/iomgr/tcp_server_posix_test.c @@ -163,7 +163,8 @@ static void test_addr_init_str(test_addr *addr) { 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_ERROR_CREATE("Connected")); + grpc_endpoint_shutdown(exec_ctx, tcp, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Connected")); grpc_endpoint_destroy(exec_ctx, tcp); on_connect_result temp_result; @@ -285,7 +286,7 @@ static grpc_error *tcp_connect(grpc_exec_ctx *exec_ctx, const test_addr *remote, if (g_nconnects != nconnects_before + 1) { gpr_mu_unlock(g_mu); close(clifd); - return GRPC_ERROR_CREATE("Didn't connect"); + return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Didn't connect"); } close(clifd); *result = g_result; diff --git a/test/core/iomgr/tcp_server_uv_test.c b/test/core/iomgr/tcp_server_uv_test.c index 7b458c90f3..1e039585c1 100644 --- a/test/core/iomgr/tcp_server_uv_test.c +++ b/test/core/iomgr/tcp_server_uv_test.c @@ -115,7 +115,8 @@ 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_FROM_STATIC_STRING("Connected")); grpc_endpoint_destroy(exec_ctx, tcp); on_connect_result temp_result; @@ -203,7 +204,7 @@ static void close_cb(uv_handle_t *handle) { gpr_free(handle); } static void tcp_connect(grpc_exec_ctx *exec_ctx, const struct sockaddr *remote, socklen_t remote_len, on_connect_result *result) { - gpr_timespec deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10); + gpr_timespec deadline = grpc_timeout_seconds_to_deadline(10); uv_tcp_t *client_handle = gpr_malloc(sizeof(uv_tcp_t)); uv_connect_t *req = gpr_malloc(sizeof(uv_connect_t)); int nconnects_before; diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c index d57a37b2a9..396ec959cd 100644 --- a/test/core/iomgr/udp_server_test.c +++ b/test/core/iomgr/udp_server_test.c @@ -62,8 +62,7 @@ static int g_number_of_writes = 0; static int g_number_of_bytes_read = 0; static int g_number_of_orphan_calls = 0; -static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, - grpc_server *server) { +static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, void *user_data) { char read_buffer[512]; ssize_t byte_count; @@ -79,7 +78,7 @@ static void on_read(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, gpr_mu_unlock(g_mu); } -static void on_write(grpc_exec_ctx *exec_ctx, grpc_fd *emfd) { +static void on_write(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, void *user_data) { gpr_mu_lock(g_mu); g_number_of_writes++; @@ -88,7 +87,8 @@ static void on_write(grpc_exec_ctx *exec_ctx, grpc_fd *emfd) { gpr_mu_unlock(g_mu); } -static void on_fd_orphaned(grpc_exec_ctx *exec_ctx, grpc_fd *emfd) { +static void on_fd_orphaned(grpc_exec_ctx *exec_ctx, grpc_fd *emfd, + void *user_data) { gpr_log(GPR_INFO, "gRPC FD about to be orphaned: %d", grpc_fd_wrapped_fd(emfd)); g_number_of_orphan_calls++; diff --git a/test/core/memory_usage/client.c b/test/core/memory_usage/client.c index 09f0e2d867..107abbc1b3 100644 --- a/test/core/memory_usage/client.c +++ b/test/core/memory_usage/client.c @@ -43,6 +43,7 @@ #include <grpc/support/log.h> #include <grpc/support/time.h> #include <grpc/support/useful.h> +#include "src/core/lib/support/env.h" #include "src/core/lib/support/string.h" #include "test/core/util/memory_counters.h" #include "test/core/util/test_config.h" @@ -310,6 +311,29 @@ int main(int argc, char **argv) { server_calls_end.total_size_relative - after_server_create.total_size_relative); + const char *csv_file = "memory_usage.csv"; + FILE *csv = fopen(csv_file, "w"); + if (csv) { + char *env_build = gpr_getenv("BUILD_NUMBER"); + char *env_job = gpr_getenv("JOB_NAME"); + fprintf(csv, "%f,%zi,%zi,%f,%zi,%s,%s\n", + (double)(client_calls_inflight.total_size_relative - + client_benchmark_calls_start.total_size_relative) / + benchmark_iterations, + client_channel_end.total_size_relative - + client_channel_start.total_size_relative, + after_server_create.total_size_relative - + before_server_create.total_size_relative, + (double)(server_calls_inflight.total_size_relative - + server_benchmark_calls_start.total_size_relative) / + benchmark_iterations, + server_calls_end.total_size_relative - + after_server_create.total_size_relative, + env_build == NULL ? "" : env_build, env_job == NULL ? "" : env_job); + fclose(csv); + gpr_log(GPR_INFO, "Summary written to %s", csv_file); + } + grpc_memory_counters_destroy(); return 0; } diff --git a/test/core/security/BUILD b/test/core/security/BUILD index e750c39b7c..1cb03c5cfe 100644 --- a/test/core/security/BUILD +++ b/test/core/security/BUILD @@ -34,7 +34,7 @@ load("//test/core/util:grpc_fuzzer.bzl", "grpc_fuzzer") grpc_fuzzer( name = "ssl_server_fuzzer", srcs = ["ssl_server_fuzzer.c"], - deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util"], + deps = ["//:gpr", "//:grpc", "//test/core/util:grpc_test_util", "//test/core/end2end:ssl_test_data"], corpus = "corpus", copts = ["-std=c99"], ) diff --git a/test/core/security/secure_endpoint_test.c b/test/core/security/secure_endpoint_test.c index d2b76bae39..b3775e91a7 100644 --- a/test/core/security/secure_endpoint_test.c +++ b/test/core/security/secure_endpoint_test.c @@ -166,10 +166,12 @@ static void test_leftover(grpc_endpoint_test_config config, size_t slice_size) { GPR_ASSERT(incoming.count == 1); GPR_ASSERT(grpc_slice_eq(s, incoming.slices[0])); - grpc_endpoint_shutdown(&exec_ctx, f.client_ep, - GRPC_ERROR_CREATE("test_leftover end")); - grpc_endpoint_shutdown(&exec_ctx, f.server_ep, - GRPC_ERROR_CREATE("test_leftover end")); + grpc_endpoint_shutdown( + &exec_ctx, f.client_ep, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("test_leftover end")); + grpc_endpoint_shutdown( + &exec_ctx, f.server_ep, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("test_leftover end")); grpc_endpoint_destroy(&exec_ctx, f.client_ep); grpc_endpoint_destroy(&exec_ctx, f.server_ep); grpc_exec_ctx_finish(&exec_ctx); diff --git a/test/core/security/ssl_server_fuzzer.c b/test/core/security/ssl_server_fuzzer.c index f789278add..cbbaf9f298 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); @@ -121,8 +115,9 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { // server will wait for more data. Explicitly fail the server by shutting down // the endpoint. if (!state.done_callback_called) { - grpc_endpoint_shutdown(&exec_ctx, mock_endpoint, - GRPC_ERROR_CREATE("Explicit close")); + grpc_endpoint_shutdown( + &exec_ctx, mock_endpoint, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Explicit close")); grpc_exec_ctx_flush(&exec_ctx); } diff --git a/test/core/support/arena_test.c b/test/core/support/arena_test.c new file mode 100644 index 0000000000..35b2bbd1b1 --- /dev/null +++ b/test/core/support/arena_test.c @@ -0,0 +1,139 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +#include "src/core/lib/support/arena.h" + +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <grpc/support/sync.h> +#include <grpc/support/thd.h> +#include <grpc/support/useful.h> +#include <inttypes.h> +#include <string.h> + +#include "src/core/lib/support/string.h" +#include "test/core/util/test_config.h" + +static void test_noop(void) { gpr_arena_destroy(gpr_arena_create(1)); } + +static void test(const char *name, size_t init_size, const size_t *allocs, + size_t nallocs) { + gpr_strvec v; + char *s; + gpr_strvec_init(&v); + gpr_asprintf(&s, "test '%s': %" PRIdPTR " <- {", name, init_size); + gpr_strvec_add(&v, s); + for (size_t i = 0; i < nallocs; i++) { + gpr_asprintf(&s, "%" PRIdPTR ",", allocs[i]); + gpr_strvec_add(&v, s); + } + gpr_strvec_add(&v, gpr_strdup("}")); + s = gpr_strvec_flatten(&v, NULL); + gpr_strvec_destroy(&v); + gpr_log(GPR_INFO, "%s", s); + gpr_free(s); + + gpr_arena *a = gpr_arena_create(init_size); + void **ps = gpr_zalloc(sizeof(*ps) * nallocs); + for (size_t i = 0; i < nallocs; i++) { + ps[i] = gpr_arena_alloc(a, allocs[i]); + // ensure no duplicate results + for (size_t j = 0; j < i; j++) { + GPR_ASSERT(ps[i] != ps[j]); + } + // ensure writable + memset(ps[i], 1, allocs[i]); + } + gpr_arena_destroy(a); + gpr_free(ps); +} + +#define TEST(name, init_size, ...) \ + static const size_t allocs_##name[] = {__VA_ARGS__}; \ + test(#name, init_size, allocs_##name, GPR_ARRAY_SIZE(allocs_##name)) + +#define CONCURRENT_TEST_ITERATIONS 100000 +#define CONCURRENT_TEST_THREADS 100 + +typedef struct { + gpr_event ev_start; + gpr_arena *arena; +} concurrent_test_args; + +static void concurrent_test_body(void *arg) { + concurrent_test_args *a = arg; + gpr_event_wait(&a->ev_start, gpr_inf_future(GPR_CLOCK_REALTIME)); + for (size_t i = 0; i < CONCURRENT_TEST_ITERATIONS; i++) { + *(char *)gpr_arena_alloc(a->arena, 1) = (char)i; + } +} + +static void concurrent_test(void) { + gpr_log(GPR_DEBUG, "concurrent_test"); + + concurrent_test_args args; + gpr_event_init(&args.ev_start); + args.arena = gpr_arena_create(1024); + + gpr_thd_id thds[CONCURRENT_TEST_THREADS]; + + for (int i = 0; i < CONCURRENT_TEST_THREADS; i++) { + gpr_thd_options opt = gpr_thd_options_default(); + gpr_thd_options_set_joinable(&opt); + gpr_thd_new(&thds[i], concurrent_test_body, &args, &opt); + } + + gpr_event_set(&args.ev_start, (void *)1); + + for (int i = 0; i < CONCURRENT_TEST_THREADS; i++) { + gpr_thd_join(thds[i]); + } + + gpr_arena_destroy(args.arena); +} + +int main(int argc, char *argv[]) { + grpc_test_init(argc, argv); + + test_noop(); + TEST(0_1, 0, 1); + TEST(1_1, 1, 1); + TEST(1_2, 1, 2); + TEST(1_3, 1, 3); + TEST(1_inc, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); + TEST(6_123, 6, 1, 2, 3); + concurrent_test(); + + return 0; +} diff --git a/test/core/support/cpu_test.c b/test/core/support/cpu_test.c index ca0fe0ccb5..7b9bf6c5e1 100644 --- a/test/core/support/cpu_test.c +++ b/test/core/support/cpu_test.c @@ -81,9 +81,12 @@ static void worker_thread(void *arg) { uint32_t cpu; unsigned r = 12345678; unsigned i, j; - for (i = 0; i < 1000 / grpc_test_slowdown_factor(); i++) { + /* Avoid repetitive division calculations */ + int64_t max_i = 1000 / grpc_test_slowdown_factor(); + int64_t max_j = 1000000 / grpc_test_slowdown_factor(); + for (i = 0; i < max_i; i++) { /* run for a bit - just calculate something random. */ - for (j = 0; j < 1000000 / grpc_test_slowdown_factor(); j++) { + for (j = 0; j < max_j; j++) { r = (r * 17) & ((r - i) | (r * i)); } cpu = gpr_cpu_current_cpu(); diff --git a/test/core/surface/concurrent_connectivity_test.c b/test/core/surface/concurrent_connectivity_test.c index ff927385d4..2f7c3dfb85 100644 --- a/test/core/surface/concurrent_connectivity_test.c +++ b/test/core/surface/concurrent_connectivity_test.c @@ -109,7 +109,8 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *vargs, grpc_endpoint *tcp, grpc_tcp_server_acceptor *acceptor) { gpr_free(acceptor); struct server_thread_args *args = (struct server_thread_args *)vargs; - grpc_endpoint_shutdown(exec_ctx, tcp, GRPC_ERROR_CREATE("Connected")); + grpc_endpoint_shutdown(exec_ctx, tcp, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Connected")); grpc_endpoint_destroy(exec_ctx, tcp); GRPC_LOG_IF_ERROR("pollset_kick", grpc_pollset_kick(args->pollset, NULL)); } diff --git a/test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112 b/test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112 Binary files differnew file mode 100644 index 0000000000..04d48d6d76 --- /dev/null +++ b/test/core/transport/chttp2/hpack_parser_corpus/clusterfuzz-testcase-5298216461402112 diff --git a/test/core/util/memory_counters.c b/test/core/util/memory_counters.c index 7c8b620f34..c27065f260 100644 --- a/test/core/util/memory_counters.c +++ b/test/core/util/memory_counters.c @@ -46,17 +46,23 @@ static void *guard_malloc(size_t size); static void *guard_realloc(void *vptr, size_t size); static void guard_free(void *vptr); +#ifdef GPR_LOW_LEVEL_COUNTERS +/* hide these from the microbenchmark atomic stats */ +#define NO_BARRIER_FETCH_ADD(x, sz) \ + __atomic_fetch_add((x), (sz), __ATOMIC_RELAXED) +#define NO_BARRIER_LOAD(x) __atomic_load_n((x), __ATOMIC_RELAXED) +#else +#define NO_BARRIER_FETCH_ADD(x, sz) gpr_atm_no_barrier_fetch_add(x, sz) +#define NO_BARRIER_LOAD(x) gpr_atm_no_barrier_load(x) +#endif + static void *guard_malloc(size_t size) { size_t *ptr; if (!size) return NULL; - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_absolute, - (gpr_atm)size); - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_relative, - (gpr_atm)size); - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_allocs_absolute, - (gpr_atm)1); - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_allocs_relative, - (gpr_atm)1); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_absolute, (gpr_atm)size); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_relative, (gpr_atm)size); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_allocs_absolute, (gpr_atm)1); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_allocs_relative, (gpr_atm)1); ptr = g_old_allocs.malloc_fn(size + sizeof(size)); *ptr++ = size; return ptr; @@ -72,14 +78,10 @@ static void *guard_realloc(void *vptr, size_t size) { return NULL; } --ptr; - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_absolute, - (gpr_atm)size); - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_relative, - -(gpr_atm)*ptr); - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_relative, - (gpr_atm)size); - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_allocs_absolute, - (gpr_atm)1); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_absolute, (gpr_atm)size); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_relative, -(gpr_atm)*ptr); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_relative, (gpr_atm)size); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_allocs_absolute, (gpr_atm)1); ptr = g_old_allocs.realloc_fn(ptr, size + sizeof(size)); *ptr++ = size; return ptr; @@ -89,10 +91,8 @@ static void guard_free(void *vptr) { size_t *ptr = vptr; if (!vptr) return; --ptr; - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_size_relative, - -(gpr_atm)*ptr); - gpr_atm_no_barrier_fetch_add(&g_memory_counters.total_allocs_relative, - -(gpr_atm)1); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_size_relative, -(gpr_atm)*ptr); + NO_BARRIER_FETCH_ADD(&g_memory_counters.total_allocs_relative, -(gpr_atm)1); g_old_allocs.free_fn(ptr); } @@ -112,12 +112,12 @@ void grpc_memory_counters_destroy() { struct grpc_memory_counters grpc_memory_counters_snapshot() { struct grpc_memory_counters counters; counters.total_size_relative = - gpr_atm_no_barrier_load(&g_memory_counters.total_size_relative); + NO_BARRIER_LOAD(&g_memory_counters.total_size_relative); counters.total_size_absolute = - gpr_atm_no_barrier_load(&g_memory_counters.total_size_absolute); + NO_BARRIER_LOAD(&g_memory_counters.total_size_absolute); counters.total_allocs_relative = - gpr_atm_no_barrier_load(&g_memory_counters.total_allocs_relative); + NO_BARRIER_LOAD(&g_memory_counters.total_allocs_relative); counters.total_allocs_absolute = - gpr_atm_no_barrier_load(&g_memory_counters.total_allocs_absolute); + NO_BARRIER_LOAD(&g_memory_counters.total_allocs_absolute); return counters; } diff --git a/test/core/util/mock_endpoint.c b/test/core/util/mock_endpoint.c index b8fed7e14b..c747297984 100644 --- a/test/core/util/mock_endpoint.c +++ b/test/core/util/mock_endpoint.c @@ -89,8 +89,9 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, grpc_mock_endpoint *m = (grpc_mock_endpoint *)ep; gpr_mu_lock(&m->mu); if (m->on_read) { - grpc_closure_sched(exec_ctx, m->on_read, GRPC_ERROR_CREATE_REFERENCING( - "Endpoint Shutdown", &why, 1)); + grpc_closure_sched(exec_ctx, m->on_read, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Endpoint Shutdown", &why, 1)); m->on_read = NULL; } gpr_mu_unlock(&m->mu); diff --git a/test/core/util/passthru_endpoint.c b/test/core/util/passthru_endpoint.c index 5f27f9ae73..121567fc0d 100644 --- a/test/core/util/passthru_endpoint.c +++ b/test/core/util/passthru_endpoint.c @@ -75,7 +75,8 @@ static void me_read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, half *m = (half *)ep; gpr_mu_lock(&m->parent->mu); if (m->parent->shutdown) { - grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_CREATE("Already shutdown")); + grpc_closure_sched( + exec_ctx, cb, GRPC_ERROR_CREATE_FROM_STATIC_STRING("Already shutdown")); } else if (m->read_buffer.count > 0) { grpc_slice_buffer_swap(&m->read_buffer, slices); grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_NONE); @@ -98,7 +99,7 @@ static void me_write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, grpc_error *error = GRPC_ERROR_NONE; m->parent->stats->num_writes++; if (m->parent->shutdown) { - error = GRPC_ERROR_CREATE("Endpoint already shutdown"); + error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Endpoint already shutdown"); } else if (m->on_read != NULL) { for (size_t i = 0; i < slices->count; i++) { grpc_slice_buffer_add(m->on_read_out, grpc_slice_ref(slices->slices[i])); @@ -126,14 +127,16 @@ static void me_shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, gpr_mu_lock(&m->parent->mu); m->parent->shutdown = true; if (m->on_read) { - grpc_closure_sched(exec_ctx, m->on_read, - GRPC_ERROR_CREATE_REFERENCING("Shutdown", &why, 1)); + grpc_closure_sched( + exec_ctx, m->on_read, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Shutdown", &why, 1)); m->on_read = NULL; } m = other_half(m); if (m->on_read) { - grpc_closure_sched(exec_ctx, m->on_read, - GRPC_ERROR_CREATE_REFERENCING("Shutdown", &why, 1)); + grpc_closure_sched( + exec_ctx, m->on_read, + GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Shutdown", &why, 1)); m->on_read = NULL; } gpr_mu_unlock(&m->parent->mu); diff --git a/test/core/util/reconnect_server.c b/test/core/util/reconnect_server.c index 7fbd0ca6aa..90af1c107b 100644 --- a/test/core/util/reconnect_server.c +++ b/test/core/util/reconnect_server.c @@ -80,7 +80,8 @@ static void on_connect(grpc_exec_ctx *exec_ctx, void *arg, grpc_endpoint *tcp, gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME); timestamp_list *new_tail; peer = grpc_endpoint_get_peer(tcp); - grpc_endpoint_shutdown(exec_ctx, tcp, GRPC_ERROR_CREATE("Connected")); + grpc_endpoint_shutdown(exec_ctx, tcp, + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Connected")); grpc_endpoint_destroy(exec_ctx, tcp); if (peer) { last_colon = strrchr(peer, ':'); diff --git a/test/core/util/trickle_endpoint.c b/test/core/util/trickle_endpoint.c index 7ab0488a66..0848147158 100644 --- a/test/core/util/trickle_endpoint.c +++ b/test/core/util/trickle_endpoint.c @@ -31,6 +31,8 @@ * */ +#include "src/core/lib/iomgr/sockaddr.h" + #include "test/core/util/passthru_endpoint.h" #include <inttypes.h> @@ -40,9 +42,6 @@ #include <grpc/support/log.h> #include <grpc/support/string_util.h> #include <grpc/support/useful.h> - -#include "src/core/lib/iomgr/sockaddr.h" - #include "src/core/lib/slice/slice_internal.h" typedef struct { diff --git a/test/cpp/common/channel_arguments_test.cc b/test/cpp/common/channel_arguments_test.cc index 190d32ce06..9bcc9f99f6 100644 --- a/test/cpp/common/channel_arguments_test.cc +++ b/test/cpp/common/channel_arguments_test.cc @@ -230,13 +230,6 @@ TEST_F(ChannelArgumentsTest, SetSocketMutator) { EXPECT_TRUE(HasArg(arg1)); // arg0 is replaced by arg1 EXPECT_FALSE(HasArg(arg0)); - - // arg0 is destroyed by grpc_socket_mutator_to_arg(mutator1) - { - grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; - arg1.value.pointer.vtable->destroy(&exec_ctx, arg1.value.pointer.p); - grpc_exec_ctx_finish(&exec_ctx); - } } TEST_F(ChannelArgumentsTest, SetUserAgentPrefix) { diff --git a/test/cpp/interop/http2_client.cc b/test/cpp/interop/http2_client.cc index 01c07823cf..38a437f39f 100644 --- a/test/cpp/interop/http2_client.cc +++ b/test/cpp/interop/http2_client.cc @@ -41,7 +41,7 @@ #include <grpc/support/useful.h> #include "src/core/lib/transport/byte_stream.h" -#include "src/proto/grpc/testing/messages.grpc.pb.h" +#include "src/proto/grpc/testing/messages.pb.h" #include "src/proto/grpc/testing/test.grpc.pb.h" #include "test/cpp/interop/http2_client.h" diff --git a/test/cpp/interop/http2_client.h b/test/cpp/interop/http2_client.h index 12df5d26bc..e57d695205 100644 --- a/test/cpp/interop/http2_client.h +++ b/test/cpp/interop/http2_client.h @@ -38,7 +38,7 @@ #include <grpc++/channel.h> #include <grpc/grpc.h> -#include "src/proto/grpc/testing/messages.grpc.pb.h" +#include "src/proto/grpc/testing/messages.pb.h" #include "src/proto/grpc/testing/test.grpc.pb.h" namespace grpc { diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc index b7f2723c39..55ba324cc7 100644 --- a/test/cpp/interop/interop_client.cc +++ b/test/cpp/interop/interop_client.cc @@ -46,8 +46,8 @@ #include <grpc/support/useful.h> #include "src/core/lib/transport/byte_stream.h" -#include "src/proto/grpc/testing/empty.grpc.pb.h" -#include "src/proto/grpc/testing/messages.grpc.pb.h" +#include "src/proto/grpc/testing/empty.pb.h" +#include "src/proto/grpc/testing/messages.pb.h" #include "src/proto/grpc/testing/test.grpc.pb.h" #include "test/cpp/interop/client_helper.h" #include "test/cpp/interop/interop_client.h" diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h index 74f4db6b78..efcb7d2860 100644 --- a/test/cpp/interop/interop_client.h +++ b/test/cpp/interop/interop_client.h @@ -38,7 +38,7 @@ #include <grpc++/channel.h> #include <grpc/grpc.h> -#include "src/proto/grpc/testing/messages.grpc.pb.h" +#include "src/proto/grpc/testing/messages.pb.h" #include "src/proto/grpc/testing/test.grpc.pb.h" namespace grpc { diff --git a/test/cpp/interop/interop_server.cc b/test/cpp/interop/interop_server.cc index 5a810b45ef..1cbca17928 100644 --- a/test/cpp/interop/interop_server.cc +++ b/test/cpp/interop/interop_server.cc @@ -48,8 +48,8 @@ #include "src/core/lib/support/string.h" #include "src/core/lib/transport/byte_stream.h" -#include "src/proto/grpc/testing/empty.grpc.pb.h" -#include "src/proto/grpc/testing/messages.grpc.pb.h" +#include "src/proto/grpc/testing/empty.pb.h" +#include "src/proto/grpc/testing/messages.pb.h" #include "src/proto/grpc/testing/test.grpc.pb.h" #include "test/cpp/interop/server_helper.h" #include "test/cpp/util/test_config.h" diff --git a/test/cpp/interop/reconnect_interop_client.cc b/test/cpp/interop/reconnect_interop_client.cc index 1c2f606637..01d985068d 100644 --- a/test/cpp/interop/reconnect_interop_client.cc +++ b/test/cpp/interop/reconnect_interop_client.cc @@ -40,8 +40,8 @@ #include <grpc++/support/channel_arguments.h> #include <grpc/grpc.h> #include <grpc/support/log.h> -#include "src/proto/grpc/testing/empty.grpc.pb.h" -#include "src/proto/grpc/testing/messages.grpc.pb.h" +#include "src/proto/grpc/testing/empty.pb.h" +#include "src/proto/grpc/testing/messages.pb.h" #include "src/proto/grpc/testing/test.grpc.pb.h" #include "test/cpp/util/create_test_channel.h" #include "test/cpp/util/test_config.h" diff --git a/test/cpp/interop/reconnect_interop_server.cc b/test/cpp/interop/reconnect_interop_server.cc index 634d0a90fc..8d1b884af9 100644 --- a/test/cpp/interop/reconnect_interop_server.cc +++ b/test/cpp/interop/reconnect_interop_server.cc @@ -47,8 +47,8 @@ #include <grpc/grpc.h> #include <grpc/support/log.h> -#include "src/proto/grpc/testing/empty.grpc.pb.h" -#include "src/proto/grpc/testing/messages.grpc.pb.h" +#include "src/proto/grpc/testing/empty.pb.h" +#include "src/proto/grpc/testing/messages.pb.h" #include "src/proto/grpc/testing/test.grpc.pb.h" #include "test/core/util/reconnect_server.h" #include "test/cpp/util/test_config.h" diff --git a/test/cpp/microbenchmarks/bm_arena.cc b/test/cpp/microbenchmarks/bm_arena.cc new file mode 100644 index 0000000000..770c0b6d47 --- /dev/null +++ b/test/cpp/microbenchmarks/bm_arena.cc @@ -0,0 +1,76 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* Benchmark arenas */ + +extern "C" { +#include "src/core/lib/support/arena.h" +} +#include "test/cpp/microbenchmarks/helpers.h" +#include "third_party/benchmark/include/benchmark/benchmark.h" + +static void BM_Arena_NoOp(benchmark::State& state) { + while (state.KeepRunning()) { + gpr_arena_destroy(gpr_arena_create(state.range(0))); + } +} +BENCHMARK(BM_Arena_NoOp)->Range(1, 1024 * 1024); + +static void BM_Arena_ManyAlloc(benchmark::State& state) { + gpr_arena* a = gpr_arena_create(state.range(0)); + const size_t realloc_after = + 1024 * 1024 * 1024 / ((state.range(1) + 15) & 0xffffff0u); + while (state.KeepRunning()) { + gpr_arena_alloc(a, state.range(1)); + // periodically recreate arena to avoid OOM + if (state.iterations() % realloc_after == 0) { + gpr_arena_destroy(a); + a = gpr_arena_create(state.range(0)); + } + } + gpr_arena_destroy(a); +} +BENCHMARK(BM_Arena_ManyAlloc)->Ranges({{1, 1024 * 1024}, {1, 32 * 1024}}); + +static void BM_Arena_Batch(benchmark::State& state) { + while (state.KeepRunning()) { + gpr_arena* a = gpr_arena_create(state.range(0)); + for (int i = 0; i < state.range(1); i++) { + gpr_arena_alloc(a, state.range(2)); + } + gpr_arena_destroy(a); + } +} +BENCHMARK(BM_Arena_Batch)->Ranges({{1, 64 * 1024}, {1, 64}, {1, 1024}}); + +BENCHMARK_MAIN(); diff --git a/test/cpp/microbenchmarks/bm_call_create.cc b/test/cpp/microbenchmarks/bm_call_create.cc index 014e2b96b5..1ef8caa690 100644 --- a/test/cpp/microbenchmarks/bm_call_create.cc +++ b/test/cpp/microbenchmarks/bm_call_create.cc @@ -53,6 +53,7 @@ extern "C" { #include "src/core/lib/channel/http_client_filter.h" #include "src/core/lib/channel/http_server_filter.h" #include "src/core/lib/channel/message_size_filter.h" +#include "src/core/lib/surface/channel.h" #include "src/core/lib/transport/transport_impl.h" } @@ -85,6 +86,9 @@ BENCHMARK(BM_Zalloc) ->Arg(6144) ->Arg(7168); +//////////////////////////////////////////////////////////////////////////////// +// Benchmarks creating full stacks + class BaseChannelFixture { public: BaseChannelFixture(grpc_channel *channel) : channel_(channel) {} @@ -130,6 +134,9 @@ static void BM_CallCreateDestroy(benchmark::State &state) { BENCHMARK_TEMPLATE(BM_CallCreateDestroy, InsecureChannel); BENCHMARK_TEMPLATE(BM_CallCreateDestroy, LameChannel); +//////////////////////////////////////////////////////////////////////////////// +// Benchmarks isolating individual filters + static void *tag(int i) { return reinterpret_cast<void *>(static_cast<intptr_t>(i)); } @@ -232,7 +239,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) { @@ -275,7 +282,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; } @@ -299,7 +306,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) {} @@ -394,7 +401,7 @@ static void BM_IsolatedFilter(benchmark::State &state) { grpc_channel_stack *channel_stack = static_cast<grpc_channel_stack *>(gpr_zalloc(channel_size)); GPR_ASSERT(GRPC_LOG_IF_ERROR( - "call_stack_init", + "channel_stack_init", grpc_channel_stack_init(&exec_ctx, 1, FilterDestroy, channel_stack, &filters[0], filters.size(), &channel_args, fixture.flags & REQUIRES_TRANSPORT @@ -409,15 +416,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); @@ -460,4 +481,205 @@ typedef Fixture<&grpc_load_reporting_filter, CHECKS_NOT_LAST> BENCHMARK_TEMPLATE(BM_IsolatedFilter, LoadReportingFilter, NoOp); BENCHMARK_TEMPLATE(BM_IsolatedFilter, LoadReportingFilter, SendEmptyMetadata); +//////////////////////////////////////////////////////////////////////////////// +// Benchmarks isolating grpc_call + +namespace isolated_call_filter { + +static void StartTransportStreamOp(grpc_exec_ctx *exec_ctx, + grpc_call_element *elem, + grpc_transport_stream_op *op) { + if (op->recv_initial_metadata) { + grpc_closure_sched(exec_ctx, op->recv_initial_metadata_ready, + GRPC_ERROR_NONE); + } + if (op->recv_message) { + grpc_closure_sched(exec_ctx, op->recv_message_ready, GRPC_ERROR_NONE); + } + grpc_closure_sched(exec_ctx, op->on_complete, GRPC_ERROR_NONE); +} + +static void StartTransportOp(grpc_exec_ctx *exec_ctx, + grpc_channel_element *elem, + grpc_transport_op *op) { + if (op->disconnect_with_error != GRPC_ERROR_NONE) { + GRPC_ERROR_UNREF(op->disconnect_with_error); + } + grpc_closure_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE); +} + +static grpc_error *InitCallElem(grpc_exec_ctx *exec_ctx, + grpc_call_element *elem, + const grpc_call_element_args *args) { + return GRPC_ERROR_NONE; +} + +static void SetPollsetOrPollsetSet(grpc_exec_ctx *exec_ctx, + grpc_call_element *elem, + grpc_polling_entity *pollent) {} + +static void DestroyCallElem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, + const grpc_call_final_info *final_info, + grpc_closure *then_sched_closure) { + grpc_closure_sched(exec_ctx, then_sched_closure, GRPC_ERROR_NONE); +} + +grpc_error *InitChannelElem(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, + grpc_channel_element_args *args) { + return GRPC_ERROR_NONE; +} + +void DestroyChannelElem(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem) {} + +char *GetPeer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) { + return gpr_strdup("peer"); +} + +void GetChannelInfo(grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, + const grpc_channel_info *channel_info) {} + +static const grpc_channel_filter isolated_call_filter = { + StartTransportStreamOp, + StartTransportOp, + 0, + InitCallElem, + SetPollsetOrPollsetSet, + DestroyCallElem, + 0, + InitChannelElem, + DestroyChannelElem, + GetPeer, + GetChannelInfo, + "isolated_call_filter"}; +} + +class IsolatedCallFixture : public TrackCounters { + public: + IsolatedCallFixture() { + grpc_channel_stack_builder *builder = grpc_channel_stack_builder_create(); + grpc_channel_stack_builder_set_name(builder, "dummy"); + grpc_channel_stack_builder_set_target(builder, "dummy_target"); + GPR_ASSERT(grpc_channel_stack_builder_append_filter( + builder, &isolated_call_filter::isolated_call_filter, NULL, NULL)); + { + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + channel_ = grpc_channel_create_with_builder(&exec_ctx, builder, + GRPC_CLIENT_CHANNEL); + grpc_exec_ctx_finish(&exec_ctx); + } + cq_ = grpc_completion_queue_create(NULL); + } + + void Finish(benchmark::State &state) { + grpc_completion_queue_destroy(cq_); + grpc_channel_destroy(channel_); + TrackCounters::Finish(state); + } + + grpc_channel *channel() const { return channel_; } + grpc_completion_queue *cq() const { return cq_; } + + private: + grpc_completion_queue *cq_; + grpc_channel *channel_; +}; + +static void BM_IsolatedCall_NoOp(benchmark::State &state) { + IsolatedCallFixture fixture; + gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + void *method_hdl = + grpc_channel_register_call(fixture.channel(), "/foo/bar", NULL, NULL); + while (state.KeepRunning()) { + grpc_call_destroy(grpc_channel_create_registered_call( + fixture.channel(), nullptr, GRPC_PROPAGATE_DEFAULTS, fixture.cq(), + method_hdl, deadline, NULL)); + } + fixture.Finish(state); +} +BENCHMARK(BM_IsolatedCall_NoOp); + +static void BM_IsolatedCall_Unary(benchmark::State &state) { + IsolatedCallFixture fixture; + gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + void *method_hdl = + grpc_channel_register_call(fixture.channel(), "/foo/bar", NULL, NULL); + grpc_slice slice = grpc_slice_from_static_string("hello world"); + grpc_byte_buffer *send_message = grpc_raw_byte_buffer_create(&slice, 1); + grpc_byte_buffer *recv_message = NULL; + grpc_status_code status_code; + grpc_slice status_details = grpc_empty_slice(); + grpc_metadata_array recv_initial_metadata; + grpc_metadata_array_init(&recv_initial_metadata); + grpc_metadata_array recv_trailing_metadata; + grpc_metadata_array_init(&recv_trailing_metadata); + grpc_op ops[6]; + memset(ops, 0, sizeof(ops)); + ops[0].op = GRPC_OP_SEND_INITIAL_METADATA; + ops[1].op = GRPC_OP_SEND_MESSAGE; + ops[1].data.send_message.send_message = send_message; + ops[2].op = GRPC_OP_SEND_CLOSE_FROM_CLIENT; + ops[3].op = GRPC_OP_RECV_INITIAL_METADATA; + ops[3].data.recv_initial_metadata.recv_initial_metadata = + &recv_initial_metadata; + ops[4].op = GRPC_OP_RECV_MESSAGE; + ops[4].data.recv_message.recv_message = &recv_message; + ops[5].op = GRPC_OP_RECV_STATUS_ON_CLIENT; + ops[5].data.recv_status_on_client.status = &status_code; + ops[5].data.recv_status_on_client.status_details = &status_details; + ops[5].data.recv_status_on_client.trailing_metadata = &recv_trailing_metadata; + while (state.KeepRunning()) { + grpc_call *call = grpc_channel_create_registered_call( + fixture.channel(), nullptr, GRPC_PROPAGATE_DEFAULTS, fixture.cq(), + method_hdl, deadline, NULL); + grpc_call_start_batch(call, ops, 6, tag(1), NULL); + grpc_completion_queue_next(fixture.cq(), + gpr_inf_future(GPR_CLOCK_MONOTONIC), NULL); + grpc_call_destroy(call); + } + fixture.Finish(state); + grpc_metadata_array_destroy(&recv_initial_metadata); + grpc_metadata_array_destroy(&recv_trailing_metadata); + grpc_byte_buffer_destroy(send_message); +} +BENCHMARK(BM_IsolatedCall_Unary); + +static void BM_IsolatedCall_StreamingSend(benchmark::State &state) { + IsolatedCallFixture fixture; + gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + void *method_hdl = + grpc_channel_register_call(fixture.channel(), "/foo/bar", NULL, NULL); + grpc_slice slice = grpc_slice_from_static_string("hello world"); + grpc_byte_buffer *send_message = grpc_raw_byte_buffer_create(&slice, 1); + grpc_metadata_array recv_initial_metadata; + grpc_metadata_array_init(&recv_initial_metadata); + grpc_metadata_array recv_trailing_metadata; + grpc_metadata_array_init(&recv_trailing_metadata); + grpc_op ops[2]; + memset(ops, 0, sizeof(ops)); + ops[0].op = GRPC_OP_SEND_INITIAL_METADATA; + ops[1].op = GRPC_OP_RECV_INITIAL_METADATA; + ops[1].data.recv_initial_metadata.recv_initial_metadata = + &recv_initial_metadata; + grpc_call *call = grpc_channel_create_registered_call( + fixture.channel(), nullptr, GRPC_PROPAGATE_DEFAULTS, fixture.cq(), + method_hdl, deadline, NULL); + grpc_call_start_batch(call, ops, 2, tag(1), NULL); + grpc_completion_queue_next(fixture.cq(), gpr_inf_future(GPR_CLOCK_MONOTONIC), + NULL); + memset(ops, 0, sizeof(ops)); + ops[0].op = GRPC_OP_SEND_MESSAGE; + ops[0].data.send_message.send_message = send_message; + while (state.KeepRunning()) { + grpc_call_start_batch(call, ops, 1, tag(2), NULL); + grpc_completion_queue_next(fixture.cq(), + gpr_inf_future(GPR_CLOCK_MONOTONIC), NULL); + } + grpc_call_destroy(call); + fixture.Finish(state); + grpc_metadata_array_destroy(&recv_initial_metadata); + grpc_metadata_array_destroy(&recv_trailing_metadata); + grpc_byte_buffer_destroy(send_message); +} +BENCHMARK(BM_IsolatedCall_StreamingSend); + BENCHMARK_MAIN(); diff --git a/test/cpp/microbenchmarks/bm_chttp2_transport.cc b/test/cpp/microbenchmarks/bm_chttp2_transport.cc new file mode 100644 index 0000000000..254d57de20 --- /dev/null +++ b/test/cpp/microbenchmarks/bm_chttp2_transport.cc @@ -0,0 +1,587 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* Microbenchmarks around CHTTP2 transport operations */ + +#include <grpc++/support/channel_arguments.h> +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/string_util.h> +#include <string.h> +#include <memory> +#include <queue> +#include <sstream> +extern "C" { +#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h" +#include "src/core/ext/transport/chttp2/transport/internal.h" +#include "src/core/lib/iomgr/resource_quota.h" +#include "src/core/lib/slice/slice_internal.h" +#include "src/core/lib/transport/static_metadata.h" +} +#include "test/cpp/microbenchmarks/helpers.h" +#include "third_party/benchmark/include/benchmark/benchmark.h" + +auto &force_library_initialization = Library::get(); + +//////////////////////////////////////////////////////////////////////////////// +// Helper classes +// + +class DummyEndpoint : public grpc_endpoint { + public: + DummyEndpoint() { + static const grpc_endpoint_vtable my_vtable = {read, + write, + get_workqueue, + add_to_pollset, + add_to_pollset_set, + shutdown, + destroy, + get_resource_user, + get_peer, + get_fd}; + grpc_endpoint::vtable = &my_vtable; + ru_ = grpc_resource_user_create(Library::get().rq(), "dummy_endpoint"); + } + + void PushInput(grpc_exec_ctx *exec_ctx, grpc_slice slice) { + if (read_cb_ == nullptr) { + GPR_ASSERT(!have_slice_); + buffered_slice_ = slice; + have_slice_ = true; + return; + } + grpc_slice_buffer_add(slices_, slice); + grpc_closure_sched(exec_ctx, read_cb_, GRPC_ERROR_NONE); + read_cb_ = nullptr; + } + + private: + grpc_resource_user *ru_; + grpc_closure *read_cb_ = nullptr; + grpc_slice_buffer *slices_ = nullptr; + bool have_slice_ = false; + grpc_slice buffered_slice_; + + void QueueRead(grpc_exec_ctx *exec_ctx, grpc_slice_buffer *slices, + grpc_closure *cb) { + GPR_ASSERT(read_cb_ == nullptr); + if (have_slice_) { + have_slice_ = false; + grpc_slice_buffer_add(slices, buffered_slice_); + grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_NONE); + return; + } + read_cb_ = cb; + slices_ = slices; + } + + static void read(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_slice_buffer *slices, grpc_closure *cb) { + static_cast<DummyEndpoint *>(ep)->QueueRead(exec_ctx, slices, cb); + } + + static void write(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_slice_buffer *slices, grpc_closure *cb) { + grpc_closure_sched(exec_ctx, cb, GRPC_ERROR_NONE); + } + + static grpc_workqueue *get_workqueue(grpc_endpoint *ep) { return NULL; } + + static void add_to_pollset(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_pollset *pollset) {} + + static void add_to_pollset_set(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_pollset_set *pollset) {} + + static void shutdown(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep, + grpc_error *why) { + grpc_resource_user_shutdown(exec_ctx, + static_cast<DummyEndpoint *>(ep)->ru_); + grpc_closure_sched(exec_ctx, static_cast<DummyEndpoint *>(ep)->read_cb_, + why); + } + + static void destroy(grpc_exec_ctx *exec_ctx, grpc_endpoint *ep) { + grpc_resource_user_unref(exec_ctx, static_cast<DummyEndpoint *>(ep)->ru_); + delete static_cast<DummyEndpoint *>(ep); + } + + static grpc_resource_user *get_resource_user(grpc_endpoint *ep) { + return static_cast<DummyEndpoint *>(ep)->ru_; + } + static char *get_peer(grpc_endpoint *ep) { return gpr_strdup("test"); } + static int get_fd(grpc_endpoint *ep) { return 0; } +}; + +class Fixture { + public: + Fixture(const grpc::ChannelArguments &args, bool client) { + grpc_channel_args c_args = args.c_channel_args(); + ep_ = new DummyEndpoint; + t_ = grpc_create_chttp2_transport(exec_ctx(), &c_args, ep_, client); + grpc_chttp2_transport_start_reading(exec_ctx(), t_, NULL); + FlushExecCtx(); + } + + void FlushExecCtx() { grpc_exec_ctx_flush(&exec_ctx_); } + + ~Fixture() { + grpc_transport_destroy(&exec_ctx_, t_); + grpc_exec_ctx_finish(&exec_ctx_); + } + + grpc_chttp2_transport *chttp2_transport() { + return reinterpret_cast<grpc_chttp2_transport *>(t_); + } + grpc_transport *transport() { return t_; } + grpc_exec_ctx *exec_ctx() { return &exec_ctx_; } + + void PushInput(grpc_slice slice) { ep_->PushInput(exec_ctx(), slice); } + + private: + DummyEndpoint *ep_; + grpc_exec_ctx exec_ctx_ = GRPC_EXEC_CTX_INIT; + grpc_transport *t_; +}; + +static void DoNothing(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {} + +class Stream { + public: + Stream(Fixture *f) : f_(f) { + GRPC_STREAM_REF_INIT(&refcount_, 1, DoNothing, nullptr, "test_stream"); + stream_size_ = grpc_transport_stream_size(f->transport()); + stream_ = gpr_malloc(stream_size_); + arena_ = gpr_arena_create(4096); + } + + ~Stream() { + gpr_free(stream_); + gpr_arena_destroy(arena_); + } + + void Init(benchmark::State &state) { + memset(stream_, 0, stream_size_); + if ((state.iterations() & 0xffff) == 0) { + gpr_arena_destroy(arena_); + arena_ = gpr_arena_create(4096); + } + grpc_transport_init_stream(f_->exec_ctx(), f_->transport(), + static_cast<grpc_stream *>(stream_), &refcount_, + NULL, arena_); + } + + void DestroyThen(grpc_closure *closure) { + grpc_transport_destroy_stream(f_->exec_ctx(), f_->transport(), + static_cast<grpc_stream *>(stream_), closure); + } + + void Op(grpc_transport_stream_op *op) { + grpc_transport_perform_stream_op(f_->exec_ctx(), f_->transport(), + static_cast<grpc_stream *>(stream_), op); + } + + grpc_chttp2_stream *chttp2_stream() { + return static_cast<grpc_chttp2_stream *>(stream_); + } + + private: + Fixture *f_; + grpc_stream_refcount refcount_; + gpr_arena *arena_; + size_t stream_size_; + void *stream_; +}; + +class Closure : public grpc_closure { + public: + virtual ~Closure() {} +}; + +template <class F> +std::unique_ptr<Closure> MakeClosure( + F f, grpc_closure_scheduler *sched = grpc_schedule_on_exec_ctx) { + struct C : public Closure { + C(const F &f, grpc_closure_scheduler *sched) : f_(f) { + grpc_closure_init(this, Execute, this, sched); + } + F f_; + static void Execute(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + static_cast<C *>(arg)->f_(exec_ctx, error); + } + }; + return std::unique_ptr<Closure>(new C(f, sched)); +} + +template <class F> +grpc_closure *MakeOnceClosure( + F f, grpc_closure_scheduler *sched = grpc_schedule_on_exec_ctx) { + struct C : public grpc_closure { + C(const F &f) : f_(f) {} + F f_; + static void Execute(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { + static_cast<C *>(arg)->f_(exec_ctx, error); + delete static_cast<C *>(arg); + } + }; + auto *c = new C{f}; + return grpc_closure_init(c, C::Execute, c, sched); +} + +//////////////////////////////////////////////////////////////////////////////// +// Benchmarks +// + +static void BM_StreamCreateDestroy(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + std::unique_ptr<Closure> next = + MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + s.Init(state); + s.DestroyThen(next.get()); + }); + grpc_closure_run(f.exec_ctx(), next.get(), GRPC_ERROR_NONE); + f.FlushExecCtx(); + track_counters.Finish(state); +} +BENCHMARK(BM_StreamCreateDestroy); + +class RepresentativeClientInitialMetadata { + public: + static std::vector<grpc_mdelem> GetElems(grpc_exec_ctx *exec_ctx) { + return { + GRPC_MDELEM_SCHEME_HTTP, GRPC_MDELEM_METHOD_POST, + grpc_mdelem_from_slices( + exec_ctx, GRPC_MDSTR_PATH, + grpc_slice_intern(grpc_slice_from_static_string("/foo/bar"))), + grpc_mdelem_from_slices(exec_ctx, GRPC_MDSTR_AUTHORITY, + grpc_slice_intern(grpc_slice_from_static_string( + "foo.test.google.fr:1234"))), + GRPC_MDELEM_GRPC_ACCEPT_ENCODING_IDENTITY_COMMA_DEFLATE_COMMA_GZIP, + GRPC_MDELEM_TE_TRAILERS, + GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC, + grpc_mdelem_from_slices( + exec_ctx, GRPC_MDSTR_USER_AGENT, + grpc_slice_intern(grpc_slice_from_static_string( + "grpc-c/3.0.0-dev (linux; chttp2; green)")))}; + } +}; + +template <class Metadata> +static void BM_StreamCreateSendInitialMetadataDestroy(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + grpc_transport_stream_op op; + std::unique_ptr<Closure> start; + std::unique_ptr<Closure> done; + + grpc_metadata_batch b; + grpc_metadata_batch_init(&b); + b.deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + std::vector<grpc_mdelem> elems = Metadata::GetElems(f.exec_ctx()); + std::vector<grpc_linked_mdelem> storage(elems.size()); + for (size_t i = 0; i < elems.size(); i++) { + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "addmd", + grpc_metadata_batch_add_tail(f.exec_ctx(), &b, &storage[i], elems[i]))); + } + + f.FlushExecCtx(); + start = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + s.Init(state); + memset(&op, 0, sizeof(op)); + op.on_complete = done.get(); + op.send_initial_metadata = &b; + s.Op(&op); + }); + done = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + memset(&op, 0, sizeof(op)); + op.cancel_error = GRPC_ERROR_CANCELLED; + s.Op(&op); + s.DestroyThen(start.get()); + }); + grpc_closure_sched(f.exec_ctx(), start.get(), GRPC_ERROR_NONE); + f.FlushExecCtx(); + grpc_metadata_batch_destroy(f.exec_ctx(), &b); + track_counters.Finish(state); +} +BENCHMARK_TEMPLATE(BM_StreamCreateSendInitialMetadataDestroy, + RepresentativeClientInitialMetadata); + +static void BM_TransportEmptyOp(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + s.Init(state); + grpc_transport_stream_op op; + std::unique_ptr<Closure> c = + MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + memset(&op, 0, sizeof(op)); + op.on_complete = c.get(); + s.Op(&op); + }); + grpc_closure_sched(f.exec_ctx(), c.get(), GRPC_ERROR_NONE); + f.FlushExecCtx(); + s.DestroyThen( + MakeOnceClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {})); + f.FlushExecCtx(); + track_counters.Finish(state); +} +BENCHMARK(BM_TransportEmptyOp); + +static void BM_TransportStreamSend(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + s.Init(state); + grpc_transport_stream_op op; + grpc_slice_buffer_stream send_stream; + grpc_slice_buffer send_buffer; + grpc_slice_buffer_init(&send_buffer); + grpc_slice_buffer_add(&send_buffer, gpr_slice_malloc(state.range(0))); + memset(GRPC_SLICE_START_PTR(send_buffer.slices[0]), 0, + GRPC_SLICE_LENGTH(send_buffer.slices[0])); + + grpc_metadata_batch b; + grpc_metadata_batch_init(&b); + b.deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + std::vector<grpc_mdelem> elems = + RepresentativeClientInitialMetadata::GetElems(f.exec_ctx()); + std::vector<grpc_linked_mdelem> storage(elems.size()); + for (size_t i = 0; i < elems.size(); i++) { + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "addmd", + grpc_metadata_batch_add_tail(f.exec_ctx(), &b, &storage[i], elems[i]))); + } + + std::unique_ptr<Closure> c = + MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + // force outgoing window to be yuge + s.chttp2_stream()->outgoing_window_delta = 1024 * 1024 * 1024; + f.chttp2_transport()->outgoing_window = 1024 * 1024 * 1024; + grpc_slice_buffer_stream_init(&send_stream, &send_buffer, 0); + memset(&op, 0, sizeof(op)); + op.on_complete = c.get(); + op.send_message = &send_stream.base; + s.Op(&op); + }); + + memset(&op, 0, sizeof(op)); + op.send_initial_metadata = &b; + op.on_complete = c.get(); + s.Op(&op); + + f.FlushExecCtx(); + memset(&op, 0, sizeof(op)); + op.cancel_error = GRPC_ERROR_CANCELLED; + s.Op(&op); + s.DestroyThen( + MakeOnceClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {})); + f.FlushExecCtx(); + track_counters.Finish(state); + grpc_metadata_batch_destroy(f.exec_ctx(), &b); + grpc_slice_buffer_destroy(&send_buffer); +} +BENCHMARK(BM_TransportStreamSend)->Range(0, 128 * 1024 * 1024); + +#define SLICE_FROM_BUFFER(s) grpc_slice_from_static_buffer(s, sizeof(s) - 1) + +static grpc_slice CreateIncomingDataSlice(size_t length, size_t frame_size) { + std::queue<char> unframed; + + unframed.push(static_cast<uint8_t>(0)); + unframed.push(static_cast<uint8_t>(length >> 24)); + unframed.push(static_cast<uint8_t>(length >> 16)); + unframed.push(static_cast<uint8_t>(length >> 8)); + unframed.push(static_cast<uint8_t>(length)); + for (size_t i = 0; i < length; i++) { + unframed.push('a'); + } + + std::vector<char> framed; + while (unframed.size() > frame_size) { + // frame size + framed.push_back(static_cast<uint8_t>(frame_size >> 16)); + framed.push_back(static_cast<uint8_t>(frame_size >> 8)); + framed.push_back(static_cast<uint8_t>(frame_size)); + // data frame + framed.push_back(0); + // no flags + framed.push_back(0); + // stream id + framed.push_back(0); + framed.push_back(0); + framed.push_back(0); + framed.push_back(1); + // frame data + for (size_t i = 0; i < frame_size; i++) { + framed.push_back(unframed.front()); + unframed.pop(); + } + } + + // frame size + framed.push_back(static_cast<uint8_t>(unframed.size() >> 16)); + framed.push_back(static_cast<uint8_t>(unframed.size() >> 8)); + framed.push_back(static_cast<uint8_t>(unframed.size())); + // data frame + framed.push_back(0); + // no flags + framed.push_back(0); + // stream id + framed.push_back(0); + framed.push_back(0); + framed.push_back(0); + framed.push_back(1); + while (!unframed.empty()) { + framed.push_back(unframed.front()); + unframed.pop(); + } + + return grpc_slice_from_copied_buffer(framed.data(), framed.size()); +} + +static void BM_TransportStreamRecv(benchmark::State &state) { + TrackCounters track_counters; + Fixture f(grpc::ChannelArguments(), true); + Stream s(&f); + s.Init(state); + grpc_transport_stream_op op; + grpc_byte_stream *recv_stream; + grpc_slice incoming_data = CreateIncomingDataSlice(state.range(0), 16384); + + grpc_metadata_batch b; + grpc_metadata_batch_init(&b); + grpc_metadata_batch b_recv; + grpc_metadata_batch_init(&b_recv); + b.deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + std::vector<grpc_mdelem> elems = + RepresentativeClientInitialMetadata::GetElems(f.exec_ctx()); + std::vector<grpc_linked_mdelem> storage(elems.size()); + for (size_t i = 0; i < elems.size(); i++) { + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "addmd", + grpc_metadata_batch_add_tail(f.exec_ctx(), &b, &storage[i], elems[i]))); + } + + std::unique_ptr<Closure> do_nothing = + MakeClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {}); + + uint32_t received; + + std::unique_ptr<Closure> drain_start; + std::unique_ptr<Closure> drain; + std::unique_ptr<Closure> drain_continue; + grpc_slice recv_slice; + + std::unique_ptr<Closure> c = + MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (!state.KeepRunning()) return; + // force outgoing window to be yuge + s.chttp2_stream()->incoming_window_delta = 1024 * 1024 * 1024; + f.chttp2_transport()->incoming_window = 1024 * 1024 * 1024; + received = 0; + memset(&op, 0, sizeof(op)); + op.on_complete = do_nothing.get(); + op.recv_message = &recv_stream; + op.recv_message_ready = drain_start.get(); + s.Op(&op); + f.PushInput(grpc_slice_ref(incoming_data)); + }); + + drain_start = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + if (recv_stream == NULL) { + GPR_ASSERT(!state.KeepRunning()); + return; + } + grpc_closure_run(exec_ctx, drain.get(), GRPC_ERROR_NONE); + }); + + drain = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + do { + if (received == recv_stream->length) { + grpc_byte_stream_destroy(exec_ctx, recv_stream); + grpc_closure_sched(exec_ctx, c.get(), GRPC_ERROR_NONE); + return; + } + } while (grpc_byte_stream_next(exec_ctx, recv_stream, &recv_slice, + recv_stream->length - received, + drain_continue.get())); + }); + + drain_continue = MakeClosure([&](grpc_exec_ctx *exec_ctx, grpc_error *error) { + received += GRPC_SLICE_LENGTH(recv_slice); + grpc_slice_unref_internal(exec_ctx, recv_slice); + grpc_closure_run(exec_ctx, drain.get(), GRPC_ERROR_NONE); + }); + + memset(&op, 0, sizeof(op)); + op.send_initial_metadata = &b; + op.recv_initial_metadata = &b_recv; + op.on_complete = c.get(); + s.Op(&op); + f.PushInput(SLICE_FROM_BUFFER( + "\x00\x00\x00\x04\x00\x00\x00\x00\x00" + // Generated using: + // tools/codegen/core/gen_header_frame.py < + // test/cpp/microbenchmarks/representative_server_initial_metadata.headers + "\x00\x00X\x01\x04\x00\x00\x00\x01" + "\x10\x07:status\x03" + "200" + "\x10\x0c" + "content-type\x10" + "application/grpc" + "\x10\x14grpc-accept-encoding\x15identity,deflate,gzip")); + + f.FlushExecCtx(); + memset(&op, 0, sizeof(op)); + op.cancel_error = GRPC_ERROR_CANCELLED; + s.Op(&op); + s.DestroyThen( + MakeOnceClosure([](grpc_exec_ctx *exec_ctx, grpc_error *error) {})); + f.FlushExecCtx(); + track_counters.Finish(state); + grpc_metadata_batch_destroy(f.exec_ctx(), &b); + grpc_metadata_batch_destroy(f.exec_ctx(), &b_recv); + grpc_slice_unref(incoming_data); +} +BENCHMARK(BM_TransportStreamRecv)->Range(0, 128 * 1024 * 1024); + +BENCHMARK_MAIN(); diff --git a/test/cpp/microbenchmarks/bm_error.cc b/test/cpp/microbenchmarks/bm_error.cc index c4f6aa19d5..00e1a08cab 100644 --- a/test/cpp/microbenchmarks/bm_error.cc +++ b/test/cpp/microbenchmarks/bm_error.cc @@ -51,21 +51,30 @@ class ErrorDeleter { }; typedef std::unique_ptr<grpc_error, ErrorDeleter> ErrorPtr; -static void BM_ErrorCreate(benchmark::State& state) { +static void BM_ErrorCreateFromStatic(benchmark::State& state) { TrackCounters track_counters; while (state.KeepRunning()) { - GRPC_ERROR_UNREF(GRPC_ERROR_CREATE("Error")); + GRPC_ERROR_UNREF(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error")); } track_counters.Finish(state); } -BENCHMARK(BM_ErrorCreate); +BENCHMARK(BM_ErrorCreateFromStatic); + +static void BM_ErrorCreateFromCopied(benchmark::State& state) { + TrackCounters track_counters; + while (state.KeepRunning()) { + GRPC_ERROR_UNREF(GRPC_ERROR_CREATE_FROM_COPIED_STRING("Error not inline")); + } + track_counters.Finish(state); +} +BENCHMARK(BM_ErrorCreateFromCopied); static void BM_ErrorCreateAndSetStatus(benchmark::State& state) { TrackCounters track_counters; while (state.KeepRunning()) { - GRPC_ERROR_UNREF(grpc_error_set_int(GRPC_ERROR_CREATE("Error"), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_ABORTED)); + GRPC_ERROR_UNREF( + grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"), + GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_ABORTED)); } track_counters.Finish(state); } @@ -75,9 +84,10 @@ 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")); + grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("GOAWAY received"), + GRPC_ERROR_INT_HTTP2_ERROR, (intptr_t)0), + GRPC_ERROR_STR_RAW_BYTES, grpc_slice_from_static_string("raw bytes"))); } track_counters.Finish(state); } @@ -85,7 +95,7 @@ BENCHMARK(BM_ErrorCreateAndSetIntAndStr); static void BM_ErrorCreateAndSetIntLoop(benchmark::State& state) { TrackCounters track_counters; - grpc_error* error = GRPC_ERROR_CREATE("Error"); + grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"); int n = 0; while (state.KeepRunning()) { error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS, n++); @@ -97,10 +107,11 @@ BENCHMARK(BM_ErrorCreateAndSetIntLoop); static void BM_ErrorCreateAndSetStrLoop(benchmark::State& state) { TrackCounters track_counters; - grpc_error* error = GRPC_ERROR_CREATE("Error"); + grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"); const char* str = "hello"; while (state.KeepRunning()) { - error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, str); + error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, + grpc_slice_from_static_string(str)); } GRPC_ERROR_UNREF(error); track_counters.Finish(state); @@ -109,7 +120,7 @@ BENCHMARK(BM_ErrorCreateAndSetStrLoop); static void BM_ErrorRefUnref(benchmark::State& state) { TrackCounters track_counters; - grpc_error* error = GRPC_ERROR_CREATE("Error"); + grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"); while (state.KeepRunning()) { GRPC_ERROR_UNREF(GRPC_ERROR_REF(error)); } @@ -138,8 +149,8 @@ BENCHMARK(BM_ErrorGetIntFromNoError); static void BM_ErrorGetMissingInt(benchmark::State& state) { TrackCounters track_counters; - ErrorPtr error( - grpc_error_set_int(GRPC_ERROR_CREATE("Error"), GRPC_ERROR_INT_INDEX, 1)); + ErrorPtr error(grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"), GRPC_ERROR_INT_INDEX, 1)); while (state.KeepRunning()) { intptr_t value; grpc_error_get_int(error.get(), GRPC_ERROR_INT_OFFSET, &value); @@ -150,8 +161,8 @@ BENCHMARK(BM_ErrorGetMissingInt); static void BM_ErrorGetPresentInt(benchmark::State& state) { TrackCounters track_counters; - ErrorPtr error( - grpc_error_set_int(GRPC_ERROR_CREATE("Error"), GRPC_ERROR_INT_OFFSET, 1)); + ErrorPtr error(grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"), GRPC_ERROR_INT_OFFSET, 1)); while (state.KeepRunning()) { intptr_t value; grpc_error_get_int(error.get(), GRPC_ERROR_INT_OFFSET, &value); @@ -186,7 +197,7 @@ class SimpleError { private: const gpr_timespec deadline_ = gpr_inf_future(GPR_CLOCK_MONOTONIC); - ErrorPtr error_{GRPC_ERROR_CREATE("Error")}; + ErrorPtr error_{GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error")}; }; class ErrorWithGrpcStatus { @@ -196,9 +207,9 @@ class ErrorWithGrpcStatus { private: const gpr_timespec deadline_ = gpr_inf_future(GPR_CLOCK_MONOTONIC); - ErrorPtr error_{grpc_error_set_int(GRPC_ERROR_CREATE("Error"), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_UNIMPLEMENTED)}; + ErrorPtr error_{grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"), GRPC_ERROR_INT_GRPC_STATUS, + GRPC_STATUS_UNIMPLEMENTED)}; }; class ErrorWithHttpError { @@ -208,9 +219,9 @@ class ErrorWithHttpError { private: const gpr_timespec deadline_ = gpr_inf_future(GPR_CLOCK_MONOTONIC); - ErrorPtr error_{grpc_error_set_int(GRPC_ERROR_CREATE("Error"), - GRPC_ERROR_INT_HTTP2_ERROR, - GRPC_HTTP2_COMPRESSION_ERROR)}; + ErrorPtr error_{grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"), GRPC_ERROR_INT_HTTP2_ERROR, + GRPC_HTTP2_COMPRESSION_ERROR)}; }; class ErrorWithNestedGrpcStatus { @@ -220,11 +231,12 @@ class ErrorWithNestedGrpcStatus { private: const gpr_timespec deadline_ = gpr_inf_future(GPR_CLOCK_MONOTONIC); - ErrorPtr nested_error_{grpc_error_set_int(GRPC_ERROR_CREATE("Error"), - GRPC_ERROR_INT_GRPC_STATUS, - GRPC_STATUS_UNIMPLEMENTED)}; + ErrorPtr nested_error_{grpc_error_set_int( + GRPC_ERROR_CREATE_FROM_STATIC_STRING("Error"), GRPC_ERROR_INT_GRPC_STATUS, + GRPC_STATUS_UNIMPLEMENTED)}; grpc_error* nested_errors_[1] = {nested_error_.get()}; - ErrorPtr error_{GRPC_ERROR_CREATE_REFERENCING("Error", nested_errors_, 1)}; + ErrorPtr error_{GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING( + "Error", nested_errors_, 1)}; }; template <class Fixture> @@ -253,8 +265,8 @@ static void BM_ErrorGetStatus(benchmark::State& state) { Fixture fixture; while (state.KeepRunning()) { grpc_status_code status; - const char* msg; - grpc_error_get_status(fixture.error(), fixture.deadline(), &status, &msg, + grpc_slice slice; + grpc_error_get_status(fixture.error(), fixture.deadline(), &status, &slice, NULL); } track_counters.Finish(state); diff --git a/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc b/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc index dc0e7d769a..00e37f7912 100644 --- a/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc +++ b/test/cpp/microbenchmarks/bm_fullstack_streaming_ping_pong.cc @@ -54,86 +54,141 @@ auto& force_library_initialization = Library::get(); static void* tag(intptr_t x) { return reinterpret_cast<void*>(x); } -template <class Fixture> -static void BM_PumpStreamClientToServer(benchmark::State& state) { +// Repeatedly makes Streaming Bidi calls (exchanging a configurable number of +// messages in each call) in a loop on a single channel +// +// First parmeter (i.e state.range(0)): Message size (in bytes) to use +// Second parameter (i.e state.range(1)): Number of ping pong messages. +// Note: One ping-pong means two messages (one from client to server and +// the other from server to client): +template <class Fixture, class ClientContextMutator, class ServerContextMutator> +static void BM_StreamingPingPong(benchmark::State& state) { + const int msg_size = state.range(0); + const int max_ping_pongs = state.range(1); + EchoTestService::AsyncService service; std::unique_ptr<Fixture> fixture(new Fixture(&service)); { + EchoResponse send_response; + EchoResponse recv_response; EchoRequest send_request; EchoRequest recv_request; - if (state.range(0) > 0) { - send_request.set_message(std::string(state.range(0), 'a')); + + if (msg_size > 0) { + send_request.set_message(std::string(msg_size, 'a')); + send_response.set_message(std::string(msg_size, 'b')); } - Status recv_status; - ServerContext svr_ctx; - ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx); - service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(), - fixture->cq(), tag(0)); + std::unique_ptr<EchoTestService::Stub> stub( EchoTestService::NewStub(fixture->channel())); - ClientContext cli_ctx; - auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1)); - int need_tags = (1 << 0) | (1 << 1); - void* t; - bool ok; - while (need_tags) { - GPR_ASSERT(fixture->cq()->Next(&t, &ok)); - GPR_ASSERT(ok); - int i = (int)(intptr_t)t; - GPR_ASSERT(need_tags & (1 << i)); - need_tags &= ~(1 << i); - } - response_rw.Read(&recv_request, tag(0)); + while (state.KeepRunning()) { - GPR_TIMER_SCOPE("BenchmarkCycle", 0); - request_rw->Write(send_request, tag(1)); - while (true) { + ServerContext svr_ctx; + ServerContextMutator svr_ctx_mut(&svr_ctx); + ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx); + service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(), + fixture->cq(), tag(0)); + + ClientContext cli_ctx; + ClientContextMutator cli_ctx_mut(&cli_ctx); + auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1)); + + // Establish async stream between client side and server side + void* t; + bool ok; + int need_tags = (1 << 0) | (1 << 1); + while (need_tags) { GPR_ASSERT(fixture->cq()->Next(&t, &ok)); - if (t == tag(0)) { - response_rw.Read(&recv_request, tag(0)); - } else if (t == tag(1)) { - break; - } else { - GPR_ASSERT(false); + GPR_ASSERT(ok); + int i = (int)(intptr_t)t; + GPR_ASSERT(need_tags & (1 << i)); + need_tags &= ~(1 << i); + } + + // Send 'max_ping_pongs' number of ping pong messages + int ping_pong_cnt = 0; + while (ping_pong_cnt < max_ping_pongs) { + request_rw->Write(send_request, tag(0)); // Start client send + response_rw.Read(&recv_request, tag(1)); // Start server recv + request_rw->Read(&recv_response, tag(2)); // Start client recv + + need_tags = (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3); + while (need_tags) { + GPR_ASSERT(fixture->cq()->Next(&t, &ok)); + GPR_ASSERT(ok); + int i = (int)(intptr_t)t; + + // If server recv is complete, start the server send operation + if (i == 1) { + response_rw.Write(send_response, tag(3)); + } + + GPR_ASSERT(need_tags & (1 << i)); + need_tags &= ~(1 << i); } + + ping_pong_cnt++; } - } - request_rw->WritesDone(tag(1)); - need_tags = (1 << 0) | (1 << 1); - while (need_tags) { - GPR_ASSERT(fixture->cq()->Next(&t, &ok)); - int i = (int)(intptr_t)t; - GPR_ASSERT(need_tags & (1 << i)); - need_tags &= ~(1 << i); + + request_rw->WritesDone(tag(0)); + response_rw.Finish(Status::OK, tag(1)); + + Status recv_status; + request_rw->Finish(&recv_status, tag(2)); + + need_tags = (1 << 0) | (1 << 1) | (1 << 2); + while (need_tags) { + GPR_ASSERT(fixture->cq()->Next(&t, &ok)); + int i = (int)(intptr_t)t; + GPR_ASSERT(need_tags & (1 << i)); + need_tags &= ~(1 << i); + } + + GPR_ASSERT(recv_status.ok()); } } + fixture->Finish(state); fixture.reset(); - state.SetBytesProcessed(state.range(0) * state.iterations()); + state.SetBytesProcessed(msg_size * state.iterations() * max_ping_pongs * 2); } -template <class Fixture> -static void BM_PumpStreamServerToClient(benchmark::State& state) { +// Repeatedly sends ping pong messages in a single streaming Bidi call in a loop +// First parmeter (i.e state.range(0)): Message size (in bytes) to use +template <class Fixture, class ClientContextMutator, class ServerContextMutator> +static void BM_StreamingPingPongMsgs(benchmark::State& state) { + const int msg_size = state.range(0); + EchoTestService::AsyncService service; std::unique_ptr<Fixture> fixture(new Fixture(&service)); { EchoResponse send_response; EchoResponse recv_response; - if (state.range(0) > 0) { - send_response.set_message(std::string(state.range(0), 'a')); + EchoRequest send_request; + EchoRequest recv_request; + + if (msg_size > 0) { + send_request.set_message(std::string(msg_size, 'a')); + send_response.set_message(std::string(msg_size, 'b')); } - Status recv_status; + + std::unique_ptr<EchoTestService::Stub> stub( + EchoTestService::NewStub(fixture->channel())); + ServerContext svr_ctx; + ServerContextMutator svr_ctx_mut(&svr_ctx); ServerAsyncReaderWriter<EchoResponse, EchoRequest> response_rw(&svr_ctx); service.RequestBidiStream(&svr_ctx, &response_rw, fixture->cq(), fixture->cq(), tag(0)); - std::unique_ptr<EchoTestService::Stub> stub( - EchoTestService::NewStub(fixture->channel())); + ClientContext cli_ctx; + ClientContextMutator cli_ctx_mut(&cli_ctx); auto request_rw = stub->AsyncBidiStream(&cli_ctx, fixture->cq(), tag(1)); - int need_tags = (1 << 0) | (1 << 1); + + // Establish async stream between client side and server side void* t; bool ok; + int need_tags = (1 << 0) | (1 << 1); while (need_tags) { GPR_ASSERT(fixture->cq()->Next(&t, &ok)); GPR_ASSERT(ok); @@ -141,54 +196,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 ee3dec2bce..34874b57f5 100644 --- a/test/cpp/microbenchmarks/bm_metadata.cc +++ b/test/cpp/microbenchmarks/bm_metadata.cc @@ -1,6 +1,6 @@ /* * - * Copyright 2015, Google Inc. + * Copyright 2017, Google Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without diff --git a/test/cpp/microbenchmarks/bm_pollset.cc b/test/cpp/microbenchmarks/bm_pollset.cc new file mode 100644 index 0000000000..0f3d3cef66 --- /dev/null +++ b/test/cpp/microbenchmarks/bm_pollset.cc @@ -0,0 +1,254 @@ +/* + * + * Copyright 2017, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* Test out pollset latencies */ + +#include <grpc/grpc.h> +#include <grpc/support/alloc.h> +#include <grpc/support/log.h> +#include <grpc/support/useful.h> + +extern "C" { +#include "src/core/lib/iomgr/ev_posix.h" +#include "src/core/lib/iomgr/pollset.h" +#include "src/core/lib/iomgr/port.h" +#include "src/core/lib/iomgr/wakeup_fd_posix.h" +} + +#include "test/cpp/microbenchmarks/helpers.h" +#include "third_party/benchmark/include/benchmark/benchmark.h" + +#include <string.h> + +#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL +#include <sys/epoll.h> +#include <sys/eventfd.h> +#include <unistd.h> +#endif + +auto& force_library_initialization = Library::get(); + +static void shutdown_ps(grpc_exec_ctx* exec_ctx, void* ps, grpc_error* error) { + grpc_pollset_destroy(static_cast<grpc_pollset*>(ps)); +} + +static void BM_CreateDestroyPollset(benchmark::State& state) { + TrackCounters track_counters; + size_t ps_sz = grpc_pollset_size(); + grpc_pollset* ps = static_cast<grpc_pollset*>(gpr_malloc(ps_sz)); + gpr_mu* mu; + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + grpc_closure shutdown_ps_closure; + grpc_closure_init(&shutdown_ps_closure, shutdown_ps, ps, + grpc_schedule_on_exec_ctx); + while (state.KeepRunning()) { + memset(ps, 0, ps_sz); + grpc_pollset_init(ps, &mu); + gpr_mu_lock(mu); + grpc_pollset_shutdown(&exec_ctx, ps, &shutdown_ps_closure); + gpr_mu_unlock(mu); + grpc_exec_ctx_flush(&exec_ctx); + } + grpc_exec_ctx_finish(&exec_ctx); + gpr_free(ps); + track_counters.Finish(state); +} +BENCHMARK(BM_CreateDestroyPollset); + +#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL +static void BM_PollEmptyPollset_SpeedOfLight(benchmark::State& state) { + // equivalent to BM_PollEmptyPollset, but just use the OS primitives to guage + // what the speed of light would be if we abstracted perfectly + TrackCounters track_counters; + int epfd = epoll_create1(0); + GPR_ASSERT(epfd != -1); + size_t nev = state.range(0); + size_t nfd = state.range(1); + epoll_event* ev = new epoll_event[nev]; + std::vector<int> fds; + for (size_t i = 0; i < nfd; i++) { + fds.push_back(eventfd(0, 0)); + epoll_event ev; + ev.events = EPOLLIN; + epoll_ctl(epfd, EPOLL_CTL_ADD, fds.back(), &ev); + } + while (state.KeepRunning()) { + epoll_wait(epfd, ev, nev, 0); + } + for (auto fd : fds) { + close(fd); + } + close(epfd); + delete[] ev; + track_counters.Finish(state); +} +BENCHMARK(BM_PollEmptyPollset_SpeedOfLight) + ->Args({1, 0}) + ->Args({1, 1}) + ->Args({1, 10}) + ->Args({1, 100}) + ->Args({1, 1000}) + ->Args({1, 10000}) + ->Args({1, 100000}) + ->Args({10, 1}) + ->Args({100, 1}) + ->Args({1000, 1}); +#endif + +static void BM_PollEmptyPollset(benchmark::State& state) { + TrackCounters track_counters; + size_t ps_sz = grpc_pollset_size(); + grpc_pollset* ps = static_cast<grpc_pollset*>(gpr_zalloc(ps_sz)); + gpr_mu* mu; + grpc_pollset_init(ps, &mu); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + gpr_timespec now = gpr_time_0(GPR_CLOCK_MONOTONIC); + gpr_timespec deadline = gpr_inf_past(GPR_CLOCK_MONOTONIC); + gpr_mu_lock(mu); + while (state.KeepRunning()) { + grpc_pollset_worker* worker; + GRPC_ERROR_UNREF(grpc_pollset_work(&exec_ctx, ps, &worker, now, deadline)); + } + grpc_closure shutdown_ps_closure; + grpc_closure_init(&shutdown_ps_closure, shutdown_ps, ps, + grpc_schedule_on_exec_ctx); + grpc_pollset_shutdown(&exec_ctx, ps, &shutdown_ps_closure); + gpr_mu_unlock(mu); + grpc_exec_ctx_finish(&exec_ctx); + gpr_free(ps); + track_counters.Finish(state); +} +BENCHMARK(BM_PollEmptyPollset); + +class Closure : public grpc_closure { + public: + virtual ~Closure() {} +}; + +template <class F> +Closure* MakeClosure(F f, grpc_closure_scheduler* scheduler) { + struct C : public Closure { + C(F f, grpc_closure_scheduler* scheduler) : f_(f) { + grpc_closure_init(this, C::cbfn, this, scheduler); + } + static void cbfn(grpc_exec_ctx* exec_ctx, void* arg, grpc_error* error) { + C* p = static_cast<C*>(arg); + p->f_(); + } + F f_; + }; + return new C(f, scheduler); +} + +#ifdef GRPC_LINUX_MULTIPOLL_WITH_EPOLL +static void BM_SingleThreadPollOneFd_SpeedOfLight(benchmark::State& state) { + // equivalent to BM_PollEmptyPollset, but just use the OS primitives to guage + // what the speed of light would be if we abstracted perfectly + TrackCounters track_counters; + int epfd = epoll_create1(0); + GPR_ASSERT(epfd != -1); + epoll_event ev[100]; + int fd = eventfd(0, EFD_NONBLOCK); + ev[0].events = EPOLLIN; + epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &ev[0]); + while (state.KeepRunning()) { + int err; + do { + err = eventfd_write(fd, 1); + } while (err < 0 && errno == EINTR); + GPR_ASSERT(err == 0); + do { + err = epoll_wait(epfd, ev, GPR_ARRAY_SIZE(ev), 0); + } while (err < 0 && errno == EINTR); + GPR_ASSERT(err == 1); + eventfd_t value; + do { + err = eventfd_read(fd, &value); + } while (err < 0 && errno == EINTR); + GPR_ASSERT(err == 0); + } + close(fd); + close(epfd); + track_counters.Finish(state); +} +BENCHMARK(BM_SingleThreadPollOneFd_SpeedOfLight); +#endif + +static void BM_SingleThreadPollOneFd(benchmark::State& state) { + TrackCounters track_counters; + size_t ps_sz = grpc_pollset_size(); + grpc_pollset* ps = static_cast<grpc_pollset*>(gpr_zalloc(ps_sz)); + gpr_mu* mu; + grpc_pollset_init(ps, &mu); + grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT; + gpr_timespec now = gpr_time_0(GPR_CLOCK_MONOTONIC); + gpr_timespec deadline = gpr_inf_future(GPR_CLOCK_MONOTONIC); + grpc_wakeup_fd wakeup_fd; + GRPC_ERROR_UNREF(grpc_wakeup_fd_init(&wakeup_fd)); + grpc_fd* wakeup = grpc_fd_create(wakeup_fd.read_fd, "wakeup_read"); + grpc_pollset_add_fd(&exec_ctx, ps, wakeup); + bool done = false; + Closure* continue_closure = MakeClosure( + [&]() { + GRPC_ERROR_UNREF(grpc_wakeup_fd_consume_wakeup(&wakeup_fd)); + if (!state.KeepRunning()) { + done = true; + return; + } + GRPC_ERROR_UNREF(grpc_wakeup_fd_wakeup(&wakeup_fd)); + grpc_fd_notify_on_read(&exec_ctx, wakeup, continue_closure); + }, + grpc_schedule_on_exec_ctx); + GRPC_ERROR_UNREF(grpc_wakeup_fd_wakeup(&wakeup_fd)); + grpc_fd_notify_on_read(&exec_ctx, wakeup, continue_closure); + gpr_mu_lock(mu); + while (!done) { + grpc_pollset_worker* worker; + GRPC_ERROR_UNREF(grpc_pollset_work(&exec_ctx, ps, &worker, now, deadline)); + } + grpc_fd_orphan(&exec_ctx, wakeup, NULL, NULL, "done"); + wakeup_fd.read_fd = 0; + grpc_closure shutdown_ps_closure; + grpc_closure_init(&shutdown_ps_closure, shutdown_ps, ps, + grpc_schedule_on_exec_ctx); + grpc_pollset_shutdown(&exec_ctx, ps, &shutdown_ps_closure); + gpr_mu_unlock(mu); + grpc_exec_ctx_finish(&exec_ctx); + grpc_wakeup_fd_destroy(&wakeup_fd); + gpr_free(ps); + track_counters.Finish(state); + delete continue_closure; +} +BENCHMARK(BM_SingleThreadPollOneFd); + +BENCHMARK_MAIN(); diff --git a/test/cpp/microbenchmarks/helpers.h b/test/cpp/microbenchmarks/helpers.h index 2829a46e5a..f44b7cf83a 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"); } diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h index baa9304cc2..25a19a5a74 100644 --- a/test/cpp/qps/client.h +++ b/test/cpp/qps/client.h @@ -46,7 +46,7 @@ #include <grpc/support/log.h> #include <grpc/support/time.h> -#include "src/proto/grpc/testing/payloads.grpc.pb.h" +#include "src/proto/grpc/testing/payloads.pb.h" #include "src/proto/grpc/testing/services.grpc.pb.h" #include "test/cpp/qps/histogram.h" diff --git a/test/cpp/qps/driver.h b/test/cpp/qps/driver.h index e72d30a4ef..dd32a16c87 100644 --- a/test/cpp/qps/driver.h +++ b/test/cpp/qps/driver.h @@ -36,7 +36,7 @@ #include <memory> -#include "src/proto/grpc/testing/control.grpc.pb.h" +#include "src/proto/grpc/testing/control.pb.h" #include "test/cpp/qps/histogram.h" namespace grpc { diff --git a/test/cpp/qps/histogram.h b/test/cpp/qps/histogram.h index acb415f0a1..470a394301 100644 --- a/test/cpp/qps/histogram.h +++ b/test/cpp/qps/histogram.h @@ -35,7 +35,7 @@ #define TEST_QPS_HISTOGRAM_H #include <grpc/support/histogram.h> -#include "src/proto/grpc/testing/stats.grpc.pb.h" +#include "src/proto/grpc/testing/stats.pb.h" namespace grpc { namespace testing { diff --git a/test/cpp/qps/qps_json_driver.cc b/test/cpp/qps/qps_json_driver.cc index ddaaa7ca75..bd2c1f0ec6 100644 --- a/test/cpp/qps/qps_json_driver.cc +++ b/test/cpp/qps/qps_json_driver.cc @@ -31,6 +31,7 @@ * */ +#include <iostream> #include <memory> #include <set> diff --git a/test/cpp/qps/server.h b/test/cpp/qps/server.h index 821d5935be..8fbf37a095 100644 --- a/test/cpp/qps/server.h +++ b/test/cpp/qps/server.h @@ -38,8 +38,8 @@ #include <grpc/support/cpu.h> #include <vector> -#include "src/proto/grpc/testing/control.grpc.pb.h" -#include "src/proto/grpc/testing/messages.grpc.pb.h" +#include "src/proto/grpc/testing/control.pb.h" +#include "src/proto/grpc/testing/messages.pb.h" #include "test/core/end2end/data/ssl_test_data.h" #include "test/core/util/port.h" #include "test/cpp/qps/usage_timer.h" diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc index b3a06aeaf5..b58d91eea6 100644 --- a/test/cpp/qps/server_async.cc +++ b/test/cpp/qps/server_async.cc @@ -103,24 +103,25 @@ class AsyncQpsServerTest final : public grpc::testing::Server { server_ = builder.BuildAndStart(); - using namespace std::placeholders; - auto process_rpc_bound = - std::bind(process_rpc, config.payload_config(), _1, _2); + std::bind(process_rpc, config.payload_config(), std::placeholders::_1, + std::placeholders::_2); for (int i = 0; i < 15000; i++) { for (int j = 0; j < num_threads; j++) { if (request_unary_function) { - auto request_unary = - std::bind(request_unary_function, &async_service_, _1, _2, _3, - srv_cqs_[j].get(), srv_cqs_[j].get(), _4); + auto request_unary = std::bind( + request_unary_function, &async_service_, std::placeholders::_1, + std::placeholders::_2, std::placeholders::_3, srv_cqs_[j].get(), + srv_cqs_[j].get(), std::placeholders::_4); contexts_.emplace_back( new ServerRpcContextUnaryImpl(request_unary, process_rpc_bound)); } if (request_streaming_function) { - auto request_streaming = - std::bind(request_streaming_function, &async_service_, _1, _2, - srv_cqs_[j].get(), srv_cqs_[j].get(), _3); + auto request_streaming = std::bind( + request_streaming_function, &async_service_, + std::placeholders::_1, std::placeholders::_2, srv_cqs_[j].get(), + srv_cqs_[j].get(), std::placeholders::_3); contexts_.emplace_back(new ServerRpcContextStreamingImpl( request_streaming, process_rpc_bound)); } diff --git a/test/http2_test/http2_server_health_check.py b/test/http2_test/http2_server_health_check.py new file mode 100644 index 0000000000..dd9402b855 --- /dev/null +++ b/test/http2_test/http2_server_health_check.py @@ -0,0 +1,49 @@ +# Copyright 2017, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import argparse +import hyper +import sys + +# Utility to healthcheck the http2 server. Used when starting the server to +# verify that the server is live before tests begin. +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--server_host', type=str, default='localhost') + parser.add_argument('--server_port', type=int, default=8080) + args = parser.parse_args() + server_host = args.server_host + server_port = args.server_port + conn = hyper.HTTP20Connection('%s:%d' % (server_host, server_port)) + conn.request('POST', '/grpc.testing.TestService/UnaryCall') + resp = conn.get_response() + if resp.headers.get('grpc-encoding') is None: + sys.exit(1) + else: + sys.exit(0) diff --git a/test/http2_test/http2_test_server.py b/test/http2_test/http2_test_server.py index abde3433ad..46c3e00d18 100644 --- a/test/http2_test/http2_test_server.py +++ b/test/http2_test/http2_test_server.py @@ -31,6 +31,7 @@ import argparse import logging +import sys import twisted import twisted.internet import twisted.internet.endpoints @@ -53,9 +54,11 @@ _TEST_CASE_MAPPING = { 'max_streams': test_max_streams.TestcaseSettingsMaxStreams, } +_exit_code = 0 + class H2Factory(twisted.internet.protocol.Factory): def __init__(self, testcase): - logging.info('Creating H2Factory for new connection.') + logging.info('Creating H2Factory for new connection (%s)', testcase) self._num_streams = 0 self._testcase = testcase @@ -83,6 +86,17 @@ def parse_arguments(): ) return parser.parse_args() +def listen(endpoint, test_case): + deferred = endpoint.listen(H2Factory(test_case)) + def listen_error(reason): + # If listening fails, we stop the reactor and exit the program + # with exit code 1. + global _exit_code + _exit_code = 1 + logging.error('Listening failed: %s' % reason.value) + twisted.internet.reactor.stop() + deferred.addErrback(listen_error) + def start_test_servers(base_port): """ Start one server per test case on incrementing port numbers beginning with base_port """ @@ -92,7 +106,9 @@ def start_test_servers(base_port): logging.warning('serving on port %d : %s'%(portnum, test_case)) endpoint = twisted.internet.endpoints.TCP4ServerEndpoint( twisted.internet.reactor, portnum, backlog=128) - endpoint.listen(H2Factory(test_case)) + # Wait until the reactor is running before calling endpoint.listen(). + twisted.internet.reactor.callWhenRunning(listen, endpoint, test_case) + index += 1 if __name__ == '__main__': @@ -102,3 +118,4 @@ if __name__ == '__main__': args = parse_arguments() start_test_servers(args.base_port) twisted.internet.reactor.run() + sys.exit(_exit_code) diff --git a/tools/buildgen/plugins/make_fuzzer_tests.py b/tools/buildgen/plugins/make_fuzzer_tests.py index ba9825acb9..5fc28ddd31 100644 --- a/tools/buildgen/plugins/make_fuzzer_tests.py +++ b/tools/buildgen/plugins/make_fuzzer_tests.py @@ -52,7 +52,7 @@ def mako_plugin(dictionary): 'exclude_iomgrs': ['uv'], 'exclude_configs': ['tsan'], 'uses_polling': False, - 'platforms': ['linux'], + 'platforms': ['mac', 'linux'], 'ci_platforms': ['linux'], 'flaky': False, 'language': 'c', diff --git a/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile b/tools/dockerfile/interoptest/grpc_interop_http2/Dockerfile index 66d9b4f640..acc984acb0 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/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++ index 60a1261235..5e6333dc89 100644 --- a/tools/doxygen/Doxyfile.c++ +++ b/tools/doxygen/Doxyfile.c++ @@ -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 \ diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal index 180d568809..8b7ec50a93 100644 --- a/tools/doxygen/Doxyfile.c++.internal +++ b/tools/doxygen/Doxyfile.c++.internal @@ -764,6 +764,7 @@ INPUT = doc/PROTOCOL-HTTP2.md \ doc/PROTOCOL-WEB.md \ doc/binary-logging.md \ doc/c-style-guide.md \ +doc/combiner-explainer.md \ doc/command_line_tool.md \ doc/compression.md \ doc/compression_cookbook.md \ @@ -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 \ diff --git a/tools/doxygen/Doxyfile.core b/tools/doxygen/Doxyfile.core index 478bdb2d04..e15c157751 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 a7d6aaeb9e..dba0f4c172 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 0000000000..8871ae21b6 --- /dev/null +++ b/tools/fuzzer/options/api_fuzzer.options @@ -0,0 +1,3 @@ +[libfuzzer] +max_len = 2048 +dict = api_fuzzer.dictionary diff --git a/tools/fuzzer/options/client_fuzzer.options b/tools/fuzzer/options/client_fuzzer.options new file mode 100644 index 0000000000..fd2eebf7d2 --- /dev/null +++ b/tools/fuzzer/options/client_fuzzer.options @@ -0,0 +1,3 @@ +[libfuzzer] +max_len = 2048 +dict = hpack.dictionary diff --git a/tools/fuzzer/options/fuzzer.options b/tools/fuzzer/options/fuzzer.options new file mode 100644 index 0000000000..5d468bc6e4 --- /dev/null +++ b/tools/fuzzer/options/fuzzer.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 512 diff --git a/tools/fuzzer/options/fuzzer_response.options b/tools/fuzzer/options/fuzzer_response.options new file mode 100644 index 0000000000..5dcdfac7a6 --- /dev/null +++ b/tools/fuzzer/options/fuzzer_response.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 128 diff --git a/tools/fuzzer/options/fuzzer_serverlist.options b/tools/fuzzer/options/fuzzer_serverlist.options new file mode 100644 index 0000000000..5dcdfac7a6 --- /dev/null +++ b/tools/fuzzer/options/fuzzer_serverlist.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 128 diff --git a/tools/fuzzer/options/hpack_parser_fuzzer_test.options b/tools/fuzzer/options/hpack_parser_fuzzer_test.options new file mode 100644 index 0000000000..584487fafc --- /dev/null +++ b/tools/fuzzer/options/hpack_parser_fuzzer_test.options @@ -0,0 +1,3 @@ +[libfuzzer] +max_len = 512 +dict = hpack.dictionary diff --git a/tools/fuzzer/options/percent_decode_fuzzer.options b/tools/fuzzer/options/percent_decode_fuzzer.options new file mode 100644 index 0000000000..ea2785e110 --- /dev/null +++ b/tools/fuzzer/options/percent_decode_fuzzer.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 32 diff --git a/tools/fuzzer/options/percent_encode_fuzzer.options b/tools/fuzzer/options/percent_encode_fuzzer.options new file mode 100644 index 0000000000..ea2785e110 --- /dev/null +++ b/tools/fuzzer/options/percent_encode_fuzzer.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 32 diff --git a/tools/fuzzer/options/request_fuzzer.options b/tools/fuzzer/options/request_fuzzer.options new file mode 100644 index 0000000000..fd32ac16e1 --- /dev/null +++ b/tools/fuzzer/options/request_fuzzer.options @@ -0,0 +1,3 @@ +[libfuzzer] +max_len = 2048 + diff --git a/tools/fuzzer/options/response_fuzzer.options b/tools/fuzzer/options/response_fuzzer.options new file mode 100644 index 0000000000..fd32ac16e1 --- /dev/null +++ b/tools/fuzzer/options/response_fuzzer.options @@ -0,0 +1,3 @@ +[libfuzzer] +max_len = 2048 + diff --git a/tools/fuzzer/options/server_fuzzer.options b/tools/fuzzer/options/server_fuzzer.options new file mode 100644 index 0000000000..fd2eebf7d2 --- /dev/null +++ b/tools/fuzzer/options/server_fuzzer.options @@ -0,0 +1,3 @@ +[libfuzzer] +max_len = 2048 +dict = hpack.dictionary diff --git a/tools/fuzzer/options/ssl_server_fuzzer.options b/tools/fuzzer/options/ssl_server_fuzzer.options new file mode 100644 index 0000000000..60bd9b0b2f --- /dev/null +++ b/tools/fuzzer/options/ssl_server_fuzzer.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 2048 diff --git a/tools/fuzzer/options/uri_fuzzer_test.options b/tools/fuzzer/options/uri_fuzzer_test.options new file mode 100644 index 0000000000..5dcdfac7a6 --- /dev/null +++ b/tools/fuzzer/options/uri_fuzzer_test.options @@ -0,0 +1,2 @@ +[libfuzzer] +max_len = 128 diff --git a/tools/gcp/utils/gcr_upload.py b/tools/gcp/utils/gcr_upload.py new file mode 100755 index 0000000000..b22f8731f6 --- /dev/null +++ b/tools/gcp/utils/gcr_upload.py @@ -0,0 +1,119 @@ +#!/usr/bin/env python2.7 +# Copyright 2017, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Upload docker images to Google Container Registry.""" + +from __future__ import print_function + +import argparse +import atexit +import os +import shutil +import subprocess +import tempfile + +argp = argparse.ArgumentParser(description='Run interop tests.') +argp.add_argument('--gcr_path', + default='gcr.io/grpc-testing', + help='Path of docker images in Google Container Registry') + +argp.add_argument('--gcr_tag', + default='latest', + help='the tag string for the images to upload') + +argp.add_argument('--with_files', + default=[], + nargs='+', + help='additional files to include in the docker image') + +argp.add_argument('--with_file_dest', + default='/var/local/image_info', + help='Destination directory for with_files inside docker image') + +argp.add_argument('--images', + default=[], + nargs='+', + help='local docker images in the form of repo:tag ' + + '(i.e. grpc_interop_java:26328ad8) to upload') + +argp.add_argument('--keep', + action='store_true', + help='keep the created local images after uploading to GCR') + + +args = argp.parse_args() + +def upload_to_gcr(image): + """Tags and Pushes a docker image in Google Containger Registry. + + image: docker image name, i.e. grpc_interop_java:26328ad8 + + A docker image image_foo:tag_old will be uploaded as + <gcr_path>/image_foo:<gcr_tag> + after inserting extra with_files under with_file_dest in the image. The + original image name will be stored as label original_name:"image_foo:tag_old". + """ + tag_idx = image.find(':') + if tag_idx == -1: + print('Failed to parse docker image name %s' % image) + return False + new_tag = '%s/%s:%s' % (args.gcr_path, image[:tag_idx], args.gcr_tag) + + lines = ['FROM ' + image] + lines.append('LABEL original_name="%s"' % image) + + temp_dir = tempfile.mkdtemp() + atexit.register(lambda: subprocess.call(['rm', '-rf', temp_dir])) + + # Copy with_files inside the tmp directory, which will be the docker build + # context. + for f in args.with_files: + shutil.copy(f, temp_dir) + lines.append('COPY %s %s/' % (os.path.basename(f), args.with_file_dest)) + + # Create a Dockerfile. + with open(os.path.join(temp_dir, 'Dockerfile'), 'w') as f: + f.write('\n'.join(lines)) + + build_cmd = ['docker', 'build', '--rm', '--tag', new_tag, temp_dir] + subprocess.check_output(build_cmd) + + if not args.keep: + atexit.register(lambda: subprocess.call(['docker', 'rmi', new_tag])) + + # Upload to GCR. + if args.gcr_path: + subprocess.call(['gcloud', 'docker', '--', 'push', new_tag]) + + return True + + +for image in args.images: + upload_to_gcr(image) diff --git a/tools/internal_ci/linux/grpc_master_sanitizers.sh b/tools/internal_ci/linux/grpc_master_sanitizers.sh index 2cd0efe158..d22387fb20 100755 --- a/tools/internal_ci/linux/grpc_master_sanitizers.sh +++ b/tools/internal_ci/linux/grpc_master_sanitizers.sh @@ -37,4 +37,4 @@ git submodule update --init # download docker images from dockerhub export DOCKERHUB_ORGANIZATION=grpctesting -tools/run_tests/run_tests_matrix.sh -f sanitizers linux +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 index 0c25661d62..5cc49f1046 100644 --- a/tools/internal_ci/linux/grpc_portability.cfg +++ b/tools/internal_ci/linux/grpc_portability.cfg @@ -31,7 +31,7 @@ # Location of the continuous shell script in repository. build_file: "grpc/tools/internal_ci/linux/grpc_portability.sh" -timeout_mins: 360 +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 index c7ac3bbcbe..58d3c58e70 100755 --- a/tools/internal_ci/linux/grpc_portability.sh +++ b/tools/internal_ci/linux/grpc_portability.sh @@ -37,4 +37,4 @@ git submodule update --init # download docker images from dockerhub export DOCKERHUB_ORGANIZATION=grpctesting -tools/run_tests/run_tests_matrix.sh -f portability linux +tools/run_tests/run_tests_matrix.py -f portability linux diff --git a/tools/internal_ci/linux/grpc_portability_build_only.sh b/tools/internal_ci/linux/grpc_portability_build_only.sh index edd6f91687..80b5c4cb96 100755 --- a/tools/internal_ci/linux/grpc_portability_build_only.sh +++ b/tools/internal_ci/linux/grpc_portability_build_only.sh @@ -37,4 +37,4 @@ git submodule update --init # download docker images from dockerhub export DOCKERHUB_ORGANIZATION=grpctesting -tools/run_tests/run_tests_matrix.sh -f portability linux --build_only +tools/run_tests/run_tests_matrix.py -f portability linux --build_only diff --git a/tools/profiling/latency_profile/run_latency_profile.sh b/tools/profiling/latency_profile/run_latency_profile.sh index e9baee0957..41423fc3c1 100755 --- a/tools/profiling/latency_profile/run_latency_profile.sh +++ b/tools/profiling/latency_profile/run_latency_profile.sh @@ -44,4 +44,9 @@ else PYTHON=python2.7 fi +make CONFIG=opt memory_profile_test memory_profile_client memory_profile_server +bins/opt/memory_profile_test +bq load microbenchmarks.memory memory_usage.csv + $PYTHON tools/run_tests/run_microbenchmark.py --collect summary perf latency --bigquery_upload + diff --git a/tools/profiling/microbenchmarks/bm_json.py b/tools/profiling/microbenchmarks/bm_json.py index c48a63b791..ca0af414a3 100644 --- a/tools/profiling/microbenchmarks/bm_json.py +++ b/tools/profiling/microbenchmarks/bm_json.py @@ -98,6 +98,22 @@ _BM_SPECS = { '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): diff --git a/tools/run_tests/artifacts/artifact_targets.py b/tools/run_tests/artifacts/artifact_targets.py index e0658f4678..04702bacca 100644 --- a/tools/run_tests/artifacts/artifact_targets.py +++ b/tools/run_tests/artifacts/artifact_targets.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. # diff --git a/tools/run_tests/artifacts/distribtest_targets.py b/tools/run_tests/artifacts/distribtest_targets.py index a7535b3852..90bbde83cf 100644 --- a/tools/run_tests/artifacts/distribtest_targets.py +++ b/tools/run_tests/artifacts/distribtest_targets.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. # diff --git a/tools/run_tests/artifacts/package_targets.py b/tools/run_tests/artifacts/package_targets.py index d490f571c3..2547f2073c 100644 --- a/tools/run_tests/artifacts/package_targets.py +++ b/tools/run_tests/artifacts/package_targets.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. # diff --git a/tools/run_tests/generated/configs.json b/tools/run_tests/generated/configs.json index 9173bd7c19..69e0f44774 100644 --- a/tools/run_tests/generated/configs.json +++ b/tools/run_tests/generated/configs.json @@ -58,7 +58,7 @@ { "config": "ubsan", "environ": { - "UBSAN_OPTIONS": "halt_on_error=1:print_stacktrace=1" + "UBSAN_OPTIONS": "halt_on_error=1:print_stacktrace=1:suppressions=tools/ubsan_suppressions.txt" } }, { diff --git a/tools/run_tests/generated/sources_and_headers.json b/tools/run_tests/generated/sources_and_headers.json index 767c2b2e36..14ad133863 100644 --- a/tools/run_tests/generated/sources_and_headers.json +++ b/tools/run_tests/generated/sources_and_headers.json @@ -87,6 +87,21 @@ { "deps": [ "gpr", + "gpr_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c", + "name": "arena_test", + "src": [ + "test/core/support/arena_test.c" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ + "gpr", "gpr_test_util", "grpc", "grpc_test_util", @@ -1917,24 +1932,6 @@ "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", - "gpr_test_util", - "grpc", "grpc_test_util" ], "headers": [], @@ -2443,6 +2440,27 @@ "headers": [], "is_filegroup": false, "language": "c++", + "name": "bm_arena", + "src": [ + "test/cpp/microbenchmarks/bm_arena.cc" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ + "benchmark", + "gpr", + "gpr_test_util", + "grpc", + "grpc++", + "grpc++_test_util", + "grpc_benchmark", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c++", "name": "bm_call_create", "src": [ "test/cpp/microbenchmarks/bm_call_create.cc" @@ -2485,6 +2503,27 @@ "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", + "gpr", + "gpr_test_util", + "grpc", + "grpc++", + "grpc++_test_util", + "grpc_benchmark", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c++", "name": "bm_closure", "src": [ "test/cpp/microbenchmarks/bm_closure.cc" @@ -2641,6 +2680,27 @@ }, { "deps": [ + "benchmark", + "gpr", + "gpr_test_util", + "grpc", + "grpc++", + "grpc++_test_util", + "grpc_benchmark", + "grpc_test_util" + ], + "headers": [], + "is_filegroup": false, + "language": "c++", + "name": "bm_pollset", + "src": [ + "test/cpp/microbenchmarks/bm_pollset.cc" + ], + "third_party": false, + "type": "target" + }, + { + "deps": [ "gpr", "grpc", "grpc++" @@ -7243,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", @@ -7290,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", @@ -7456,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", @@ -7636,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", @@ -7759,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", @@ -7769,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" @@ -7785,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", @@ -7810,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", diff --git a/tools/run_tests/generated/tests.json b/tools/run_tests/generated/tests.json index f9e2a19d0e..6202346fc2 100644 --- a/tools/run_tests/generated/tests.json +++ b/tools/run_tests/generated/tests.json @@ -99,6 +99,28 @@ ], "cpu_cost": 1.0, "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c", + "name": "arena_test", + "platforms": [ + "linux", + "mac", + "posix", + "windows" + ] + }, + { + "args": [], + "ci_platforms": [ + "linux", + "mac", + "posix", + "windows" + ], + "cpu_cost": 1.0, + "exclude_configs": [], "exclude_iomgrs": [ "uv" ], @@ -1812,7 +1834,9 @@ ], "cpu_cost": 1.0, "exclude_configs": [], - "exclude_iomgrs": [], + "exclude_iomgrs": [ + "uv" + ], "flaky": false, "gtest": false, "language": "c", @@ -1989,30 +2013,6 @@ "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": [ - "linux", - "mac", - "posix", - "windows" - ], "cpu_cost": 1.0, "exclude_configs": [], "exclude_iomgrs": [], @@ -2620,6 +2620,28 @@ "flaky": false, "gtest": false, "language": "c++", + "name": "bm_arena", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "--benchmark_min_time=0" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c++", "name": "bm_call_create", "platforms": [ "linux", @@ -2664,6 +2686,28 @@ "flaky": false, "gtest": false, "language": "c++", + "name": "bm_chttp2_transport", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { + "args": [ + "--benchmark_min_time=0" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c++", "name": "bm_closure", "platforms": [ "linux", @@ -2846,6 +2890,28 @@ ] }, { + "args": [ + "--benchmark_min_time=0" + ], + "ci_platforms": [ + "linux", + "mac", + "posix" + ], + "cpu_cost": 1.0, + "exclude_configs": [], + "exclude_iomgrs": [], + "flaky": false, + "gtest": false, + "language": "c++", + "name": "bm_pollset", + "platforms": [ + "linux", + "mac", + "posix" + ] + }, + { "args": [], "ci_platforms": [ "linux", @@ -39639,31 +39705,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 1024, - "defaults": "boringssl", - "exclude_configs": [ - "tsan", - "asan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -39714,31 +39755,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": "capacity", - "defaults": "boringssl", - "exclude_configs": [ - "tsan", - "asan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -39789,31 +39805,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 1024, - "defaults": "boringssl", - "exclude_configs": [ - "tsan", - "asan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -39864,31 +39855,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": "capacity", - "defaults": "boringssl", - "exclude_configs": [ - "tsan", - "asan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -40068,31 +40034,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 1024, - "defaults": "boringssl", - "exclude_configs": [ - "tsan", - "asan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -40143,31 +40084,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": "capacity", - "defaults": "boringssl", - "exclude_configs": [ - "tsan", - "asan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -40218,31 +40134,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 16, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 1024, - "defaults": "boringssl", - "exclude_configs": [ - "tsan", - "asan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -40293,31 +40184,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": "capacity", - "defaults": "boringssl", - "exclude_configs": [ - "tsan", - "asan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -40574,42 +40440,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 64, - "defaults": "boringssl", - "exclude_configs": [ - "asan-noleaks", - "asan-trace-cmp", - "basicprof", - "counters", - "dbg", - "gcov", - "helgrind", - "memcheck", - "msan", - "mutrace", - "opt", - "stapprof", - "ubsan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_secure_500kib_resource_quota_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -40682,42 +40512,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": "capacity", - "defaults": "boringssl", - "exclude_configs": [ - "asan-noleaks", - "asan-trace-cmp", - "basicprof", - "counters", - "dbg", - "gcov", - "helgrind", - "memcheck", - "msan", - "mutrace", - "opt", - "stapprof", - "ubsan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_secure_500kib_resource_quota_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -40790,42 +40584,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 64, - "defaults": "boringssl", - "exclude_configs": [ - "asan-noleaks", - "asan-trace-cmp", - "basicprof", - "counters", - "dbg", - "gcov", - "helgrind", - "memcheck", - "msan", - "mutrace", - "opt", - "stapprof", - "ubsan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_secure_500kib_resource_quota_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_ping_pong_secure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -40898,42 +40656,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": {\"use_test_ca\": true, \"server_host_override\": \"foo.test.google.fr\"}, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": "capacity", - "defaults": "boringssl", - "exclude_configs": [ - "asan-noleaks", - "asan-trace-cmp", - "basicprof", - "counters", - "dbg", - "gcov", - "helgrind", - "memcheck", - "msan", - "mutrace", - "opt", - "stapprof", - "ubsan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_secure_500kib_resource_quota_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_generic_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"server_type\": \"ASYNC_GENERIC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"bytebuf_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -41190,42 +40912,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 64, - "defaults": "boringssl", - "exclude_configs": [ - "asan-noleaks", - "asan-trace-cmp", - "basicprof", - "counters", - "dbg", - "gcov", - "helgrind", - "memcheck", - "msan", - "mutrace", - "opt", - "stapprof", - "ubsan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_sync_unary_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -41298,42 +40984,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"UNARY\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": "capacity", - "defaults": "boringssl", - "exclude_configs": [ - "asan-noleaks", - "asan-trace-cmp", - "basicprof", - "counters", - "dbg", - "gcov", - "helgrind", - "memcheck", - "msan", - "mutrace", - "opt", - "stapprof", - "ubsan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_unary_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -41406,42 +41056,6 @@ { "args": [ "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"SYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"SYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": 64, - "defaults": "boringssl", - "exclude_configs": [ - "asan-noleaks", - "asan-trace-cmp", - "basicprof", - "counters", - "dbg", - "gcov", - "helgrind", - "memcheck", - "msan", - "mutrace", - "opt", - "stapprof", - "ubsan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_sync_streaming_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ - "--scenarios_json", "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_ping_pong_insecure\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"async_server_threads\": 1, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 1, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 1, \"async_client_threads\": 1, \"outstanding_rpcs_per_channel\": 1, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" ], "boringssl": true, @@ -41513,42 +41127,6 @@ }, { "args": [ - "--scenarios_json", - "{\"scenarios\": [{\"name\": \"cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota\", \"warmup_seconds\": 0, \"benchmark_seconds\": 1, \"num_servers\": 1, \"server_config\": {\"resource_quota_size\": 512000, \"async_server_threads\": 0, \"security_params\": null, \"server_type\": \"ASYNC_SERVER\"}, \"num_clients\": 0, \"client_config\": {\"client_type\": \"ASYNC_CLIENT\", \"security_params\": null, \"payload_config\": {\"simple_params\": {\"resp_size\": 0, \"req_size\": 0}}, \"client_channels\": 64, \"async_client_threads\": 0, \"outstanding_rpcs_per_channel\": 100, \"rpc_type\": \"STREAMING\", \"load_params\": {\"closed_loop\": {}}, \"histogram_params\": {\"max_possible\": 60000000000.0, \"resolution\": 0.01}}}]}" - ], - "boringssl": true, - "ci_platforms": [ - "linux" - ], - "cpu_cost": "capacity", - "defaults": "boringssl", - "exclude_configs": [ - "asan-noleaks", - "asan-trace-cmp", - "basicprof", - "counters", - "dbg", - "gcov", - "helgrind", - "memcheck", - "msan", - "mutrace", - "opt", - "stapprof", - "ubsan" - ], - "excluded_poll_engines": [], - "flaky": false, - "language": "c++", - "name": "json_run_localhost", - "platforms": [ - "linux" - ], - "shortname": "json_run_localhost:cpp_protobuf_async_streaming_qps_unconstrained_insecure_500kib_resource_quota_low_thread_count", - "timeout_seconds": 360 - }, - { - "args": [ "test/core/end2end/fuzzers/api_fuzzer_corpus/00.bin" ], "ci_platforms": [ @@ -41565,6 +41143,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41587,6 +41166,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41609,6 +41189,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41631,6 +41212,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41653,6 +41235,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41675,6 +41258,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41697,6 +41281,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41719,6 +41304,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41741,6 +41327,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41763,6 +41350,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41785,6 +41373,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41807,6 +41396,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41829,6 +41419,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41851,6 +41442,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41873,6 +41465,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41895,6 +41488,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41917,6 +41511,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41939,6 +41534,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41961,6 +41557,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -41983,6 +41580,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42005,6 +41603,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42027,6 +41626,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42049,6 +41649,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42071,6 +41672,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42093,6 +41695,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42115,6 +41718,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42137,6 +41741,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42159,6 +41764,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42181,6 +41787,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42203,6 +41810,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42225,6 +41833,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42247,6 +41856,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42269,6 +41879,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42291,6 +41902,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42313,6 +41925,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42335,6 +41948,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42357,6 +41971,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42379,6 +41994,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42401,6 +42017,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42423,6 +42040,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42445,6 +42063,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42467,6 +42086,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42489,6 +42109,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42511,6 +42132,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42533,6 +42155,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42555,6 +42178,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42577,6 +42201,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42599,6 +42224,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42621,6 +42247,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42643,6 +42270,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42665,6 +42293,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42687,6 +42316,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42709,6 +42339,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42731,6 +42362,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42753,6 +42385,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42775,6 +42408,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42797,6 +42431,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42819,6 +42454,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42841,6 +42477,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42863,6 +42500,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42885,6 +42523,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42907,6 +42546,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42929,6 +42569,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42951,6 +42592,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42973,6 +42615,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -42995,6 +42638,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43017,6 +42661,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43039,6 +42684,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43061,6 +42707,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43083,6 +42730,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43105,6 +42753,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43127,6 +42776,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43149,6 +42799,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43171,6 +42822,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43193,6 +42845,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43215,6 +42868,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43237,6 +42891,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43259,6 +42914,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43281,6 +42937,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43303,6 +42960,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43325,6 +42983,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43347,6 +43006,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43369,6 +43029,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43391,6 +43052,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43413,6 +43075,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43435,6 +43098,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43457,6 +43121,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43479,6 +43144,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43501,6 +43167,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43523,6 +43190,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43545,6 +43213,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43567,6 +43236,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43589,6 +43259,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43611,6 +43282,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43633,6 +43305,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43655,6 +43328,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43677,6 +43351,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43699,6 +43374,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43721,6 +43397,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43743,6 +43420,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43765,6 +43443,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43787,6 +43466,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43809,6 +43489,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43831,6 +43512,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43853,6 +43535,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43875,6 +43558,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43897,6 +43581,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43919,6 +43604,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43941,6 +43627,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43963,6 +43650,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -43985,6 +43673,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44007,6 +43696,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44029,6 +43719,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44051,6 +43742,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44073,6 +43765,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44095,6 +43788,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44117,6 +43811,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44139,6 +43834,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44161,6 +43857,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44183,6 +43880,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44205,6 +43903,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44227,6 +43926,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44249,6 +43949,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44271,6 +43972,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44293,6 +43995,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44315,6 +44018,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44337,6 +44041,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44359,6 +44064,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44381,6 +44087,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44403,6 +44110,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44425,6 +44133,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44447,6 +44156,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44469,6 +44179,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44491,6 +44202,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44513,6 +44225,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44535,6 +44248,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44557,6 +44271,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44579,6 +44294,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44601,6 +44317,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44623,6 +44340,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44645,6 +44363,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44667,6 +44386,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44689,6 +44409,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44711,6 +44432,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44733,6 +44455,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44755,6 +44478,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44777,6 +44501,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44799,6 +44524,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44821,6 +44547,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44843,6 +44570,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44865,6 +44593,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44887,6 +44616,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44909,6 +44639,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44931,6 +44662,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44953,6 +44685,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44975,6 +44708,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -44997,6 +44731,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45019,6 +44754,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45041,6 +44777,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45063,6 +44800,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45085,6 +44823,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45107,6 +44846,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45129,6 +44869,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45151,6 +44892,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45173,6 +44915,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45195,6 +44938,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45217,6 +44961,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45239,6 +44984,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45261,6 +45007,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45283,6 +45030,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45305,6 +45053,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45327,6 +45076,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45349,6 +45099,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45371,6 +45122,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45393,6 +45145,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45415,6 +45168,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45437,6 +45191,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45459,6 +45214,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45481,6 +45237,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45503,6 +45260,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45525,6 +45283,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45547,6 +45306,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45569,6 +45329,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45591,6 +45352,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45613,6 +45375,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45635,6 +45398,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45657,6 +45421,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45679,6 +45444,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45701,6 +45467,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45723,6 +45490,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45745,6 +45513,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45767,6 +45536,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45789,6 +45559,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45811,6 +45582,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45833,6 +45605,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45855,6 +45628,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45877,6 +45651,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45899,6 +45674,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45921,6 +45697,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45943,6 +45720,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45965,6 +45743,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -45987,6 +45766,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46009,6 +45789,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46031,6 +45812,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46053,6 +45835,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46075,6 +45858,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46097,6 +45881,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46119,6 +45904,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46141,6 +45927,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46163,6 +45950,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46185,6 +45973,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46207,6 +45996,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46229,6 +46019,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46251,6 +46042,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46273,6 +46065,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46295,6 +46088,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46317,6 +46111,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46339,6 +46134,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46361,6 +46157,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46383,6 +46180,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46405,6 +46203,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46427,6 +46226,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46449,6 +46249,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46471,6 +46272,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46493,6 +46295,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46515,6 +46318,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46537,6 +46341,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46559,6 +46364,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46581,6 +46387,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46603,6 +46410,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46625,6 +46433,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46647,6 +46456,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46669,6 +46479,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46691,6 +46502,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46713,6 +46525,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46735,6 +46548,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46757,6 +46571,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46779,6 +46594,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46801,6 +46617,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46823,6 +46640,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46845,6 +46663,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46867,6 +46686,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46889,6 +46709,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46911,6 +46732,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46933,6 +46755,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46955,6 +46778,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46977,6 +46801,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -46999,6 +46824,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47021,6 +46847,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47043,6 +46870,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47065,6 +46893,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47087,6 +46916,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47109,6 +46939,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47131,6 +46962,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47153,6 +46985,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47175,6 +47008,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47197,6 +47031,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47219,6 +47054,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47241,6 +47077,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47263,6 +47100,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47285,6 +47123,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47307,6 +47146,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47329,6 +47169,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47351,6 +47192,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47373,6 +47215,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47395,6 +47238,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47417,6 +47261,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47439,6 +47284,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47461,6 +47307,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47483,6 +47330,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47505,6 +47353,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47527,6 +47376,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47549,6 +47399,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47571,6 +47422,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47593,6 +47445,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47615,6 +47468,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47637,6 +47491,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47659,6 +47514,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47681,6 +47537,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47703,6 +47560,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47725,6 +47583,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47747,6 +47606,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47769,6 +47629,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47791,6 +47652,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47813,6 +47675,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47835,6 +47698,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47857,6 +47721,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47879,6 +47744,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47901,6 +47767,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47923,6 +47790,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47945,6 +47813,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47967,6 +47836,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -47989,6 +47859,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48011,6 +47882,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48033,6 +47905,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48055,6 +47928,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48077,6 +47951,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48099,6 +47974,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48121,6 +47997,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48143,6 +48020,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48165,6 +48043,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48187,6 +48066,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48209,6 +48089,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48231,6 +48112,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48253,6 +48135,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48275,6 +48158,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48297,6 +48181,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48319,6 +48204,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48341,6 +48227,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48363,6 +48250,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48385,6 +48273,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48407,6 +48296,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48429,6 +48319,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48451,6 +48342,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48473,6 +48365,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48495,6 +48388,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48517,6 +48411,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48539,6 +48434,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48561,6 +48457,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48583,6 +48480,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48605,6 +48503,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48627,6 +48526,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48649,6 +48549,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48671,6 +48572,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48693,6 +48595,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48715,6 +48618,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48737,6 +48641,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48759,6 +48664,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48781,6 +48687,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48803,6 +48710,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48825,6 +48733,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48847,6 +48756,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48869,6 +48779,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48891,6 +48802,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48913,6 +48825,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48935,6 +48848,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48957,6 +48871,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -48979,6 +48894,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49001,6 +48917,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49023,6 +48940,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49045,6 +48963,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49067,6 +48986,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49089,6 +49009,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49111,6 +49032,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49133,6 +49055,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49155,6 +49078,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49177,6 +49101,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49199,6 +49124,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49221,6 +49147,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49243,6 +49170,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49265,6 +49193,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49287,6 +49216,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49309,6 +49239,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49331,6 +49262,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49353,6 +49285,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49375,6 +49308,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49397,6 +49331,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49419,6 +49354,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49441,6 +49377,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49463,6 +49400,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49485,6 +49423,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49507,6 +49446,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49529,6 +49469,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49551,6 +49492,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49573,6 +49515,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49595,6 +49538,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49617,6 +49561,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49639,6 +49584,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49661,6 +49607,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49683,6 +49630,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49705,6 +49653,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49727,6 +49676,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49749,6 +49699,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49771,6 +49722,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49793,6 +49745,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49815,6 +49768,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49837,6 +49791,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49859,6 +49814,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49881,6 +49837,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49903,6 +49860,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49925,6 +49883,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49947,6 +49906,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49969,6 +49929,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -49991,6 +49952,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50013,6 +49975,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50035,6 +49998,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50057,6 +50021,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50079,6 +50044,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50101,6 +50067,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50123,6 +50090,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50145,6 +50113,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50167,6 +50136,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50189,6 +50159,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50211,6 +50182,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50233,6 +50205,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50255,6 +50228,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50277,6 +50251,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50299,6 +50274,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50321,6 +50297,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50343,6 +50320,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50365,6 +50343,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50387,6 +50366,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50409,6 +50389,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50431,6 +50412,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50453,6 +50435,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50475,6 +50458,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50497,6 +50481,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50519,6 +50504,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50541,6 +50527,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50563,6 +50550,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50585,6 +50573,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50607,6 +50596,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50629,6 +50619,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50651,6 +50642,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50673,6 +50665,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50695,6 +50688,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50717,6 +50711,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50739,6 +50734,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50761,6 +50757,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50783,6 +50780,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50805,6 +50803,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50827,6 +50826,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50849,6 +50849,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50871,6 +50872,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50893,6 +50895,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50915,6 +50918,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50937,6 +50941,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50959,6 +50964,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -50981,6 +50987,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51003,6 +51010,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51025,6 +51033,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51047,6 +51056,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51069,6 +51079,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51091,6 +51102,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51113,6 +51125,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51135,6 +51148,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51157,6 +51171,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51179,6 +51194,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51201,6 +51217,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51223,6 +51240,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51245,6 +51263,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51267,6 +51286,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51289,6 +51309,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51311,6 +51332,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51333,6 +51355,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51355,6 +51378,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51377,6 +51401,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51399,6 +51424,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51421,6 +51447,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51443,6 +51470,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51465,6 +51493,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51487,6 +51516,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51509,6 +51539,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51531,6 +51562,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51553,6 +51585,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51575,6 +51608,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51597,6 +51631,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51619,6 +51654,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51641,6 +51677,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51663,6 +51700,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51685,6 +51723,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51707,6 +51746,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51729,6 +51769,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51751,6 +51792,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51773,6 +51815,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51795,6 +51838,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51817,6 +51861,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51839,6 +51884,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51861,6 +51907,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51883,6 +51930,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51905,6 +51953,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51927,6 +51976,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51949,6 +51999,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51971,6 +52022,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -51993,6 +52045,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52015,6 +52068,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52037,6 +52091,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52059,6 +52114,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52081,6 +52137,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52103,6 +52160,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52125,6 +52183,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52147,6 +52206,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52169,6 +52229,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52191,6 +52252,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52213,6 +52275,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52235,6 +52298,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52257,6 +52321,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52279,6 +52344,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52301,6 +52367,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52323,6 +52390,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52345,6 +52413,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52367,6 +52436,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52389,6 +52459,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52411,6 +52482,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52433,6 +52505,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52455,6 +52528,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52477,6 +52551,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52499,6 +52574,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52521,6 +52597,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52543,6 +52620,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52565,6 +52643,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52587,6 +52666,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52609,6 +52689,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52631,6 +52712,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52653,6 +52735,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52675,6 +52758,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52697,6 +52781,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52719,6 +52804,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52741,6 +52827,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52763,6 +52850,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52785,6 +52873,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52807,6 +52896,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52829,6 +52919,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52851,6 +52942,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52873,6 +52965,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52895,6 +52988,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52917,6 +53011,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52939,6 +53034,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52961,6 +53057,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -52983,6 +53080,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53005,6 +53103,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53027,6 +53126,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53049,6 +53149,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53071,6 +53172,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53093,6 +53195,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53115,6 +53218,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53137,6 +53241,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53159,6 +53264,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53181,6 +53287,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53203,6 +53310,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53225,6 +53333,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53247,6 +53356,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53269,6 +53379,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53291,6 +53402,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53313,6 +53425,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53335,6 +53448,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53357,6 +53471,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53379,6 +53494,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53401,6 +53517,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53423,6 +53540,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53445,6 +53563,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53467,6 +53586,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53489,6 +53609,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53511,6 +53632,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53533,6 +53655,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53555,6 +53678,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53577,6 +53701,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53599,6 +53724,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53621,6 +53747,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53643,6 +53770,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53665,6 +53793,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53687,6 +53816,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53709,6 +53839,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53731,6 +53862,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53753,6 +53885,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53775,6 +53908,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53797,6 +53931,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53819,6 +53954,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53841,6 +53977,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53863,6 +54000,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53885,6 +54023,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53907,6 +54046,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53929,6 +54069,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53951,6 +54092,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53973,6 +54115,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -53995,6 +54138,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54017,6 +54161,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54039,6 +54184,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54061,6 +54207,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54083,6 +54230,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54105,6 +54253,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54127,6 +54276,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54149,6 +54299,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54171,6 +54322,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54193,6 +54345,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54215,6 +54368,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54237,6 +54391,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54259,6 +54414,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54281,6 +54437,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54303,6 +54460,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54325,6 +54483,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54347,6 +54506,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54369,6 +54529,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54391,6 +54552,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54413,6 +54575,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54435,6 +54598,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54457,6 +54621,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54479,6 +54644,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54501,6 +54667,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54523,6 +54690,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54545,6 +54713,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54567,6 +54736,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54589,6 +54759,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54611,6 +54782,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54633,6 +54805,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54655,6 +54828,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54677,6 +54851,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54699,6 +54874,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54721,6 +54897,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54743,6 +54920,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54765,6 +54943,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54787,6 +54966,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54809,6 +54989,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54831,6 +55012,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54853,6 +55035,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54875,6 +55058,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54897,6 +55081,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54919,6 +55104,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54941,6 +55127,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54963,6 +55150,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -54985,6 +55173,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55007,6 +55196,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55029,6 +55219,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55051,6 +55242,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55073,6 +55265,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55095,6 +55288,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55117,6 +55311,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55139,6 +55334,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55161,6 +55357,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55183,6 +55380,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55205,6 +55403,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55227,6 +55426,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55249,6 +55449,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55271,6 +55472,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55293,6 +55495,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55315,6 +55518,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55337,6 +55541,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55359,6 +55564,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55381,6 +55587,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55403,6 +55610,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55425,6 +55633,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55447,6 +55656,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55469,6 +55679,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55491,6 +55702,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55513,6 +55725,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55535,6 +55748,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55557,6 +55771,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55579,6 +55794,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55601,6 +55817,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55623,6 +55840,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55645,6 +55863,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55667,6 +55886,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55689,6 +55909,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55711,6 +55932,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55733,6 +55955,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55755,6 +55978,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55777,6 +56001,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55799,6 +56024,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55821,6 +56047,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55843,6 +56070,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55865,6 +56093,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55887,6 +56116,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55909,6 +56139,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55931,6 +56162,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55953,6 +56185,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55975,6 +56208,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -55997,6 +56231,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56019,6 +56254,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56041,6 +56277,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56063,6 +56300,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56085,6 +56323,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56107,6 +56346,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56129,6 +56369,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56151,6 +56392,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56173,6 +56415,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56195,6 +56438,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56217,6 +56461,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56239,6 +56484,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56261,6 +56507,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56283,6 +56530,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56305,6 +56553,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56327,6 +56576,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56349,6 +56599,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56371,6 +56622,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56393,6 +56645,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56415,6 +56668,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56437,6 +56691,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56459,6 +56714,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56481,6 +56737,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56503,6 +56760,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56525,6 +56783,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56547,6 +56806,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56569,6 +56829,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56591,6 +56852,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56613,6 +56875,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56635,6 +56898,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56657,6 +56921,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56679,6 +56944,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56701,6 +56967,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56723,6 +56990,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56745,6 +57013,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56767,6 +57036,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56789,6 +57059,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56811,6 +57082,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56833,6 +57105,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56855,6 +57128,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56877,6 +57151,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56899,6 +57174,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56921,6 +57197,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56943,6 +57220,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56965,6 +57243,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -56987,6 +57266,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57009,6 +57289,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57031,6 +57312,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57053,6 +57335,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57075,6 +57358,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57097,6 +57381,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57119,6 +57404,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57141,6 +57427,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57163,6 +57450,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57185,6 +57473,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57207,6 +57496,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57229,6 +57519,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57251,6 +57542,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57273,6 +57565,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57295,6 +57588,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57317,6 +57611,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57339,6 +57634,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57361,6 +57657,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57383,6 +57680,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57405,6 +57703,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57427,6 +57726,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57449,6 +57749,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57471,6 +57772,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57493,6 +57795,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57515,6 +57818,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57537,6 +57841,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57559,6 +57864,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57581,6 +57887,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57603,6 +57910,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57625,6 +57933,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57647,6 +57956,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57669,6 +57979,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57691,6 +58002,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57713,6 +58025,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57735,6 +58048,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57757,6 +58071,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57779,6 +58094,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57801,6 +58117,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57823,6 +58140,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57845,6 +58163,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57867,6 +58186,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57889,6 +58209,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57911,6 +58232,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57933,6 +58255,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57955,6 +58278,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57977,6 +58301,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -57999,6 +58324,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58021,6 +58347,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58043,6 +58370,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58065,6 +58393,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58087,6 +58416,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58109,6 +58439,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58131,6 +58462,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58153,6 +58485,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58175,6 +58508,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58197,6 +58531,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58219,6 +58554,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58241,6 +58577,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58263,6 +58600,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58285,6 +58623,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58307,6 +58646,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58329,6 +58669,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58351,6 +58692,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58373,6 +58715,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58395,6 +58738,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58417,6 +58761,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58439,6 +58784,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58461,6 +58807,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58483,6 +58830,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58505,6 +58853,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58527,6 +58876,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58549,6 +58899,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58571,6 +58922,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58593,6 +58945,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58615,6 +58968,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58637,6 +58991,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58659,6 +59014,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58681,6 +59037,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58703,6 +59060,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58725,6 +59083,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58747,6 +59106,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58769,6 +59129,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58791,6 +59152,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58813,6 +59175,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58835,6 +59198,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58857,6 +59221,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58879,6 +59244,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58901,6 +59267,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58923,6 +59290,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58945,6 +59313,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58967,6 +59336,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -58989,6 +59359,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59011,6 +59382,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59033,6 +59405,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59055,6 +59428,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59077,6 +59451,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59099,6 +59474,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59121,6 +59497,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59143,6 +59520,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59165,6 +59543,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59187,6 +59566,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59209,6 +59589,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59231,6 +59612,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59253,6 +59635,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59275,6 +59658,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59297,6 +59681,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59319,6 +59704,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59341,6 +59727,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59363,6 +59750,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59385,6 +59773,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59407,6 +59796,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59429,6 +59819,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59451,6 +59842,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59473,6 +59865,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59495,6 +59888,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59517,6 +59911,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59539,6 +59934,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59561,6 +59957,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59583,6 +59980,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59605,6 +60003,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59627,6 +60026,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59649,6 +60049,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59671,6 +60072,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59693,6 +60095,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59715,6 +60118,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59737,6 +60141,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59759,6 +60164,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59781,6 +60187,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59803,6 +60210,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59825,6 +60233,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59847,6 +60256,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59869,6 +60279,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59891,6 +60302,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59913,6 +60325,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59935,6 +60348,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59957,6 +60371,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -59979,6 +60394,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60001,6 +60417,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60023,6 +60440,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60045,6 +60463,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60067,6 +60486,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60089,6 +60509,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60111,6 +60532,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60133,6 +60555,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60155,6 +60578,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60177,6 +60601,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60199,6 +60624,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60221,6 +60647,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60243,6 +60670,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60265,6 +60693,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60287,6 +60716,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60309,6 +60739,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60331,6 +60762,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60353,6 +60785,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60375,6 +60808,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60397,6 +60831,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60419,6 +60854,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60441,6 +60877,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60463,6 +60900,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60485,6 +60923,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60507,6 +60946,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60529,6 +60969,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60551,6 +60992,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60573,6 +61015,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60595,6 +61038,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60617,6 +61061,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60639,6 +61084,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60661,6 +61107,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60683,6 +61130,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60705,6 +61153,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60727,6 +61176,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60749,6 +61199,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60771,6 +61222,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60793,6 +61245,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60815,6 +61268,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60837,6 +61291,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60859,6 +61314,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60881,6 +61337,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60903,6 +61360,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60925,6 +61383,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60947,6 +61406,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60969,6 +61429,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -60991,6 +61452,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61013,6 +61475,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61035,6 +61498,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61057,6 +61521,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61079,6 +61544,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61101,6 +61567,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61123,6 +61590,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61145,6 +61613,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61167,6 +61636,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61189,6 +61659,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61211,6 +61682,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61233,6 +61705,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61255,6 +61728,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61277,6 +61751,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61299,6 +61774,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61321,6 +61797,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61343,6 +61820,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61365,6 +61843,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61387,6 +61866,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61409,6 +61889,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61431,6 +61912,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61453,6 +61935,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61475,6 +61958,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61497,6 +61981,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61519,6 +62004,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61541,6 +62027,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61563,6 +62050,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61585,6 +62073,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61607,6 +62096,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61629,6 +62119,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61651,6 +62142,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61673,6 +62165,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61695,6 +62188,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61717,6 +62211,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61739,6 +62234,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61761,6 +62257,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61783,6 +62280,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61805,6 +62303,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61827,6 +62326,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61849,6 +62349,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61871,6 +62372,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61893,6 +62395,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61915,6 +62418,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61937,6 +62441,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61959,6 +62464,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -61981,6 +62487,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62003,6 +62510,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62025,6 +62533,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62047,6 +62556,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62069,6 +62579,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62091,6 +62602,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62113,6 +62625,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62135,6 +62648,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62157,6 +62671,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62179,6 +62694,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62201,6 +62717,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62223,6 +62740,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62245,6 +62763,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62267,6 +62786,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62289,6 +62809,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62311,6 +62832,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62333,6 +62855,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62355,6 +62878,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62377,6 +62901,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62399,6 +62924,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62421,6 +62947,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62443,6 +62970,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62465,6 +62993,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62487,6 +63016,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62509,6 +63039,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62531,6 +63062,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62553,6 +63085,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62575,6 +63108,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62597,6 +63131,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62619,6 +63154,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62641,6 +63177,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62663,6 +63200,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62685,6 +63223,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62707,6 +63246,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62729,6 +63269,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62751,6 +63292,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62773,6 +63315,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62795,6 +63338,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62817,6 +63361,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62839,6 +63384,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62861,6 +63407,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62883,6 +63430,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62905,6 +63453,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62927,6 +63476,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62949,6 +63499,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62971,6 +63522,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -62993,6 +63545,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63015,6 +63568,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63037,6 +63591,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63059,6 +63614,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63081,6 +63637,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63103,6 +63660,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63125,6 +63683,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63147,6 +63706,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63169,6 +63729,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63191,6 +63752,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63213,6 +63775,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63235,6 +63798,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63257,6 +63821,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63279,6 +63844,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63301,6 +63867,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63323,6 +63890,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63345,6 +63913,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63367,6 +63936,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63389,6 +63959,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63411,6 +63982,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63433,6 +64005,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63455,6 +64028,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63477,6 +64051,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63499,6 +64074,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63521,6 +64097,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63543,6 +64120,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63565,6 +64143,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63587,6 +64166,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63609,6 +64189,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63631,6 +64212,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63653,6 +64235,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63675,6 +64258,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63697,6 +64281,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63719,6 +64304,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63741,6 +64327,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63763,6 +64350,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63785,6 +64373,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63807,6 +64396,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63829,6 +64419,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63851,6 +64442,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63873,6 +64465,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63895,6 +64488,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63917,6 +64511,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63939,6 +64534,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63961,6 +64557,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -63983,6 +64580,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64005,6 +64603,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64027,6 +64626,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64049,6 +64649,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64071,6 +64672,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64093,6 +64695,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64115,6 +64718,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64137,6 +64741,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64159,6 +64764,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64181,6 +64787,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64203,6 +64810,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64225,6 +64833,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64247,6 +64856,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64269,6 +64879,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64291,6 +64902,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64313,6 +64925,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64335,6 +64948,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64357,6 +64971,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64379,6 +64994,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64401,6 +65017,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64423,6 +65040,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64445,6 +65063,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64467,6 +65086,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64489,6 +65109,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64511,6 +65132,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64533,6 +65155,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64555,6 +65178,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64577,6 +65201,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64599,6 +65224,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64621,6 +65247,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64643,6 +65270,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64665,6 +65293,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64687,6 +65316,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64709,6 +65339,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64731,6 +65362,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64753,6 +65385,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64775,6 +65408,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64797,6 +65431,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64819,6 +65454,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64841,6 +65477,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64863,6 +65500,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64885,6 +65523,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64907,6 +65546,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64929,6 +65569,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64951,6 +65592,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64973,6 +65615,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -64995,6 +65638,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65017,6 +65661,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65039,6 +65684,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65061,6 +65707,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65083,6 +65730,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65105,6 +65753,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65127,6 +65776,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65149,6 +65799,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65171,6 +65822,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65193,6 +65845,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65215,6 +65868,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65237,6 +65891,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65259,6 +65914,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65281,6 +65937,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65303,6 +65960,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65325,6 +65983,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65347,6 +66006,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65369,6 +66029,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65391,6 +66052,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65413,6 +66075,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65435,6 +66098,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65457,6 +66121,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65479,6 +66144,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65501,6 +66167,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65523,6 +66190,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65545,6 +66213,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65567,6 +66236,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65589,6 +66259,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65611,6 +66282,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65633,6 +66305,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65655,6 +66328,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65677,6 +66351,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65699,6 +66374,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65721,6 +66397,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65743,6 +66420,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65765,6 +66443,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65787,6 +66466,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65809,6 +66489,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65831,6 +66512,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65853,6 +66535,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65875,6 +66558,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65897,6 +66581,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65919,6 +66604,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65941,6 +66627,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65963,6 +66650,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -65985,6 +66673,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66007,6 +66696,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66029,6 +66719,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66051,6 +66742,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66073,6 +66765,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66095,6 +66788,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66117,6 +66811,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66139,6 +66834,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66161,6 +66857,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66183,6 +66880,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66205,6 +66903,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66227,6 +66926,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66249,6 +66949,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66271,6 +66972,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66293,6 +66995,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66315,6 +67018,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66337,6 +67041,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66359,6 +67064,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66381,6 +67087,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66403,6 +67110,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66425,6 +67133,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66447,6 +67156,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66469,6 +67179,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66491,6 +67202,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66513,6 +67225,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66535,6 +67248,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66557,6 +67271,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66579,6 +67294,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66601,6 +67317,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66623,6 +67340,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66645,6 +67363,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66667,6 +67386,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66689,6 +67409,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66711,6 +67432,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66733,6 +67455,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66755,6 +67478,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66777,6 +67501,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66799,6 +67524,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66821,6 +67547,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66843,6 +67570,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66865,6 +67593,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66887,6 +67616,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66909,6 +67639,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66931,6 +67662,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66953,6 +67685,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66975,6 +67708,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -66997,6 +67731,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67019,6 +67754,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67041,6 +67777,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67063,6 +67800,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67085,6 +67823,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67107,6 +67846,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67129,6 +67869,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67151,6 +67892,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67173,6 +67915,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67195,6 +67938,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67217,6 +67961,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67239,6 +67984,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67261,6 +68007,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67283,6 +68030,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67305,6 +68053,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67327,6 +68076,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67349,6 +68099,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67371,6 +68122,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67393,6 +68145,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67415,6 +68168,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67437,6 +68191,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67459,6 +68214,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67481,6 +68237,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67503,6 +68260,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67525,6 +68283,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67547,6 +68306,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67569,6 +68329,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67591,6 +68352,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67613,6 +68375,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67635,6 +68398,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67657,6 +68421,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67679,6 +68444,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67701,6 +68467,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67723,6 +68490,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67745,6 +68513,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67767,6 +68536,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67789,6 +68559,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67811,6 +68582,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67833,6 +68605,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67855,6 +68628,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67877,6 +68651,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67899,6 +68674,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67921,6 +68697,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67943,6 +68720,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67965,6 +68743,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -67987,6 +68766,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68009,6 +68789,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68031,6 +68812,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68053,6 +68835,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68075,6 +68858,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68097,6 +68881,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68119,6 +68904,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68141,6 +68927,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68163,6 +68950,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68185,6 +68973,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68207,6 +68996,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68229,6 +69019,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68251,6 +69042,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68273,6 +69065,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68295,6 +69088,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68317,6 +69111,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68339,6 +69134,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68361,6 +69157,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68383,6 +69180,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68405,6 +69203,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68427,6 +69226,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68449,6 +69249,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68471,6 +69272,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68493,6 +69295,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68515,6 +69318,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68537,6 +69341,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68559,6 +69364,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68581,6 +69387,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68603,6 +69410,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68625,6 +69433,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68647,6 +69456,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68669,6 +69479,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68691,6 +69502,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68713,6 +69525,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68735,6 +69548,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68757,6 +69571,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68779,6 +69594,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68801,6 +69617,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68823,6 +69640,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68845,6 +69663,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68867,6 +69686,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68889,6 +69709,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68911,6 +69732,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68933,6 +69755,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68955,6 +69778,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68977,6 +69801,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -68999,6 +69824,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69021,6 +69847,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69043,6 +69870,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69065,6 +69893,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69087,6 +69916,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69109,6 +69939,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69131,6 +69962,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69153,6 +69985,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69175,6 +70008,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69197,6 +70031,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69219,6 +70054,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69241,6 +70077,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69263,6 +70100,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69285,6 +70123,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69307,6 +70146,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69329,6 +70169,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69351,6 +70192,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69373,6 +70215,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69395,6 +70238,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69417,6 +70261,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69439,6 +70284,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69461,6 +70307,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69483,6 +70330,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69505,6 +70353,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69527,6 +70376,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69549,6 +70399,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69571,6 +70422,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69593,6 +70445,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69615,6 +70468,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69637,6 +70491,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69659,6 +70514,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69681,6 +70537,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69703,6 +70560,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69725,6 +70583,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69747,6 +70606,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69769,6 +70629,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69791,6 +70652,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69813,6 +70675,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69835,6 +70698,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69857,6 +70721,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69879,6 +70744,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69901,6 +70767,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69923,6 +70790,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69945,6 +70813,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69967,6 +70836,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -69989,6 +70859,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70011,6 +70882,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70033,6 +70905,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70055,6 +70928,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70077,6 +70951,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70099,6 +70974,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70121,6 +70997,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70143,6 +71020,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70165,6 +71043,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70187,6 +71066,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70209,6 +71089,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70231,6 +71112,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70253,6 +71135,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70275,6 +71158,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70297,6 +71181,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70319,6 +71204,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70341,6 +71227,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70363,6 +71250,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70385,6 +71273,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70407,6 +71296,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70429,6 +71319,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70451,6 +71342,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70473,6 +71365,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70495,6 +71388,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70517,6 +71411,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70539,6 +71434,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70561,6 +71457,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70583,6 +71480,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70605,6 +71503,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70627,6 +71526,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70649,6 +71549,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70671,6 +71572,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70693,6 +71595,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70715,6 +71618,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70737,6 +71641,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70759,6 +71664,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70781,6 +71687,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70803,6 +71710,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70825,6 +71733,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70847,6 +71756,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70869,6 +71779,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70891,6 +71802,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70913,6 +71825,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70935,6 +71848,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70957,6 +71871,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -70979,6 +71894,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71001,6 +71917,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71023,6 +71940,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71045,6 +71963,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71067,6 +71986,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71089,6 +72009,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71111,6 +72032,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71133,6 +72055,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71155,6 +72078,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71177,6 +72101,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71199,6 +72124,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71221,6 +72147,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71243,6 +72170,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71265,6 +72193,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71287,6 +72216,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71309,6 +72239,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71331,6 +72262,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71353,6 +72285,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71375,6 +72308,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71397,6 +72331,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71419,6 +72354,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71441,6 +72377,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71463,6 +72400,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71485,6 +72423,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71507,6 +72446,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71529,6 +72469,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71551,6 +72492,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71573,6 +72515,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71595,6 +72538,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71617,6 +72561,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71639,6 +72584,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71661,6 +72607,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71683,6 +72630,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71705,6 +72653,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71727,6 +72676,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71749,6 +72699,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71771,6 +72722,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71793,6 +72745,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71815,6 +72768,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71837,6 +72791,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71859,6 +72814,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71881,6 +72837,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71903,6 +72860,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71925,6 +72883,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71947,6 +72906,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71969,6 +72929,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -71991,6 +72952,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72013,6 +72975,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72035,6 +72998,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72057,6 +73021,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72079,6 +73044,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72101,6 +73067,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72123,6 +73090,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72145,6 +73113,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72167,6 +73136,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72189,6 +73159,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72211,6 +73182,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72233,6 +73205,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72255,6 +73228,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72277,6 +73251,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72299,6 +73274,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72321,6 +73297,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72343,6 +73320,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72365,6 +73343,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72387,6 +73366,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72409,6 +73389,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72431,6 +73412,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72453,6 +73435,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72475,6 +73458,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72497,6 +73481,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72519,6 +73504,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72541,6 +73527,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72563,6 +73550,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72585,6 +73573,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72607,6 +73596,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72629,6 +73619,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72651,6 +73642,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72673,6 +73665,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72695,6 +73688,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72717,6 +73711,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72739,6 +73734,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72761,6 +73757,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72783,6 +73780,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72805,6 +73803,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72827,6 +73826,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72849,6 +73849,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72871,6 +73872,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72893,6 +73895,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72915,6 +73918,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72937,6 +73941,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72959,6 +73964,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -72981,6 +73987,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73003,6 +74010,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73025,6 +74033,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73047,6 +74056,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73069,6 +74079,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73091,6 +74102,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73113,6 +74125,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73135,6 +74148,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73157,6 +74171,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73179,6 +74194,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73201,6 +74217,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73223,6 +74240,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73245,6 +74263,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73267,6 +74286,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73289,6 +74309,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73311,6 +74332,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73333,6 +74355,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73355,6 +74378,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73377,6 +74401,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73399,6 +74424,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73421,6 +74447,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73443,6 +74470,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73465,6 +74493,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73487,6 +74516,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73509,6 +74539,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73531,6 +74562,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73553,6 +74585,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73575,6 +74608,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73597,6 +74631,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73619,6 +74654,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73641,6 +74677,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73663,6 +74700,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73685,6 +74723,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73707,6 +74746,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73729,6 +74769,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73751,6 +74792,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73773,6 +74815,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73795,6 +74838,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73817,6 +74861,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73839,6 +74884,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73861,6 +74907,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73883,6 +74930,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73905,6 +74953,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73927,6 +74976,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73949,6 +74999,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73971,6 +75022,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -73993,6 +75045,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74015,6 +75068,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74037,6 +75091,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74059,6 +75114,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74081,6 +75137,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74103,6 +75160,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74125,6 +75183,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74147,6 +75206,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74169,6 +75229,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74191,6 +75252,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74213,6 +75275,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74235,6 +75298,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74257,6 +75321,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74279,6 +75344,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74301,6 +75367,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74323,6 +75390,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74345,6 +75413,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74367,6 +75436,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74389,6 +75459,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74411,6 +75482,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74433,6 +75505,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74455,6 +75528,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74477,6 +75551,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74499,6 +75574,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74521,6 +75597,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74543,6 +75620,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74565,6 +75643,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74587,6 +75666,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74609,6 +75689,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74631,6 +75712,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74653,6 +75735,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74675,6 +75758,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74697,6 +75781,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74719,6 +75804,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74741,6 +75827,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74763,6 +75850,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74785,6 +75873,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74807,6 +75896,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74829,6 +75919,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74851,6 +75942,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74873,6 +75965,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74895,6 +75988,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74917,6 +76011,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74939,6 +76034,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74961,6 +76057,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -74983,6 +76080,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75005,6 +76103,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75027,6 +76126,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75049,6 +76149,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75071,6 +76172,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75093,6 +76195,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75115,6 +76218,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75137,6 +76241,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75159,6 +76264,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75181,6 +76287,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75203,6 +76310,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75225,6 +76333,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75247,6 +76356,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75269,6 +76379,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75291,6 +76402,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75313,6 +76425,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75335,6 +76448,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75357,6 +76471,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75379,6 +76494,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75401,6 +76517,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75423,6 +76540,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75445,6 +76563,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75467,6 +76586,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75489,6 +76609,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75511,6 +76632,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75533,6 +76655,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75555,6 +76678,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75577,6 +76701,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75599,6 +76724,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75621,6 +76747,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75643,6 +76770,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75665,6 +76793,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75687,6 +76816,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75709,6 +76839,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75731,6 +76862,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75753,6 +76885,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75775,6 +76908,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75797,6 +76931,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75819,6 +76954,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75841,6 +76977,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75863,6 +77000,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75885,6 +77023,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75907,6 +77046,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75929,6 +77069,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75951,6 +77092,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75973,6 +77115,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -75995,6 +77138,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76017,6 +77161,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76039,6 +77184,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76061,6 +77207,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76083,6 +77230,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76105,6 +77253,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76127,6 +77276,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76149,6 +77299,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76171,6 +77322,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76193,6 +77345,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76215,6 +77368,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76237,6 +77391,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76259,6 +77414,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76281,6 +77437,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76303,6 +77460,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76325,6 +77483,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76347,6 +77506,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76369,6 +77529,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76391,6 +77552,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76413,6 +77575,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76435,6 +77598,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76457,6 +77621,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76479,6 +77644,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76501,6 +77667,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76523,6 +77690,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76545,6 +77713,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76567,6 +77736,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76589,6 +77759,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76611,6 +77782,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76633,6 +77805,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76655,6 +77828,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76677,6 +77851,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76699,6 +77874,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76721,6 +77897,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76743,6 +77920,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76765,6 +77943,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76787,6 +77966,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76809,6 +77989,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76831,6 +78012,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76853,6 +78035,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76875,6 +78058,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76897,6 +78081,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76919,6 +78104,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76941,6 +78127,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76963,6 +78150,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -76985,6 +78173,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77007,6 +78196,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77029,6 +78219,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77051,6 +78242,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77073,6 +78265,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77095,6 +78288,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77117,6 +78311,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77139,6 +78334,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77161,6 +78357,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77183,6 +78380,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77205,6 +78403,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77227,6 +78426,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77249,6 +78449,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77271,6 +78472,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77293,6 +78495,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77315,6 +78518,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77337,6 +78541,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77359,6 +78564,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77381,6 +78587,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77403,6 +78610,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77425,6 +78633,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77447,6 +78656,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77469,6 +78679,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77491,6 +78702,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77513,6 +78725,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77535,6 +78748,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77557,6 +78771,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77579,6 +78794,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77601,6 +78817,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77623,6 +78840,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77645,6 +78863,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77667,6 +78886,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77689,6 +78909,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77711,6 +78932,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77733,6 +78955,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77755,6 +78978,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77777,6 +79001,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77799,6 +79024,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77821,6 +79047,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77843,6 +79070,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77865,6 +79093,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77887,6 +79116,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77909,6 +79139,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77931,6 +79162,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77953,6 +79185,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77975,6 +79208,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -77997,6 +79231,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78019,6 +79254,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78041,6 +79277,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78063,6 +79300,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78085,6 +79323,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78107,6 +79346,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78129,6 +79369,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78151,6 +79392,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78173,6 +79415,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78195,6 +79438,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78217,6 +79461,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78239,6 +79484,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78261,6 +79507,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78283,6 +79530,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78305,6 +79553,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78327,6 +79576,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78349,6 +79599,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78371,6 +79622,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78393,6 +79645,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78415,6 +79668,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78437,6 +79691,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78459,6 +79714,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78481,6 +79737,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78503,6 +79760,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78525,6 +79783,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78547,6 +79806,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78569,6 +79829,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78591,6 +79852,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78613,6 +79875,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78635,6 +79898,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78657,6 +79921,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78679,6 +79944,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78701,6 +79967,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78723,6 +79990,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78745,6 +80013,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78767,6 +80036,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78789,6 +80059,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78811,6 +80082,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78833,6 +80105,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78855,6 +80128,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78877,6 +80151,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78899,6 +80174,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78921,6 +80197,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78943,6 +80220,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78965,6 +80243,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -78987,6 +80266,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79009,6 +80289,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79031,6 +80312,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79053,6 +80335,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79075,6 +80358,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79097,6 +80381,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79119,6 +80404,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79141,6 +80427,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79163,6 +80450,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79185,6 +80473,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79207,6 +80496,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79229,6 +80519,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79251,6 +80542,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79273,6 +80565,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79295,6 +80588,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79317,6 +80611,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79339,6 +80634,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79361,6 +80657,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79383,6 +80680,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79405,6 +80703,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79427,6 +80726,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79449,6 +80749,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79471,6 +80772,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79493,6 +80795,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79515,6 +80818,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79537,6 +80841,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79559,6 +80864,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79581,6 +80887,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79603,6 +80910,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79625,6 +80933,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79647,6 +80956,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79669,6 +80979,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79691,6 +81002,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79713,6 +81025,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79735,6 +81048,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79757,6 +81071,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79779,6 +81094,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79801,6 +81117,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79823,6 +81140,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79845,6 +81163,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79867,6 +81186,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79889,6 +81209,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79911,6 +81232,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79933,6 +81255,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79955,6 +81278,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79977,6 +81301,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -79999,6 +81324,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80021,6 +81347,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80043,6 +81370,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80065,6 +81393,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80087,6 +81416,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80109,6 +81439,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80131,6 +81462,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80153,6 +81485,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80175,6 +81508,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80197,6 +81531,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80219,6 +81554,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80241,6 +81577,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80263,6 +81600,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80285,6 +81623,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80307,6 +81646,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80329,6 +81669,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80351,6 +81692,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80373,6 +81715,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80395,6 +81738,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80417,6 +81761,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80439,6 +81784,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80461,6 +81807,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80483,6 +81830,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80505,6 +81853,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80527,6 +81876,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80549,6 +81899,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80571,6 +81922,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80593,6 +81945,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80615,6 +81968,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80637,6 +81991,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80659,6 +82014,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80681,6 +82037,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80703,6 +82060,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80725,6 +82083,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80747,6 +82106,30 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", + "linux" + ], + "uses_polling": false + }, + { + "args": [ + "test/core/end2end/fuzzers/api_fuzzer_corpus/clusterfuzz-testcase-6723650944237568" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [ + "tsan" + ], + "exclude_iomgrs": [ + "uv" + ], + "flaky": false, + "language": "c", + "name": "api_fuzzer_one_entry", + "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80769,6 +82152,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80791,6 +82175,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80813,6 +82198,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80835,6 +82221,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80857,6 +82244,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80879,6 +82267,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80901,6 +82290,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80923,6 +82313,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80945,6 +82336,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80967,6 +82359,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -80989,6 +82382,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81011,6 +82405,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81033,6 +82428,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81055,6 +82451,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81077,6 +82474,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81099,6 +82497,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81121,6 +82520,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81143,6 +82543,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81165,6 +82566,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81187,6 +82589,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81209,6 +82612,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81231,6 +82635,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81253,6 +82658,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81275,6 +82681,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81297,6 +82704,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81319,6 +82727,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81341,6 +82750,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81363,6 +82773,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81385,6 +82796,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81407,6 +82819,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81429,6 +82842,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81451,6 +82865,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81473,6 +82888,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81495,6 +82911,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81517,6 +82934,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81539,6 +82957,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81561,6 +82980,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81583,6 +83003,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81605,6 +83026,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81627,6 +83049,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81649,6 +83072,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81671,6 +83095,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81693,6 +83118,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81715,6 +83141,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81737,6 +83164,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81759,6 +83187,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81781,6 +83210,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81803,6 +83233,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81825,6 +83256,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81847,6 +83279,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81869,6 +83302,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81891,6 +83325,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81913,6 +83348,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81935,6 +83371,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81957,6 +83394,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -81979,6 +83417,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82001,6 +83440,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82023,6 +83463,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82045,6 +83486,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82067,6 +83509,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82089,6 +83532,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82111,6 +83555,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82133,6 +83578,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82155,6 +83601,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82177,6 +83624,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82199,6 +83647,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82221,6 +83670,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82243,6 +83693,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82265,6 +83716,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82287,6 +83739,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82309,6 +83762,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82331,6 +83785,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82353,6 +83808,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82375,6 +83831,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82397,6 +83854,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82419,6 +83877,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82441,6 +83900,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82463,6 +83923,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82485,6 +83946,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82507,6 +83969,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82529,6 +83992,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82551,6 +84015,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82573,6 +84038,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82595,6 +84061,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82617,6 +84084,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82639,6 +84107,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82661,6 +84130,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82683,6 +84153,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82705,6 +84176,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82727,6 +84199,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82749,6 +84222,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82771,6 +84245,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82793,6 +84268,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82815,6 +84291,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82837,6 +84314,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82859,6 +84337,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82881,6 +84360,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82903,6 +84383,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82925,6 +84406,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82947,6 +84429,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82969,6 +84452,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -82991,6 +84475,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83013,6 +84498,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83035,6 +84521,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83057,6 +84544,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83079,6 +84567,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83101,6 +84590,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83123,6 +84613,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83145,6 +84636,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83167,6 +84659,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83189,6 +84682,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83211,6 +84705,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83233,6 +84728,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83255,6 +84751,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83277,6 +84774,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83299,6 +84797,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83321,6 +84820,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83343,6 +84843,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83365,6 +84866,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83387,6 +84889,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83409,6 +84912,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83431,6 +84935,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83453,6 +84958,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83475,6 +84981,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83497,6 +85004,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83519,6 +85027,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83541,6 +85050,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83563,6 +85073,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83585,6 +85096,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83607,6 +85119,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83629,6 +85142,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83651,6 +85165,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83673,6 +85188,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83695,6 +85211,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83717,6 +85234,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83739,6 +85257,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83761,6 +85280,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83783,6 +85303,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83805,6 +85326,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83827,6 +85349,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83849,6 +85372,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83871,6 +85395,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83893,6 +85418,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83915,6 +85441,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83937,6 +85464,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83959,6 +85487,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -83981,6 +85510,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84003,6 +85533,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84025,6 +85556,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84047,6 +85579,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84069,6 +85602,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84091,6 +85625,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84113,6 +85648,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84135,6 +85671,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84157,6 +85694,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84179,6 +85717,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84201,6 +85740,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84223,6 +85763,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84245,6 +85786,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84267,6 +85809,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84289,6 +85832,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84311,6 +85855,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84333,6 +85878,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84355,6 +85901,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84377,6 +85924,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84399,6 +85947,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84421,6 +85970,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84443,6 +85993,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84465,6 +86016,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84487,6 +86039,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84509,6 +86062,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84531,6 +86085,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84553,6 +86108,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84575,6 +86131,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84597,6 +86154,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84619,6 +86177,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84641,6 +86200,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84663,6 +86223,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84685,6 +86246,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84707,6 +86269,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84729,6 +86292,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84751,6 +86315,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84773,6 +86338,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84795,6 +86361,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84817,6 +86384,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84839,6 +86407,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84861,6 +86430,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84883,6 +86453,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84905,6 +86476,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84927,6 +86499,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84949,6 +86522,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84971,6 +86545,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -84993,6 +86568,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85015,6 +86591,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85037,6 +86614,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85059,6 +86637,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85081,6 +86660,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85103,6 +86683,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85125,6 +86706,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85147,6 +86729,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85169,6 +86752,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85191,6 +86775,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85213,6 +86798,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85235,6 +86821,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85257,6 +86844,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85279,6 +86867,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85301,6 +86890,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85323,6 +86913,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85345,6 +86936,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85367,6 +86959,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85389,6 +86982,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85411,6 +87005,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85433,6 +87028,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85455,6 +87051,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85477,6 +87074,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85499,6 +87097,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85521,6 +87120,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85543,6 +87143,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85565,6 +87166,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85587,6 +87189,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85609,6 +87212,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85631,6 +87235,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85653,6 +87258,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85675,6 +87281,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85697,6 +87304,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85719,6 +87327,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85741,6 +87350,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85763,6 +87373,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85785,6 +87396,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85807,6 +87419,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85829,6 +87442,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85851,6 +87465,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85873,6 +87488,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85895,6 +87511,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85917,6 +87534,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85939,6 +87557,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85961,6 +87580,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -85983,6 +87603,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86005,6 +87626,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86027,6 +87649,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86049,6 +87672,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86071,6 +87695,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86093,6 +87718,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86115,6 +87741,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86137,6 +87764,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86159,6 +87787,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86181,6 +87810,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86203,6 +87833,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86225,6 +87856,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86247,6 +87879,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86269,6 +87902,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86291,6 +87925,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86313,6 +87948,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86335,6 +87971,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86357,6 +87994,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86379,6 +88017,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86401,6 +88040,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86423,6 +88063,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86445,6 +88086,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86467,6 +88109,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86489,6 +88132,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86511,6 +88155,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86533,6 +88178,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86555,6 +88201,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86577,6 +88224,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86599,6 +88247,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86621,6 +88270,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86643,6 +88293,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86665,6 +88316,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86687,6 +88339,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86709,6 +88362,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86731,6 +88385,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86753,6 +88408,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86775,6 +88431,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86797,6 +88454,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86819,6 +88477,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86841,6 +88500,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86863,6 +88523,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86885,6 +88546,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86907,6 +88569,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86929,6 +88592,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86951,6 +88615,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86973,6 +88638,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -86995,6 +88661,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87017,6 +88684,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87039,6 +88707,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87061,6 +88730,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87083,6 +88753,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87105,6 +88776,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87127,6 +88799,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87149,6 +88822,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87171,6 +88845,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87193,6 +88868,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87215,6 +88891,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87237,6 +88914,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87259,6 +88937,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87281,6 +88960,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87303,6 +88983,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87325,6 +89006,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87347,6 +89029,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87369,6 +89052,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87391,6 +89075,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87413,6 +89098,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87435,6 +89121,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87457,6 +89144,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87479,6 +89167,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87501,6 +89190,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87523,6 +89213,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87545,6 +89236,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87567,6 +89259,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87589,6 +89282,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87611,6 +89305,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87633,6 +89328,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87655,6 +89351,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87677,6 +89374,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87699,6 +89397,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87721,6 +89420,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87743,6 +89443,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87765,6 +89466,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87787,6 +89489,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87809,6 +89512,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87831,6 +89535,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87853,6 +89558,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87875,6 +89581,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87897,6 +89604,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87919,6 +89627,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87941,6 +89650,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87963,6 +89673,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -87985,6 +89696,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88007,6 +89719,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88029,6 +89742,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88051,6 +89765,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88073,6 +89788,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88095,6 +89811,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88117,6 +89834,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88139,6 +89857,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88161,6 +89880,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88183,6 +89903,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88205,6 +89926,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88227,6 +89949,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88249,6 +89972,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88271,6 +89995,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88293,6 +90018,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88315,6 +90041,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88337,6 +90064,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88359,6 +90087,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88381,6 +90110,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88403,6 +90133,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88425,6 +90156,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88447,6 +90179,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88469,6 +90202,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88491,6 +90225,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88513,6 +90248,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88535,6 +90271,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88557,6 +90294,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88579,6 +90317,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88601,6 +90340,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88623,6 +90363,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88645,6 +90386,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88667,6 +90409,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88689,6 +90432,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88711,6 +90455,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88733,6 +90478,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88755,6 +90501,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88777,6 +90524,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88799,6 +90547,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88821,6 +90570,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88843,6 +90593,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88865,6 +90616,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88887,6 +90639,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88909,6 +90662,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88931,6 +90685,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88953,6 +90708,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88975,6 +90731,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -88997,6 +90754,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89019,6 +90777,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89041,6 +90800,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89063,6 +90823,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89085,6 +90846,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89107,6 +90869,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89129,6 +90892,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89151,6 +90915,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89173,6 +90938,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89195,6 +90961,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89217,6 +90984,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89239,6 +91007,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89261,6 +91030,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89283,6 +91053,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89305,6 +91076,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89327,6 +91099,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89349,6 +91122,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89371,6 +91145,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89393,6 +91168,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89415,6 +91191,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89437,6 +91214,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89459,6 +91237,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89481,6 +91260,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89503,6 +91283,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89525,6 +91306,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89547,6 +91329,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89569,6 +91352,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89591,6 +91375,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89613,6 +91398,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89635,6 +91421,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89657,6 +91444,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89679,6 +91467,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89701,6 +91490,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89723,6 +91513,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89745,6 +91536,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89767,6 +91559,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89789,6 +91582,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89811,6 +91605,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89833,6 +91628,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89855,6 +91651,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89877,6 +91674,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89899,6 +91697,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89921,6 +91720,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89943,6 +91743,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89965,6 +91766,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -89987,6 +91789,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90009,6 +91812,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90031,6 +91835,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90053,6 +91858,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90075,6 +91881,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90097,6 +91904,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90119,6 +91927,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90141,6 +91950,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90163,6 +91973,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90185,6 +91996,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90207,6 +92019,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90229,6 +92042,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90251,6 +92065,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90273,6 +92088,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90295,6 +92111,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90317,6 +92134,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90339,6 +92157,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90361,6 +92180,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90383,6 +92203,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90405,6 +92226,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90427,6 +92249,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90449,6 +92272,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90471,6 +92295,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90493,6 +92318,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90515,6 +92341,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90537,6 +92364,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90559,6 +92387,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90581,6 +92410,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90603,6 +92433,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90625,6 +92456,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90647,6 +92479,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90669,6 +92502,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90691,6 +92525,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90713,6 +92548,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90735,6 +92571,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90757,6 +92594,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90779,6 +92617,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90801,6 +92640,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90823,6 +92663,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90845,6 +92686,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90867,6 +92709,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90889,6 +92732,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90911,6 +92755,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90933,6 +92778,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90955,6 +92801,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90977,6 +92824,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -90999,6 +92847,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91021,6 +92870,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91043,6 +92893,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91065,6 +92916,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91087,6 +92939,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91109,6 +92962,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91131,6 +92985,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91153,6 +93008,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91175,6 +93031,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91197,6 +93054,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91219,6 +93077,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91241,6 +93100,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91263,6 +93123,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91285,6 +93146,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91307,6 +93169,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91329,6 +93192,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91351,6 +93215,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91373,6 +93238,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91395,6 +93261,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91417,6 +93284,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91439,6 +93307,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91461,6 +93330,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91483,6 +93353,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91505,6 +93376,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91527,6 +93399,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91549,6 +93422,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91571,6 +93445,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91593,6 +93468,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91615,6 +93491,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91637,6 +93514,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91659,6 +93537,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91681,6 +93560,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91703,6 +93583,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91725,6 +93606,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91747,6 +93629,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91769,6 +93652,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91791,6 +93675,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91813,6 +93698,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91835,6 +93721,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91857,6 +93744,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91879,6 +93767,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91901,6 +93790,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91923,6 +93813,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91945,6 +93836,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91967,6 +93859,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -91989,6 +93882,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92011,6 +93905,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92033,6 +93928,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92055,6 +93951,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92077,6 +93974,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92099,6 +93997,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92121,6 +94020,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92143,6 +94043,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92165,6 +94066,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92187,6 +94089,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92209,6 +94112,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92231,6 +94135,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92253,6 +94158,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92275,6 +94181,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92297,6 +94204,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92319,6 +94227,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92341,6 +94250,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92363,6 +94273,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92385,6 +94296,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92407,6 +94319,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92429,6 +94342,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92451,6 +94365,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92473,6 +94388,7 @@ "language": "c", "name": "api_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92495,6 +94411,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92517,6 +94434,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92539,6 +94457,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92561,6 +94480,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92583,6 +94503,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92605,6 +94526,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92627,6 +94549,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92649,6 +94572,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92671,6 +94595,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92693,6 +94618,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92715,6 +94641,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92737,6 +94664,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92759,6 +94687,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92781,6 +94710,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92803,6 +94733,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92825,6 +94756,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92847,6 +94779,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92869,6 +94802,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92891,6 +94825,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92913,6 +94848,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92935,6 +94871,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92957,6 +94894,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -92979,6 +94917,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93001,6 +94940,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93023,6 +94963,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93045,6 +94986,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93067,6 +95009,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93089,6 +95032,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93111,6 +95055,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93133,6 +95078,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93155,6 +95101,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93177,6 +95124,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93199,6 +95147,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93221,6 +95170,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93243,6 +95193,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93265,6 +95216,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93287,6 +95239,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93309,6 +95262,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93331,6 +95285,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93353,6 +95308,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93375,6 +95331,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93397,6 +95354,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93419,6 +95377,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93441,6 +95400,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93463,6 +95423,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93485,6 +95446,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93507,6 +95469,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93529,6 +95492,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93551,6 +95515,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93573,6 +95538,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93595,6 +95561,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93617,6 +95584,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93639,6 +95607,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93661,6 +95630,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93683,6 +95653,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93705,6 +95676,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93727,6 +95699,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93749,6 +95722,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93771,6 +95745,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93793,6 +95768,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93815,6 +95791,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93837,6 +95814,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93859,6 +95837,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93881,6 +95860,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93903,6 +95883,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93925,6 +95906,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93947,6 +95929,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93969,6 +95952,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -93991,6 +95975,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94013,6 +95998,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94035,6 +96021,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94057,6 +96044,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94079,6 +96067,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94101,6 +96090,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94123,6 +96113,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94145,6 +96136,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94167,6 +96159,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94189,6 +96182,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94211,6 +96205,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94233,6 +96228,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94255,6 +96251,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94277,6 +96274,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94299,6 +96297,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94321,6 +96320,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94343,6 +96343,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94365,6 +96366,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94387,6 +96389,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94409,6 +96412,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94431,6 +96435,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94453,6 +96458,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94475,6 +96481,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94497,6 +96504,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94519,6 +96527,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94541,6 +96550,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94563,6 +96573,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94585,6 +96596,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94607,6 +96619,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94629,6 +96642,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94651,6 +96665,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94673,6 +96688,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94695,6 +96711,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94717,6 +96734,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94739,6 +96757,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94761,6 +96780,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94783,6 +96803,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94805,6 +96826,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94827,6 +96849,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94849,6 +96872,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94871,6 +96895,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94893,6 +96918,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94915,6 +96941,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94937,6 +96964,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94959,6 +96987,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -94981,6 +97010,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95003,6 +97033,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95025,6 +97056,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95047,6 +97079,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95069,6 +97102,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95091,6 +97125,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95113,6 +97148,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95135,6 +97171,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95157,6 +97194,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95179,6 +97217,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95201,6 +97240,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95223,6 +97263,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95245,6 +97286,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95267,6 +97309,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95289,6 +97332,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95311,6 +97355,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95333,6 +97378,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95355,6 +97401,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95377,6 +97424,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95399,6 +97447,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95421,6 +97470,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95443,6 +97493,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95465,6 +97516,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95487,6 +97539,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95509,6 +97562,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95531,6 +97585,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95553,6 +97608,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95575,6 +97631,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95597,6 +97654,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95619,6 +97677,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95641,6 +97700,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95663,6 +97723,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95685,6 +97746,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95707,6 +97769,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95729,6 +97792,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95751,6 +97815,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95773,6 +97838,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95795,6 +97861,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95817,6 +97884,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95839,6 +97907,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95861,6 +97930,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95883,6 +97953,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95905,6 +97976,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95927,6 +97999,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95949,6 +98022,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95971,6 +98045,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -95993,6 +98068,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96015,6 +98091,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96037,6 +98114,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96059,6 +98137,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96081,6 +98160,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96103,6 +98183,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96125,6 +98206,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96147,6 +98229,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96169,6 +98252,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96191,6 +98275,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96213,6 +98298,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96235,6 +98321,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96257,6 +98344,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96279,6 +98367,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96301,6 +98390,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96323,6 +98413,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96345,6 +98436,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96367,6 +98459,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96389,6 +98482,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96411,6 +98505,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96433,6 +98528,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96455,6 +98551,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96477,6 +98574,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96499,6 +98597,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96521,6 +98620,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96543,6 +98643,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96565,6 +98666,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96587,6 +98689,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96609,6 +98712,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96631,6 +98735,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96653,6 +98758,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96675,6 +98781,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96697,6 +98804,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96719,6 +98827,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96741,6 +98850,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96763,6 +98873,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96785,6 +98896,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96807,6 +98919,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96829,6 +98942,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96851,6 +98965,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96873,6 +98988,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96895,6 +99011,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96917,6 +99034,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96939,6 +99057,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96961,6 +99080,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -96983,6 +99103,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97005,6 +99126,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97027,6 +99149,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97049,6 +99172,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97071,6 +99195,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97093,6 +99218,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97115,6 +99241,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97137,6 +99264,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97159,6 +99287,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97181,6 +99310,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97203,6 +99333,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97225,6 +99356,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97247,6 +99379,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97269,6 +99402,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97291,6 +99425,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97313,6 +99448,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97335,6 +99471,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97357,6 +99494,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97379,6 +99517,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97401,6 +99540,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97423,6 +99563,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97445,6 +99586,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97467,6 +99609,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97489,6 +99632,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97511,6 +99655,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97533,6 +99678,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97555,6 +99701,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97577,6 +99724,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97599,6 +99747,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97621,6 +99770,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97643,6 +99793,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97665,6 +99816,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97687,6 +99839,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97709,6 +99862,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97731,6 +99885,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97753,6 +99908,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97775,6 +99931,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97797,6 +99954,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97819,6 +99977,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97841,6 +100000,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97863,6 +100023,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97885,6 +100046,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97907,6 +100069,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97929,6 +100092,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97951,6 +100115,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97973,6 +100138,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -97995,6 +100161,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98017,6 +100184,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98039,6 +100207,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98061,6 +100230,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98083,6 +100253,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98105,6 +100276,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98127,6 +100299,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98149,6 +100322,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98171,6 +100345,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98193,6 +100368,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98215,6 +100391,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98237,6 +100414,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98259,6 +100437,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98281,6 +100460,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98303,6 +100483,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98325,6 +100506,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98347,6 +100529,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98369,6 +100552,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98391,6 +100575,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98413,6 +100598,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98435,6 +100621,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98457,6 +100644,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98479,6 +100667,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98501,6 +100690,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98523,6 +100713,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98545,6 +100736,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98567,6 +100759,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98589,6 +100782,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98611,6 +100805,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98633,6 +100828,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98655,6 +100851,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98677,6 +100874,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98699,6 +100897,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98721,6 +100920,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98743,6 +100943,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98765,6 +100966,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98787,6 +100989,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98809,6 +101012,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98831,6 +101035,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98853,6 +101058,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98875,6 +101081,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98897,6 +101104,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98919,6 +101127,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98941,6 +101150,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98963,6 +101173,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -98985,6 +101196,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99007,6 +101219,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99029,6 +101242,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99051,6 +101265,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99073,6 +101288,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99095,6 +101311,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99117,6 +101334,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99139,6 +101357,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99161,6 +101380,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99183,6 +101403,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99205,6 +101426,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99227,6 +101449,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99249,6 +101472,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99271,6 +101495,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99293,6 +101518,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99315,6 +101541,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99337,6 +101564,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99359,6 +101587,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99381,6 +101610,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99403,6 +101633,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99425,6 +101656,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99447,6 +101679,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99469,6 +101702,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99491,6 +101725,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99513,6 +101748,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99535,6 +101771,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99557,6 +101794,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99579,6 +101817,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99601,6 +101840,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99623,6 +101863,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99645,6 +101886,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99667,6 +101909,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99689,6 +101932,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99711,6 +101955,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99733,6 +101978,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99755,6 +102001,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99777,6 +102024,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99799,6 +102047,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99821,6 +102070,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99843,6 +102093,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99865,6 +102116,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99887,6 +102139,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99909,6 +102162,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99931,6 +102185,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99953,6 +102208,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99975,6 +102231,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -99997,6 +102254,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100019,6 +102277,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100041,6 +102300,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100063,6 +102323,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100085,6 +102346,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100107,6 +102369,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100129,6 +102392,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100151,6 +102415,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100173,6 +102438,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100195,6 +102461,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100217,6 +102484,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100239,6 +102507,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100261,6 +102530,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100283,6 +102553,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100305,6 +102576,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100327,6 +102599,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100349,6 +102622,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100371,6 +102645,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100393,6 +102668,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100415,6 +102691,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100437,6 +102714,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100459,6 +102737,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100481,6 +102760,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100503,6 +102783,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100525,6 +102806,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100547,6 +102829,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100569,6 +102852,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100591,6 +102875,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100613,6 +102898,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100635,6 +102921,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100657,6 +102944,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100679,6 +102967,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100701,6 +102990,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100723,6 +103013,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100745,6 +103036,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100767,6 +103059,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100789,6 +103082,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100811,6 +103105,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100833,6 +103128,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100855,6 +103151,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100877,6 +103174,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100899,6 +103197,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100921,6 +103220,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100943,6 +103243,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100965,6 +103266,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -100987,6 +103289,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101009,6 +103312,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101031,6 +103335,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101053,6 +103358,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101075,6 +103381,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101097,6 +103404,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101119,6 +103427,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101141,6 +103450,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101163,6 +103473,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101185,6 +103496,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101207,6 +103519,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101229,6 +103542,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101251,6 +103565,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101273,6 +103588,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101295,6 +103611,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101317,6 +103634,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101339,6 +103657,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101361,6 +103680,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101383,6 +103703,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101405,6 +103726,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101427,6 +103749,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101449,6 +103772,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101471,6 +103795,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101493,6 +103818,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101515,6 +103841,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101537,6 +103864,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101559,6 +103887,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101581,6 +103910,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101603,6 +103933,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101625,6 +103956,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101647,6 +103979,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101669,6 +104002,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101691,6 +104025,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101713,6 +104048,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101735,6 +104071,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101757,6 +104094,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101779,6 +104117,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101801,6 +104140,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101823,6 +104163,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101845,6 +104186,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101867,6 +104209,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101889,6 +104232,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101911,6 +104255,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101933,6 +104278,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101955,6 +104301,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101977,6 +104324,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -101999,6 +104347,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102021,6 +104370,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102043,6 +104393,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102065,6 +104416,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102087,6 +104439,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102109,6 +104462,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102131,6 +104485,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102153,6 +104508,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102175,6 +104531,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102197,6 +104554,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102219,6 +104577,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102241,6 +104600,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102263,6 +104623,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102285,6 +104646,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102307,6 +104669,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102329,6 +104692,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102351,6 +104715,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102373,6 +104738,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102395,6 +104761,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102417,6 +104784,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102439,6 +104807,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102461,6 +104830,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102483,6 +104853,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102505,6 +104876,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102527,6 +104899,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102549,6 +104922,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102571,6 +104945,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102593,6 +104968,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102615,6 +104991,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102637,6 +105014,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102659,6 +105037,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102681,6 +105060,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102703,6 +105083,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102725,6 +105106,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102747,6 +105129,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102769,6 +105152,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102791,6 +105175,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102813,6 +105198,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102835,6 +105221,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102857,6 +105244,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102879,6 +105267,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102901,6 +105290,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102923,6 +105313,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102945,6 +105336,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102967,6 +105359,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -102989,6 +105382,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103011,6 +105405,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103033,6 +105428,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103055,6 +105451,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103077,6 +105474,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103099,6 +105497,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103121,6 +105520,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103143,6 +105543,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103165,6 +105566,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103187,6 +105589,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103209,6 +105612,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103231,6 +105635,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103253,6 +105658,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103275,6 +105681,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103297,6 +105704,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103319,6 +105727,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103341,6 +105750,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103363,6 +105773,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103385,6 +105796,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103407,6 +105819,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103429,6 +105842,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103451,6 +105865,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103473,6 +105888,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103495,6 +105911,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103517,6 +105934,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103539,6 +105957,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103561,6 +105980,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103583,6 +106003,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103605,6 +106026,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103627,6 +106049,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103649,6 +106072,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103671,6 +106095,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103693,6 +106118,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103715,6 +106141,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103737,6 +106164,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103759,6 +106187,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103781,6 +106210,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103803,6 +106233,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103825,6 +106256,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103847,6 +106279,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103869,6 +106302,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103891,6 +106325,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103913,6 +106348,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103935,6 +106371,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103957,6 +106394,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -103979,6 +106417,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104001,6 +106440,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104023,6 +106463,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104045,6 +106486,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104067,6 +106509,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104089,6 +106532,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104111,6 +106555,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104133,6 +106578,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104155,6 +106601,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104177,6 +106624,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104199,6 +106647,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104221,6 +106670,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104243,6 +106693,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104265,6 +106716,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104287,6 +106739,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104309,6 +106762,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104331,6 +106785,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104353,6 +106808,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104375,6 +106831,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104397,6 +106854,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104419,6 +106877,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104441,6 +106900,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104463,6 +106923,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104485,6 +106946,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104507,6 +106969,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104529,6 +106992,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104551,6 +107015,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104573,6 +107038,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104595,6 +107061,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104617,6 +107084,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104639,6 +107107,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104661,6 +107130,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104683,6 +107153,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104705,6 +107176,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104727,6 +107199,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104749,6 +107222,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104771,6 +107245,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104793,6 +107268,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104815,6 +107291,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104837,6 +107314,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104859,6 +107337,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104881,6 +107360,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104903,6 +107383,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104925,6 +107406,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104947,6 +107429,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104969,6 +107452,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -104991,6 +107475,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105013,6 +107498,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105035,6 +107521,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105057,6 +107544,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105079,6 +107567,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105101,6 +107590,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105123,6 +107613,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105145,6 +107636,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105167,6 +107659,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105189,6 +107682,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105211,6 +107705,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105233,6 +107728,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105255,6 +107751,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105277,6 +107774,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105299,6 +107797,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105321,6 +107820,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105343,6 +107843,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105365,6 +107866,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105387,6 +107889,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105409,6 +107912,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105431,6 +107935,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105453,6 +107958,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105475,6 +107981,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105497,6 +108004,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105519,6 +108027,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105541,6 +108050,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105563,6 +108073,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105585,6 +108096,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105607,6 +108119,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105629,6 +108142,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105651,6 +108165,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105673,6 +108188,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105695,6 +108211,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105717,6 +108234,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105739,6 +108257,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105761,6 +108280,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105783,6 +108303,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105805,6 +108326,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105827,6 +108349,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105849,6 +108372,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105871,6 +108395,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105893,6 +108418,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105915,6 +108441,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105937,6 +108464,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105959,6 +108487,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -105981,6 +108510,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106003,6 +108533,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106025,6 +108556,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106047,6 +108579,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106069,6 +108602,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106091,6 +108625,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106113,6 +108648,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106135,6 +108671,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106157,6 +108694,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106179,6 +108717,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106201,6 +108740,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106223,6 +108763,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106245,6 +108786,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106267,6 +108809,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106289,6 +108832,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106311,6 +108855,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106333,6 +108878,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106355,6 +108901,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106377,6 +108924,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106399,6 +108947,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106421,6 +108970,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106443,6 +108993,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106465,6 +109016,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106487,6 +109039,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106509,6 +109062,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106531,6 +109085,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106553,6 +109108,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106575,6 +109131,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106597,6 +109154,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106619,6 +109177,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106641,6 +109200,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106663,6 +109223,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106685,6 +109246,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106707,6 +109269,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106729,6 +109292,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106751,6 +109315,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106773,6 +109338,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106795,6 +109361,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106817,6 +109384,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106839,6 +109407,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106861,6 +109430,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106883,6 +109453,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106905,6 +109476,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106927,6 +109499,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106949,6 +109522,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106971,6 +109545,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -106993,6 +109568,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107015,6 +109591,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107037,6 +109614,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107059,6 +109637,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107081,6 +109660,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107103,6 +109683,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107125,6 +109706,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107147,6 +109729,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107169,6 +109752,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107191,6 +109775,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107213,6 +109798,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107235,6 +109821,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107257,6 +109844,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107279,6 +109867,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107301,6 +109890,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107323,6 +109913,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107345,6 +109936,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107367,6 +109959,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107389,6 +109982,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107411,6 +110005,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107433,6 +110028,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107455,6 +110051,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107477,6 +110074,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107499,6 +110097,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107521,6 +110120,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107543,6 +110143,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107565,6 +110166,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107587,6 +110189,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107609,6 +110212,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107631,6 +110235,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107653,6 +110258,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107675,6 +110281,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107697,6 +110304,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107719,6 +110327,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107741,6 +110350,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107763,6 +110373,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107785,6 +110396,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107807,6 +110419,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107829,6 +110442,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107851,6 +110465,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107873,6 +110488,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107895,6 +110511,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107917,6 +110534,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107939,6 +110557,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107961,6 +110580,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -107983,6 +110603,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108005,6 +110626,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108027,6 +110649,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108049,6 +110672,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108071,6 +110695,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108093,6 +110718,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108115,6 +110741,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108137,6 +110764,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108159,6 +110787,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108181,6 +110810,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108203,6 +110833,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108225,6 +110856,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108247,6 +110879,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108269,6 +110902,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108291,6 +110925,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108313,6 +110948,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108335,6 +110971,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108357,6 +110994,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108379,6 +111017,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108401,6 +111040,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108423,6 +111063,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108445,6 +111086,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108467,6 +111109,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108489,6 +111132,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108511,6 +111155,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108533,6 +111178,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108555,6 +111201,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108577,6 +111224,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108599,6 +111247,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108621,6 +111270,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108643,6 +111293,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108665,6 +111316,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108687,6 +111339,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108709,6 +111362,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108731,6 +111385,7 @@ "language": "c", "name": "client_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108753,6 +111408,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108775,6 +111431,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108797,6 +111454,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108819,6 +111477,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108841,6 +111500,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108863,6 +111523,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108885,6 +111546,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108907,6 +111569,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108929,6 +111592,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108951,6 +111615,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108973,6 +111638,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -108995,6 +111661,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109017,6 +111684,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109039,6 +111707,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109061,6 +111730,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109083,6 +111753,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109105,6 +111776,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109127,6 +111799,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109149,6 +111822,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109171,6 +111845,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109193,6 +111868,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109215,6 +111891,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109237,6 +111914,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109259,6 +111937,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109281,6 +111960,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109303,6 +111983,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109325,6 +112006,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109347,6 +112029,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109369,6 +112052,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109391,6 +112075,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109413,6 +112098,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109435,6 +112121,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109457,6 +112144,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109479,6 +112167,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109501,6 +112190,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109523,6 +112213,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109545,6 +112236,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109567,6 +112259,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109589,6 +112282,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109611,6 +112305,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109633,6 +112328,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109655,6 +112351,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109677,6 +112374,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109699,6 +112397,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109721,6 +112420,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109743,6 +112443,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109765,6 +112466,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109787,6 +112489,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109809,6 +112512,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109831,6 +112535,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109853,6 +112558,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109875,6 +112581,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109897,6 +112604,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109919,6 +112627,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109941,6 +112650,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109963,6 +112673,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -109985,6 +112696,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110007,6 +112719,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110029,6 +112742,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110051,6 +112765,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110073,6 +112788,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110095,6 +112811,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110117,6 +112834,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110139,6 +112857,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110161,6 +112880,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110183,6 +112903,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110205,6 +112926,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110227,6 +112949,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110249,6 +112972,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110271,6 +112995,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110293,6 +113018,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110315,6 +113041,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110337,6 +113064,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110359,6 +113087,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110381,6 +113110,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110403,6 +113133,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110425,6 +113156,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110447,6 +113179,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110469,6 +113202,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110491,6 +113225,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110513,6 +113248,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110535,6 +113271,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110557,6 +113294,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110579,6 +113317,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110601,6 +113340,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110623,6 +113363,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110645,6 +113386,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110667,6 +113409,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110689,6 +113432,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110711,6 +113455,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110733,6 +113478,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110755,6 +113501,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110777,6 +113524,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110799,6 +113547,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110821,6 +113570,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110843,6 +113593,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110865,6 +113616,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110887,6 +113639,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110909,6 +113662,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110931,6 +113685,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110953,6 +113708,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110975,6 +113731,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -110997,6 +113754,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111019,6 +113777,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111041,6 +113800,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111063,6 +113823,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111085,6 +113846,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111107,6 +113869,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111129,6 +113892,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111151,6 +113915,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111173,6 +113938,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111195,6 +113961,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111217,6 +113984,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111239,6 +114007,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111261,6 +114030,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111283,6 +114053,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111305,6 +114076,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111327,6 +114099,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111349,6 +114122,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111371,6 +114145,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111393,6 +114168,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111415,6 +114191,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111437,6 +114214,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111459,6 +114237,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111481,6 +114260,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111503,6 +114283,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111525,6 +114306,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111547,6 +114329,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111569,6 +114352,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111591,6 +114375,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111613,6 +114398,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111635,6 +114421,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111657,6 +114444,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111679,6 +114467,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111701,6 +114490,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111723,6 +114513,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111745,6 +114536,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111767,6 +114559,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111789,6 +114582,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111811,6 +114605,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111833,6 +114628,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111855,6 +114651,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111877,6 +114674,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111899,6 +114697,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111921,6 +114720,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111943,6 +114743,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111965,6 +114766,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -111987,6 +114789,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112009,6 +114812,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112031,6 +114835,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112053,6 +114858,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112075,6 +114881,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112097,6 +114904,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112119,6 +114927,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112141,6 +114950,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112163,6 +114973,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112185,6 +114996,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112207,6 +115019,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112229,6 +115042,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112251,6 +115065,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112273,6 +115088,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112295,6 +115111,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112317,6 +115134,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112339,6 +115157,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112361,6 +115180,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112383,6 +115203,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112405,6 +115226,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112427,6 +115249,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112449,6 +115272,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112471,6 +115295,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112493,6 +115318,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112515,6 +115341,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112537,6 +115364,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112559,6 +115387,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112581,6 +115410,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112603,6 +115433,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112625,6 +115456,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112647,6 +115479,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112669,6 +115502,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112691,6 +115525,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112713,6 +115548,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112735,6 +115571,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112757,6 +115594,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112779,6 +115617,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112801,6 +115640,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112823,6 +115663,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112845,6 +115686,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112867,6 +115709,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112889,6 +115732,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112911,6 +115755,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112933,6 +115778,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112955,6 +115801,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112977,6 +115824,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -112999,6 +115847,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113021,6 +115870,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113043,6 +115893,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113065,6 +115916,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113087,6 +115939,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113109,6 +115962,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113131,6 +115985,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113153,6 +116008,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113175,6 +116031,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113197,6 +116054,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113219,6 +116077,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113241,6 +116100,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113263,6 +116123,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113285,6 +116146,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113307,6 +116169,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113329,6 +116192,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113351,6 +116215,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113373,6 +116238,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113395,6 +116261,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113417,6 +116284,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113439,6 +116307,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113461,6 +116330,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113483,6 +116353,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113505,6 +116376,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113527,6 +116399,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113549,6 +116422,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113571,6 +116445,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113593,6 +116468,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113615,6 +116491,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113637,6 +116514,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113659,6 +116537,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113681,6 +116560,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113703,6 +116583,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113725,6 +116606,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113747,6 +116629,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113769,6 +116652,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113791,6 +116675,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113813,6 +116698,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113835,6 +116721,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113857,6 +116744,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113879,6 +116767,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113901,6 +116790,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113923,6 +116813,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113945,6 +116836,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113967,6 +116859,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -113989,6 +116882,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114011,6 +116905,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114033,6 +116928,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114055,6 +116951,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114077,6 +116974,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114099,6 +116997,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114121,6 +117020,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114143,6 +117043,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114165,6 +117066,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114187,6 +117089,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114209,6 +117112,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114231,6 +117135,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114253,6 +117158,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114275,6 +117181,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114297,6 +117204,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114319,6 +117227,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114341,6 +117250,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114363,6 +117273,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114385,6 +117296,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114407,6 +117319,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114429,6 +117342,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114451,6 +117365,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114473,6 +117388,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114495,6 +117411,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114517,6 +117434,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114539,6 +117457,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114561,6 +117480,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114583,6 +117503,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 @@ -114605,6 +117549,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114627,6 +117572,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114649,6 +117595,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114671,6 +117618,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114693,6 +117641,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114715,6 +117664,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114737,6 +117687,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114759,6 +117710,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114781,6 +117733,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114803,6 +117756,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114825,6 +117779,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114847,6 +117802,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114869,6 +117825,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114891,6 +117848,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114913,6 +117871,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114935,6 +117894,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114957,6 +117917,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -114979,6 +117940,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115001,6 +117963,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115023,6 +117986,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115045,6 +118009,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115067,6 +118032,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115089,6 +118055,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115111,6 +118078,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115133,6 +118101,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115155,6 +118124,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115177,6 +118147,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115199,6 +118170,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115221,6 +118193,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115243,6 +118216,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115265,6 +118239,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115287,6 +118262,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115309,6 +118285,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115331,6 +118308,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115353,6 +118331,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115375,6 +118354,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115397,6 +118377,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115419,6 +118400,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115441,6 +118423,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115463,6 +118446,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115485,6 +118469,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115507,6 +118492,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115529,6 +118515,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115551,6 +118538,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115573,6 +118561,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115595,6 +118584,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115617,6 +118607,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115639,6 +118630,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115661,6 +118653,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115683,6 +118676,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115705,6 +118699,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115727,6 +118722,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115749,6 +118745,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115771,6 +118768,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115793,6 +118791,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115815,6 +118814,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115837,6 +118837,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115859,6 +118860,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115881,6 +118883,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115903,6 +118906,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115925,6 +118929,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115947,6 +118952,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115969,6 +118975,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -115991,6 +118998,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116013,6 +119021,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116035,6 +119044,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116057,6 +119067,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116079,6 +119090,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116101,6 +119113,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116123,6 +119136,7 @@ "language": "c", "name": "hpack_parser_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116145,6 +119159,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116167,6 +119182,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116189,6 +119205,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116211,6 +119228,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116233,6 +119251,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116255,6 +119274,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116277,6 +119297,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116299,6 +119320,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116321,6 +119343,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116343,6 +119366,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116365,6 +119389,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116387,6 +119412,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116409,6 +119435,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116431,6 +119458,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116453,6 +119481,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116475,6 +119504,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116497,6 +119527,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116519,6 +119550,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116541,6 +119573,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116563,6 +119596,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116585,6 +119619,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116607,6 +119642,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116629,6 +119665,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116651,6 +119688,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116673,6 +119711,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116695,6 +119734,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116717,6 +119757,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116739,6 +119780,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116761,6 +119803,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116783,6 +119826,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116805,6 +119849,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116827,6 +119872,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116849,6 +119895,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116871,6 +119918,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116893,6 +119941,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116915,6 +119964,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116937,6 +119987,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116959,6 +120010,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -116981,6 +120033,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117003,6 +120056,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117025,6 +120079,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117047,6 +120102,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117069,6 +120125,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117091,6 +120148,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117113,6 +120171,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117135,6 +120194,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117157,6 +120217,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117179,6 +120240,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117201,6 +120263,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117223,6 +120286,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117245,6 +120309,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117267,6 +120332,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117289,6 +120355,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117311,6 +120378,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117333,6 +120401,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117355,6 +120424,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117377,6 +120447,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117399,6 +120470,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117421,6 +120493,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117443,6 +120516,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117465,6 +120539,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117487,6 +120562,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117509,6 +120585,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117531,6 +120608,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117553,6 +120631,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117575,6 +120654,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117597,6 +120677,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117619,6 +120700,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117641,6 +120723,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117663,6 +120746,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117685,6 +120769,7 @@ "language": "c", "name": "http_request_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117707,6 +120792,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117729,6 +120815,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117751,6 +120838,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117773,6 +120861,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117795,6 +120884,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117817,6 +120907,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117839,6 +120930,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117861,6 +120953,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117883,6 +120976,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117905,6 +120999,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117927,6 +121022,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117949,6 +121045,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117971,6 +121068,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -117993,6 +121091,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118015,6 +121114,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118037,6 +121137,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118059,6 +121160,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118081,6 +121183,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118103,6 +121206,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118125,6 +121229,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118147,6 +121252,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118169,6 +121275,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118191,6 +121298,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118213,6 +121321,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118235,6 +121344,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118257,6 +121367,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118279,6 +121390,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118301,6 +121413,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118323,6 +121436,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118345,6 +121459,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118367,6 +121482,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118389,6 +121505,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118411,6 +121528,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118433,6 +121551,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118455,6 +121574,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118477,6 +121597,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118499,6 +121620,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118521,6 +121643,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118543,6 +121666,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118565,6 +121689,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118587,6 +121712,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118609,6 +121735,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118631,6 +121758,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118653,6 +121781,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118675,6 +121804,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118697,6 +121827,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118719,6 +121850,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118741,6 +121873,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118763,6 +121896,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118785,6 +121919,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118807,6 +121942,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118829,6 +121965,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118851,6 +121988,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118873,6 +122011,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118895,6 +122034,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118917,6 +122057,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118939,6 +122080,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118961,6 +122103,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -118983,6 +122126,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119005,6 +122149,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119027,6 +122172,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119049,6 +122195,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119071,6 +122218,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119093,6 +122241,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119115,6 +122264,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119137,6 +122287,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119159,6 +122310,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119181,6 +122333,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119203,6 +122356,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119225,6 +122379,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119247,6 +122402,7 @@ "language": "c", "name": "http_response_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119269,6 +122425,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119291,6 +122448,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119313,6 +122471,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119335,6 +122494,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119357,6 +122517,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119379,6 +122540,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119401,6 +122563,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119423,6 +122586,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119445,6 +122609,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119467,6 +122632,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119489,6 +122655,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119511,6 +122678,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119533,6 +122701,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119555,6 +122724,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119577,6 +122747,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119599,6 +122770,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119621,6 +122793,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119643,6 +122816,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119665,6 +122839,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119687,6 +122862,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119709,6 +122885,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119731,6 +122908,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119753,6 +122931,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119775,6 +122954,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119797,6 +122977,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119819,6 +123000,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119841,6 +123023,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119863,6 +123046,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119885,6 +123069,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119907,6 +123092,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119929,6 +123115,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119951,6 +123138,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119973,6 +123161,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -119995,6 +123184,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120017,6 +123207,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120039,6 +123230,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120061,6 +123253,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120083,6 +123276,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120105,6 +123299,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120127,6 +123322,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120149,6 +123345,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120171,6 +123368,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120193,6 +123391,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120215,6 +123414,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120237,6 +123437,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120259,6 +123460,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120281,6 +123483,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120303,6 +123506,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120325,6 +123529,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120347,6 +123552,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120369,6 +123575,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120391,6 +123598,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120413,6 +123621,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120435,6 +123644,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120457,6 +123667,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120479,6 +123690,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120501,6 +123713,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120523,6 +123736,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120545,6 +123759,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120567,6 +123782,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120589,6 +123805,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120611,6 +123828,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120633,6 +123851,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120655,6 +123874,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120677,6 +123897,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120699,6 +123920,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120721,6 +123943,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120743,6 +123966,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120765,6 +123989,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120787,6 +124012,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120809,6 +124035,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120831,6 +124058,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120853,6 +124081,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120875,6 +124104,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120897,6 +124127,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120919,6 +124150,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120941,6 +124173,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120963,6 +124196,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -120985,6 +124219,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121007,6 +124242,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121029,6 +124265,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121051,6 +124288,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121073,6 +124311,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121095,6 +124334,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121117,6 +124357,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121139,6 +124380,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121161,6 +124403,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121183,6 +124426,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121205,6 +124449,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121227,6 +124472,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121249,6 +124495,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121271,6 +124518,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121293,6 +124541,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121315,6 +124564,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121337,6 +124587,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121359,6 +124610,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121381,6 +124633,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121403,6 +124656,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121425,6 +124679,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121447,6 +124702,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121469,6 +124725,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121491,6 +124748,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121513,6 +124771,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121535,6 +124794,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121557,6 +124817,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121579,6 +124840,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121601,6 +124863,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121623,6 +124886,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121645,6 +124909,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121667,6 +124932,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121689,6 +124955,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121711,6 +124978,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121733,6 +125001,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121755,6 +125024,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121777,6 +125047,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121799,6 +125070,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121821,6 +125093,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121843,6 +125116,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121865,6 +125139,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121887,6 +125162,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121909,6 +125185,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121931,6 +125208,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121953,6 +125231,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121975,6 +125254,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -121997,6 +125277,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122019,6 +125300,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122041,6 +125323,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122063,6 +125346,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122085,6 +125369,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122107,6 +125392,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122129,6 +125415,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122151,6 +125438,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122173,6 +125461,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122195,6 +125484,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122217,6 +125507,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122239,6 +125530,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122261,6 +125553,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122283,6 +125576,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122305,6 +125599,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122327,6 +125622,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122349,6 +125645,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122371,6 +125668,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122393,6 +125691,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122415,6 +125714,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122437,6 +125737,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122459,6 +125760,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122481,6 +125783,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122503,6 +125806,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122525,6 +125829,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122547,6 +125852,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122569,6 +125875,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122591,6 +125898,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122613,6 +125921,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122635,6 +125944,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122657,6 +125967,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122679,6 +125990,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122701,6 +126013,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122723,6 +126036,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122745,6 +126059,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122767,6 +126082,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122789,6 +126105,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122811,6 +126128,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122833,6 +126151,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122855,6 +126174,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122877,6 +126197,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122899,6 +126220,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122921,6 +126243,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122943,6 +126266,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122965,6 +126289,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -122987,6 +126312,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123009,6 +126335,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123031,6 +126358,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123053,6 +126381,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123075,6 +126404,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123097,6 +126427,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123119,6 +126450,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123141,6 +126473,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123163,6 +126496,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123185,6 +126519,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123207,6 +126542,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123229,6 +126565,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123251,6 +126588,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123273,6 +126611,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123295,6 +126634,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123317,6 +126657,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123339,6 +126680,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123361,6 +126703,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123383,6 +126726,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123405,6 +126749,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123427,6 +126772,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123449,6 +126795,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123471,6 +126818,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123493,6 +126841,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123515,6 +126864,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123537,6 +126887,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123559,6 +126910,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123581,6 +126933,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123603,6 +126956,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123625,6 +126979,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123647,6 +127002,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123669,6 +127025,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123691,6 +127048,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123713,6 +127071,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123735,6 +127094,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123757,6 +127117,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123779,6 +127140,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123801,6 +127163,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123823,6 +127186,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123845,6 +127209,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123867,6 +127232,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123889,6 +127255,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123911,6 +127278,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123933,6 +127301,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123955,6 +127324,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123977,6 +127347,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -123999,6 +127370,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124021,6 +127393,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124043,6 +127416,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124065,6 +127439,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124087,6 +127462,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124109,6 +127485,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124131,6 +127508,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124153,6 +127531,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124175,6 +127554,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124197,6 +127577,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124219,6 +127600,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124241,6 +127623,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124263,6 +127646,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124285,6 +127669,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124307,6 +127692,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124329,6 +127715,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124351,6 +127738,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124373,6 +127761,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124395,6 +127784,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124417,6 +127807,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124439,6 +127830,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124461,6 +127853,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124483,6 +127876,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124505,6 +127899,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124527,6 +127922,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124549,6 +127945,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124571,6 +127968,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124593,6 +127991,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124615,6 +128014,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124637,6 +128037,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124659,6 +128060,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124681,6 +128083,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124703,6 +128106,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124725,6 +128129,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124747,6 +128152,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124769,6 +128175,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124791,6 +128198,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124813,6 +128221,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124835,6 +128244,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124857,6 +128267,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124879,6 +128290,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124901,6 +128313,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124923,6 +128336,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124945,6 +128359,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124967,6 +128382,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -124989,6 +128405,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125011,6 +128428,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125033,6 +128451,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125055,6 +128474,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125077,6 +128497,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125099,6 +128520,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125121,6 +128543,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125143,6 +128566,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125165,6 +128589,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125187,6 +128612,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125209,6 +128635,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125231,6 +128658,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125253,6 +128681,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125275,6 +128704,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125297,6 +128727,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125319,6 +128750,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125341,6 +128773,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125363,6 +128796,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125385,6 +128819,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125407,6 +128842,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125429,6 +128865,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125451,6 +128888,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125473,6 +128911,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125495,6 +128934,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125517,6 +128957,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125539,6 +128980,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125561,6 +129003,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125583,6 +129026,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125605,6 +129049,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125627,6 +129072,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125649,6 +129095,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125671,6 +129118,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125693,6 +129141,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125715,6 +129164,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125737,6 +129187,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125759,6 +129210,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125781,6 +129233,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125803,6 +129256,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125825,6 +129279,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125847,6 +129302,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125869,6 +129325,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125891,6 +129348,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125913,6 +129371,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125935,6 +129394,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125957,6 +129417,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -125979,6 +129440,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126001,6 +129463,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126023,6 +129486,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126045,6 +129509,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126067,6 +129532,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126089,6 +129555,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126111,6 +129578,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126133,6 +129601,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126155,6 +129624,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126177,6 +129647,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126199,6 +129670,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126221,6 +129693,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126243,6 +129716,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126265,6 +129739,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126287,6 +129762,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126309,6 +129785,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126331,6 +129808,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126353,6 +129831,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126375,6 +129854,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126397,6 +129877,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126419,6 +129900,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126441,6 +129923,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126463,6 +129946,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126485,6 +129969,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126507,6 +129992,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126529,6 +130015,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126551,6 +130038,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126573,6 +130061,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126595,6 +130084,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126617,6 +130107,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126639,6 +130130,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126661,6 +130153,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126683,6 +130176,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126705,6 +130199,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126727,6 +130222,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126749,6 +130245,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126771,6 +130268,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126793,6 +130291,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126815,6 +130314,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126837,6 +130337,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126859,6 +130360,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126881,6 +130383,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126903,6 +130406,7 @@ "language": "c", "name": "json_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126925,6 +130429,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126947,6 +130452,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126969,6 +130475,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -126991,6 +130498,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127013,6 +130521,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127035,6 +130544,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127057,6 +130567,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127079,6 +130590,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127101,6 +130613,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127123,6 +130636,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127145,6 +130659,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127167,6 +130682,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127189,6 +130705,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127211,6 +130728,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127233,6 +130751,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127255,6 +130774,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127277,6 +130797,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127299,6 +130820,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127321,6 +130843,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127343,6 +130866,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127365,6 +130889,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127387,6 +130912,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127409,6 +130935,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127431,6 +130958,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127453,6 +130981,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127475,6 +131004,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127497,6 +131027,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127519,6 +131050,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127541,6 +131073,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127563,6 +131096,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127585,6 +131119,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127607,6 +131142,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127629,6 +131165,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127651,6 +131188,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127673,6 +131211,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127695,6 +131234,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127717,6 +131257,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127739,6 +131280,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127761,6 +131303,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127783,6 +131326,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127805,6 +131349,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127827,6 +131372,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127849,6 +131395,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127871,6 +131418,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127893,6 +131441,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127915,6 +131464,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127937,6 +131487,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127959,6 +131510,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -127981,6 +131533,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128003,6 +131556,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128025,6 +131579,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128047,6 +131602,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128069,6 +131625,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128091,6 +131648,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128113,6 +131671,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128135,6 +131694,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128157,6 +131717,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128179,6 +131740,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128201,6 +131763,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128223,6 +131786,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128245,6 +131809,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128267,6 +131832,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128289,6 +131855,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128311,6 +131878,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128333,6 +131901,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128355,6 +131924,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128377,6 +131947,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128399,6 +131970,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128421,6 +131993,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128443,6 +132016,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128465,6 +132039,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128487,6 +132062,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128509,6 +132085,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128531,6 +132108,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128553,6 +132131,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128575,6 +132154,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128597,6 +132177,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128619,6 +132200,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128641,6 +132223,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128663,6 +132246,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128685,6 +132269,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128707,6 +132292,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128729,6 +132315,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128751,6 +132338,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128773,6 +132361,7 @@ "language": "c", "name": "nanopb_fuzzer_response_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128795,6 +132384,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128817,6 +132407,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128839,6 +132430,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128861,6 +132453,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128883,6 +132476,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128905,6 +132499,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128927,6 +132522,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128949,6 +132545,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128971,6 +132568,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -128993,6 +132591,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129015,6 +132614,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129037,6 +132637,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129059,6 +132660,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129081,6 +132683,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129103,6 +132706,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129125,6 +132729,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129147,6 +132752,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129169,6 +132775,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129191,6 +132798,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129213,6 +132821,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129235,6 +132844,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129257,6 +132867,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129279,6 +132890,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129301,6 +132913,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129323,6 +132936,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129345,6 +132959,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129367,6 +132982,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129389,6 +133005,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129411,6 +133028,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129433,6 +133051,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129455,6 +133074,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129477,6 +133097,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129499,6 +133120,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129521,6 +133143,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129543,6 +133166,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129565,6 +133189,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129587,6 +133212,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129609,6 +133235,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129631,6 +133258,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129653,6 +133281,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129675,6 +133304,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129697,6 +133327,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129719,6 +133350,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129741,6 +133373,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129763,6 +133396,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129785,6 +133419,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129807,6 +133442,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129829,6 +133465,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129851,6 +133488,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129873,6 +133511,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129895,6 +133534,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129917,6 +133557,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129939,6 +133580,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129961,6 +133603,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -129983,6 +133626,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130005,6 +133649,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130027,6 +133672,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130049,6 +133695,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130071,6 +133718,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130093,6 +133741,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130115,6 +133764,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130137,6 +133787,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130159,6 +133810,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130181,6 +133833,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130203,6 +133856,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130225,6 +133879,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130247,6 +133902,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130269,6 +133925,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130291,6 +133948,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130313,6 +133971,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130335,6 +133994,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130357,6 +134017,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130379,6 +134040,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130401,6 +134063,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130423,6 +134086,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130445,6 +134109,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130467,6 +134132,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130489,6 +134155,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130511,6 +134178,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130533,6 +134201,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130555,6 +134224,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130577,6 +134247,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130599,6 +134270,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130621,6 +134293,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130643,6 +134316,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130665,6 +134339,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130687,6 +134362,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130709,6 +134385,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130731,6 +134408,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130753,6 +134431,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130775,6 +134454,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130797,6 +134477,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130819,6 +134500,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130841,6 +134523,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130863,6 +134546,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130885,6 +134569,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130907,6 +134592,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130929,6 +134615,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130951,6 +134638,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130973,6 +134661,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -130995,6 +134684,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131017,6 +134707,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131039,6 +134730,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131061,6 +134753,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131083,6 +134776,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131105,6 +134799,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131127,6 +134822,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131149,6 +134845,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131171,6 +134868,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131193,6 +134891,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131215,6 +134914,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131237,6 +134937,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131259,6 +134960,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131281,6 +134983,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131303,6 +135006,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131325,6 +135029,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131347,6 +135052,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131369,6 +135075,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131391,6 +135098,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131413,6 +135121,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131435,6 +135144,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131457,6 +135167,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131479,6 +135190,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131501,6 +135213,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131523,6 +135236,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131545,6 +135259,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131567,6 +135282,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131589,6 +135305,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131611,6 +135328,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131633,6 +135351,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131655,6 +135374,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131677,6 +135397,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131699,6 +135420,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131721,6 +135443,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131743,6 +135466,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131765,6 +135489,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131787,6 +135512,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131809,6 +135535,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131831,6 +135558,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131853,6 +135581,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131875,6 +135604,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131897,6 +135627,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131919,6 +135650,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131941,6 +135673,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131963,6 +135696,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -131985,6 +135719,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132007,6 +135742,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132029,6 +135765,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132051,6 +135788,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132073,6 +135811,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132095,6 +135834,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132117,6 +135857,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132139,6 +135880,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132161,6 +135903,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132183,6 +135926,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132205,6 +135949,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132227,6 +135972,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132249,6 +135995,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132271,6 +136018,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132293,6 +136041,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132315,6 +136064,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132337,6 +136087,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132359,6 +136110,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132381,6 +136133,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132403,6 +136156,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132425,6 +136179,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132447,6 +136202,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132469,6 +136225,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132491,6 +136248,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132513,6 +136271,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132535,6 +136294,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132557,6 +136317,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132579,6 +136340,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132601,6 +136363,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132623,6 +136386,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132645,6 +136409,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132667,6 +136432,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132689,6 +136455,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132711,6 +136478,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132733,6 +136501,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132755,6 +136524,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132777,6 +136547,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132799,6 +136570,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132821,6 +136593,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132843,6 +136616,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132865,6 +136639,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132887,6 +136662,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132909,6 +136685,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132931,6 +136708,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132953,6 +136731,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132975,6 +136754,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -132997,6 +136777,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133019,6 +136800,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133041,6 +136823,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133063,6 +136846,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133085,6 +136869,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133107,6 +136892,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133129,6 +136915,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133151,6 +136938,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133173,6 +136961,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133195,6 +136984,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133217,6 +137007,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133239,6 +137030,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133261,6 +137053,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133283,6 +137076,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133305,6 +137099,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133327,6 +137122,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133349,6 +137145,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133371,6 +137168,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133393,6 +137191,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133415,6 +137214,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133437,6 +137237,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133459,6 +137260,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133481,6 +137283,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133503,6 +137306,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133525,6 +137329,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133547,6 +137352,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133569,6 +137375,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133591,6 +137398,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133613,6 +137421,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133635,6 +137444,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133657,6 +137467,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133679,6 +137490,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133701,6 +137513,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133723,6 +137536,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133745,6 +137559,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133767,6 +137582,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133789,6 +137605,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133811,6 +137628,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133833,6 +137651,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133855,6 +137674,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133877,6 +137697,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133899,6 +137720,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133921,6 +137743,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133943,6 +137766,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133965,6 +137789,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -133987,6 +137812,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134009,6 +137835,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134031,6 +137858,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134053,6 +137881,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134075,6 +137904,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134097,6 +137927,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134119,6 +137950,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134141,6 +137973,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134163,6 +137996,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134185,6 +138019,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134207,6 +138042,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134229,6 +138065,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134251,6 +138088,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134273,6 +138111,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134295,6 +138134,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134317,6 +138157,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134339,6 +138180,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134361,6 +138203,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134383,6 +138226,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134405,6 +138249,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134427,6 +138272,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134449,6 +138295,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134471,6 +138318,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134493,6 +138341,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134515,6 +138364,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134537,6 +138387,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134559,6 +138410,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134581,6 +138433,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134603,6 +138456,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134625,6 +138479,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134647,6 +138502,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134669,6 +138525,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134691,6 +138548,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134713,6 +138571,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134735,6 +138594,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134757,6 +138617,7 @@ "language": "c", "name": "nanopb_fuzzer_serverlist_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134779,6 +138640,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134801,6 +138663,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134823,6 +138686,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134845,6 +138709,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134867,6 +138732,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134889,6 +138755,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134911,6 +138778,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134933,6 +138801,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134955,6 +138824,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134977,6 +138847,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -134999,6 +138870,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135021,6 +138893,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135043,6 +138916,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135065,6 +138939,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135087,6 +138962,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135109,6 +138985,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135131,6 +139008,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135153,6 +139031,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135175,6 +139054,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135197,6 +139077,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135219,6 +139100,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135241,6 +139123,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135263,6 +139146,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135285,6 +139169,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135307,6 +139192,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135329,6 +139215,7 @@ "language": "c", "name": "percent_decode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135351,6 +139238,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135373,6 +139261,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135395,6 +139284,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135417,6 +139307,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135439,6 +139330,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135461,6 +139353,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135483,6 +139376,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135505,6 +139399,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135527,6 +139422,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135549,6 +139445,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135571,6 +139468,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135593,6 +139491,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135615,6 +139514,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135637,6 +139537,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135659,6 +139560,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135681,6 +139583,7 @@ "language": "c", "name": "percent_encode_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135703,6 +139606,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135725,6 +139629,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135747,6 +139652,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135769,6 +139675,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135791,6 +139698,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135813,6 +139721,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135835,6 +139744,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135857,6 +139767,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135879,6 +139790,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135901,6 +139813,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135923,6 +139836,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135945,6 +139859,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135967,6 +139882,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -135989,6 +139905,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136011,6 +139928,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136033,6 +139951,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136055,6 +139974,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136077,6 +139997,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136099,6 +140020,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136121,6 +140043,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136143,6 +140066,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136165,6 +140089,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136187,6 +140112,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136209,6 +140135,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136231,6 +140158,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136253,6 +140181,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136275,6 +140204,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136297,6 +140227,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136319,6 +140250,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136341,6 +140273,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136363,6 +140296,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136385,6 +140319,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136407,6 +140342,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136429,6 +140365,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136451,6 +140388,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136473,6 +140411,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136495,6 +140434,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136517,6 +140457,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136539,6 +140480,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136561,6 +140503,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136583,6 +140526,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136605,6 +140549,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136627,6 +140572,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136649,6 +140595,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136671,6 +140618,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136693,6 +140641,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136715,6 +140664,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136737,6 +140687,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136759,6 +140710,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136781,6 +140733,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136803,6 +140756,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136825,6 +140779,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136847,6 +140802,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136869,6 +140825,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136891,6 +140848,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136913,6 +140871,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136935,6 +140894,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136957,6 +140917,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -136979,6 +140940,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137001,6 +140963,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137023,6 +140986,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137045,6 +141009,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137067,6 +141032,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137089,6 +141055,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137111,6 +141078,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137133,6 +141101,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137155,6 +141124,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137177,6 +141147,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137199,6 +141170,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137221,6 +141193,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137243,6 +141216,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137265,6 +141239,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137287,6 +141262,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137309,6 +141285,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137331,6 +141308,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137353,6 +141331,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137375,6 +141354,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137397,6 +141377,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137419,6 +141400,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137441,6 +141423,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137463,6 +141446,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137485,6 +141469,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137507,6 +141492,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137529,6 +141515,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137551,6 +141538,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137573,6 +141561,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137595,6 +141584,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137617,6 +141607,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137639,6 +141630,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137661,6 +141653,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137683,6 +141676,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137705,6 +141699,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137727,6 +141722,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137749,6 +141745,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137771,6 +141768,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137793,6 +141791,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137815,6 +141814,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137837,6 +141837,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137859,6 +141860,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137881,6 +141883,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137903,6 +141906,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137925,6 +141929,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137947,6 +141952,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137969,6 +141975,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -137991,6 +141998,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138013,6 +142021,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138035,6 +142044,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138057,6 +142067,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138079,6 +142090,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138101,6 +142113,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138123,6 +142136,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138145,6 +142159,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138167,6 +142182,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138189,6 +142205,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138211,6 +142228,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138233,6 +142251,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138255,6 +142274,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138277,6 +142297,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138299,6 +142320,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138321,6 +142343,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138343,6 +142366,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138365,6 +142389,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138387,6 +142412,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138409,6 +142435,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138431,6 +142458,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138453,6 +142481,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138475,6 +142504,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138497,6 +142527,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138519,6 +142550,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138541,6 +142573,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138563,6 +142596,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138585,6 +142619,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138607,6 +142642,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138629,6 +142665,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138651,6 +142688,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138673,6 +142711,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138695,6 +142734,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138717,6 +142757,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138739,6 +142780,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138761,6 +142803,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138783,6 +142826,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138805,6 +142849,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138827,6 +142872,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138849,6 +142895,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138871,6 +142918,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138893,6 +142941,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138915,6 +142964,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138937,6 +142987,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138959,6 +143010,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -138981,6 +143033,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139003,6 +143056,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139025,6 +143079,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139047,6 +143102,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139069,6 +143125,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139091,6 +143148,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139113,6 +143171,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139135,6 +143194,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139157,6 +143217,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139179,6 +143240,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139201,6 +143263,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139223,6 +143286,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139245,6 +143309,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139267,6 +143332,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139289,6 +143355,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139311,6 +143378,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139333,6 +143401,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139355,6 +143424,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139377,6 +143447,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139399,6 +143470,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139421,6 +143493,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139443,6 +143516,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139465,6 +143539,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139487,6 +143562,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139509,6 +143585,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139531,6 +143608,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139553,6 +143631,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139575,6 +143654,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139597,6 +143677,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139619,6 +143700,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139641,6 +143723,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139663,6 +143746,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139685,6 +143769,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139707,6 +143792,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139729,6 +143815,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139751,6 +143838,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139773,6 +143861,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139795,6 +143884,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139817,6 +143907,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139839,6 +143930,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139861,6 +143953,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139883,6 +143976,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139905,6 +143999,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139927,6 +144022,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139949,6 +144045,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139971,6 +144068,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -139993,6 +144091,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140015,6 +144114,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140037,6 +144137,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140059,6 +144160,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140081,6 +144183,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140103,6 +144206,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140125,6 +144229,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140147,6 +144252,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140169,6 +144275,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140191,6 +144298,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140213,6 +144321,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140235,6 +144344,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140257,6 +144367,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140279,6 +144390,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140301,6 +144413,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140323,6 +144436,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140345,6 +144459,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140367,6 +144482,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140389,6 +144505,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140411,6 +144528,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140433,6 +144551,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140455,6 +144574,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140477,6 +144597,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140499,6 +144620,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140521,6 +144643,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140543,6 +144666,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140565,6 +144689,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140587,6 +144712,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140609,6 +144735,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140631,6 +144758,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140653,6 +144781,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140675,6 +144804,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140697,6 +144827,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140719,6 +144850,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140741,6 +144873,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140763,6 +144896,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140785,6 +144919,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140807,6 +144942,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140829,6 +144965,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140851,6 +144988,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140873,6 +145011,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140895,6 +145034,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140917,6 +145057,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140939,6 +145080,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140961,6 +145103,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -140983,6 +145126,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141005,6 +145149,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141027,6 +145172,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141049,6 +145195,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141071,6 +145218,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141093,6 +145241,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141115,6 +145264,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141137,6 +145287,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141159,6 +145310,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141181,6 +145333,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141203,6 +145356,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141225,6 +145379,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141247,6 +145402,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141269,6 +145425,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141291,6 +145448,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141313,6 +145471,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141335,6 +145494,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141357,6 +145517,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141379,6 +145540,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141401,6 +145563,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141423,6 +145586,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141445,6 +145609,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141467,6 +145632,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141489,6 +145655,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141511,6 +145678,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141533,6 +145701,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141555,6 +145724,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141577,6 +145747,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141599,6 +145770,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141621,6 +145793,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141643,6 +145816,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141665,6 +145839,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141687,6 +145862,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141709,6 +145885,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141731,6 +145908,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141753,6 +145931,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141775,6 +145954,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141797,6 +145977,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141819,6 +146000,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141841,6 +146023,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141863,6 +146046,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141885,6 +146069,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141907,6 +146092,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141929,6 +146115,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141951,6 +146138,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141973,6 +146161,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -141995,6 +146184,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142017,6 +146207,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142039,6 +146230,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142061,6 +146253,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142083,6 +146276,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142105,6 +146299,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142127,6 +146322,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142149,6 +146345,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142171,6 +146368,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142193,6 +146391,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142215,6 +146414,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142237,6 +146437,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142259,6 +146460,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142281,6 +146483,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142303,6 +146506,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142325,6 +146529,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142347,6 +146552,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142369,6 +146575,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142391,6 +146598,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142413,6 +146621,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142435,6 +146644,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142457,6 +146667,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142479,6 +146690,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142501,6 +146713,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142523,6 +146736,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142545,6 +146759,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142567,6 +146782,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142589,6 +146805,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142611,6 +146828,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142633,6 +146851,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142655,6 +146874,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142677,6 +146897,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142699,6 +146920,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142721,6 +146943,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142743,6 +146966,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142765,6 +146989,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142787,6 +147012,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142809,6 +147035,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142831,6 +147058,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142853,6 +147081,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142875,6 +147104,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142897,6 +147127,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142919,6 +147150,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142941,6 +147173,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142963,6 +147196,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -142985,6 +147219,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143007,6 +147242,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143029,6 +147265,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143051,6 +147288,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143073,6 +147311,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143095,6 +147334,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143117,6 +147357,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143139,6 +147380,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143161,6 +147403,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143183,6 +147426,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143205,6 +147449,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143227,6 +147472,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143249,6 +147495,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143271,6 +147518,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143293,6 +147541,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143315,6 +147564,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143337,6 +147587,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143359,6 +147610,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143381,6 +147633,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143403,6 +147656,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143425,6 +147679,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143447,6 +147702,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143469,6 +147725,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143491,6 +147748,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143513,6 +147771,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143535,6 +147794,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143557,6 +147817,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143579,6 +147840,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143601,6 +147863,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143623,6 +147886,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143645,6 +147909,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143667,6 +147932,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143689,6 +147955,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143711,6 +147978,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143733,6 +148001,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143755,6 +148024,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143777,6 +148047,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143799,6 +148070,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143821,6 +148093,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143843,6 +148116,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143865,6 +148139,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143887,6 +148162,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143909,6 +148185,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143931,6 +148208,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143953,6 +148231,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143975,6 +148254,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -143997,6 +148277,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144019,6 +148300,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144041,6 +148323,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144063,6 +148346,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144085,6 +148369,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144107,6 +148392,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144129,6 +148415,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144151,6 +148438,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144173,6 +148461,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144195,6 +148484,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144217,6 +148507,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144239,6 +148530,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144261,6 +148553,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144283,6 +148576,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144305,6 +148599,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144327,6 +148622,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144349,6 +148645,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144371,6 +148668,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144393,6 +148691,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144415,6 +148714,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144437,6 +148737,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144459,6 +148760,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144481,6 +148783,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144503,6 +148806,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144525,6 +148829,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144547,6 +148852,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144569,6 +148875,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144591,6 +148898,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144613,6 +148921,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144635,6 +148944,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144657,6 +148967,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144679,6 +148990,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144701,6 +149013,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144723,6 +149036,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144745,6 +149059,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144767,6 +149082,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144789,6 +149105,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144811,6 +149128,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144833,6 +149151,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144855,6 +149174,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144877,6 +149197,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144899,6 +149220,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144921,6 +149243,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144943,6 +149266,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144965,6 +149289,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -144987,6 +149312,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145009,6 +149335,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145031,6 +149358,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145053,6 +149381,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145075,6 +149404,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145097,6 +149427,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145119,6 +149450,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145141,6 +149473,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145163,6 +149496,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145185,6 +149519,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145207,6 +149542,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145229,6 +149565,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145251,6 +149588,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145273,6 +149611,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145295,6 +149634,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145317,6 +149657,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145339,6 +149680,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145361,6 +149703,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145383,6 +149726,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145405,6 +149749,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145427,6 +149772,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145449,6 +149795,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145471,6 +149818,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145493,6 +149841,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145515,6 +149864,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145537,6 +149887,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145559,6 +149910,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145581,6 +149933,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145603,6 +149956,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145625,6 +149979,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145647,6 +150002,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145669,6 +150025,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145691,6 +150048,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145713,6 +150071,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145735,6 +150094,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145757,6 +150117,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145779,6 +150140,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145801,6 +150163,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145823,6 +150186,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145845,6 +150209,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145867,6 +150232,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145889,6 +150255,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145911,6 +150278,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145933,6 +150301,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145955,6 +150324,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145977,6 +150347,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -145999,6 +150370,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146021,6 +150393,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146043,6 +150416,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146065,6 +150439,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146087,6 +150462,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146109,6 +150485,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146131,6 +150508,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146153,6 +150531,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146175,6 +150554,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146197,6 +150577,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146219,6 +150600,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146241,6 +150623,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146263,6 +150646,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146285,6 +150669,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146307,6 +150692,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146329,6 +150715,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146351,6 +150738,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146373,6 +150761,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146395,6 +150784,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146417,6 +150807,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146439,6 +150830,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146461,6 +150853,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146483,6 +150876,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146505,6 +150899,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146527,6 +150922,7 @@ "language": "c", "name": "server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146549,6 +150945,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146571,6 +150968,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146593,6 +150991,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146615,6 +151014,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146637,6 +151037,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146659,6 +151060,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146681,6 +151083,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146703,6 +151106,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146725,6 +151129,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146747,6 +151152,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146769,6 +151175,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146791,6 +151198,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146813,6 +151221,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146835,6 +151244,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146857,6 +151267,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146879,6 +151290,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146901,6 +151313,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146923,6 +151336,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146945,6 +151359,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146967,6 +151382,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -146989,6 +151405,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147011,6 +151428,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147033,6 +151451,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147055,6 +151474,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147077,6 +151497,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147099,6 +151520,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147121,6 +151543,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147143,6 +151566,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147165,6 +151589,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147187,6 +151612,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147209,6 +151635,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147231,6 +151658,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147253,6 +151681,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147275,6 +151704,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147297,6 +151727,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147319,6 +151750,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147341,6 +151773,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147363,6 +151796,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147385,6 +151819,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147407,6 +151842,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147429,6 +151865,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147451,6 +151888,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147473,6 +151911,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147495,6 +151934,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147517,6 +151957,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147539,6 +151980,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147561,6 +152003,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147583,6 +152026,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147605,6 +152049,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147627,6 +152072,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147649,6 +152095,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147671,6 +152118,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147693,6 +152141,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147715,6 +152164,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147737,6 +152187,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147759,6 +152210,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147781,6 +152233,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147803,6 +152256,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147825,6 +152279,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147847,6 +152302,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147869,6 +152325,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147891,6 +152348,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147913,6 +152371,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147935,6 +152394,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147957,6 +152417,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -147979,6 +152440,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148001,6 +152463,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148023,6 +152486,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148045,6 +152509,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148067,6 +152532,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148089,6 +152555,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148111,6 +152578,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148133,6 +152601,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148155,6 +152624,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148177,6 +152647,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148199,6 +152670,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148221,6 +152693,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148243,6 +152716,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148265,6 +152739,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148287,6 +152762,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148309,6 +152785,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148331,6 +152808,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148353,6 +152831,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148375,6 +152854,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148397,6 +152877,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148419,6 +152900,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148441,6 +152923,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148463,6 +152946,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148485,6 +152969,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148507,6 +152992,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148529,6 +153015,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148551,6 +153038,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148573,6 +153061,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148595,6 +153084,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148617,6 +153107,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148639,6 +153130,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148661,6 +153153,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148683,6 +153176,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148705,6 +153199,7 @@ "language": "c", "name": "ssl_server_fuzzer_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148727,6 +153222,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148749,6 +153245,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148771,6 +153268,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148793,6 +153291,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148815,6 +153314,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148837,6 +153337,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148859,6 +153360,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148881,6 +153383,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148903,6 +153406,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148925,6 +153429,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148947,6 +153452,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148969,6 +153475,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -148991,6 +153498,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149013,6 +153521,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149035,6 +153544,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149057,6 +153567,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149079,6 +153590,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149101,6 +153613,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149123,6 +153636,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149145,6 +153659,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149167,6 +153682,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149189,6 +153705,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149211,6 +153728,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149233,6 +153751,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149255,6 +153774,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149277,6 +153797,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149299,6 +153820,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149321,6 +153843,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149343,6 +153866,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149365,6 +153889,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149387,6 +153912,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149409,6 +153935,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149431,6 +153958,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149453,6 +153981,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149475,6 +154004,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149497,6 +154027,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149519,6 +154050,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149541,6 +154073,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149563,6 +154096,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149585,6 +154119,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149607,6 +154142,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149629,6 +154165,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149651,6 +154188,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149673,6 +154211,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149695,6 +154234,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149717,6 +154257,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149739,6 +154280,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149761,6 +154303,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149783,6 +154326,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149805,6 +154349,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149827,6 +154372,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149849,6 +154395,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149871,6 +154418,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149893,6 +154441,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149915,6 +154464,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149937,6 +154487,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149959,6 +154510,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -149981,6 +154533,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -150003,6 +154556,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -150025,6 +154579,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -150047,6 +154602,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -150069,6 +154625,7 @@ "language": "c", "name": "uri_fuzzer_test_one_entry", "platforms": [ + "mac", "linux" ], "uses_polling": false @@ -150091,6 +154648,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 89d2a9b320..3bac1199a7 100755 --- a/tools/run_tests/performance/bq_upload_result.py +++ b/tools/run_tests/performance/bq_upload_result.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. # @@ -30,6 +30,8 @@ # Uploads performance benchmark result file to bigquery. +from __future__ import print_function + import argparse import calendar import json @@ -70,7 +72,7 @@ def _upload_netperf_latency_csv_to_bigquery(dataset_id, table_id, result_file): _create_results_table(bq, dataset_id, table_id) if not _insert_result(bq, dataset_id, table_id, scenario_result, flatten=False): - print 'Error uploading result to bigquery.' + print('Error uploading result to bigquery.') sys.exit(1) @@ -82,7 +84,7 @@ def _upload_scenario_result_to_bigquery(dataset_id, table_id, result_file): _create_results_table(bq, dataset_id, table_id) if not _insert_result(bq, dataset_id, table_id, scenario_result): - print 'Error uploading result to bigquery.' + print('Error uploading result to bigquery.') sys.exit(1) @@ -179,4 +181,4 @@ if args.file_format == 'netperf_latency_csv': _upload_netperf_latency_csv_to_bigquery(dataset_id, table_id, args.file_to_upload) else: _upload_scenario_result_to_bigquery(dataset_id, table_id, args.file_to_upload) -print 'Successfully uploaded %s to BigQuery.\n' % args.file_to_upload +print('Successfully uploaded %s to BigQuery.\n' % args.file_to_upload) diff --git a/tools/run_tests/performance/scenario_config.py b/tools/run_tests/performance/scenario_config.py index 830b8c0849..1d91b61ba4 100644 --- a/tools/run_tests/performance/scenario_config.py +++ b/tools/run_tests/performance/scenario_config.py @@ -275,15 +275,18 @@ class CXXLanguage: secure=secure, categories=smoketest_categories+[SCALABLE]) - yield _ping_pong_scenario( - 'cpp_protobuf_%s_%s_qps_unconstrained_%s_500kib_resource_quota' % (synchronicity, rpc_type, secstr), - rpc_type=rpc_type.upper(), - client_type='%s_CLIENT' % synchronicity.upper(), - server_type='%s_SERVER' % synchronicity.upper(), - unconstrained_client=synchronicity, - secure=secure, - categories=smoketest_categories+[SCALABLE], - resource_quota_size=500*1024) + # TODO(vjpai): Re-enable this test. It has a lot of timeouts + # and hasn't yet been conclusively identified as a test failure + # or race in the library + # yield _ping_pong_scenario( + # 'cpp_protobuf_%s_%s_qps_unconstrained_%s_500kib_resource_quota' % (synchronicity, rpc_type, secstr), + # rpc_type=rpc_type.upper(), + # client_type='%s_CLIENT' % synchronicity.upper(), + # server_type='%s_SERVER' % synchronicity.upper(), + # unconstrained_client=synchronicity, + # secure=secure, + # categories=smoketest_categories+[SCALABLE], + # resource_quota_size=500*1024) for channels in geometric_progression(1, 20000, math.sqrt(10)): for outstanding in geometric_progression(1, 200000, math.sqrt(10)): diff --git a/tools/run_tests/python_utils/antagonist.py b/tools/run_tests/python_utils/antagonist.py index 857addfb38..111839ccf9 100755 --- a/tools/run_tests/python_utils/antagonist.py +++ b/tools/run_tests/python_utils/antagonist.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2015, Google Inc. # All rights reserved. # diff --git a/tools/run_tests/python_utils/dockerjob.py b/tools/run_tests/python_utils/dockerjob.py index 0869c5cee9..709fc121a9 100755 --- a/tools/run_tests/python_utils/dockerjob.py +++ b/tools/run_tests/python_utils/dockerjob.py @@ -70,6 +70,23 @@ def docker_mapped_port(cid, port, timeout_seconds=15): (port, cid)) +def wait_for_healthy(cid, shortname, timeout_seconds): + """Wait timeout_seconds for the container to become healthy""" + started = time.time() + while time.time() - started < timeout_seconds: + try: + output = subprocess.check_output( + ['docker', 'inspect', '--format="{{.State.Health.Status}}"', cid], + stderr=_DEVNULL) + if output.strip('\n') == 'healthy': + return + except subprocess.CalledProcessError as e: + pass + time.sleep(1) + raise Exception('Timed out waiting for %s (%s) to pass health check' % + (shortname, cid)) + + def finish_jobs(jobs): """Kills given docker containers and waits for corresponding jobs to finish""" for job in jobs: @@ -113,6 +130,9 @@ class DockerJob: def mapped_port(self, port): return docker_mapped_port(self._container_name, port) + def wait_for_healthy(self, timeout_seconds): + wait_for_healthy(self._container_name, self._spec.shortname, timeout_seconds) + def kill(self, suppress_failure=False): """Sends kill signal to the container.""" if suppress_failure: diff --git a/tools/run_tests/python_utils/filter_pull_request_tests.py b/tools/run_tests/python_utils/filter_pull_request_tests.py index 3734f025d5..e013376295 100644 --- a/tools/run_tests/python_utils/filter_pull_request_tests.py +++ b/tools/run_tests/python_utils/filter_pull_request_tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2015, Google Inc. # All rights reserved. # @@ -30,7 +30,10 @@ """Filter out tests based on file differences compared to merge target branch""" +from __future__ import print_function + import re +import six from subprocess import check_output @@ -125,7 +128,7 @@ _WHITELIST_DICT = { } # Add all triggers to their respective test suites -for trigger, test_suites in _WHITELIST_DICT.iteritems(): +for trigger, test_suites in six.iteritems(_WHITELIST_DICT): for test_suite in test_suites: test_suite.add_trigger(trigger) diff --git a/tools/run_tests/python_utils/port_server.py b/tools/run_tests/python_utils/port_server.py index e9b3f7ff79..dbd32efc0e 100755 --- a/tools/run_tests/python_utils/port_server.py +++ b/tools/run_tests/python_utils/port_server.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2015, Google Inc. # All rights reserved. # diff --git a/tools/run_tests/python_utils/report_utils.py b/tools/run_tests/python_utils/report_utils.py index 9dad60408f..131772f55f 100644 --- a/tools/run_tests/python_utils/report_utils.py +++ b/tools/run_tests/python_utils/report_utils.py @@ -40,6 +40,7 @@ except (ImportError): import os import string import xml.etree.cElementTree as ET +import six def _filter_msg(msg, output_format): @@ -63,7 +64,7 @@ def render_junit_xml_report(resultset, xml_report, suite_package='grpc', root = ET.Element('testsuites') testsuite = ET.SubElement(root, 'testsuite', id='1', package=suite_package, name=suite_name) - for shortname, results in resultset.iteritems(): + for shortname, results in six.iteritems(resultset): for result in results: xml_test = ET.SubElement(testsuite, 'testcase', name=shortname) if result.elapsed_time: diff --git a/tools/run_tests/run_build_statistics.py b/tools/run_tests/run_build_statistics.py index 654cf95a38..dd11a45e78 100755 --- a/tools/run_tests/run_build_statistics.py +++ b/tools/run_tests/run_build_statistics.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. # @@ -30,6 +30,8 @@ """Tool to get build statistics from Jenkins and upload to BigQuery.""" +from __future__ import print_function + import argparse import jenkinsapi from jenkinsapi.custom_exceptions import JenkinsAPIException @@ -243,6 +245,6 @@ for build_name in _BUILDS.keys() if 'all' in args.builds else args.builds: rows = [big_query_utils.make_row(build_number, build_result)] if not big_query_utils.insert_rows(bq, _PROJECT_ID, _DATASET_ID, build_name, rows): - print '====> Error uploading result to bigquery.' + print('====> Error uploading result to bigquery.') sys.exit(1) diff --git a/tools/run_tests/run_interop_tests.py b/tools/run_tests/run_interop_tests.py index 161fa81956..ce4dfb863e 100755 --- a/tools/run_tests/run_interop_tests.py +++ b/tools/run_tests/run_interop_tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2015, Google Inc. # All rights reserved. # @@ -44,6 +44,7 @@ import sys import tempfile import time import uuid +import six import python_utils.dockerjob as dockerjob import python_utils.jobset as jobset @@ -633,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() @@ -681,30 +678,40 @@ def server_jobspec(language, docker_image, insecure=False, manual_cmd_log=None): 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=%s' % 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( @@ -885,13 +892,14 @@ if not args.use_docker and servers: 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 @@ -925,7 +933,7 @@ 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) @@ -935,6 +943,7 @@ client_manual_cmd_log = [] if args.manual_run else None # Start interop servers. server_jobs = {} server_addresses = {} +http2_badserver_ports = () try: for s in servers: lang = str(s) @@ -948,14 +957,15 @@ try: # 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), manual_cmd_log=server_manual_cmd_log) if not args.manual_run: - job = dockerjob.DockerJob(spec) - server_jobs[lang] = job + 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}') @@ -1040,20 +1050,26 @@ try: 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, + 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) @@ -1093,9 +1109,9 @@ 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): if not args.manual_run: print('Removing docker image %s' % image) dockerjob.remove_image(image) diff --git a/tools/run_tests/run_microbenchmark.py b/tools/run_tests/run_microbenchmark.py index 9471110968..6bedc54941 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. # @@ -209,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', ], diff --git a/tools/run_tests/run_performance_tests.py b/tools/run_tests/run_performance_tests.py index ee4102c591..35d20be5b7 100755 --- a/tools/run_tests/run_performance_tests.py +++ b/tools/run_tests/run_performance_tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. # @@ -46,6 +46,7 @@ import tempfile import time import traceback import uuid +import six import performance.scenario_config as scenario_config import python_utils.jobset as jobset @@ -502,8 +503,8 @@ args = argp.parse_args() languages = set(scenario_config.LANGUAGES[l] for l in itertools.chain.from_iterable( - scenario_config.LANGUAGES.iterkeys() if x == 'all' else [x] - for x in args.language)) + six.iterkeys(scenario_config.LANGUAGES) if x == 'all' + else [x] for x in args.language)) # Put together set of remote hosts where to run and build @@ -572,8 +573,8 @@ for scenario in scenarios: jobs.append(create_quit_jobspec(scenario.workers, remote_host=args.remote_driver_host)) scenario_failures, resultset = jobset.run(jobs, newline_on_success=True, maxjobs=1) total_scenario_failures += scenario_failures - merged_resultset = dict(itertools.chain(merged_resultset.iteritems(), - resultset.iteritems())) + merged_resultset = dict(itertools.chain(six.iteritems(merged_resultset), + six.iteritems(resultset))) finally: # Consider qps workers that need to be killed as failures qps_workers_killed += finish_qps_workers(scenario.workers) diff --git a/tools/run_tests/run_stress_tests.py b/tools/run_tests/run_stress_tests.py index a94a615b88..4eea02118e 100755 --- a/tools/run_tests/run_stress_tests.py +++ b/tools/run_tests/run_stress_tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2015, Google Inc. # All rights reserved. # @@ -43,6 +43,7 @@ import sys import tempfile import time import uuid +import six import python_utils.dockerjob as dockerjob import python_utils.jobset as jobset @@ -239,9 +240,8 @@ servers = set( for s in itertools.chain.from_iterable(_SERVERS if x == 'all' else [x] for x in args.server)) -languages = set(_LANGUAGES[l] - for l in itertools.chain.from_iterable(_LANGUAGES.iterkeys( - ) if x == 'all' else [x] for x in args.language)) +languages = set(_LANGUAGES[l] for l in itertools.chain.from_iterable( + six.iterkeys(_LANGUAGES) if x == 'all' else [x] for x in args.language)) docker_images = {} # languages for which to build docker images @@ -267,7 +267,7 @@ if build_jobs: jobset.message('FAILED', 'Failed to build interop docker images.', do_newline=True) - for image in docker_images.itervalues(): + for image in six.itervalues(docker_images): dockerjob.remove_image(image, skip_nonexistent=True) sys.exit(1) @@ -306,7 +306,7 @@ try: if not jobs: print('No jobs to run.') - for image in docker_images.itervalues(): + for image in six.itervalues(docker_images): dockerjob.remove_image(image, skip_nonexistent=True) sys.exit(1) @@ -324,8 +324,8 @@ finally: if not job.is_running(): print('Server "%s" has exited prematurely.' % server) - dockerjob.finish_jobs([j for j in server_jobs.itervalues()]) + dockerjob.finish_jobs([j for j in six.itervalues(server_jobs)]) - for image in docker_images.itervalues(): + for image in six.itervalues(docker_images): print('Removing docker image %s' % image) dockerjob.remove_image(image) diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py index 43b8f8184e..cba91a9a63 100755 --- a/tools/run_tests/run_tests.py +++ b/tools/run_tests/run_tests.py @@ -54,6 +54,7 @@ import traceback import time from six.moves import urllib import uuid +import six import python_utils.jobset as jobset import python_utils.report_utils as report_utils @@ -771,7 +772,7 @@ class CSharpLanguage(object): runtime_cmd = ['mono'] specs = [] - for assembly in tests_by_assembly.iterkeys(): + for assembly in six.iterkeys(tests_by_assembly): assembly_file = 'src/csharp/%s/%s/%s%s' % (assembly, assembly_subdir, assembly, diff --git a/tools/run_tests/run_tests_matrix.py b/tools/run_tests/run_tests_matrix.py index 9607526920..b9bf6e5037 100755 --- a/tools/run_tests/run_tests_matrix.py +++ b/tools/run_tests/run_tests_matrix.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2015, Google Inc. # All rights reserved. # @@ -30,6 +30,8 @@ """Run test matrix.""" +from __future__ import print_function + import argparse import multiprocessing import os @@ -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 diff --git a/tools/run_tests/sanity/check_sources_and_headers.py b/tools/run_tests/sanity/check_sources_and_headers.py index a86db02b80..f2e0bfeb3d 100755 --- a/tools/run_tests/sanity/check_sources_and_headers.py +++ b/tools/run_tests/sanity/check_sources_and_headers.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2015, Google Inc. # All rights reserved. # @@ -28,6 +28,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from __future__ import print_function + import json import os import re diff --git a/tools/run_tests/sanity/check_test_filtering.py b/tools/run_tests/sanity/check_test_filtering.py index 290a6e2ddf..ba03f11209 100755 --- a/tools/run_tests/sanity/check_test_filtering.py +++ b/tools/run_tests/sanity/check_test_filtering.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. @@ -62,7 +62,7 @@ class TestFilteringTest(unittest.TestCase): def _get_changed_files(foo): return changed_files filter_pull_request_tests._get_changed_files = _get_changed_files - print + print() filtered_jobs = filter_pull_request_tests.filter_tests(all_jobs, "test") # Make sure sanity tests aren't being filtered out diff --git a/tools/run_tests/sanity/check_version.py b/tools/run_tests/sanity/check_version.py index e62f390818..d247260dbb 100755 --- a/tools/run_tests/sanity/check_version.py +++ b/tools/run_tests/sanity/check_version.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. @@ -29,6 +29,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from __future__ import print_function + import sys import yaml import os @@ -48,13 +50,13 @@ try: 'git rev-parse --abbrev-ref HEAD', shell=True) except: - print 'WARNING: not a git repository' + print('WARNING: not a git repository') branch_name = None if branch_name is not None: m = re.match(r'^release-([0-9]+)_([0-9]+)$', branch_name) if m: - print 'RELEASE branch' + print('RELEASE branch') # version number should align with the branched version check_version = lambda version: ( version.major == int(m.group(1)) and @@ -78,7 +80,7 @@ settings = build_yaml['settings'] top_version = Version(settings['version']) if not check_version(top_version): errors += 1 - print warning % ('version', top_version) + print(warning % ('version', top_version)) for tag, value in settings.iteritems(): if re.match(r'^[a-z]+_version$', tag): @@ -86,12 +88,14 @@ for tag, value in settings.iteritems(): if tag != 'core_version': if value.major != top_version.major: errors += 1 - print 'major version mismatch on %s: %d vs %d' % (tag, value.major, top_version.major) + print('major version mismatch on %s: %d vs %d' % (tag, value.major, + top_version.major)) if value.minor != top_version.minor: errors += 1 - print 'minor version mismatch on %s: %d vs %d' % (tag, value.minor, top_version.minor) + print('minor version mismatch on %s: %d vs %d' % (tag, value.minor, + top_version.minor)) if not check_version(value): errors += 1 - print warning % (tag, value) + print(warning % (tag, value)) sys.exit(errors) diff --git a/tools/run_tests/sanity/core_banned_functions.py b/tools/run_tests/sanity/core_banned_functions.py index 6d9be2e5d4..c3c3cbec76 100755 --- a/tools/run_tests/sanity/core_banned_functions.py +++ b/tools/run_tests/sanity/core_banned_functions.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. @@ -29,6 +29,8 @@ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +from __future__ import print_function + import os import sys @@ -60,7 +62,7 @@ for root, dirs, files in os.walk('src/core'): for banned, exceptions in BANNED_EXCEPT.items(): if path in exceptions: continue if banned in text: - print 'Illegal use of "%s" in %s' % (banned, path) + print('Illegal use of "%s" in %s' % (banned, path)) errors += 1 assert errors == 0 diff --git a/tools/run_tests/start_port_server.py b/tools/run_tests/start_port_server.py index e33ac12bd3..bfd72222b6 100755 --- a/tools/run_tests/start_port_server.py +++ b/tools/run_tests/start_port_server.py @@ -39,8 +39,10 @@ The path to this file is called out in test/core/util/port.c, and printed as an error message to users. """ +from __future__ import print_function + import python_utils.start_port_server as start_port_server start_port_server.start_port_server() -print "Port server started successfully" +print("Port server started successfully") diff --git a/tools/run_tests/stress_test/print_summary.py b/tools/run_tests/stress_test/print_summary.py index cb1a33961e..6f4ada2f4f 100755 --- a/tools/run_tests/stress_test/print_summary.py +++ b/tools/run_tests/stress_test/print_summary.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. # diff --git a/tools/run_tests/stress_test/run_on_gke.py b/tools/run_tests/stress_test/run_on_gke.py index e2be76e245..b190ebde7a 100755 --- a/tools/run_tests/stress_test/run_on_gke.py +++ b/tools/run_tests/stress_test/run_on_gke.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2015-2016, Google Inc. # All rights reserved. # @@ -27,6 +27,9 @@ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +from __future__ import print_function + import argparse import datetime import json @@ -124,23 +127,24 @@ class DockerImage: return 'gcr.io/%s/%s' % (project_id, image_name) def build_image(self): - print 'Building docker image: %s (tag: %s)' % (self.image_name, - self.tag_name) + print('Building docker image: %s (tag: %s)' % (self.image_name, + self.tag_name)) os.environ['INTEROP_IMAGE'] = self.image_name os.environ['INTEROP_IMAGE_REPOSITORY_TAG'] = self.tag_name os.environ['BASE_NAME'] = self.dockerfile_dir os.environ['BUILD_TYPE'] = self.build_type - print 'DEBUG: path: ', self.build_script_path + print('DEBUG: path: ', self.build_script_path) if subprocess.call(args=[self.build_script_path]) != 0: - print 'Error in building the Docker image' + print('Error in building the Docker image') return False return True def push_to_gke_registry(self): cmd = ['gcloud', 'docker', 'push', self.tag_name] - print 'Pushing %s to the GKE registry..' % self.tag_name + print('Pushing %s to the GKE registry..' % self.tag_name) if subprocess.call(args=cmd) != 0: - print 'Error in pushing the image %s to the GKE registry' % self.tag_name + print('Error in pushing the image %s to the GKE registry' % + self.tag_name) return False return True @@ -199,11 +203,11 @@ class Gke: cmd = ['kubectl', 'proxy', '--port=%d' % port] self.p = subprocess.Popen(args=cmd) time.sleep(2) - print '\nStarted kubernetes proxy on port: %d' % port + print('\nStarted kubernetes proxy on port: %d' % port) def __del__(self): if self.p is not None: - print 'Shutting down Kubernetes proxy..' + print('Shutting down Kubernetes proxy..') self.p.kill() def __init__(self, project_id, run_id, dataset_id, summary_table_id, @@ -253,7 +257,7 @@ class Gke: for pod_name in server_pod_spec.pod_names(): server_env['POD_NAME'] = pod_name - print 'Creating server: %s' % pod_name + print('Creating server: %s' % pod_name) is_success = kubernetes_api.create_pod_and_service( 'localhost', self.kubernetes_port, @@ -267,11 +271,11 @@ class Gke: True # Headless = True for server to that GKE creates a DNS record for pod_name ) if not is_success: - print 'Error in launching server: %s' % pod_name + print('Error in launching server: %s' % pod_name) break if is_success: - print 'Successfully created server(s)' + print('Successfully created server(s)') return is_success @@ -301,7 +305,7 @@ class Gke: for pod_name in client_pod_spec.pod_names(): client_env['POD_NAME'] = pod_name - print 'Creating client: %s' % pod_name + print('Creating client: %s' % pod_name) is_success = kubernetes_api.create_pod_and_service( 'localhost', self.kubernetes_port, @@ -316,18 +320,18 @@ class Gke: ) if not is_success: - print 'Error in launching client %s' % pod_name + print('Error in launching client %s' % pod_name) break if is_success: - print 'Successfully created all client(s)' + print('Successfully created all client(s)') return is_success def _delete_pods(self, pod_name_list): is_success = True for pod_name in pod_name_list: - print 'Deleting %s' % pod_name + print('Deleting %s' % pod_name) is_success = kubernetes_api.delete_pod_and_service( 'localhost', self.kubernetes_port, @@ -335,11 +339,11 @@ class Gke: pod_name) if not is_success: - print 'Error in deleting pod %s' % pod_name + print('Error in deleting pod %s' % pod_name) break if is_success: - print 'Successfully deleted all pods' + print('Successfully deleted all pods') return is_success @@ -353,7 +357,7 @@ class Gke: class Config: def __init__(self, config_filename, gcp_project_id): - print 'Loading configuration...' + print('Loading configuration...') config_dict = self._load_config(config_filename) self.global_settings = self._parse_global_settings(config_dict, @@ -367,7 +371,7 @@ class Config: self.client_pod_specs_dict = self._parse_client_pod_specs( config_dict, self.docker_images_dict, self.client_templates_dict, self.server_pod_specs_dict) - print 'Loaded Configuaration.' + print('Loaded Configuaration.') def _parse_global_settings(self, config_dict, gcp_project_id): global_settings_dict = config_dict['globalSettings'] @@ -540,8 +544,8 @@ def run_tests(config): # run id. This is useful in debugging when looking at records in Biq query) run_id = datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S') dataset_id = '%s_%s' % (config.global_settings.dataset_id_prefix, run_id) - print 'Run id:', run_id - print 'Dataset id:', dataset_id + print('Run id:', run_id) + print('Dataset id:', dataset_id) bq_helper = BigQueryHelper(run_id, '', '', config.global_settings.gcp_project_id, dataset_id, @@ -557,7 +561,7 @@ def run_tests(config): is_success = True try: - print 'Launching servers..' + print('Launching servers..') for name, server_pod_spec in config.server_pod_specs_dict.iteritems(): if not gke.launch_servers(server_pod_spec): is_success = False # is_success is checked in the 'finally' block @@ -579,11 +583,12 @@ def run_tests(config): start_time = datetime.datetime.now() end_time = start_time + datetime.timedelta( seconds=config.global_settings.test_duration_secs) - print 'Running the test until %s' % end_time.isoformat() + print('Running the test until %s' % end_time.isoformat()) while True: if datetime.datetime.now() > end_time: - print 'Test was run for %d seconds' % config.global_settings.test_duration_secs + print('Test was run for %d seconds' % + config.global_settings.test_duration_secs) break # Check if either stress server or clients have failed (btw, the bq_helper @@ -591,11 +596,12 @@ def run_tests(config): # have a failure status) if bq_helper.check_if_any_tests_failed(): is_success = False - print 'Some tests failed.' + print('Some tests failed.') break # Don't 'return' here. We still want to call bq_helper to print qps/summary tables # Tests running fine. Wait until next poll time to check the status - print 'Sleeping for %d seconds..' % config.global_settings.test_poll_interval_secs + print('Sleeping for %d seconds..' % + config.global_settings.test_poll_interval_secs) time.sleep(config.global_settings.test_poll_interval_secs) # Print BiqQuery tables diff --git a/tools/run_tests/task_runner.py b/tools/run_tests/task_runner.py index fdc4668222..0ec7efbbee 100755 --- a/tools/run_tests/task_runner.py +++ b/tools/run_tests/task_runner.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.7 +#!/usr/bin/env python # Copyright 2016, Google Inc. # All rights reserved. # diff --git a/tools/tsan_suppressions.txt b/tools/tsan_suppressions.txt index 765fa098f9..e0c7907228 100644 --- a/tools/tsan_suppressions.txt +++ b/tools/tsan_suppressions.txt @@ -6,6 +6,8 @@ race:cleanse_ctr race:ssleay_rand_add race:ssleay_rand_bytes race:__sleep_for -# protobuf has an idempotent write race in ByteSize +# protobuf has an idempotent write race in ByteSize/GetCachedSize # https://github.com/google/protobuf/issues/2169 race:ByteSize +race:ByteSizeLong +race:GetCachedSize diff --git a/tools/ubsan_suppressions.txt b/tools/ubsan_suppressions.txt new file mode 100644 index 0000000000..9869f98a22 --- /dev/null +++ b/tools/ubsan_suppressions.txt @@ -0,0 +1,7 @@ +# boringssl stuff +nonnull-attribute:bn_wexpand +nonnull-attribute:CBB_add_bytes +nonnull-attribute:rsa_blinding_get +nonnull-attribute:ssl_copy_key_material +alignment:CRYPTO_cbc128_encrypt + diff --git a/vsprojects/buildtests_c.sln b/vsprojects/buildtests_c.sln index daafd3f350..c8fcacf75b 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" @@ -1386,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" @@ -1708,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 @@ -3724,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 44c21ddeb3..32dedee55d 100644 --- a/vsprojects/vcxproj/gpr/gpr.vcxproj +++ b/vsprojects/vcxproj/gpr/gpr.vcxproj @@ -188,6 +188,7 @@ </ItemGroup> <ItemGroup> <ClInclude Include="$(SolutionDir)\..\src\core\lib\profiling\timers.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\arena.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\backoff.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\block_annotate.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\env.h" /> @@ -208,6 +209,10 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\alloc.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\arena.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\atm.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\avl.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\backoff.c"> diff --git a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters index a5924a624a..94699c8ff8 100644 --- a/vsprojects/vcxproj/gpr/gpr.vcxproj.filters +++ b/vsprojects/vcxproj/gpr/gpr.vcxproj.filters @@ -10,6 +10,12 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\alloc.c"> <Filter>src\core\lib\support</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\arena.c"> + <Filter>src\core\lib\support</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\atm.c"> + <Filter>src\core\lib\support</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\support\avl.c"> <Filter>src\core\lib\support</Filter> </ClCompile> @@ -254,6 +260,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\profiling\timers.h"> <Filter>src\core\lib\profiling</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\arena.h"> + <Filter>src\core\lib\support</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\support\backoff.h"> <Filter>src\core\lib\support</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj index fde60be3e2..afe72746e9 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj @@ -357,6 +357,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" /> @@ -456,7 +457,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h" /> @@ -466,6 +466,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h" /> @@ -618,6 +619,12 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c"> @@ -850,14 +857,10 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c"> @@ -876,6 +879,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c"> diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters index 8edbbc22be..a7d32afbe1 100644 --- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters +++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters @@ -181,6 +181,15 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -529,18 +538,12 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c"> - <Filter>src\core\ext\client_channel</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c"> - <Filter>src\core\ext\client_channel</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> @@ -568,6 +571,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.c"> + <Filter>src\core\ext\client_channel</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> @@ -944,6 +950,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> @@ -1241,9 +1250,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h"> - <Filter>src\core\ext\client_channel</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> @@ -1271,6 +1277,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.h"> + <Filter>src\core\ext\client_channel</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj index e7c9fb71f3..62969e31ac 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj @@ -252,6 +252,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" /> @@ -461,6 +462,12 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c"> diff --git a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters index 3d36948aae..30088101f5 100644 --- a/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_test_util/grpc_test_util.vcxproj.filters @@ -238,6 +238,15 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -728,6 +737,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj index 22f4740b8f..46069134a1 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj @@ -347,6 +347,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_client_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_windows.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\time_averaged_stats.h" /> @@ -422,7 +423,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.h" /> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_registry.h" /> @@ -432,6 +432,7 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_factory.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h" /> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.h" /> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\uri_parser.h" /> @@ -585,6 +586,12 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c"> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_windows.c"> @@ -767,14 +774,10 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.c"> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c"> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy_factory.c"> @@ -793,6 +796,8 @@ </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c"> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.c"> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c"> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel_index.c"> diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters index 5021cb47d8..d658f4d574 100644 --- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters +++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters @@ -184,6 +184,15 @@ <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_posix.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_common.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_ifaddrs.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix_noifaddrs.c"> + <Filter>src\core\lib\iomgr</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_uv.c"> <Filter>src\core\lib\iomgr</Filter> </ClCompile> @@ -457,18 +466,12 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\connector.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\default_initial_connect_string.c"> - <Filter>src\core\ext\client_channel</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_connect_handshaker.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> - <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.c"> - <Filter>src\core\ext\client_channel</Filter> - </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> @@ -496,6 +499,9 @@ <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> + <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.c"> + <Filter>src\core\ext\client_channel</Filter> + </ClCompile> <ClCompile Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.c"> <Filter>src\core\ext\client_channel</Filter> </ClCompile> @@ -854,6 +860,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_server_utils_posix.h"> + <Filter>src\core\lib\iomgr</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\lib\iomgr\tcp_uv.h"> <Filter>src\core\lib\iomgr</Filter> </ClInclude> @@ -1079,9 +1088,6 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\http_proxy.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> - <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\initial_connect_string.h"> - <Filter>src\core\ext\client_channel</Filter> - </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\lb_policy.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> @@ -1109,6 +1115,9 @@ <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\resolver_registry.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> + <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\retry_throttle.h"> + <Filter>src\core\ext\client_channel</Filter> + </ClInclude> <ClInclude Include="$(SolutionDir)\..\src\core\ext\client_channel\subchannel.h"> <Filter>src\core\ext\client_channel</Filter> </ClInclude> diff --git a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj index a438391f25..5ae2f8e483 100644 --- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj +++ b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj @@ -20,7 +20,7 @@ </ProjectConfiguration> </ItemGroup> <PropertyGroup Label="Globals"> - <ProjectGuid>{4A48E5A5-2E69-ED6D-063C-C297180A54D0}</ProjectGuid> + <ProjectGuid>{D85AC722-A88F-4280-F62E-672F571787FF}</ProjectGuid> <IgnoreWarnIntDirInTempDetected>true</IgnoreWarnIntDirInTempDetected> <IntDir>$(SolutionDir)IntDir\$(MSBuildProjectName)\</IntDir> </PropertyGroup> @@ -60,14 +60,14 @@ </ImportGroup> <PropertyGroup Label="UserMacros" /> <PropertyGroup Condition="'$(Configuration)'=='Debug'"> - <TargetName>set_initial_connect_string_test</TargetName> + <TargetName>arena_test</TargetName> <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib> <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)'=='Release'"> - <TargetName>set_initial_connect_string_test</TargetName> + <TargetName>arena_test</TargetName> <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib> <Configuration-grpc_dependencies_zlib>Release</Configuration-grpc_dependencies_zlib> <Linkage-grpc_dependencies_openssl>static</Linkage-grpc_dependencies_openssl> @@ -158,19 +158,10 @@ </ItemDefinitionGroup> <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\set_initial_connect_string_test.c"> + <ClCompile Include="$(SolutionDir)\..\test\core\support\arena_test.c"> </ClCompile> </ItemGroup> <ItemGroup> - <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\test_tcp_server\test_tcp_server.vcxproj"> - <Project>{E3110C46-A148-FF65-08FD-3324829BE7FE}</Project> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj"> - <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project> - </ProjectReference> - <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj"> - <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project> - </ProjectReference> <ProjectReference Include="$(SolutionDir)\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj"> <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project> </ProjectReference> diff --git a/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj.filters b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj.filters new file mode 100644 index 0000000000..c470f17527 --- /dev/null +++ b/vsprojects/vcxproj/test/arena_test/arena_test.vcxproj.filters @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClCompile Include="$(SolutionDir)\..\test\core\support\arena_test.c"> + <Filter>test\core\support</Filter> + </ClCompile> + </ItemGroup> + + <ItemGroup> + <Filter Include="test"> + <UniqueIdentifier>{130788b2-eacc-90df-a4f6-f5102a7d3370}</UniqueIdentifier> + </Filter> + <Filter Include="test\core"> + <UniqueIdentifier>{5c3e1753-6fdb-9476-f98c-a3a394fac54a}</UniqueIdentifier> + </Filter> + <Filter Include="test\core\support"> + <UniqueIdentifier>{1d3d2cc8-4e69-8b2e-6ceb-6569fcb19a86}</UniqueIdentifier> + </Filter> + </ItemGroup> +</Project> + diff --git a/vsprojects/vcxproj/test/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 4422a3e792..0000000000 --- a/vsprojects/vcxproj/test/set_initial_connect_string_test/set_initial_connect_string_test.vcxproj.filters +++ /dev/null @@ -1,21 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <ClCompile Include="$(SolutionDir)\..\test\core\client_channel\set_initial_connect_string_test.c"> - <Filter>test\core\client_channel</Filter> - </ClCompile> - </ItemGroup> - - <ItemGroup> - <Filter Include="test"> - <UniqueIdentifier>{413358e4-3165-f09d-071c-ee4f2ca0b826}</UniqueIdentifier> - </Filter> - <Filter Include="test\core"> - <UniqueIdentifier>{a554b5ef-0c80-ac03-1848-bccd947a06a6}</UniqueIdentifier> - </Filter> - <Filter Include="test\core\client_channel"> - <UniqueIdentifier>{4726253c-a562-0ace-2798-996807381208}</UniqueIdentifier> - </Filter> - </ItemGroup> -</Project> - |