Commit a4d7ee2
Fix thread-safely issue in IsolatedManagers
Summary:
There's a thread safety issue here:
Thread 1 swaps in it's map and swaps out the global one.
Thread 2 swaps in it's map and swaps out thread's 1.
Thread 1 completes and swaps the global one back in.
Thread 2 completes and swap's back in thread 1's - the value is stack allocated so now we have garbage.
Claude's solution is to use a thread-local to store the preload manager on the stack and then clear it out when done.
Reviewed By: jbower-fb
Differential Revision: D92114066
fbshipit-source-id: 59ce532c4b8c32fc1b5104dade9b1d909d1665b91 parent 973be8a commit a4d7ee2
3 files changed
Lines changed: 25 additions & 22 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
| 122 | + | |
122 | 123 | | |
123 | 124 | | |
124 | 125 | | |
| |||
535 | 536 | | |
536 | 537 | | |
537 | 538 | | |
| 539 | + | |
| 540 | + | |
| 541 | + | |
| 542 | + | |
538 | 543 | | |
539 | 544 | | |
540 | 545 | | |
541 | 546 | | |
542 | | - | |
543 | | - | |
544 | | - | |
545 | | - | |
546 | | - | |
547 | | - | |
548 | | - | |
| 547 | + | |
| 548 | + | |
549 | 549 | | |
550 | 550 | | |
551 | 551 | | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
552 | 555 | | |
553 | 556 | | |
554 | 557 | | |
555 | | - | |
556 | | - | |
| 558 | + | |
| 559 | + | |
557 | 560 | | |
558 | 561 | | |
559 | 562 | | |
560 | | - | |
561 | | - | |
562 | | - | |
563 | | - | |
564 | | - | |
| 563 | + | |
565 | 564 | | |
566 | 565 | | |
567 | 566 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
269 | 269 | | |
270 | 270 | | |
271 | 271 | | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
272 | 276 | | |
273 | 277 | | |
274 | 278 | | |
275 | | - | |
276 | | - | |
277 | | - | |
278 | | - | |
279 | 279 | | |
280 | 280 | | |
281 | 281 | | |
| |||
284 | 284 | | |
285 | 285 | | |
286 | 286 | | |
| 287 | + | |
| 288 | + | |
287 | 289 | | |
288 | 290 | | |
289 | 291 | | |
290 | 292 | | |
291 | 293 | | |
292 | 294 | | |
293 | | - | |
294 | | - | |
295 | | - | |
| 295 | + | |
| 296 | + | |
296 | 297 | | |
297 | 298 | | |
298 | 299 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3420 | 3420 | | |
3421 | 3421 | | |
3422 | 3422 | | |
3423 | | - | |
| 3423 | + | |
| 3424 | + | |
| 3425 | + | |
| 3426 | + | |
3424 | 3427 | | |
3425 | 3428 | | |
3426 | 3429 | | |
| |||
0 commit comments