Mercurial > hg > orthanc
changeset 6007:5d6ad702fa67
recovered compatibility with Windows XP
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 18 Feb 2025 17:42:00 +0100 |
parents | 318f3234e9ed |
children | 5547f4c01253 |
files | NEWS OrthancFramework/Resources/Patches/dcmtk-3.6.9.patch |
diffstat | 2 files changed, 117 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Tue Feb 18 17:35:27 2025 +0100 +++ b/NEWS Tue Feb 18 17:42:00 2025 +0100 @@ -13,10 +13,11 @@ Maintenance ----------- -* In the "ExtendedFind" mode, optimized "tools/find" when "StorageAccessMode" is - set to "Never". +* In the "ExtendedFind" mode, optimized "tools/find" when "StorageAccessMode" is set to "Never". * Fixed interpretation of returnUnsupportedImage in /preview route. -* GET /series/../study now also contain LastUpdate field (https://discourse.orthanc-server.org/t/lastupdate-coherency/5524) +* GET /series/../study now also contain LastUpdate field: + https://discourse.orthanc-server.org/t/lastupdate-coherency/5524 +* Recovered compatibility with Windows XP that was broken because of DCMTK 3.6.9 Version 1.12.6 (2025-01-22)
--- a/OrthancFramework/Resources/Patches/dcmtk-3.6.9.patch Tue Feb 18 17:35:27 2025 +0100 +++ b/OrthancFramework/Resources/Patches/dcmtk-3.6.9.patch Tue Feb 18 17:42:00 2025 +0100 @@ -1,6 +1,6 @@ diff -urEb dcmtk-3.6.9.orig/CMake/GenerateDCMTKConfigure.cmake dcmtk-3.6.9/CMake/GenerateDCMTKConfigure.cmake ---- dcmtk-3.6.9.orig/CMake/GenerateDCMTKConfigure.cmake 2025-01-21 15:53:12.632715225 +0100 -+++ dcmtk-3.6.9/CMake/GenerateDCMTKConfigure.cmake 2025-01-21 15:53:27.614627545 +0100 +--- dcmtk-3.6.9.orig/CMake/GenerateDCMTKConfigure.cmake 2025-02-18 17:20:55.792247658 +0100 ++++ dcmtk-3.6.9/CMake/GenerateDCMTKConfigure.cmake 2025-02-18 17:36:55.955317099 +0100 @@ -227,12 +227,15 @@ # Check the sizes of various types @@ -18,8 +18,8 @@ # Check for include files, libraries, and functions include("${DCMTK_CMAKE_INCLUDE}CMake/dcmtkTryCompile.cmake") diff -urEb dcmtk-3.6.9.orig/dcmdata/include/dcmtk/dcmdata/dcdict.h dcmtk-3.6.9/dcmdata/include/dcmtk/dcmdata/dcdict.h ---- dcmtk-3.6.9.orig/dcmdata/include/dcmtk/dcmdata/dcdict.h 2025-01-21 15:53:12.622715283 +0100 -+++ dcmtk-3.6.9/dcmdata/include/dcmtk/dcmdata/dcdict.h 2025-01-21 15:53:27.614627545 +0100 +--- dcmtk-3.6.9.orig/dcmdata/include/dcmtk/dcmdata/dcdict.h 2025-02-18 17:20:55.783247713 +0100 ++++ dcmtk-3.6.9/dcmdata/include/dcmtk/dcmdata/dcdict.h 2025-02-18 17:36:55.955317099 +0100 @@ -163,6 +163,12 @@ /// returns an iterator to the end of the repeating groups data dictionary DcmDictEntryListIterator repeatingEnd() { return repDict.end(); } @@ -34,8 +34,8 @@ /** private undefined assignment operator diff -urEb dcmtk-3.6.9.orig/dcmdata/libsrc/dcdict.cc dcmtk-3.6.9/dcmdata/libsrc/dcdict.cc ---- dcmtk-3.6.9.orig/dcmdata/libsrc/dcdict.cc 2025-01-21 15:53:12.625715265 +0100 -+++ dcmtk-3.6.9/dcmdata/libsrc/dcdict.cc 2025-01-21 15:53:27.615627539 +0100 +--- dcmtk-3.6.9.orig/dcmdata/libsrc/dcdict.cc 2025-02-18 17:20:55.785247700 +0100 ++++ dcmtk-3.6.9/dcmdata/libsrc/dcdict.cc 2025-02-18 17:36:55.956317093 +0100 @@ -904,3 +904,5 @@ wrlock().clear(); wrunlock(); @@ -43,8 +43,8 @@ + +#include "dcdict_orthanc.cc" diff -urEb dcmtk-3.6.9.orig/dcmdata/libsrc/dcpxitem.cc dcmtk-3.6.9/dcmdata/libsrc/dcpxitem.cc ---- dcmtk-3.6.9.orig/dcmdata/libsrc/dcpxitem.cc 2025-01-21 15:53:12.623715277 +0100 -+++ dcmtk-3.6.9/dcmdata/libsrc/dcpxitem.cc 2025-01-21 15:53:27.615627539 +0100 +--- dcmtk-3.6.9.orig/dcmdata/libsrc/dcpxitem.cc 2025-02-18 17:20:55.784247707 +0100 ++++ dcmtk-3.6.9/dcmdata/libsrc/dcpxitem.cc 2025-02-18 17:36:55.956317093 +0100 @@ -31,6 +31,8 @@ #include "dcmtk/dcmdata/dcostrma.h" /* for class DcmOutputStream */ #include "dcmtk/dcmdata/dcwcache.h" /* for class DcmWriteCache */ @@ -55,8 +55,8 @@ // ******************************** diff -urEb dcmtk-3.6.9.orig/dcmnet/libsrc/scu.cc dcmtk-3.6.9/dcmnet/libsrc/scu.cc ---- dcmtk-3.6.9.orig/dcmnet/libsrc/scu.cc 2025-01-21 15:53:12.655715091 +0100 -+++ dcmtk-3.6.9/dcmnet/libsrc/scu.cc 2025-01-21 15:53:27.616627533 +0100 +--- dcmtk-3.6.9.orig/dcmnet/libsrc/scu.cc 2025-02-18 17:20:55.811247541 +0100 ++++ dcmtk-3.6.9/dcmnet/libsrc/scu.cc 2025-02-18 17:36:55.957317086 +0100 @@ -19,6 +19,11 @@ * */ @@ -70,8 +70,8 @@ #include "dcmtk/dcmdata/dcostrmf.h" /* for class DcmOutputFileStream */ diff -urEb dcmtk-3.6.9.orig/oficonv/include/dcmtk/oficonv/iconv.h dcmtk-3.6.9/oficonv/include/dcmtk/oficonv/iconv.h ---- dcmtk-3.6.9.orig/oficonv/include/dcmtk/oficonv/iconv.h 2025-01-21 15:53:12.637715196 +0100 -+++ dcmtk-3.6.9/oficonv/include/dcmtk/oficonv/iconv.h 2025-01-21 15:53:27.617627527 +0100 +--- dcmtk-3.6.9.orig/oficonv/include/dcmtk/oficonv/iconv.h 2025-02-18 17:20:55.796247633 +0100 ++++ dcmtk-3.6.9/oficonv/include/dcmtk/oficonv/iconv.h 2025-02-18 17:36:55.957317086 +0100 @@ -55,7 +55,12 @@ #endif @@ -85,21 +85,109 @@ #ifndef OFICONV_CITRUS_WC_T_DEFINED #define OFICONV_CITRUS_WC_T_DEFINED +diff -urEb dcmtk-3.6.9.orig/oficonv/libsrc/citrus_csmapper.c dcmtk-3.6.9/oficonv/libsrc/citrus_csmapper.c +--- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_csmapper.c 2025-02-18 17:20:55.796247633 +0100 ++++ dcmtk-3.6.9/oficonv/libsrc/citrus_csmapper.c 2025-02-18 17:37:31.820094708 +0100 +@@ -63,7 +63,8 @@ + + #ifdef WITH_THREADS + #ifdef HAVE_WINDOWS_H +-static SRWLOCK ma_lock = SRWLOCK_INIT; ++static int ma_lock_initialized = 0; ++static CRITICAL_SECTION ma_lock; + #elif defined(HAVE_PTHREAD_H) + static pthread_rwlock_t ma_lock = PTHREAD_RWLOCK_INITIALIZER; + #endif +@@ -382,6 +383,14 @@ + char mapper_path[OFICONV_PATH_MAX]; + unsigned long norm; + int ret; ++ ++#if defined(WITH_THREADS) && defined(HAVE_WINDOWS_H) ++ if (ma_lock_initialized == 0) { /* Very minor risk of race condition here */ ++ InitializeCriticalSection(&ma_lock); ++ ma_lock_initialized = 1; ++ } ++#endif ++ + norm = 0; + + getCSMapperPath(mapper_path, sizeof(mapper_path), NULL); +diff -urEb dcmtk-3.6.9.orig/oficonv/libsrc/citrus_iconv.c dcmtk-3.6.9/oficonv/libsrc/citrus_iconv.c +--- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_iconv.c 2025-02-18 17:20:55.806247572 +0100 ++++ dcmtk-3.6.9/oficonv/libsrc/citrus_iconv.c 2025-02-18 17:37:20.974161963 +0100 +@@ -80,7 +80,8 @@ + + #ifdef WITH_THREADS + #ifdef HAVE_WINDOWS_H +-static SRWLOCK ci_lock = SRWLOCK_INIT; ++static int ci_lock_initialized = 0; ++static CRITICAL_SECTION ci_lock; + #elif defined(HAVE_PTHREAD_H) + static pthread_rwlock_t ci_lock = PTHREAD_RWLOCK_INITIALIZER; + #endif +@@ -304,6 +305,13 @@ + char realdst[OFICONV_PATH_MAX], realsrc[OFICONV_PATH_MAX]; + int ret; + ++#if defined(WITH_THREADS) && defined(HAVE_WINDOWS_H) ++ if (ci_lock_initialized == 0) { /* Very minor risk of race condition here */ ++ InitializeCriticalSection(&ci_lock); ++ ci_lock_initialized = 1; ++ } ++#endif ++ + init_cache(); + #ifdef HAVE_WINDOWS_H + char current_codepage[20]; diff -urEb dcmtk-3.6.9.orig/oficonv/libsrc/citrus_lock.h dcmtk-3.6.9/oficonv/libsrc/citrus_lock.h ---- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_lock.h 2025-01-21 15:53:12.646715143 +0100 -+++ dcmtk-3.6.9/oficonv/libsrc/citrus_lock.h 2025-01-21 16:43:36.463693959 +0100 -@@ -31,7 +31,7 @@ +--- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_lock.h 2025-02-18 17:20:55.804247584 +0100 ++++ dcmtk-3.6.9/oficonv/libsrc/citrus_lock.h 2025-02-18 17:37:25.701132652 +0100 +@@ -31,11 +31,11 @@ #ifdef WITH_THREADS -#ifdef HAVE_WINDOWS_H -+#if defined(HAVE_WINDOWS_H) && !defined(HAVE_PTHREAD_H) /* Favor pthread if available, for MinGW */ ++#if defined(HAVE_WINDOWS_H) #include <windows.h> - #define WLOCK(lock) AcquireSRWLockExclusive(lock); +-#define WLOCK(lock) AcquireSRWLockExclusive(lock); +-#define UNLOCK(lock) ReleaseSRWLockExclusive(lock); ++#define WLOCK(lock) EnterCriticalSection(lock); ++#define UNLOCK(lock) LeaveCriticalSection(lock); + + #else /* HAVE_WINDOWS_H */ + +diff -urEb dcmtk-3.6.9.orig/oficonv/libsrc/citrus_mapper.c dcmtk-3.6.9/oficonv/libsrc/citrus_mapper.c +--- dcmtk-3.6.9.orig/oficonv/libsrc/citrus_mapper.c 2025-02-18 17:20:55.802247596 +0100 ++++ dcmtk-3.6.9/oficonv/libsrc/citrus_mapper.c 2025-02-18 17:37:15.029198826 +0100 +@@ -64,7 +64,8 @@ + + #ifdef WITH_THREADS + #ifdef HAVE_WINDOWS_H +-static SRWLOCK cm_lock = SRWLOCK_INIT; ++static int cm_lock_initialized = 0; ++static CRITICAL_SECTION cm_lock; + #elif defined(HAVE_PTHREAD_H) + static pthread_rwlock_t cm_lock = PTHREAD_RWLOCK_INITIALIZER; + #endif +@@ -355,6 +356,13 @@ + const char *module, *variable; + int hashval, ret; + ++#if defined(WITH_THREADS) && defined(HAVE_WINDOWS_H) ++ if (cm_lock_initialized == 0) { /* Very minor risk of race condition here */ ++ InitializeCriticalSection(&cm_lock); ++ cm_lock_initialized = 1; ++ } ++#endif ++ + variable = NULL; + + WLOCK(&cm_lock); diff -urEb dcmtk-3.6.9.orig/oflog/include/dcmtk/oflog/thread/syncpub.h dcmtk-3.6.9/oflog/include/dcmtk/oflog/thread/syncpub.h ---- dcmtk-3.6.9.orig/oflog/include/dcmtk/oflog/thread/syncpub.h 2025-01-21 15:53:12.605715381 +0100 -+++ dcmtk-3.6.9/oflog/include/dcmtk/oflog/thread/syncpub.h 2025-01-21 15:53:27.617627527 +0100 +--- dcmtk-3.6.9.orig/oflog/include/dcmtk/oflog/thread/syncpub.h 2025-02-18 17:20:55.761247848 +0100 ++++ dcmtk-3.6.9/oflog/include/dcmtk/oflog/thread/syncpub.h 2025-02-18 17:36:55.958317080 +0100 @@ -63,7 +63,7 @@ DCMTK_LOG4CPLUS_INLINE_EXPORT @@ -137,8 +225,8 @@ diff -urEb dcmtk-3.6.9.orig/oflog/libsrc/oflog.cc dcmtk-3.6.9/oflog/libsrc/oflog.cc ---- dcmtk-3.6.9.orig/oflog/libsrc/oflog.cc 2025-01-21 15:53:12.606715376 +0100 -+++ dcmtk-3.6.9/oflog/libsrc/oflog.cc 2025-01-21 15:53:27.617627527 +0100 +--- dcmtk-3.6.9.orig/oflog/libsrc/oflog.cc 2025-02-18 17:20:55.764247829 +0100 ++++ dcmtk-3.6.9/oflog/libsrc/oflog.cc 2025-02-18 17:36:55.958317080 +0100 @@ -19,6 +19,11 @@ * */ @@ -152,8 +240,8 @@ #include "dcmtk/oflog/oflog.h" diff -urEb dcmtk-3.6.9.orig/ofstd/include/dcmtk/ofstd/offile.h dcmtk-3.6.9/ofstd/include/dcmtk/ofstd/offile.h ---- dcmtk-3.6.9.orig/ofstd/include/dcmtk/ofstd/offile.h 2025-01-21 15:53:12.651715114 +0100 -+++ dcmtk-3.6.9/ofstd/include/dcmtk/ofstd/offile.h 2025-01-21 15:53:27.618627521 +0100 +--- dcmtk-3.6.9.orig/ofstd/include/dcmtk/ofstd/offile.h 2025-02-18 17:20:55.809247553 +0100 ++++ dcmtk-3.6.9/ofstd/include/dcmtk/ofstd/offile.h 2025-02-18 17:36:55.991316875 +0100 @@ -569,7 +569,7 @@ */ void setlinebuf() @@ -164,8 +252,8 @@ #else :: setlinebuf(file_); diff -urEb dcmtk-3.6.9.orig/ofstd/libsrc/ofstub.cc dcmtk-3.6.9/ofstd/libsrc/ofstub.cc ---- dcmtk-3.6.9.orig/ofstd/libsrc/ofstub.cc 2025-01-21 15:53:12.652715108 +0100 -+++ dcmtk-3.6.9/ofstd/libsrc/ofstub.cc 2025-01-21 15:53:27.618627521 +0100 +--- dcmtk-3.6.9.orig/ofstd/libsrc/ofstub.cc 2025-02-18 17:20:55.810247547 +0100 ++++ dcmtk-3.6.9/ofstd/libsrc/ofstub.cc 2025-02-18 17:36:55.991316875 +0100 @@ -35,6 +35,10 @@ #include <windows.h> #endif /* HAVE_WINDOWS_H */