# HG changeset patch # User Sebastien Jodogne # Date 1353329419 -3600 # Node ID 68dae290d5fa08d04563209344485d31a7621bdf # Parent da7e915202c7b1aa086db9bcc736b12c96521765 fix diff -r da7e915202c7 -r 68dae290d5fa OrthancServer/OrthancRestApi.cpp --- a/OrthancServer/OrthancRestApi.cpp Fri Nov 09 13:45:36 2012 +0100 +++ b/OrthancServer/OrthancRestApi.cpp Mon Nov 19 13:50:19 2012 +0100 @@ -125,11 +125,12 @@ // TODO: Implement a true caching mechanism! static boost::mutex mutex_; static std::string lastFileUuid_; - static DcmFileFormat dicomFile_; + static std::auto_ptr dicomFile_; boost::mutex::scoped_lock lock(mutex_); - if (fileUuid != lastFileUuid_) + if (dicomFile_.get() == NULL || + fileUuid != lastFileUuid_) { LOG(INFO) << "Parsing file " << fileUuid; std::string content; @@ -142,7 +143,9 @@ } is.setEos(); - if (!dicomFile_.read(is).good()) + dicomFile_.reset(new DcmFileFormat); + + if (!dicomFile_->read(is).good()) { return false; } @@ -157,7 +160,7 @@ if (uri.size() == 3) { DicomMap dicomSummary; - FromDcmtkBridge::Convert(dicomSummary, *dicomFile_.getDataset()); + FromDcmtkBridge::Convert(dicomSummary, *dicomFile_->getDataset()); DicomArray a(dicomSummary); @@ -191,7 +194,7 @@ DcmTagKey tag(group, element); DcmElement* item = NULL; - if (dicomFile_.getDataset()->findAndGetElement(tag, item).good() && + if (dicomFile_->getDataset()->findAndGetElement(tag, item).good() && item != NULL) { std::string buffer;