Mercurial > hg > orthanc
changeset 6535:94c7f3784456
improved thread safety of OrthancPlugins::OrthancJob
| author | Alain Mazy <am@orthanc.team> |
|---|---|
| date | Fri, 05 Dec 2025 14:53:57 +0100 |
| parents | aa11cc4c14a5 |
| children | c2272e169e0e |
| files | OrthancServer/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp OrthancServer/Plugins/Samples/Common/OrthancPluginCppWrapper.h |
| diffstat | 2 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/OrthancServer/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Fri Dec 05 10:08:40 2025 +0100 +++ b/OrthancServer/Plugins/Samples/Common/OrthancPluginCppWrapper.cpp Fri Dec 05 14:53:57 2025 +0100 @@ -2441,6 +2441,8 @@ { assert(job != NULL); OrthancJob& that = *reinterpret_cast<OrthancJob*>(job); + + boost::mutex::scoped_lock lock(that.contentMutex_); return CopyStringToMemoryBuffer(target, that.content_); } #else @@ -2450,7 +2452,10 @@ try { - return reinterpret_cast<OrthancJob*>(job)->content_.c_str(); + OrthancJob& that = *reinterpret_cast<OrthancJob*>(job); + boost::mutex::scoped_lock lock(that.contentMutex_); + + return that.content_.c_str(); } catch (...) { @@ -2578,6 +2583,8 @@ void OrthancJob::UpdateContent(const Json::Value& content) { + boost::mutex::scoped_lock lock(contentMutex_); + if (content.type() != Json::objectValue) { ORTHANC_PLUGINS_THROW_PLUGIN_ERROR_CODE(OrthancPluginErrorCode_BadFileFormat);
--- a/OrthancServer/Plugins/Samples/Common/OrthancPluginCppWrapper.h Fri Dec 05 10:08:40 2025 +0100 +++ b/OrthancServer/Plugins/Samples/Common/OrthancPluginCppWrapper.h Fri Dec 05 14:53:57 2025 +0100 @@ -28,6 +28,7 @@ #include <orthanc/OrthancCPlugin.h> #include <boost/noncopyable.hpp> #include <boost/lexical_cast.hpp> +#include <boost/thread/mutex.hpp> #include <boost/date_time/posix_time/posix_time.hpp> #include <json/value.h> #include <vector> @@ -943,6 +944,7 @@ { private: std::string jobType_; + boost::mutex contentMutex_; std::string content_; bool hasSerialized_; std::string serialized_;
