Mercurial > hg > orthanc
changeset 6180:b91b5759f8dc
refactoring using PluginMemoryBuffer64
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 12 Jun 2025 12:08:03 +0200 |
parents | 6d442d7f3b6a |
children | 39efb66b8322 |
files | OrthancServer/Plugins/Engine/OrthancPlugins.cpp OrthancServer/Plugins/Engine/OrthancPlugins.h OrthancServer/Plugins/Engine/PluginMemoryBuffer32.cpp OrthancServer/Plugins/Engine/PluginMemoryBuffer32.h OrthancServer/Plugins/Engine/PluginMemoryBuffer64.cpp OrthancServer/Plugins/Engine/PluginMemoryBuffer64.h OrthancServer/Sources/ServerContext.cpp |
diffstat | 7 files changed, 52 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- 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<MallocMemoryBuffer> result(new MallocMemoryBuffer); - - OrthancPluginMemoryBuffer64 buffer; - buffer.size = 0; - buffer.data = NULL; - - OrthancPluginErrorCode error = readWhole_(&buffer, uuid.c_str(), Plugins::Convert(type)); + std::unique_ptr<PluginMemoryBuffer64> 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<uint64_t>(range.size()); + std::unique_ptr<PluginMemoryBuffer64> 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)); } }
--- 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 <list> @@ -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);
--- 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; }
--- 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,
--- 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; }
--- 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,
--- 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<DicomInstanceToStore> modifiedDicom; #if ORTHANC_ENABLE_PLUGINS == 1