Mercurial > hg > orthanc
comparison OrthancServer/OrthancMoveRequestHandler.cpp @ 3157:8a9eb767280c
Fix issue #128 (Asynchronous C-MOVE: invalid number of remaining sub-operations)
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 23 Jan 2019 09:32:59 +0100 |
parents | ac72032d69a2 |
children | 8ea7c4546c3a |
comparison
equal
deleted
inserted
replaced
3156:0c2b719c3796 | 3157:8a9eb767280c |
---|---|
123 { | 123 { |
124 private: | 124 private: |
125 ServerContext& context_; | 125 ServerContext& context_; |
126 std::auto_ptr<DicomModalityStoreJob> job_; | 126 std::auto_ptr<DicomModalityStoreJob> job_; |
127 size_t position_; | 127 size_t position_; |
128 size_t countInstances_; | |
128 | 129 |
129 public: | 130 public: |
130 AsynchronousMove(ServerContext& context, | 131 AsynchronousMove(ServerContext& context, |
131 const std::string& targetAet, | 132 const std::string& targetAet, |
132 const std::string& publicId, | 133 const std::string& publicId, |
154 } | 155 } |
155 | 156 |
156 std::list<std::string> tmp; | 157 std::list<std::string> tmp; |
157 context_.GetIndex().GetChildInstances(tmp, publicId); | 158 context_.GetIndex().GetChildInstances(tmp, publicId); |
158 | 159 |
160 countInstances_ = tmp.size(); | |
161 | |
159 job_->Reserve(tmp.size()); | 162 job_->Reserve(tmp.size()); |
160 | 163 |
161 for (std::list<std::string>::iterator it = tmp.begin(); it != tmp.end(); ++it) | 164 for (std::list<std::string>::iterator it = tmp.begin(); it != tmp.end(); ++it) |
162 { | 165 { |
163 job_->AddInstance(*it); | 166 job_->AddInstance(*it); |
164 } | 167 } |
165 } | 168 } |
166 | 169 |
167 virtual unsigned int GetSubOperationCount() const | 170 virtual unsigned int GetSubOperationCount() const |
168 { | 171 { |
169 return 1; | 172 return countInstances_; |
170 } | 173 } |
171 | 174 |
172 virtual Status DoNext() | 175 virtual Status DoNext() |
173 { | 176 { |
177 if (position_ >= countInstances_) | |
178 { | |
179 return Status_Failure; | |
180 } | |
181 | |
174 if (position_ == 0) | 182 if (position_ == 0) |
175 { | 183 { |
176 context_.GetJobsEngine().GetRegistry().Submit(job_.release(), 0 /* priority */); | 184 context_.GetJobsEngine().GetRegistry().Submit(job_.release(), 0 /* priority */); |
177 return Status_Success; | 185 } |
178 } | 186 |
179 else | 187 position_ ++; |
180 { | 188 return Status_Success; |
181 return Status_Failure; | |
182 } | |
183 } | 189 } |
184 }; | 190 }; |
185 } | 191 } |
186 | 192 |
187 | 193 |