changeset 7114:d850970fb101

added internal configuration option ORTHANC_ENABLE_THREADS
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 14 Aug 2026 11:08:48 +0200
parents 2f62c814aee2
children ae6345f0884d
files OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake OrthancFramework/SharedLibrary/OrthancFramework.h.in OrthancFramework/Sources/MultiThreading/Mutex.h OrthancServer/Resources/RunCppCheck-2.1.sh OrthancServer/Resources/RunCppCheck-2.17.0.sh OrthancServer/Resources/RunCppCheck-2.17.1.sh OrthancServer/Resources/RunCppCheck-2.20.0.sh
diffstat 8 files changed, 69 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- a/OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake	Fri Aug 14 11:06:16 2026 +0200
+++ b/OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake	Fri Aug 14 11:08:48 2026 +0200
@@ -181,6 +181,8 @@
   ${CMAKE_CURRENT_LIST_DIR}/../../Sources/HttpServer/StringMatcher.cpp
   ${CMAKE_CURRENT_LIST_DIR}/../../Sources/Logging.cpp
   ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MallocMemoryBuffer.cpp
+  ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MetricsRegistry.cpp
+  ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/CallableGroup.cpp
   ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/SequentialExecutorService.cpp
   ${CMAKE_CURRENT_LIST_DIR}/../../Sources/OrthancException.cpp
   ${CMAKE_CURRENT_LIST_DIR}/../../Sources/OrthancFramework.cpp
@@ -633,6 +635,44 @@
 endif()
 
 
+if (ORTHANC_ENABLE_THREADS)
+  list(APPEND ORTHANC_CORE_SOURCES_INTERNAL
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/Cache/MemoryStringCache.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/Cache/SharedArchive.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/BaseDataIdentifier.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceAnswer.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceMemoryBudget.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceReader.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceRequest.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceSequentialReader.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/StorageAreaDataSource.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/BlockingSharedMessageQueue.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/Internals/FutureState.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/Internals/ThreadPoolFuture.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/RunnableWorkersPool.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/Semaphore.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/SharedMessageQueue.cpp
+    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/ThreadPool.cpp
+    )
+
+  if (ENABLE_DCMTK)
+    list(APPEND ORTHANC_CORE_SOURCES_INTERNAL
+      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DicomDataSource.cpp
+      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DicomSequentialReader.cpp
+      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/TranscoderDataSource.cpp
+      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DicomParsing/IDicomTranscoder.cpp
+      )
+  endif()
+
+  if (ENABLE_MODULE_JOBS)
+    list(APPEND ORTHANC_CORE_SOURCES_INTERNAL
+      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/JobsEngine/JobsEngine.cpp
+      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/JobsEngine/JobsRegistry.cpp
+      )
+  endif()
+endif()
+
+
 if (ORTHANC_SANDBOXED)
   add_definitions(
     -DORTHANC_SANDBOXED=1
@@ -654,49 +694,21 @@
     )
 
   list(APPEND ORTHANC_CORE_SOURCES_INTERNAL
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/Cache/MemoryStringCache.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/Cache/SharedArchive.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/BaseDataIdentifier.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceAnswer.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceMemoryBudget.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceReader.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceRequest.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DataSourceSequentialReader.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/StorageAreaDataSource.cpp
     ${CMAKE_CURRENT_LIST_DIR}/../../Sources/FileBuffer.cpp
     ${CMAKE_CURRENT_LIST_DIR}/../../Sources/FileStorage/FilesystemStorage.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MetricsRegistry.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/BlockingSharedMessageQueue.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/CallableGroup.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/Internals/FutureState.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/Internals/ThreadPoolFuture.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/RunnableWorkersPool.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/Semaphore.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/SharedMessageQueue.cpp
-    ${CMAKE_CURRENT_LIST_DIR}/../../Sources/MultiThreading/ThreadPool.cpp
     ${CMAKE_CURRENT_LIST_DIR}/../../Sources/SharedLibrary.cpp
     ${CMAKE_CURRENT_LIST_DIR}/../../Sources/SystemToolbox.cpp
     ${CMAKE_CURRENT_LIST_DIR}/../../Sources/TemporaryFile.cpp
     )
