Skip to content

Data race across scene/state callbacks (planning_scene_monitor.cpp:651, 1117, 687, 807, 1286) #3697

@Finder16

Description

@Finder16

Description

Summary

A data race occurs in planning_scene_monitor::PlanningSceneMonitor across planning scene/state callbacks.

Affected Location

  • moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:651
  • moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:1117
  • moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:687
  • moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:807
  • moveit_ros/planning/planning_scene_monitor/src/planning_scene_monitor.cpp:1286

Observed Result

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_

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions