To address a thread related crash reported in osgParticle changed the ParticleSystem

to have an optional compile path for either using a OpenThreads::ReadWriteMutex or an 
OpenThreads::Mutex as it's base implementation, with the Mutex now being used by default.
This commit is contained in:
Robert Osfield
2009-02-09 18:20:36 +00:00
parent b9540fc9f1
commit c7f2e570ed
6 changed files with 47 additions and 13 deletions

View File

@@ -116,7 +116,7 @@ void ConnectedParticleSystem::drawImplementation(osg::RenderInfo& renderInfo) co
{
osg::State& state = *renderInfo.getState();
OpenThreads::ScopedReadLock lock(_readWriteMutex);
ScopedReadLock lock(_readWriteMutex);
const Particle* particle = (_startParticle != Particle::INVALID_INDEX) ? &_particles[_startParticle] : 0;
if (!particle) return;

View File

@@ -64,7 +64,7 @@ void osgParticle::ParticleProcessor::traverse(osg::NodeVisitor& nv)
{
if (nv.getFrameStamp())
{
OpenThreads::ScopedWriteLock lock(*(_ps->getReadWriteMutex()));
ParticleSystem::ScopedWriteLock lock(*(_ps->getReadWriteMutex()));
//added- 1/17/06- bgandere@nps.edu
//a check to make sure we havent updated yet this frame

View File

@@ -96,7 +96,7 @@ void osgParticle::ParticleSystem::drawImplementation(osg::RenderInfo& renderInfo
{
osg::State& state = *renderInfo.getState();
OpenThreads::ScopedReadLock lock(_readWriteMutex);
ScopedReadLock lock(_readWriteMutex);
// update the frame count, so other objects can detect when
// this particle system is culled

View File

@@ -40,7 +40,7 @@ void osgParticle::ParticleSystemUpdater::traverse(osg::NodeVisitor& nv)
{
ParticleSystem* ps = i->get();
OpenThreads::ScopedWriteLock lock(*(ps->getReadWriteMutex()));
ParticleSystem::ScopedWriteLock lock(*(ps->getReadWriteMutex()));
if (!ps->isFrozen() && (ps->getLastFrameNumber() >= (nv.getFrameStamp()->getFrameNumber() - 1) || !ps->getFreezeOnCull()))
{