Added if search for the current databaseRequest in the _fileRequestList to handle

cases when the request is moved back in the list, or when the _fileRequestList is cleared
by an asyncronous call to DatabasePager::clear().
This commit is contained in:
Robert Osfield
2006-08-03 19:14:52 +00:00
parent 5889052f5a
commit 43e65c11b1

View File

@@ -560,21 +560,25 @@ void DatabasePager::run()
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_fileRequestListMutex);
if (databaseRequest->_loadedModel.valid())
DatabaseRequestList::iterator itr = std::find(_fileRequestList.begin(),_fileRequestList.end(),databaseRequest);
if (itr != _fileRequestList.end())
{
if (loadedObjectsNeedToBeCompiled)
if (databaseRequest->_loadedModel.valid())
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_dataToCompileListMutex);
_dataToCompileList.push_back(databaseRequest);
}
else
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_dataToMergeListMutex);
_dataToMergeList.push_back(databaseRequest);
}
}
if (!_fileRequestList.empty()) _fileRequestList.erase(_fileRequestList.begin());
if (loadedObjectsNeedToBeCompiled)
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_dataToCompileListMutex);
_dataToCompileList.push_back(databaseRequest);
}
else
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_dataToMergeListMutex);
_dataToMergeList.push_back(databaseRequest);
}
}
_fileRequestList.erase(itr);
}
updateDatabasePagerThreadBlock();
@@ -779,6 +783,7 @@ void DatabasePager::removeExpiredSubgraphs(double currentFrameTime)
if (!childrenRemoved.empty())
{
// pass the objects across to the database pager delete list
if (_deleteRemovedSubgraphsInDatabaseThread)
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_childrenToDeleteListMutex);
for (osg::NodeList::iterator critr = childrenRemoved.begin();