# HG changeset patch # User Sebastien Jodogne # Date 1786698528 -7200 # Node ID d850970fb101f74226a72040e74099b173623200 # Parent 2f62c814aee2b18008072a3b13a743c01ab181fa added internal configuration option ORTHANC_ENABLE_THREADS diff -r 2f62c814aee2 -r d850970fb101 OrthancFramework/Resources/CMake/OrthancFrameworkConfiguration.cmake --- 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) diff -r 2f62c814aee2 -r d850970fb101 OrthancFramework/Resources/CMake/OrthancFrameworkParameters.cmake --- 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") diff -r 2f62c814aee2 -r d850970fb101 OrthancFramework/SharedLibrary/OrthancFramework.h.in --- 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 diff -r 2f62c814aee2 -r d850970fb101 OrthancFramework/Sources/MultiThreading/Mutex.h --- 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 -#if !defined(__EMSCRIPTEN__) +#if ORTHANC_ENABLE_THREADS == 1 # include #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 } diff -r 2f62c814aee2 -r d850970fb101 OrthancServer/Resources/RunCppCheck-2.1.sh --- 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 \ diff -r 2f62c814aee2 -r d850970fb101 OrthancServer/Resources/RunCppCheck-2.17.0.sh --- 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 \ diff -r 2f62c814aee2 -r d850970fb101 OrthancServer/Resources/RunCppCheck-2.17.1.sh --- 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 \ diff -r 2f62c814aee2 -r d850970fb101 OrthancServer/Resources/RunCppCheck-2.20.0.sh --- 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 \