================ @@ -312,10 +312,27 @@ NativeProcessLinux::Manager::Attach( Log *log = GetLog(POSIXLog::Process); LLDB_LOG(log, "pid = {0:x}", pid); - auto tids_or = NativeProcessLinux::Attach(pid); - if (!tids_or) - return tids_or.takeError(); - ArrayRef<::pid_t> tids = *tids_or; + // This safety check lets us decide if we should + // seize or attach. + ProcessInstanceInfo process_info; + if (!Host::GetProcessInfo(pid, process_info)) + return llvm::make_error<StringError>("Unable to read process info", + llvm::inconvertibleErrorCode()); + + std::vector<::pid_t> tids; + // IsCoreDumping is an optional, so check for value then true/false. + if (process_info.IsCoreDumping() && *process_info.IsCoreDumping()) { + auto attached_or = NativeProcessLinux::Seize(pid); + if (!attached_or) + return attached_or.takeError(); + tids = std::move(*attached_or); + } else { + auto attached_or = NativeProcessLinux::Attach(pid); + if (!attached_or) + return attached_or.takeError(); + tids = std::move(*attached_or); ---------------- DavidSpickett wrote:
Can you refactor this to have only one set of `if (!... ... tids = ` lines? Maybe not because the `auto` would resolve to different things. Maybe you can do: ``` auto attached_or = is_core_dumping ? NativeProcessLinux::Seize(pid) : NativeProcessLinux::Attach(pid); ``` https://github.com/llvm/llvm-project/pull/137041 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits