Skip to content

Race condition on mjData #23

@ValerioSpagnoli

Description

@ValerioSpagnoli

TERMINAL OUTPUT

Connected Robot: red_Booster-T1_0
Sending initial message to red_Booster-T1_0
Connected Robot: blue_Booster-T1_0
Sending initial message to blue_Booster-T1_0
Robot ready: red_Booster-T1_0
Robot ready: blue_Booster-T1_0
All robots are ready!
Starting simulation!

========================================
[CRASH] Signal received: SIGSEGV (Segmentation fault)
========================================

Backtrace:
  [0] /home/valeriospagnoli/RoboCup/circus/.pixi/envs/default/bin/circus(+0x420cc) [0x5577906e10cc]
  [1] /lib/x86_64-linux-gnu/[libc.so](https://libc.so/).6(+0x42520) [0x7e4510642520]
  [2] /home/valeriospagnoli/RoboCup/circus/.pixi/envs/default/bin/../lib/[libmujoco.so](https://libmujoco.so/).3.3.3(mj_freeStack
  [3] /home/valeriospagnoli/RoboCup/circus/.pixi/envs/default/bin/../lib/[libmujoco.so](https://libmujoco.so/).3.3.3(mj_collision
  [4] /home/valeriospagnoli/RoboCup/circus/.pixi/envs/default/bin/../lib/[libmujoco.so](https://libmujoco.so/).3.3.3(mj_fwdPosition
  [5] /home/valeriospagnoli/RoboCup/circus/.pixi/envs/default/bin/../lib/[libmujoco.so](https://libmujoco.so/).3.3.3(mj_forwardSkip
  [6] /home/valeriospagnoli/RoboCup/circus/.pixi/envs/default/bin/../lib/[libmujoco.so](https://libmujoco.so/).3.3.3(mj_step
  [7] /home/valeriospagnoli/RoboCup/circus/.pixi/envs/default/bin/circus(+0xad3eb) [0x55779074c3eb]
  [8] /home/valeriospagnoli/RoboCup/circus/.pixi/envs/default/bin/../lib/[libQt6Core.so](https://libqt6core.so/).6(+0x278813) [0x7e4510e78813]
  [9] /lib/x86_64-linux-gnu/[libc.so](https://libc.so/).6(+0x94ac3) [0x7e4510694ac3]
  [10] /lib/x86_64-linux-gnu/[libc.so](https://libc.so/).6(+0x1268c0) [0x7e45107268c0]

Cleaning up resources...
Cleanup complete. Re-raising signal.


CLOUDE IDEA

Found the problem. You have a race condition - the simulation thread and the rendering thread both access mjData concurrently without synchronization:

SimulationThread calls mj_step(model_, data_) at line 22
SimulationViewport::paintGL() calls mjv_updateScene(model, data, ...) at lines 48 and 68
Mouse events call mjv_applyPerturbPose(model, data, ...) at lines 147, 159, 162, 163
MuJoCo's mjData is not thread-safe. When mj_step runs collision detection while rendering reads from data, you get corruption → segfault in mj_freeStack.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions