diff --git a/include/osgDB/DatabasePager b/include/osgDB/DatabasePager index 9fc7ab9ba..183309472 100644 --- a/include/osgDB/DatabasePager +++ b/include/osgDB/DatabasePager @@ -348,6 +348,8 @@ class OSGDB_EXPORT DatabasePager : public osg::NodeVisitor::DatabaseRequestHandl struct RequestQueue : public osg::Referenced { typedef std::list< osg::ref_ptr > RequestList; + + void sort(); RequestList _requestList; OpenThreads::Mutex _requestMutex; diff --git a/src/osgDB/DatabasePager.cpp b/src/osgDB/DatabasePager.cpp index 0a36daa13..47dd8a884 100644 --- a/src/osgDB/DatabasePager.cpp +++ b/src/osgDB/DatabasePager.cpp @@ -83,20 +83,6 @@ RefPtrAdapter refPtrAdapt(const FuncObj& func) } } -///////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// SortFileRequestFunctor -// -struct DatabasePager::SortFileRequestFunctor -{ - bool operator() (const osg::ref_ptr& lhs,const osg::ref_ptr& rhs) const - { - if (lhs->_timestampLastRequest>rhs->_timestampLastRequest) return true; - else if (lhs->_timestampLastRequest_timestampLastRequest) return false; - else return (lhs->_priorityLastRequest>rhs->_priorityLastRequest); - } -}; - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // FindCompileableGLObjectsVisitor @@ -236,6 +222,31 @@ public: }; +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// SortFileRequestFunctor +// +struct DatabasePager::SortFileRequestFunctor +{ + bool operator() (const osg::ref_ptr& lhs,const osg::ref_ptr& rhs) const + { + if (lhs->_timestampLastRequest>rhs->_timestampLastRequest) return true; + else if (lhs->_timestampLastRequest_timestampLastRequest) return false; + else return (lhs->_priorityLastRequest>rhs->_priorityLastRequest); + } +}; + + +///////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// ReadQueue +// +void DatabasePager::RequestQueue::sort() +{ + _requestList.sort(SortFileRequestFunctor()); +} + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // ReadQueue @@ -279,7 +290,8 @@ void DatabasePager::ReadQueue::takeFirst(osg::ref_ptr& database if (!_requestList.empty()) { - _requestList.sort(SortFileRequestFunctor()); + sort(); + databaseRequest = _requestList.front(); databaseRequest->_requestQueue = 0; _requestList.erase(_requestList.begin()); @@ -659,7 +671,8 @@ void DatabasePager::DatabaseThread::run() if (loadedObjectsNeedToBeCompiled) { OpenThreads::ScopedLock lock(_pager->_dataToCompileList->_requestMutex); - _pager->_dataToCompileList->_requestList.sort(SortFileRequestFunctor()); + + _pager->_dataToCompileList->sort(); // Prune all the old entries. RequestQueue::RequestList::iterator tooOld