# HG changeset patch # User Sebastien Jodogne # Date 1376665905 -7200 # Node ID 935e8c7e0b18b615e9f9d4253b43bd24e85cf97a # Parent 3b735fdf320b5a853020745b2b10dbfef78ce1cb fix diff -r 3b735fdf320b -r 935e8c7e0b18 OrthancServer/DatabaseWrapper.cpp --- a/OrthancServer/DatabaseWrapper.cpp Fri Aug 16 15:39:53 2013 +0200 +++ b/OrthancServer/DatabaseWrapper.cpp Fri Aug 16 17:11:45 2013 +0200 @@ -949,4 +949,13 @@ { db_.Execute("DELETE FROM " + tableName); } + + + bool DatabaseWrapper::IsExistingResource(int64_t internalId) + { + SQLite::Statement s(db_, SQLITE_FROM_HERE, + "SELECT * FROM Resources WHERE internalId=?"); + s.BindInt(0, internalId); + return s.Step(); + } } diff -r 3b735fdf320b -r 935e8c7e0b18 OrthancServer/DatabaseWrapper.h --- a/OrthancServer/DatabaseWrapper.h Fri Aug 16 15:39:53 2013 +0200 +++ b/OrthancServer/DatabaseWrapper.h Fri Aug 16 17:11:45 2013 +0200 @@ -223,5 +223,7 @@ uint64_t IncrementGlobalSequence(GlobalProperty property); void ClearTable(const std::string& tableName); + + bool IsExistingResource(int64_t internalId); }; } diff -r 3b735fdf320b -r 935e8c7e0b18 OrthancServer/ServerIndex.cpp --- a/OrthancServer/ServerIndex.cpp Fri Aug 16 15:39:53 2013 +0200 +++ b/OrthancServer/ServerIndex.cpp Fri Aug 16 17:11:45 2013 +0200 @@ -1416,6 +1416,7 @@ boost::this_thread::sleep(boost::posix_time::seconds(1)); boost::mutex::scoped_lock lock(that->mutex_); + while (!that->unstableResources_.IsEmpty() && that->unstableResources_.GetOldestPayload().GetAge() > static_cast(stableAge)) { @@ -1425,25 +1426,29 @@ UnstableResourcePayload payload; int64_t id = that->unstableResources_.RemoveOldest(payload); - switch (payload.type_) + // Ensure that the resource is still existing before logging the change + if (that->db_->IsExistingResource(id)) { - case Orthanc::ResourceType_Patient: - that->db_->LogChange(ChangeType_StablePatient, id, ResourceType_Patient); - break; - - case Orthanc::ResourceType_Study: - that->db_->LogChange(ChangeType_StableStudy, id, ResourceType_Study); - break; + switch (payload.type_) + { + case Orthanc::ResourceType_Patient: + that->db_->LogChange(ChangeType_StablePatient, id, ResourceType_Patient); + break; - case Orthanc::ResourceType_Series: - that->db_->LogChange(ChangeType_StableSeries, id, ResourceType_Series); - break; + case Orthanc::ResourceType_Study: + that->db_->LogChange(ChangeType_StableStudy, id, ResourceType_Study); + break; - default: - throw OrthancException(ErrorCode_InternalError); + case Orthanc::ResourceType_Series: + that->db_->LogChange(ChangeType_StableSeries, id, ResourceType_Series); + break; + + default: + throw OrthancException(ErrorCode_InternalError); + } + + //LOG(INFO) << "Stable resource: " << EnumerationToString(payload.type_) << " " << id; } - - //LOG(INFO) << "Stable resource: " << EnumerationToString(payload.type_) << " " << id; } }