Scheduler::unregisterResource(): act more gracefully if a resource was already unregistered

metadata
Wenzel Jakob 2012-10-25 11:02:44 -04:00
parent b61f0b0775
commit ce1bbbd0e0
2 changed files with 7 additions and 3 deletions

View File

@ -417,8 +417,10 @@ public:
*
* Note that the resource's won't be removed until all processes using
* it have terminated)
*
* \return \c false if the resource could not be found
*/
void unregisterResource(int id);
bool unregisterResource(int id);
/**
* \brief Return the ID of a registered resource

View File

@ -158,10 +158,11 @@ void Scheduler::retainResource(int id) {
rec->refCount++;
}
void Scheduler::unregisterResource(int id) {
bool Scheduler::unregisterResource(int id) {
LockGuard lock(m_mutex);
if (m_resources.find(id) == m_resources.end()) {
Log(EError, "unregisterResource(): could not find the resource with ID %i!", id);
Log(EWarn, "unregisterResource(): could not find the resource with ID %i!", id);
return false;
}
ResourceRecord *rec = m_resources[id];
if (--rec->refCount == 0) {
@ -175,6 +176,7 @@ void Scheduler::unregisterResource(int id) {
for (size_t i=0; i<m_workers.size(); ++i)
m_workers[i]->signalResourceExpiration(id);
}
return true;
}
SerializableObject *Scheduler::getResource(int id, int coreIndex) {