We got a few crash reports that showed LLDB initializing Python on two separate threads. Make sure Python is initialized exactly once.
rdar://87287005
Paths
| Differential D117601
[lldb] Make Python initialization atomic ClosedPublic Authored by JDevlieghere on Jan 18 2022, 1:34 PM.
Details
Summary 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 TimelineJDevlieghere created this revision. This revision is now accepted and ready to land.Jan 18 2022, 2:15 PM Comment 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. Comment Actions
Makes sense. I’ll update the patch tomorrow. This revision is now accepted and ready to land.Jan 19 2022, 8:56 AM
Closed by commit rGeb5c0ea68180: [lldb] Initialize Python exactly once (authored by JDevlieghere). · Explain WhyJan 19 2022, 9:57 AM This revision was automatically updated to reflect the committed changes.
Revision Contents
Diff 401300 lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
lldb/unittests/ScriptInterpreter/Python/PythonTestSuite.cpp
|
I just moved this into the existing anonymous namespace above.