Reorginaized the DatabaseQueue's to avoid warnings under Windows

This commit is contained in:
Robert Osfield
2008-05-22 12:38:36 +00:00
parent e6e4074143
commit 6a16cbfca4
2 changed files with 43 additions and 28 deletions

View File

@@ -309,6 +309,19 @@ int DatabasePager::DatabaseThread::cancel()
{
_done = true;
switch(_mode)
{
case(HANDLE_ALL_REQUESTS):
_pager->_fileRequestQueue->release();
break;
case(HANDLE_NON_HTTP):
_pager->_fileRequestQueue->release();
break;
case(HANDLE_ONLY_HTTP):
_pager->_httpRequestQueue->release();
break;
}
// release the frameBlock and _databasePagerThreadBlock in case its holding up thread cancellation.
// _databasePagerThreadBlock->release();
@@ -349,20 +362,20 @@ void DatabasePager::DatabaseThread::run()
bool firstTime = true;
DatabasePager::RequestQueue* read_queue;
DatabasePager::RequestQueue* out_queue;
osg::ref_ptr<DatabasePager::RequestQueue> read_queue;
osg::ref_ptr<DatabasePager::RequestQueue> out_queue;
switch(_mode)
{
case(HANDLE_ALL_REQUESTS):
read_queue = &(_pager->_fileRequestQueue);
read_queue = _pager->_fileRequestQueue;
break;
case(HANDLE_NON_HTTP):
read_queue = &(_pager->_fileRequestQueue);
out_queue = &(_pager->_httpRequestQueue);
read_queue = _pager->_fileRequestQueue;
out_queue = _pager->_httpRequestQueue;
break;
case(HANDLE_ONLY_HTTP):
read_queue = &(_pager->_httpRequestQueue);
read_queue = _pager->_httpRequestQueue;
break;
}
@@ -695,9 +708,7 @@ void DatabasePager::DatabaseThread::run()
//
// DatabasePager
//
DatabasePager::DatabasePager():
_fileRequestQueue(this,"fileRequestQueue"),
_httpRequestQueue(this,"httpRequestQueue")
DatabasePager::DatabasePager()
{
//osg::notify(osg::INFO)<<"Constructing DatabasePager()"<<std::endl;
@@ -822,6 +833,9 @@ DatabasePager::DatabasePager():
//if (osgDB::Registry::instance()->getSharedStateManager())
//osgDB::Registry::instance()->setUseObjectCacheHint(true);
_fileRequestQueue = new RequestQueue(this,"fileRequestQueue");
_httpRequestQueue = new RequestQueue(this,"httpRequestQueue");
#if 0
_databaseThreads.push_back(new DatabaseThread(this, DatabaseThread::HANDLE_ALL_REQUESTS,"HANDLE_ALL_REQUESTS"));
#else
@@ -838,9 +852,7 @@ DatabasePager::DatabasePager():
#endif
}
DatabasePager::DatabasePager(const DatabasePager& rhs):
_fileRequestQueue(this,"fileRequestQueue"),
_httpRequestQueue(this,"httpRequestQueue")
DatabasePager::DatabasePager(const DatabasePager& rhs)
{
//osg::notify(osg::INFO)<<"Constructing DatabasePager(const DatabasePager& )"<<std::endl;
@@ -869,6 +881,9 @@ DatabasePager::DatabasePager(const DatabasePager& rhs):
_minimumTimeAvailableForGLCompileAndDeletePerFrame = rhs._minimumTimeAvailableForGLCompileAndDeletePerFrame;
_maximumNumOfObjectsToCompilePerFrame = rhs._maximumNumOfObjectsToCompilePerFrame;
_fileRequestQueue = new RequestQueue(this,"fileRequestQueue");
_httpRequestQueue = new RequestQueue(this,"httpRequestQueue");
for(DatabaseThreadList::const_iterator dt_itr = rhs._databaseThreads.begin();
dt_itr != rhs._databaseThreads.end();
++dt_itr)
@@ -935,8 +950,8 @@ int DatabasePager::cancel()
}
// release the frameBlock and _databasePagerThreadBlock in case its holding up thread cancellation.
_fileRequestQueue.release();
_httpRequestQueue.release();
_fileRequestQueue->release();
_httpRequestQueue->release();
for(DatabaseThreadList::iterator dt_itr = _databaseThreads.begin();
dt_itr != _databaseThreads.end();
@@ -954,8 +969,8 @@ int DatabasePager::cancel()
void DatabasePager::clear()
{
_fileRequestQueue.clear();
_httpRequestQueue.clear();
_fileRequestQueue->clear();
_httpRequestQueue->clear();
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_dataToCompileListMutex);
@@ -1045,7 +1060,7 @@ void DatabasePager::requestNodeFile(const std::string& fileName,osg::Group* grou
databaseRequest->_groupForAddingLoadedSubgraph = group;
databaseRequest->_loadOptions = loadOptions;
_fileRequestQueue.add(databaseRequest);
_fileRequestQueue->add(databaseRequest);
}
}
@@ -1055,7 +1070,7 @@ void DatabasePager::requestNodeFile(const std::string& fileName,osg::Group* grou
{
osg::notify(osg::INFO)<<"In DatabasePager::fileRquest("<<fileName<<")"<<std::endl;
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_fileRequestQueue._requestMutex);
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_fileRequestQueue->_requestMutex);
if (!databaseRequestRef.valid() || databaseRequestRef->referenceCount()==1)
{
@@ -1073,9 +1088,9 @@ void DatabasePager::requestNodeFile(const std::string& fileName,osg::Group* grou
databaseRequest->_groupForAddingLoadedSubgraph = group;
databaseRequest->_loadOptions = loadOptions;
_fileRequestQueue._requestList.push_back(databaseRequest.get());
_fileRequestQueue->_requestList.push_back(databaseRequest.get());
_fileRequestQueue.updateBlock();
_fileRequestQueue->updateBlock();
}
}
@@ -1122,8 +1137,8 @@ void DatabasePager::setDatabasePagerThreadPause(bool pause)
if (_databasePagerThreadPaused == pause) return;
_databasePagerThreadPaused = pause;
_fileRequestQueue.updateBlock();
_httpRequestQueue.updateBlock();
_fileRequestQueue->updateBlock();
_httpRequestQueue->updateBlock();
}
@@ -1256,15 +1271,15 @@ void DatabasePager::removeExpiredSubgraphs(double currentFrameTime)
// pass the objects across to the database pager delete list
if (_deleteRemovedSubgraphsInDatabaseThread)
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_fileRequestQueue._childrenToDeleteListMutex);
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_fileRequestQueue->_childrenToDeleteListMutex);
for (osg::NodeList::iterator critr = childrenRemoved.begin();
critr!=childrenRemoved.end();
++critr)
{
_fileRequestQueue._childrenToDeleteList.push_back(critr->get());
_fileRequestQueue->_childrenToDeleteList.push_back(critr->get());
}
_fileRequestQueue.updateBlock();
_fileRequestQueue->updateBlock();
}
// osg::notify(osg::NOTICE)<<" time 2 "<<osg::Timer::instance()->delta_m(before,osg::Timer::instance()->tick())<<" ms "<<std::endl;