From 949b9191a5b5e4f76d242de7cb512b75303fb89e Mon Sep 17 00:00:00 2001 From: elsid Date: Sat, 4 Mar 2023 02:08:42 +0100 Subject: [PATCH] Limit max bullet supported threads by BT_MAX_THREAD_COUNT - 1 There is a check and assert for number of threads >= BT_MAX_THREAD_COUNT. btDbvtBroadphase::m_rayTestStacks::size may return BT_MAX_THREAD_COUNT which triggers the assert. --- apps/openmw/mwphysics/mtphysics.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwphysics/mtphysics.cpp b/apps/openmw/mwphysics/mtphysics.cpp index 5f76548f36..5e6fb4dea5 100644 --- a/apps/openmw/mwphysics/mtphysics.cpp +++ b/apps/openmw/mwphysics/mtphysics.cpp @@ -10,6 +10,7 @@ #include #include +#include #include @@ -305,10 +306,11 @@ namespace MWPhysics { namespace { - int getMaxBulletSupportedThreads() + unsigned getMaxBulletSupportedThreads() { auto broad = std::make_unique(); - return broad->m_rayTestStacks.size(); + assert(BT_MAX_THREAD_COUNT > 0); + return std::min(broad->m_rayTestStacks.size(), BT_MAX_THREAD_COUNT - 1); } LockingPolicy detectLockingPolicy() @@ -330,8 +332,8 @@ namespace MWPhysics case LockingPolicy::ExclusiveLocksOnly: return 1; case LockingPolicy::AllowSharedLocks: - return static_cast(std::clamp( - Settings::Manager::getInt("async num threads", "Physics"), 0, getMaxBulletSupportedThreads())); + return std::clamp( + Settings::Manager::getInt("async num threads", "Physics"), 0, getMaxBulletSupportedThreads()); } throw std::runtime_error("Unsupported LockingPolicy: "