mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-21 04:39:42 +00:00
Modify PhysicsTaskScheduler::mCollisionObjects under lock
addCollisionObject is called from the main thread and removeCollisionObject is usually called from the main thread and rarely from one of the physics worker threads. This usually happens on cell unloading when object is already removed from the scene but there is active simulation for it. Which possible because it's a shared pointer. There is getUserPointer function which only reads from the container but it's called only when there is no active simulation so no lock is required.
This commit is contained in:
parent
acf1e51a28
commit
5261f0c5cf
1 changed files with 2 additions and 2 deletions
|
@ -653,15 +653,15 @@ namespace MWPhysics
|
|||
void PhysicsTaskScheduler::addCollisionObject(
|
||||
btCollisionObject* collisionObject, int collisionFilterGroup, int collisionFilterMask)
|
||||
{
|
||||
mCollisionObjects.insert(collisionObject);
|
||||
MaybeExclusiveLock lock(mCollisionWorldMutex, mLockingPolicy);
|
||||
mCollisionObjects.insert(collisionObject);
|
||||
mCollisionWorld->addCollisionObject(collisionObject, collisionFilterGroup, collisionFilterMask);
|
||||
}
|
||||
|
||||
void PhysicsTaskScheduler::removeCollisionObject(btCollisionObject* collisionObject)
|
||||
{
|
||||
mCollisionObjects.erase(collisionObject);
|
||||
MaybeExclusiveLock lock(mCollisionWorldMutex, mLockingPolicy);
|
||||
mCollisionObjects.erase(collisionObject);
|
||||
mCollisionWorld->removeCollisionObject(collisionObject);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue