[Lldb-commits] [PATCH] D119548: [lldb] Fix race condition between lldb-vscode and stop hooks executor

Pavel Labath via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Feb 16 05:17:32 PST 2022


labath added a comment.

Doing it in the common code is a great idea, and it will make the code more robust. However, instead of "sneaking" the listener through a member variable, it would be better to pass it through function arguments instead (normally in the LaunchInfo struct, and as a probably as separate argument for the last mile). I believe this is what Jim had in mind as well.

See inline comments for details.



================
Comment at: lldb/source/Target/Process.cpp:2538-2539
         RestoreProcessEvents();
+        // Releasing the scope guard to avoid double restoring.
+        on_exit.release();
         SetPublicState(state, false);
----------------
It would be better if this could be achieved by restructuring the code so that the hijacking is really scope-based. E.g., moving the "file doesn't exist" check up front and making it an early exit, moving some stuff into helper functions, or whatever.


================
Comment at: lldb/source/Target/Target.cpp:202
                                              llvm::StringRef plugin_name,
                                              const FileSpec *crash_file,
                                              bool can_connect) {
----------------
Add an extra argument here.


================
Comment at: lldb/source/Target/Target.cpp:3044-3045
+    // they invoke Process::Launch.
+    m_hijacker_on_process_creation_sp =
+        Listener::MakeListener(hijacking_listener_name);
+    launch_info.SetHijackListener(m_hijacker_on_process_creation_sp);
----------------
Remove this. Make sure the listener in the launch_info is plumbed to the launch function.


================
Comment at: lldb/source/Target/Target.cpp:3069
     m_process_sp =
         GetPlatform()->DebugProcess(launch_info, debugger, *this, error);
 
----------------
Remove hijack listener creation from DebugProcess implementations (you can replace with an assert if you want).


================
Comment at: lldb/source/Target/Target.cpp:3106-3107
+    hijack_listener_sp = Listener::MakeListener(hijacking_listener_name);
     launch_info.SetHijackListener(hijack_listener_sp);
     m_process_sp->HijackProcessEvents(hijack_listener_sp);
   }
----------------
I guess we should just delete this now, as it is never correct to hijack events this late in the game.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119548/new/

https://reviews.llvm.org/D119548



More information about the lldb-commits mailing list