# HG changeset patch # User Sebastien Jodogne # Date 1547553963 -3600 # Node ID df4f977c2f882228d0fdb186c3ddf17682248f4b # Parent 8f2bda0719f4b9242e69df916c360c55e4b8c778 trying to reproduce isse 32 in C++ diff -r 8f2bda0719f4 -r df4f977c2f88 Core/HttpClient.cpp --- a/Core/HttpClient.cpp Mon Jan 14 13:11:43 2019 +0100 +++ b/Core/HttpClient.cpp Tue Jan 15 13:06:03 2019 +0100 @@ -62,8 +62,8 @@ } else { - LOG(INFO) << "Error code " << static_cast(code) - << " in libcurl: " << curl_easy_strerror(code); + LOG(ERROR) << "Error code " << static_cast(code) + << " in libcurl: " << curl_easy_strerror(code); *status = 0; return code; } @@ -697,8 +697,8 @@ else { answerBody.clear(); - LOG(INFO) << "Error in HTTP request, received HTTP status " << status - << " (" << EnumerationToString(lastStatus_) << ")"; + LOG(ERROR) << "Error in HTTP request, received HTTP status " << status + << " (" << EnumerationToString(lastStatus_) << ")"; } return success; diff -r 8f2bda0719f4 -r df4f977c2f88 Resources/Testing/Issue32/Cpp/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Testing/Issue32/Cpp/CMakeLists.txt Tue Jan 15 13:06:03 2019 +0100 @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 2.8) + +project(Orthanc) + +set(ORTHANC_ROOT ${CMAKE_SOURCE_DIR}/../../../../Resources/CMake) + +include(${ORTHANC_ROOT}/OrthancFrameworkParameters.cmake) +set(ENABLE_WEB_CLIENT ON) +include(${ORTHANC_ROOT}/OrthancFrameworkConfiguration.cmake) + +add_definitions( + -DORTHANC_ENABLE_LOGGING_PLUGIN=OFF + ) + +include_directories(${ORTHANC_ROOT}) + +add_executable(Sample + main.cpp + ${ORTHANC_CORE_SOURCES} + ) \ No newline at end of file diff -r 8f2bda0719f4 -r df4f977c2f88 Resources/Testing/Issue32/Cpp/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Testing/Issue32/Cpp/main.cpp Tue Jan 15 13:06:03 2019 +0100 @@ -0,0 +1,86 @@ +#include +#include +#include +#include + +#include +#include + +static void Worker(bool *done) +{ + LOG(WARNING) << "One thread has started"; + + Orthanc::HttpClient client; + //client.SetUrl("http://localhost:8042/studies"); + //client.SetUrl("http://localhost:8042/tools/default-encoding"); + client.SetUrl("http://localhost:8042/system"); + //client.SetUrl("http://localhost:8042/"); + //client.SetCredentials("orthanc", "orthanc"); + client.SetRedirectionFollowed(false); + + while (!(*done)) + { + try + { +#if 0 + Json::Value v; + if (!client.Apply(v) || + v.type() != Json::objectValue) + { + printf("ERROR\n"); + } +#else + std::string s; + if (!client.Apply(s) || + s.empty()) + { + printf("ERROR\n"); + } +#endif + } + catch (Orthanc::OrthancException& e) + { + printf("EXCEPTION: %s", e.What()); + } + } + + LOG(WARNING) << "One thread has stopped"; +} + +int main() +{ + Orthanc::Logging::Initialize(); + //Orthanc::Logging::EnableInfoLevel(true); + Orthanc::HttpClient::GlobalInitialize(); + + { + bool done = false; + + std::vector threads; + + for (size_t i = 0; i < 100; i++) + { + threads.push_back(new boost::thread(Worker, &done)); + } + + LOG(WARNING) << "STARTED"; + Orthanc::SystemToolbox::ServerBarrier(); + LOG(WARNING) << "STOPPING"; + + done = true; + + for (size_t i = 0; i < threads.size(); i++) + { + if (threads[i]->joinable()) + { + threads[i]->join(); + } + + delete threads[i]; + } + } + + Orthanc::HttpClient::GlobalFinalize(); + printf("OK\n"); + return 0; +}