Skip to content

Race condition on mjData #23

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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions