From 06d3c701e1e86e00fba9470728a122330071d545 Mon Sep 17 00:00:00 2001 From: eidheim Date: Fri, 7 Jul 2017 17:36:27 +0200 Subject: [PATCH] Fixed io_test (out of stack?), also fixed concurrent sync requests count on request error. --- client_http.hpp | 24 ++++++++++++++++-------- status_code.hpp | 4 ++-- tests/io_test.cpp | 6 ++---- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/client_http.hpp b/client_http.hpp index 653bda1..e14d3e5 100644 --- a/client_http.hpp +++ b/client_http.hpp @@ -186,10 +186,10 @@ namespace SimpleWeb { std::shared_ptr request(const std::string &method, const std::string &path = std::string("/"), string_view content = "", const CaseInsensitiveMultimap &header = CaseInsensitiveMultimap()) { std::shared_ptr response; - request(method, path, content, header, [&response](std::shared_ptr response_, const error_code &ec) { + error_code ec; + request(method, path, content, header, [&response, &ec](std::shared_ptr response_, const error_code &ec_) { response = response_; - if(ec) - throw system_error(ec); + ec = ec_; }); { @@ -199,10 +199,14 @@ namespace SimpleWeb { io_service->run(); { std::unique_lock lock(concurrent_synchronous_requests_mutex); - if(--concurrent_synchronous_requests == 0) + --concurrent_synchronous_requests; + if(!concurrent_synchronous_requests) io_service->reset(); } + if(ec) + throw system_error(ec); + return response; } @@ -212,10 +216,10 @@ namespace SimpleWeb { std::shared_ptr request(const std::string &method, const std::string &path, std::istream &content, const CaseInsensitiveMultimap &header = CaseInsensitiveMultimap()) { std::shared_ptr response; - request(method, path, content, header, [&response](std::shared_ptr response_, const error_code &ec) { + error_code ec; + request(method, path, content, header, [&response, &ec](std::shared_ptr response_, const error_code &ec_) { response = response_; - if(ec) - throw system_error(ec); + ec = ec_; }); { @@ -225,10 +229,14 @@ namespace SimpleWeb { io_service->run(); { std::unique_lock lock(concurrent_synchronous_requests_mutex); - if(--concurrent_synchronous_requests == 0) + --concurrent_synchronous_requests; + if(!concurrent_synchronous_requests) io_service->reset(); } + if(ec) + throw system_error(ec); + return response; } diff --git a/status_code.hpp b/status_code.hpp index 3c3f833..2c699f6 100644 --- a/status_code.hpp +++ b/status_code.hpp @@ -70,8 +70,8 @@ namespace SimpleWeb { server_error_network_authentication_required }; - inline const static std::vector> &status_codes() { - static std::vector> status_codes = { + const static std::vector> &status_codes() { + const static std::vector> status_codes = { {StatusCode::unknown, ""}, {StatusCode::information_continue, "100 Continue"}, {StatusCode::information_switching_protocols, "101 Switching Protocols"}, diff --git a/tests/io_test.cpp b/tests/io_test.cpp index f4ba414..b4b4248 100644 --- a/tests/io_test.cpp +++ b/tests/io_test.cpp @@ -241,7 +241,6 @@ int main() { vector calls(100, 0); vector threads; for(size_t c = 0; c < 100; ++c) { - calls[c] = 0; threads.emplace_back([c, &client, &calls] { client.request("GET", "/match/123", [c, &calls](shared_ptr response, const SimpleWeb::error_code &ec) { assert(!ec); @@ -267,10 +266,9 @@ int main() { { HttpClient client("localhost:8080"); { - vector calls(100, 0); + vector calls(2, 0); vector threads; - for(size_t c = 0; c < 100; ++c) { - calls[c] = 0; + for(size_t c = 0; c < 2; ++c) { threads.emplace_back([c, &client, &calls] { try { auto r = client.request("GET", "/match/123");