We got a few crash reports that showed LLDB initializing Python on two separate threads. Make sure Python is initialized exactly once.
rdar://87287005
Differential D117601
[lldb] Make Python initialization atomic JDevlieghere on Jan 18 2022, 1:34 PM. Authored by
Details
We got a few crash reports that showed LLDB initializing Python on two separate threads. Make sure Python is initialized exactly once. rdar://87287005
Diff Detail Event TimelineComment Actions I don't think that atomic<bool> is what you want here. In the case of a race, the "loser" will immediately continue to use python as if it was initialized, even though the winner has not finished the initialization. You most likely need call_once semantics, blocking all threads until the initialization completes. That said, I think think it would be better to do this initialization in the Initialize static function. Out of general cleanliness, but with a particular with a view towards the SIGINT patch. That way the initialization functions happens in a predictable and single-threaded context (as you can see, threads are hard), hopefully at a point where nobody will care that we're mucking with the SIGINT handlers.
|
I just moved this into the existing anonymous namespace above.