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()) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits