# HG changeset patch # User Sebastien Jodogne # Date 1749722883 -7200 # Node ID b91b5759f8dccc17d9a1308ae598d8efeef69a1b # Parent 6d442d7f3b6a50b73366969024d2cde2207d9679 refactoring using PluginMemoryBuffer64 diff -r 6d442d7f3b6a -r b91b5759f8dc OrthancServer/Plugins/Engine/OrthancPlugins.cpp --- a/OrthancServer/Plugins/Engine/OrthancPlugins.cpp Thu Jun 12 11:46:20 2025 +0200 +++ b/OrthancServer/Plugins/Engine/OrthancPlugins.cpp Thu Jun 12 12:08:03 2025 +0200 @@ -66,7 +66,6 @@ #include "OrthancPluginDatabaseV3.h" #include "OrthancPluginDatabaseV4.h" #include "PluginMemoryBuffer32.h" -#include "PluginMemoryBuffer64.h" #include "PluginsEnumerations.h" #include "PluginsJob.h" @@ -660,17 +659,12 @@ virtual IMemoryBuffer* Read(const std::string& uuid, FileContentType type) ORTHANC_OVERRIDE { - std::unique_ptr result(new MallocMemoryBuffer); - - OrthancPluginMemoryBuffer64 buffer; - buffer.size = 0; - buffer.data = NULL; - - OrthancPluginErrorCode error = readWhole_(&buffer, uuid.c_str(), Plugins::Convert(type)); + std::unique_ptr result(new PluginMemoryBuffer64); + + OrthancPluginErrorCode error = readWhole_(result->GetObject(), uuid.c_str(), Plugins::Convert(type)); if (error == OrthancPluginErrorCode_Success) { - result->Assign(buffer.data, buffer.size, ::free); return result.release(); } else @@ -701,20 +695,16 @@ } else { - std::string range; - range.resize(end - start); - assert(!range.empty()); - - OrthancPluginMemoryBuffer64 buffer; - buffer.data = &range[0]; - buffer.size = static_cast(range.size()); + std::unique_ptr buffer(new PluginMemoryBuffer64); + buffer->Resize(end - start); + assert(buffer->GetSize() > 0); OrthancPluginErrorCode error = - readRange_(&buffer, uuid.c_str(), Plugins::Convert(type), start); + readRange_(buffer->GetObject(), uuid.c_str(), Plugins::Convert(type), start); if (error == OrthancPluginErrorCode_Success) { - return StringMemoryBuffer::CreateFromSwap(range); + return buffer.release(); } else { @@ -2658,32 +2648,22 @@ } - OrthancPluginReceivedInstanceAction OrthancPlugins::ApplyReceivedInstanceCallbacks( - MallocMemoryBuffer& modified, - const void* receivedDicom, - size_t receivedDicomSize, - RequestOrigin origin) + OrthancPluginReceivedInstanceAction OrthancPlugins::ApplyReceivedInstanceCallbacks(PluginMemoryBuffer64& modified, + const void* receivedDicom, + size_t receivedDicomSize, + RequestOrigin origin) { boost::recursive_mutex::scoped_lock lock(pimpl_->invokeServiceMutex_); + modified.Clear(); + if (pimpl_->receivedInstanceCallback_ == NULL) { return OrthancPluginReceivedInstanceAction_KeepAsIs; } else { - OrthancPluginReceivedInstanceAction action; - - { - OrthancPluginMemoryBuffer64 buffer; - buffer.size = 0; - buffer.data = NULL; - - action = (*pimpl_->receivedInstanceCallback_) (&buffer, receivedDicom, receivedDicomSize, Plugins::Convert(origin)); - modified.Assign(buffer.data, buffer.size, ::free); - } - - return action; + return (*pimpl_->receivedInstanceCallback_) (modified.GetObject(), receivedDicom, receivedDicomSize, Plugins::Convert(origin)); } } diff -r 6d442d7f3b6a -r b91b5759f8dc OrthancServer/Plugins/Engine/OrthancPlugins.h --- a/OrthancServer/Plugins/Engine/OrthancPlugins.h Thu Jun 12 11:46:20 2025 +0200 +++ b/OrthancServer/Plugins/Engine/OrthancPlugins.h Thu Jun 12 12:08:03 2025 +0200 @@ -56,6 +56,7 @@ #include "../../Sources/IDicomImageDecoder.h" #include "../../Sources/IServerListener.h" #include "../../Sources/ServerJobs/IStorageCommitmentFactory.h" +#include "PluginMemoryBuffer64.h" #include "PluginsManager.h" #include @@ -284,7 +285,7 @@ const DicomInstanceToStore& instance, const Json::Value& simplified) ORTHANC_OVERRIDE; - OrthancPluginReceivedInstanceAction ApplyReceivedInstanceCallbacks(MallocMemoryBuffer& modified, + OrthancPluginReceivedInstanceAction ApplyReceivedInstanceCallbacks(PluginMemoryBuffer64& modified, const void* receivedDicomBuffer, size_t receivedDicomBufferSize, RequestOrigin origin); diff -r 6d442d7f3b6a -r b91b5759f8dc OrthancServer/Plugins/Engine/PluginMemoryBuffer32.cpp --- a/OrthancServer/Plugins/Engine/PluginMemoryBuffer32.cpp Thu Jun 12 11:46:20 2025 +0200 +++ b/OrthancServer/Plugins/Engine/PluginMemoryBuffer32.cpp Thu Jun 12 12:08:03 2025 +0200 @@ -139,23 +139,26 @@ throw OrthancException(ErrorCode_NotEnoughMemory, ERROR_MESSAGE_64BIT); } - Clear(); - - if (size == 0) - { - buffer_.data = NULL; - } - else + if (size != buffer_.size) { - buffer_.data = ::malloc(size); + Clear(); - if (buffer_.data == NULL) + if (size == 0) + { + buffer_.data = NULL; + } + else { - throw OrthancException(ErrorCode_NotEnoughMemory); + buffer_.data = ::malloc(size); + + if (buffer_.data == NULL) + { + throw OrthancException(ErrorCode_NotEnoughMemory); + } } + + buffer_.size = size; } - - buffer_.size = size; } diff -r 6d442d7f3b6a -r b91b5759f8dc OrthancServer/Plugins/Engine/PluginMemoryBuffer32.h --- a/OrthancServer/Plugins/Engine/PluginMemoryBuffer32.h Thu Jun 12 11:46:20 2025 +0200 +++ b/OrthancServer/Plugins/Engine/PluginMemoryBuffer32.h Thu Jun 12 12:08:03 2025 +0200 @@ -39,8 +39,6 @@ private: OrthancPluginMemoryBuffer buffer_; - void Clear(); - void SanityCheck() const; public: @@ -66,6 +64,8 @@ void Release(OrthancPluginMemoryBuffer64* target); + void Clear(); + void Resize(size_t size); void Assign(const void* data, diff -r 6d442d7f3b6a -r b91b5759f8dc OrthancServer/Plugins/Engine/PluginMemoryBuffer64.cpp --- a/OrthancServer/Plugins/Engine/PluginMemoryBuffer64.cpp Thu Jun 12 11:46:20 2025 +0200 +++ b/OrthancServer/Plugins/Engine/PluginMemoryBuffer64.cpp Thu Jun 12 12:08:03 2025 +0200 @@ -114,23 +114,26 @@ void PluginMemoryBuffer64::Resize(size_t size) { - Clear(); - - if (size == 0) - { - buffer_.data = NULL; - } - else + if (size != buffer_.size) { - buffer_.data = ::malloc(size); + Clear(); - if (buffer_.data == NULL) + if (size == 0) + { + buffer_.data = NULL; + } + else { - throw OrthancException(ErrorCode_NotEnoughMemory); + buffer_.data = ::malloc(size); + + if (buffer_.data == NULL) + { + throw OrthancException(ErrorCode_NotEnoughMemory); + } } + + buffer_.size = size; } - - buffer_.size = size; } diff -r 6d442d7f3b6a -r b91b5759f8dc OrthancServer/Plugins/Engine/PluginMemoryBuffer64.h --- a/OrthancServer/Plugins/Engine/PluginMemoryBuffer64.h Thu Jun 12 11:46:20 2025 +0200 +++ b/OrthancServer/Plugins/Engine/PluginMemoryBuffer64.h Thu Jun 12 12:08:03 2025 +0200 @@ -39,8 +39,6 @@ private: OrthancPluginMemoryBuffer64 buffer_; - void Clear(); - void SanityCheck() const; public: @@ -64,6 +62,8 @@ void Release(OrthancPluginMemoryBuffer64* target); + void Clear(); + void Resize(size_t size); void Assign(const void* data, diff -r 6d442d7f3b6a -r b91b5759f8dc OrthancServer/Sources/ServerContext.cpp --- a/OrthancServer/Sources/ServerContext.cpp Thu Jun 12 11:46:20 2025 +0200 +++ b/OrthancServer/Sources/ServerContext.cpp Thu Jun 12 12:08:03 2025 +0200 @@ -862,7 +862,7 @@ // WARNING: The scope of "modifiedBuffer" and "modifiedDicom" must // be the same as that of "dicom" - MallocMemoryBuffer modifiedBuffer; + PluginMemoryBuffer64 modifiedBuffer; std::unique_ptr modifiedDicom; #if ORTHANC_ENABLE_PLUGINS == 1