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