Mercurial > hg > orthanc
diff OrthancServer/Sources/ServerJobs/ResourceModificationJob.cpp @ 5130:f2dcdbe05884
ResourceModification jobs can now use multiple threads
author | Alain Mazy <am@osimis.io> |
---|---|
date | Thu, 05 Jan 2023 17:24:43 +0100 |
parents | 6eff25f70121 |
children | 6aa41d86b948 |
line wrap: on
line diff
--- a/OrthancServer/Sources/ServerJobs/ResourceModificationJob.cpp Mon Dec 19 20:00:21 2022 +0100 +++ b/OrthancServer/Sources/ServerJobs/ResourceModificationJob.cpp Thu Jan 05 17:24:43 2023 +0100 @@ -293,14 +293,18 @@ **/ // assert(modifiedInstance == modifiedHasher.HashInstance()); - output_->Update(modifiedHasher); + { + boost::recursive_mutex::scoped_lock lock(outputMutex_); + + output_->Update(modifiedHasher); + } return true; } - ResourceModificationJob::ResourceModificationJob(ServerContext& context) : - CleaningInstancesJob(context, true /* by default, keep source */), + ResourceModificationJob::ResourceModificationJob(ServerContext& context, unsigned int workersCount) : + ThreadedSetOfInstancesJob(context, false /* no post processing step */, true /* by default, keep source */, workersCount), isAnonymization_(false), transcode_(false), transferSyntax_(DicomTransferSyntax_LittleEndianExplicit) // dummy initialization @@ -445,6 +449,8 @@ } else { + boost::recursive_mutex::scoped_lock lock(outputMutex_); + assert(output_.get() != NULL); return output_->IsSingleResource(); } @@ -453,6 +459,8 @@ ResourceType ResourceModificationJob::GetOutputLevel() const { + boost::recursive_mutex::scoped_lock lock(outputMutex_); + if (IsSingleResourceModification()) { assert(modification_.get() != NULL && @@ -469,7 +477,9 @@ void ResourceModificationJob::GetPublicContent(Json::Value& value) { - CleaningInstancesJob::GetPublicContent(value); + boost::recursive_mutex::scoped_lock lock(outputMutex_); + + ThreadedSetOfInstancesJob::GetPublicContent(value); value["IsAnonymization"] = isAnonymization_; @@ -495,7 +505,7 @@ ResourceModificationJob::ResourceModificationJob(ServerContext& context, const Json::Value& serialized) : - CleaningInstancesJob(context, serialized, true /* by default, keep source */), + ThreadedSetOfInstancesJob(context, serialized, false /* no post processing step */, true /* by default, keep source */), transferSyntax_(DicomTransferSyntax_LittleEndianExplicit) // dummy initialization { assert(serialized.type() == Json::objectValue); @@ -565,7 +575,7 @@ { throw OrthancException(ErrorCode_BadSequenceOfCalls); } - else if (!CleaningInstancesJob::Serialize(value)) + else if (!ThreadedSetOfInstancesJob::Serialize(value)) { return false; }