-
-  if (ENABLE_DCMTK)
-    list(APPEND ORTHANC_CORE_SOURCES_INTERNAL
-      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DicomDataSource.cpp
-      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/DicomSequentialReader.cpp
-      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DataSource/TranscoderDataSource.cpp
-      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/DicomParsing/IDicomTranscoder.cpp
-      )
-  endif()
-
-  if (ENABLE_MODULE_JOBS)
-    list(APPEND ORTHANC_CORE_SOURCES_INTERNAL
-      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/JobsEngine/JobsEngine.cpp
-      ${CMAKE_CURRENT_LIST_DIR}/../../Sources/JobsEngine/JobsRegistry.cpp
-      )
-  endif()
 endif()
 
 
+if (ORTHANC_ENABLE_THREADS)
+  add_definitions(-DORTHANC_ENABLE_THREADS=1)
+else()
+  add_definitions(-DORTHANC_ENABLE_THREADS=0)
+endif()
+
 
 if (ORTHANC_ENABLE_LOGGING)
   add_definitions(-DORTHANC_ENABLE_LOGGING=1)
--- a/OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake	Fri Aug 14 11:06:16 2026 +0200
+++ b/OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake	Fri Aug 14 11:08:48 2026 +0200
@@ -144,7 +144,10 @@
 set(ENABLE_BOOST_PROGRAM_OPTIONS OFF CACHE BOOL "Enable support for the boost::program_options library")  # New in Orthanc 1.13.0
 
 set(ORTHANC_SANDBOXED OFF CACHE INTERNAL
-  "Whether Orthanc runs inside a sandboxed environment (such as Google NaCl or WebAssembly)")
+  "Whether Orthanc runs inside a sandboxed environment, notably without access to files (such as Google NaCl or WebAssembly)")
+
+set(ORTHANC_ENABLE_THREADS ON CACHE INTERNAL
+  "Whether support for threads is available (must be set to OFF for WebAssembly)")
 
 set(ORTHANC_BUILDING_FRAMEWORK_LIBRARY OFF CACHE INTERNAL
   "Whether we are in the process of building the Orthanc Framework shared library")
--- a/OrthancFramework/SharedLibrary/OrthancFramework.h.in	Fri Aug 14 11:06:16 2026 +0200
+++ b/OrthancFramework/SharedLibrary/OrthancFramework.h.in	Fri Aug 14 11:08:48 2026 +0200
@@ -73,6 +73,7 @@
 #cmakedefine01 ORTHANC_ENABLE_LOGGING
 #cmakedefine01 ORTHANC_ENABLE_LOGGING_STDIO
 #cmakedefine01 ORTHANC_ENABLE_MONGOOSE
+#cmakedefine01 ORTHANC_ENABLE_THREADS
 #cmakedefine01 ORTHANC_SANDBOXED
 #cmakedefine01 ORTHANC_STATIC_BOOST
 #cmakedefine01 ORTHANC_STATIC_JSONCPP
--- a/OrthancFramework/Sources/MultiThreading/Mutex.h	Fri Aug 14 11:06:16 2026 +0200
+++ b/OrthancFramework/Sources/MultiThreading/Mutex.h	Fri Aug 14 11:08:48 2026 +0200
@@ -26,9 +26,17 @@
 
 #include "../OrthancFramework.h"
 
+#if !defined(ORTHANC_ENABLE_THREADS)
+#  error The macro ORTHANC_ENABLE_THREADS must be defined
+#endif
+
+#if (ORTHANC_ENABLE_THREADS != 0) && (ORTHANC_ENABLE_THREADS != 1)
+#  error The macro ORTHANC_ENABLE_THREADS must set to 0 or 1
+#endif
+
 #include <boost/noncopyable.hpp>
 
