diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 3aa29cb8..9bcce1ea 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1166,6 +1166,7 @@ Fix particles not spawning in correct positions (11/28/2024) Fix block not firing +Fix reentrant locking bug # TODO diff --git a/src/main/java/electrosphere/collision/CollisionEngine.java b/src/main/java/electrosphere/collision/CollisionEngine.java index 2ac2fb7f..12dd1163 100644 --- a/src/main/java/electrosphere/collision/CollisionEngine.java +++ b/src/main/java/electrosphere/collision/CollisionEngine.java @@ -747,6 +747,7 @@ public class CollisionEngine { body.destroy(); } catch (NullPointerException ex){ LoggerInterface.loggerEngine.ERROR(ex); + spaceLock.unlock(); } spaceLock.unlock(); } @@ -971,14 +972,16 @@ public class CollisionEngine { * @param angularForce The angular force */ protected void synchronizeData(DBody body, Vector3d position, Quaterniond rotation, Vector3d linearVel, Vector3d angularVel, Vector3d linearForce, Vector3d angularForce){ - spaceLock.lock(); - body.setPosition(position.x, position.y, position.z); - body.setQuaternion(PhysicsUtils.jomlQuatToOdeQuat(rotation)); - body.setLinearVel(PhysicsUtils.jomlVecToOdeVec(linearVel)); - body.setAngularVel(PhysicsUtils.jomlVecToOdeVec(angularVel)); - body.setForce(PhysicsUtils.jomlVecToOdeVec(linearForce)); - body.setTorque(PhysicsUtils.jomlVecToOdeVec(angularForce)); - spaceLock.unlock(); + if(body != null){ + spaceLock.lock(); + body.setPosition(position.x, position.y, position.z); + body.setQuaternion(PhysicsUtils.jomlQuatToOdeQuat(rotation)); + body.setLinearVel(PhysicsUtils.jomlVecToOdeVec(linearVel)); + body.setAngularVel(PhysicsUtils.jomlVecToOdeVec(angularVel)); + body.setForce(PhysicsUtils.jomlVecToOdeVec(linearForce)); + body.setTorque(PhysicsUtils.jomlVecToOdeVec(angularForce)); + spaceLock.unlock(); + } } /**