[Lldb-commits] [lldb] r332261 - Revert "Remove Process references from the Host module"

Pavel Labath via lldb-commits lldb-commits at lists.llvm.org
Mon May 14 09:54:53 PDT 2018


Author: labath
Date: Mon May 14 09:54:53 2018
New Revision: 332261

URL: http://llvm.org/viewvc/llvm-project?rev=332261&view=rev
Log:
Revert "Remove Process references from the Host module"

The first fix wasn't enough, there is still a missing
ProcessInstanceInfo include in Host.mm. I won't be able to test a fix
before leaving work, so I am reverting both commits.

This reverts commit r332250 and the subsequent fix attempt.

Modified:
    lldb/trunk/include/lldb/Host/Host.h
    lldb/trunk/include/lldb/Host/MonitoringProcessLauncher.h
    lldb/trunk/include/lldb/Target/ProcessLaunchInfo.h
    lldb/trunk/source/Host/common/MonitoringProcessLauncher.cpp
    lldb/trunk/source/Host/common/NativeProcessProtocol.cpp
    lldb/trunk/source/Host/macosx/Host.mm
    lldb/trunk/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
    lldb/trunk/source/Target/ProcessLaunchInfo.cpp
    lldb/trunk/unittests/tools/lldb-server/tests/TestClient.cpp

Modified: lldb/trunk/include/lldb/Host/Host.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/Host.h?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Host/Host.h (original)
+++ lldb/trunk/include/lldb/Host/Host.h Mon May 14 09:54:53 2018
@@ -199,9 +199,6 @@ public:
 
   static const lldb::UnixSignalsSP &GetUnixSignals();
 
-  /// Launch the process specified in launch_info. The monitoring callback in
-  /// launch_info must be set, and it will be called when the process
-  /// terminates.
   static Status LaunchProcess(ProcessLaunchInfo &launch_info);
 
   //------------------------------------------------------------------

Modified: lldb/trunk/include/lldb/Host/MonitoringProcessLauncher.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Host/MonitoringProcessLauncher.h?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Host/MonitoringProcessLauncher.h (original)
+++ lldb/trunk/include/lldb/Host/MonitoringProcessLauncher.h Mon May 14 09:54:53 2018
@@ -24,9 +24,6 @@ public:
   explicit MonitoringProcessLauncher(
       std::unique_ptr<ProcessLauncher> delegate_launcher);
 
-  /// Launch the process specified in launch_info. The monitoring callback in
-  /// launch_info must be set, and it will be called when the process
-  /// terminates.
   HostProcess LaunchProcess(const ProcessLaunchInfo &launch_info,
                             Status &error) override;
 

Modified: lldb/trunk/include/lldb/Target/ProcessLaunchInfo.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ProcessLaunchInfo.h?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ProcessLaunchInfo.h (original)
+++ lldb/trunk/include/lldb/Target/ProcessLaunchInfo.h Mon May 14 09:54:53 2018
@@ -107,12 +107,6 @@ public:
     return m_monitor_callback;
   }
 
-  /// A Monitor callback which does not take any action on process events. Use
-  /// this if you don't need to take any particular action when the process
-  /// terminates, but you still need to reap it.
-  static bool NoOpMonitorCallback(lldb::pid_t pid, bool exited, int signal,
-                                  int status);
-
   bool GetMonitorSignals() const { return m_monitor_signals; }
 
   // If the LaunchInfo has a monitor callback, then arrange to monitor the

Modified: lldb/trunk/source/Host/common/MonitoringProcessLauncher.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/MonitoringProcessLauncher.cpp?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/source/Host/common/MonitoringProcessLauncher.cpp (original)
+++ lldb/trunk/source/Host/common/MonitoringProcessLauncher.cpp Mon May 14 09:54:53 2018
@@ -9,6 +9,7 @@
 
 #include "lldb/Host/MonitoringProcessLauncher.h"
 #include "lldb/Host/HostProcess.h"
+#include "lldb/Target/Process.h"
 #include "lldb/Target/ProcessLaunchInfo.h"
 #include "lldb/Utility/Log.h"
 #include "lldb/Utility/Status.h"
@@ -57,9 +58,18 @@ MonitoringProcessLauncher::LaunchProcess
   if (process.GetProcessId() != LLDB_INVALID_PROCESS_ID) {
     Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS));
 
