my application freezes often when having a few boxes (<100) on a simple tree collision. It works fine, until suddenly NewtonUpdate() doesn't return. (I'm using Linux, I will try it on Windows tomorrow)
These are the Newton settings:
- Code: Select all
NewtonSetPlatformArchitecture(m_world, 3);
NewtonSetSolverModel(m_world, 1);
NewtonSetFrictionModel(m_world, 1);
NewtonSetThreadsCount(m_world, 2);
NewtonSetMultiThreadSolverOnSingleIsland(m_world, 0);
This is the stack trace:
- Code: Select all
Unknown name [i1]
Thread [9] 6441 (Suspended : Container)
dgBody::IntegrateVelocity() at coreLibrary_200/source/physics/dgBody.cpp:574
dgWorldDynamicUpdate::IntegrateArray() at coreLibrary_200/source/physics/dgWorldDynamicUpdate.cpp:1,026
dgSolverWorlkerThreads::ThreadExecute() at coreLibrary_200/source/physics/dgWorldDynamicUpdate.cpp:321
dgThreads::DoWork() at coreLibrary_200/source/core/dgThreads.cpp:441
dgThreads::ThreadExecute() at coreLibrary_200/source/core/dgThreads.cpp:373
start_thread() at 0xb6c9ecc9
clone() at 0xb6d8369e
Thread [8] 6440 (Suspended : Container)
__kernel_vsyscall() at 0xb7fe1424
sched_yield() at 0xb6d588ec
dgThreadYield() at coreLibrary_200/source/core/dgThreads.cpp:35
dgThreads::GetWork() at coreLibrary_200/source/core/dgThreads.cpp:399
dgThreads::DoWork() at coreLibrary_200/source/core/dgThreads.cpp:440
dgThreads::ThreadExecute() at coreLibrary_200/source/core/dgThreads.cpp:373
start_thread() at 0xb6c9ecc9
clone() at 0xb6d8369e
Thread [5] 6437 (Suspended : Container)
__kernel_vsyscall() at 0xb7fe1424
nanosleep() at 0xb6d4c1a6
RTThreadSleep() at 0xb4acfcf4
0xb4a97367
rtThreadMain() at 0xb4ad0cd0
0xb4acfae7
start_thread() at 0xb6c9ecc9
clone() at 0xb6d8369e
Thread [2] 6432 (Suspended : Container)
__kernel_vsyscall() at 0xb7fe1424
poll() at 0xb6d74df6
g_poll() at 0xb6b80a1b
0xb6b7343c
g_main_loop_run() at 0xb6b73ba7
0xb63c89c4
0xb6b9a48f
start_thread() at 0xb6c9ecc9
clone() at 0xb6d8369e
Thread [1] 6429 (Suspended : Signal)
__kernel_vsyscall() at 0xb7fe1424
sched_yield() at 0xb6d588ec
dgThreadYield() at coreLibrary_200/source/core/dgThreads.cpp:35
dgThreads::SynchronizationBarrier() at coreLibrary_200/source/core/dgThreads.cpp:467
dgWorldDynamicUpdate::UpdateDynamics() at coreLibrary_200/source/physics/dgWorldDynamicUpdate.cpp:210
dgWorld::Update() at coreLibrary_200/source/physics/dgWorld.cpp:677
Newton::UpdatePhysics() at coreLibrary_200/source/newton/NewtonClass.cpp:112
NewtonUpdate() at coreLibrary_200/source/newton/Newton.cpp:717
sim::Simulation::update() at src/simulation/Simulation.cpp:640
Render::paintGL() at src/gui/render.cpp:101
<...more frames...>
I hope this helps you a bit.
Edit: Of course, this does not happen when using only one Newton thread.