From d17d496f9734497ca72b8071361d41884fff69c1 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Tue, 15 May 2018 13:24:28 -0700 Subject: [PATCH] fix potential asan/tsan issue --- examples/SharedMemory/PhysicsServerExample.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/examples/SharedMemory/PhysicsServerExample.cpp b/examples/SharedMemory/PhysicsServerExample.cpp index 6b6597c7d..03a085a34 100644 --- a/examples/SharedMemory/PhysicsServerExample.cpp +++ b/examples/SharedMemory/PhysicsServerExample.cpp @@ -201,7 +201,8 @@ struct MotionArgs { m_vrControllerEvents[i].m_buttons[b]=0; } - + m_vrControllerPos[i].setValue(0,0,0); + m_vrControllerOrn[i].setValue(0,0,0,1); m_isVrControllerPicking[i] = false; m_isVrControllerDragging[i] = false; m_isVrControllerReleasing[i] = false; @@ -1747,6 +1748,8 @@ void PhysicsServerExample::initPhysics() m_threadSupport = createMotionThreadSupport(MAX_MOTION_NUM_THREADS); + m_isConnected = m_physicsServer.connectSharedMemory( m_guiHelper); + for (int i=0;igetNumTasks();i++) { @@ -1765,18 +1768,25 @@ void PhysicsServerExample::initPhysics() m_args[w].m_cs2 = m_threadSupport->createCriticalSection(); m_args[w].m_cs3 = m_threadSupport->createCriticalSection(); m_args[w].m_csGUI = m_threadSupport->createCriticalSection(); - + m_args[w].m_cs->lock(); m_args[w].m_cs->setSharedParam(0,eMotionIsUnInitialized); + m_args[w].m_cs->unlock(); int numMoving = 0; m_args[w].m_positions.resize(numMoving); m_args[w].m_physicsServerPtr = &m_physicsServer; //int index = 0; m_threadSupport->runTask(B3_THREAD_SCHEDULE_TASK, (void*) &this->m_args[w], w); + bool isUninitialized = true; - while (m_args[w].m_cs->getSharedParam(0)==eMotionIsUnInitialized) + while (isUninitialized) { + m_args[w].m_cs->lock(); + isUninitialized = (m_args[w].m_cs->getSharedParam(0)==eMotionIsUnInitialized); + m_args[w].m_cs->unlock(); +#ifdef _WIN32 b3Clock::usleep(1000); +#endif } } @@ -1789,8 +1799,6 @@ void PhysicsServerExample::initPhysics() m_args[0].m_cs2->lock(); - m_isConnected = m_physicsServer.connectSharedMemory( m_guiHelper); - {