ThreadSanitizer reports data races between planning scene callback paths and state/attach callbacks.
WARNING: ThreadSanitizer: data race (pid=69380)
Previous read ...
#3 planning_scene_monitor::PlanningSceneMonitor::newPlanningSceneCallback(...) .../planning_scene_monitor.cpp:651
#4 planning_scene_monitor::PlanningSceneMonitor::startSceneMonitor(...)::$_15::operator()(...) const .../planning_scene_monitor.cpp:1117
(other stack)
#6 planning_scene_monitor::PlanningSceneMonitor::newPlanningSceneMessage(...) .../planning_scene_monitor.cpp:687
#3 planning_scene_monitor::PlanningSceneMonitor::attachObjectCallback(...) .../planning_scene_monitor.cpp:807
#4 planning_scene_monitor::PlanningSceneMonitor::startStateMonitor(...)::$_20::operator()(...) const .../planning_scene_monitor.cpp:1286
SUMMARY: ThreadSanitizer: data race .../tsan_new_delete.cpp:150 in operator delete(void*, unsigned long)
### ROS Distro
Humble
### OS and version
Ubuntu 24.04.3 LTS
### Source or binary build?
Source
### If binary, which release version?
_No response_
### If source, which branch?
• humble branch (commit e7004f4).
### Which RMW are you using?
None
### Steps to Reproduce
• 1. Clone MoveIt2 (Humble):
```bash
cd <ws>/src
git clone https://github.com/moveit/moveit2.git --branch humble --depth=1
2. Build and run with ThreadSanitizer-enabled setup (same environment used in this report):
- ROS 2 Humble
- CC=clang, CXX=clang++
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
3. Run the planning_scene_monitor stress target (10 minutes):
./build-multi-e2e/stage2-fuzzer/scarab_e2e_runner \
--target moveit2_planning_scene_monitor \
--candidates nav2_ws/stage2/moveit2_ast_reanalysis_20260305/stage1/moveit2_all_candidates.json \
--duration 600 \
--threads 4 \
--output-dir /tmp/moveit2_psm_run
4. Inspect the run log for ThreadSanitizer data race reports referencing:
- planning_scene_monitor.cpp:651
- planning_scene_monitor.cpp:1117
- planning_scene_monitor.cpp:687
- planning_scene_monitor.cpp:807
- planning_scene_monitor.cpp:1286
5. Reference reproduced log:
- nav2_ws/stage2/moveit2_psm_pass_runs_20260305/run3/run.log
### Expected behavior
No data races should be reported by ThreadSanitizer in `planning_scene_monitor` callback paths
### Actual behavior
• ThreadSanitizer reports data races during concurrent `planning_scene_monitor` callback execution, with stacks pointing to
`planning_scene_monitor.cpp:651, 1117, 687, 807, 1286`.
### Backtrace or Console output
_No response_
Description
Summary
A data race occurs in
planning_scene_monitor::PlanningSceneMonitoracross planning scene/state callbacks.Affected Location
moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:651moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:1117moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:687moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:807moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:1286Observed Result
ThreadSanitizer reports data races between planning scene callback paths and state/attach callbacks.