-    assert(launch_info.GetMonitorProcessCallback());
-    process.StartMonitoring(launch_info.GetMonitorProcessCallback(),
-                            launch_info.GetMonitorSignals());
+    Host::MonitorChildProcessCallback callback =
+        launch_info.GetMonitorProcessCallback();
+
+    bool monitor_signals = false;
+    if (callback) {
+      // If the ProcessLaunchInfo specified a callback, use that.
+      monitor_signals = launch_info.GetMonitorSignals();
+    } else {
+      callback = Process::SetProcessExitStatus;
+    }
+
+    process.StartMonitoring(callback, monitor_signals);
     if (log)
       log->PutCString("started monitoring child process.");
   } else {

Modified: lldb/trunk/source/Host/common/NativeProcessProtocol.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/NativeProcessProtocol.cpp?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/source/Host/common/NativeProcessProtocol.cpp (original)
+++ lldb/trunk/source/Host/common/NativeProcessProtocol.cpp Mon May 14 09:54:53 2018
@@ -13,6 +13,7 @@
 #include "lldb/Host/common/NativeRegisterContext.h"
 #include "lldb/Host/common/NativeThreadProtocol.h"
 #include "lldb/Host/common/SoftwareBreakpoint.h"
+#include "lldb/Target/Process.h"
 #include "lldb/Utility/LLDBAssert.h"
 #include "lldb/Utility/Log.h"
 #include "lldb/lldb-enumerations.h"

Modified: lldb/trunk/source/Host/macosx/Host.mm
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/macosx/Host.mm?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/source/Host/macosx/Host.mm (original)
+++ lldb/trunk/source/Host/macosx/Host.mm Mon May 14 09:54:53 2018
@@ -57,7 +57,7 @@
 #include "lldb/Host/ConnectionFileDescriptor.h"
 #include "lldb/Host/HostInfo.h"
 #include "lldb/Host/ThreadLauncher.h"
-#include "lldb/Target/ProcessLaunchInfo.h"
+#include "lldb/Target/Process.h"
 #include "lldb/Utility/ArchSpec.h"
 #include "lldb/Utility/CleanUp.h"
 #include "lldb/Utility/DataBufferHeap.h"
@@ -68,7 +68,6 @@
 #include "lldb/Utility/NameMatches.h"
 #include "lldb/Utility/StreamString.h"
 #include "lldb/Utility/StructuredData.h"
-#include "lldb/lldb-defines.h"
 
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Errno.h"
@@ -1498,9 +1497,15 @@ Status Host::LaunchProcess(ProcessLaunch
     launch_info.SetProcessID(pid);
 
     // Make sure we reap any processes we spawn or we will have zombies.
-    bool monitoring = launch_info.MonitorProcess());
-    UNUSED_IF_ASSERT_DISABLED(monitoring);
-    assert(monitoring);
+    if (!launch_info.MonitorProcess()) {
+      const bool monitor_signals = false;
+      Host::MonitorChildProcessCallback callback = nullptr;
+
+      if (!launch_info.GetFlags().Test(lldb::eLaunchFlagDontSetExitStatus))
+        callback = Process::SetProcessExitStatus;
+
+      StartMonitoringChildProcess(callback, pid, monitor_signals);
+    }
   } else {
     // Invalid process ID, something didn't go well
     if (error.Success())

Modified: lldb/trunk/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp (original)
+++ lldb/trunk/source/Plugins/Platform/POSIX/PlatformPOSIX.cpp Mon May 14 09:54:53 2018
@@ -868,12 +868,11 @@ PlatformPOSIX::DebugProcess(ProcessLaunc
 
   if (IsHost()) {
     // We are going to hand this process off to debugserver which will be in
-    // charge of setting the exit status.  However, we still need to reap it
-    // from lldb. So, make sure we use a exit callback which does not set exit
-    // status.
-    const bool monitor_signals = false;
-    launch_info.SetMonitorProcessCallback(
-        &ProcessLaunchInfo::NoOpMonitorCallback, monitor_signals);
+    // charge of setting the exit status. We still need to reap it from lldb
+    // but if we let the monitor thread also set the exit status, we set up a
+    // race between debugserver & us for who will find out about the debugged
+    // process's death.
+    launch_info.GetFlags().Set(eLaunchFlagDontSetExitStatus);
     process_sp = Platform::DebugProcess(launch_info, debugger, target, error);
   } else {
     if (m_remote_platform_sp)

Modified: lldb/trunk/source/Target/ProcessLaunchInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ProcessLaunchInfo.cpp?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/source/Target/ProcessLaunchInfo.cpp (original)
+++ lldb/trunk/source/Target/ProcessLaunchInfo.cpp Mon May 14 09:54:53 2018
@@ -189,13 +189,6 @@ void ProcessLaunchInfo::SetMonitorProces
   m_monitor_signals = monitor_signals;
 }
 
-bool ProcessLaunchInfo::NoOpMonitorCallback(lldb::pid_t pid, bool exited, int signal, int status) {
-  Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_PROCESS);
-  LLDB_LOG(log, "pid = {0}, exited = {1}, signal = {2}, status = {3}", pid,
-           exited, signal, status);
-  return true;
-}
-
 bool ProcessLaunchInfo::MonitorProcess() const {
   if (m_monitor_callback && ProcessIDIsValid()) {
     Host::StartMonitoringChildProcess(m_monitor_callback, GetProcessID(),

Modified: lldb/trunk/unittests/tools/lldb-server/tests/TestClient.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/tools/lldb-server/tests/TestClient.cpp?rev=332261&r1=332260&r2=332261&view=diff
==============================================================================
--- lldb/trunk/unittests/tools/lldb-server/tests/TestClient.cpp (original)
+++ lldb/trunk/unittests/tools/lldb-server/tests/TestClient.cpp Mon May 14 09:54:53 2018
@@ -97,11 +97,6 @@ Expected<std::unique_ptr<TestClient>> Te
   Info.SetArchitecture(arch_spec);
   Info.SetArguments(args, true);
   Info.GetEnvironment() = Host::GetEnvironment();
-  // TODO: Use this callback to detect botched launches. If lldb-server does not
-  // start, we can print a nice error message here instead of hanging in
-  // Accept().
-  Info.SetMonitorProcessCallback(&ProcessLaunchInfo::NoOpMonitorCallback,
-                                 false);
 
   status = Host::LaunchProcess(Info);
   if (status.Fail())




More information about the lldb-commits mailing list