diff --git a/examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp b/examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp index 01f66410d..deb8349cf 100644 --- a/examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp +++ b/examples/SharedMemory/SharedMemoryInProcessPhysicsC_API.cpp @@ -5,10 +5,10 @@ #include"../ExampleBrowser/InProcessExampleBrowser.h" - class InProcessPhysicsClientSharedMemoryMainThread : public PhysicsClientSharedMemory { btInProcessExampleBrowserMainThreadInternalData* m_data; + public: InProcessPhysicsClientSharedMemoryMainThread(int argc, char* argv[]) @@ -37,8 +37,15 @@ public: // return non-null if there is a status, nullptr otherwise virtual const struct SharedMemoryStatus* processServerStatus() { + if (btIsExampleBrowserMainThreadTerminated(m_data)) + { + PhysicsClientSharedMemory::disconnectSharedMemory(); + } + btUpdateInProcessExampleBrowserMainThread(m_data); return PhysicsClientSharedMemory::processServerStatus(); + + } virtual bool submitClientCommand(const struct SharedMemoryCommand& command) diff --git a/test/SharedMemory/test.c b/test/SharedMemory/test.c index 4d9557fc3..c6417b802 100644 --- a/test/SharedMemory/test.c +++ b/test/SharedMemory/test.c @@ -165,11 +165,18 @@ void testSharedMemory(b3PhysicsClientHandle sm) b3SharedMemoryStatusHandle statusHandle; int statusType; - statusHandle = b3SubmitClientCommandAndWaitStatus(sm, b3InitStepSimulationCommand(sm)); - statusType = b3GetStatusType(statusHandle); - ASSERT_EQ(statusType, CMD_STEP_FORWARD_SIMULATION_COMPLETED); + if (b3CanSubmitCommand(sm)) + { + statusHandle = b3SubmitClientCommandAndWaitStatus(sm, b3InitStepSimulationCommand(sm)); + statusType = b3GetStatusType(statusHandle); + ASSERT_EQ(statusType, CMD_STEP_FORWARD_SIMULATION_COMPLETED); + } else + { + break; + } } + if (b3CanSubmitCommand(sm)) { b3SharedMemoryStatusHandle state = b3SubmitClientCommandAndWaitStatus(sm, b3RequestActualStateCommandInit(sm,bodyIndex)); @@ -197,13 +204,13 @@ void testSharedMemory(b3PhysicsClientHandle sm) sensorState.m_jointForceTorque[2]); } - } - { - b3SharedMemoryStatusHandle statusHandle; - statusHandle = b3SubmitClientCommandAndWaitStatus(sm, b3InitResetSimulationCommand(sm)); - ASSERT_EQ(b3GetStatusType(statusHandle), CMD_RESET_SIMULATION_COMPLETED); + { + b3SharedMemoryStatusHandle statusHandle; + statusHandle = b3SubmitClientCommandAndWaitStatus(sm, b3InitResetSimulationCommand(sm)); + ASSERT_EQ(b3GetStatusType(statusHandle), CMD_RESET_SIMULATION_COMPLETED); + } } }