# HG changeset patch # User Sebastien Jodogne # Date 1538047377 -7200 # Node ID 4ee3a759afeadcf04775a3cc3d6c9c2ea9dabb85 # Parent ff0ed5ea9e4e2b605ca0d094f665cf9e2f2d016a Fix: Closing DICOM associations after running query/retrieve from REST API diff -r ff0ed5ea9e4e -r 4ee3a759afea NEWS --- a/NEWS Wed Sep 26 15:55:42 2018 +0200 +++ b/NEWS Thu Sep 27 13:22:57 2018 +0200 @@ -1,6 +1,10 @@ Pending changes in the mainline =============================== +Maintenance +----------- + +* Fix: Closing DICOM associations after running query/retrieve from REST API Version 1.4.2 (2018-09-20) diff -r ff0ed5ea9e4e -r 4ee3a759afea OrthancServer/OrthancRestApi/OrthancRestModalities.cpp --- a/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Wed Sep 26 15:55:42 2018 +0200 +++ b/OrthancServer/OrthancRestApi/OrthancRestModalities.cpp Thu Sep 27 13:22:57 2018 +0200 @@ -430,7 +430,7 @@ Json::Value result = Json::objectValue; result["ID"] = s; result["Path"] = "/queries/" + s; - call.GetOutput().AnswerJson(result); + call.GetOutput().AnswerJson(result); } } diff -r ff0ed5ea9e4e -r 4ee3a759afea OrthancServer/QueryRetrieveHandler.cpp --- a/OrthancServer/QueryRetrieveHandler.cpp Wed Sep 26 15:55:42 2018 +0200 +++ b/OrthancServer/QueryRetrieveHandler.cpp Thu Sep 27 13:22:57 2018 +0200 @@ -79,19 +79,6 @@ { done_ = false; answers_.Clear(); - connection_.reset(NULL); - } - - - DicomUserConnection& QueryRetrieveHandler::GetConnection() - { - if (connection_.get() == NULL) - { - connection_.reset(new DicomUserConnection(localAet_, modality_)); - connection_->Open(); - } - - return *connection_; } @@ -107,7 +94,11 @@ // Secondly, possibly fix the query with the user-provider Lua callback FixQueryLua(fixed, context_, modality_.GetApplicationEntityTitle()); - GetConnection().Find(answers_, level_, fixed); + { + DicomUserConnection connection(localAet_, modality_); + connection.Open(); + connection.Find(answers_, level_, fixed); + } done_ = true; } @@ -162,20 +153,34 @@ } + void QueryRetrieveHandler::RetrieveInternal(DicomUserConnection& connection, + const std::string& target, + size_t i) + { + DicomMap map; + GetAnswer(map, i); + connection.Move(target, map); + } + + void QueryRetrieveHandler::Retrieve(const std::string& target, size_t i) { - DicomMap map; - GetAnswer(map, i); - GetConnection().Move(target, map); + DicomUserConnection connection(localAet_, modality_); + connection.Open(); + + RetrieveInternal(connection, target, i); } void QueryRetrieveHandler::Retrieve(const std::string& target) { + DicomUserConnection connection(localAet_, modality_); + connection.Open(); + for (size_t i = 0; i < GetAnswerCount(); i++) { - Retrieve(target, i); + RetrieveInternal(connection, target, i); } } } diff -r ff0ed5ea9e4e -r 4ee3a759afea OrthancServer/QueryRetrieveHandler.h --- a/OrthancServer/QueryRetrieveHandler.h Wed Sep 26 15:55:42 2018 +0200 +++ b/OrthancServer/QueryRetrieveHandler.h Thu Sep 27 13:22:57 2018 +0200 @@ -49,11 +49,11 @@ DicomFindAnswers answers_; std::string modalityName_; - std::auto_ptr connection_; - void Invalidate(); - DicomUserConnection& GetConnection(); + void RetrieveInternal(DicomUserConnection& connection, + const std::string& target, + size_t i); public: QueryRetrieveHandler(ServerContext& context);