-#if !defined(__EMSCRIPTEN__)
+#if ORTHANC_ENABLE_THREADS == 1
 #  include <boost/thread/mutex.hpp>
 #endif
 
@@ -36,7 +44,7 @@
 {
   // Wrapper class for compatibility with Emscripten
 
-#if defined(__EMSCRIPTEN__)
+#if ORTHANC_ENABLE_THREADS == 0
 
   class ORTHANC_PUBLIC Mutex : public boost::noncopyable
   {
@@ -54,7 +62,7 @@
     };
   };
 
-#else
+#elif ORTHANC_ENABLE_THREADS == 1
 
   class ORTHANC_PUBLIC Mutex : public boost::noncopyable
   {
@@ -79,5 +87,8 @@
       }
     };
   };
+
+#else
+#  error Internal error
 #endif
 }
--- a/OrthancServer/Resources/RunCppCheck-2.1.sh	Fri Aug 14 11:06:16 2026 +0200
+++ b/OrthancServer/Resources/RunCppCheck-2.1.sh	Fri Aug 14 11:08:48 2026 +0200
@@ -81,6 +81,7 @@
             -DORTHANC_ENABLE_PUGIXML=1 \
             -DORTHANC_ENABLE_SQLITE=1 \
             -DORTHANC_ENABLE_SSL=1 \
+            -DORTHANC_ENABLE_THREADS=1 \
             -DORTHANC_ENABLE_ZLIB=1 \
             -DORTHANC_SANDBOXED=0 \
             -DORTHANC_SQLITE_VERSION=3027001 \
--- a/OrthancServer/Resources/RunCppCheck-2.17.0.sh	Fri Aug 14 11:06:16 2026 +0200
+++ b/OrthancServer/Resources/RunCppCheck-2.17.0.sh	Fri Aug 14 11:08:48 2026 +0200
@@ -96,6 +96,7 @@
             -DORTHANC_ENABLE_PUGIXML=1 \
             -DORTHANC_ENABLE_SQLITE=1 \
             -DORTHANC_ENABLE_SSL=1 \
+            -DORTHANC_ENABLE_THREADS=1 \
             -DORTHANC_ENABLE_ZLIB=1 \
             -DORTHANC_SANDBOXED=0 \
             -DORTHANC_SQLITE_VERSION=3027001 \
--- a/OrthancServer/Resources/RunCppCheck-2.17.1.sh	Fri Aug 14 11:06:16 2026 +0200
+++ b/OrthancServer/Resources/RunCppCheck-2.17.1.sh	Fri Aug 14 11:08:48 2026 +0200
@@ -96,6 +96,7 @@
             -DORTHANC_ENABLE_PUGIXML=1 \
             -DORTHANC_ENABLE_SQLITE=1 \
             -DORTHANC_ENABLE_SSL=1 \
+            -DORTHANC_ENABLE_THREADS=1 \
             -DORTHANC_ENABLE_ZLIB=1 \
             -DORTHANC_USE_SYSTEM_MINIZIP=0 \
             -DORTHANC_SANDBOXED=0 \
--- a/OrthancServer/Resources/RunCppCheck-2.20.0.sh	Fri Aug 14 11:06:16 2026 +0200
+++ b/OrthancServer/Resources/RunCppCheck-2.20.0.sh	Fri Aug 14 11:08:48 2026 +0200
@@ -83,6 +83,7 @@
             -DORTHANC_ENABLE_PUGIXML=1 \
             -DORTHANC_ENABLE_SQLITE=1 \
             -DORTHANC_ENABLE_SSL=1 \
+            -DORTHANC_ENABLE_THREADS=1 \
             -DORTHANC_ENABLE_ZLIB=1 \
             -DORTHANC_SANDBOXED=0 \
             -DORTHANC_SQLITE_VERSION=3027001 \