changeset 3122:df4f977c2f88

trying to reproduce isse 32 in C++
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 15 Jan 2019 13:06:03 +0100
parents 8f2bda0719f4
children 58ea4ef84c92
files Core/HttpClient.cpp Resources/Testing/Issue32/Cpp/CMakeLists.txt Resources/Testing/Issue32/Cpp/main.cpp
diffstat 3 files changed, 110 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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<int>(code)
-                << " in libcurl: " << curl_easy_strerror(code);
+      LOG(ERROR) << "Error code " << static_cast<int>(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;
--- /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
--- /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 <Core/HttpClient.h>
+#include <Core/Logging.h>
+#include <Core/OrthancException.h>
+#include <Core/SystemToolbox.h>
+
+#include <iostream>
+#include <boost/thread.hpp>
+
+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<boost::thread*> 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;
+}