Commit 2b9e571
Fix Blackboard thread-safety data races
Fix 6 data races in Blackboard, verified with ThreadSanitizer (clang-21):
- set() new-entry path: wrote value/sequence_id/stamp without
entry_mutex after createEntryImpl — add scoped_lock on entry_mutex
- set() existing-entry path: held raw reference after unlocking
storage_mutex_, risking use-after-free if concurrent unset() erases
the entry — copy shared_ptr before unlocking
- cloneInto(): read/wrote entry members without entry_mutex —
add scoped_lock on src and dst entry mutexes
- ImportBlackboardFromJSON(): wrote entry->value without any lock —
add scoped_lock on entry_mutex
- debugMessage(): iterated storage_ without storage_mutex_ —
add unique_lock
- getKeys(): iterated storage_ without storage_mutex_ —
add unique_lock
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent a557f3c commit 2b9e571
File tree
4 files changed
+358
-4
lines changed- include/behaviortree_cpp
- src
- tests
4 files changed
+358
-4
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
303 | | - | |
304 | 303 | | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
305 | 307 | | |
306 | 308 | | |
307 | 309 | | |
| |||
310 | 312 | | |
311 | 313 | | |
312 | 314 | | |
313 | | - | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
314 | 318 | | |
| 319 | + | |
315 | 320 | | |
316 | 321 | | |
317 | 322 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
103 | 103 | | |
104 | 104 | | |
105 | 105 | | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
106 | 109 | | |
107 | 110 | | |
108 | 111 | | |
| |||
136 | 139 | | |
137 | 140 | | |
138 | 141 | | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
139 | 145 | | |
140 | 146 | | |
141 | 147 | | |
| |||
200 | 206 | | |
201 | 207 | | |
202 | 208 | | |
203 | | - | |
| 209 | + | |
| 210 | + | |
204 | 211 | | |
| 212 | + | |
205 | 213 | | |
206 | 214 | | |
207 | 215 | | |
| |||
210 | 218 | | |
211 | 219 | | |
212 | 220 | | |
213 | | - | |
| 221 | + | |
| 222 | + | |
214 | 223 | | |
215 | 224 | | |
216 | 225 | | |
| |||
317 | 326 | | |
318 | 327 | | |
319 | 328 | | |
| 329 | + | |
| 330 | + | |
320 | 331 | | |
321 | 332 | | |
322 | 333 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
| 58 | + | |
58 | 59 | | |
59 | 60 | | |
60 | 61 | | |
| |||
0 commit comments