From 289be04f0f7fb58fd79a31454e2f300f9b29f1bc Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 31 Jan 2014 17:12:50 -0800 Subject: [PATCH] use tryLock in some cases where we don't want to block and pass already locked to the findParticleByID() in scripting interface --- interface/src/ParticleTreeRenderer.cpp | 9 +++++---- libraries/particles/src/ParticleCollisionSystem.cpp | 7 ++++--- .../particles/src/ParticlesScriptingInterface.cpp | 11 ++++++++--- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/interface/src/ParticleTreeRenderer.cpp b/interface/src/ParticleTreeRenderer.cpp index 7c82f76aab..d96ac2beaa 100644 --- a/interface/src/ParticleTreeRenderer.cpp +++ b/interface/src/ParticleTreeRenderer.cpp @@ -32,10 +32,11 @@ void ParticleTreeRenderer::init() { void ParticleTreeRenderer::update() { if (_tree) { - ParticleTree* tree = (ParticleTree*)_tree; - _tree->lockForWrite(); - tree->update(); - _tree->unlock(); + ParticleTree* tree = static_cast(_tree); + if (tree->tryLockForWrite()) { + tree->update(); + tree->unlock(); + } } } diff --git a/libraries/particles/src/ParticleCollisionSystem.cpp b/libraries/particles/src/ParticleCollisionSystem.cpp index e69632f379..c718ab3ddc 100644 --- a/libraries/particles/src/ParticleCollisionSystem.cpp +++ b/libraries/particles/src/ParticleCollisionSystem.cpp @@ -56,9 +56,10 @@ bool ParticleCollisionSystem::updateOperation(OctreeElement* element, void* extr void ParticleCollisionSystem::update() { // update all particles - _particles->lockForWrite(); - _particles->recurseTreeWithOperation(updateOperation, this); - _particles->unlock(); + if (_particles->tryLockForWrite()) { + _particles->recurseTreeWithOperation(updateOperation, this); + _particles->unlock(); + } } diff --git a/libraries/particles/src/ParticlesScriptingInterface.cpp b/libraries/particles/src/ParticlesScriptingInterface.cpp index 73aaad4cc5..a25dde1b9e 100644 --- a/libraries/particles/src/ParticlesScriptingInterface.cpp +++ b/libraries/particles/src/ParticlesScriptingInterface.cpp @@ -43,6 +43,7 @@ ParticleID ParticlesScriptingInterface::addParticle(const ParticleProperties& pr ParticleID ParticlesScriptingInterface::identifyParticle(ParticleID particleID) { uint32_t actualID = particleID.id; + if (!particleID.isKnownID) { actualID = Particle::getIDfromCreatorTokenID(particleID.creatorTokenID); if (actualID == UNKNOWN_PARTICLE_ID) { @@ -65,8 +66,12 @@ ParticleProperties ParticlesScriptingInterface::getParticleProperties(ParticleID } if (_particleTree) { _particleTree->lockForRead(); - const Particle* particle = _particleTree->findParticleByID(identity.id); - results.copyFromParticle(*particle); + const Particle* particle = _particleTree->findParticleByID(identity.id, true); + if (particle) { + results.copyFromParticle(*particle); + } else { + results.setIsUnknownID(); + } _particleTree->unlock(); } @@ -123,7 +128,7 @@ void ParticlesScriptingInterface::deleteParticle(ParticleID particleID) { if (actualID != UNKNOWN_PARTICLE_ID) { particleID.id = actualID; particleID.isKnownID = true; - queueParticleMessage(PACKET_TYPE_PARTICLE_ADD_OR_EDIT, particleID, properties); + queueParticleMessage(PacketTypeParticleAddOrEdit, particleID, properties); } // If we have a local particle tree set, then also update it.