diff --git a/simulate/main.cc b/simulate/main.cc index 57763646..f23a0e30 100644 --- a/simulate/main.cc +++ b/simulate/main.cc @@ -267,6 +267,9 @@ void PhysicsLoop(mj::Simulate& sim) { if (dnew) { sim.Load(mnew, dnew, sim.dropfilename); + // lock the sim mutex + const std::unique_lock lock(sim.mtx); + mj_deleteData(d); mj_deleteModel(m); @@ -292,6 +295,9 @@ void PhysicsLoop(mj::Simulate& sim) { if (dnew) { sim.Load(mnew, dnew, sim.filename); + // lock the sim mutex + const std::unique_lock lock(sim.mtx); + mj_deleteData(d); mj_deleteModel(m); @@ -421,9 +427,18 @@ void PhysicsThread(mj::Simulate* sim, const char* filename) { if (filename != nullptr) { sim->LoadMessage(filename); m = LoadModel(filename, *sim); - if (m) d = mj_makeData(m); + if (m) { + // lock the sim mutex + const std::unique_lock lock(sim->mtx); + + d = mj_makeData(m); + } if (d) { sim->Load(m, d, filename); + + // lock the sim mutex + const std::unique_lock lock(sim->mtx); + mj_forward(m, d); // allocate ctrlnoise