Author: jingham Date: Mon Dec 17 17:49:02 2018 New Revision: 349435 URL: http://llvm.org/viewvc/llvm-project?rev=349435&view=rev Log: Call DeleteCurrentProcess before we replace the old process.
We need to ensure that Finalize gets called before we start to destroy the old Process or the weak_ptr->shared_ptr link from Threads to Target gets broken before the threads are destroyed. <rdar://problem/43586979> Differential Revision: https://reviews.llvm.org/D55631 Modified: lldb/trunk/source/Target/Target.cpp Modified: lldb/trunk/source/Target/Target.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Target.cpp?rev=349435&r1=349434&r2=349435&view=diff ============================================================================== --- lldb/trunk/source/Target/Target.cpp (original) +++ lldb/trunk/source/Target/Target.cpp Mon Dec 17 17:49:02 2018 @@ -2864,22 +2864,15 @@ Status Target::Launch(ProcessLaunchInfo log->Printf("Target::%s asking the platform to debug the process", __FUNCTION__); - // Get a weak pointer to the previous process if we have one - ProcessWP process_wp; - if (m_process_sp) - process_wp = m_process_sp; + // If there was a previous process, delete it before we make the new one. + // One subtle point, we delete the process before we release the reference + // to m_process_sp. That way even if we are the last owner, the process + // will get Finalized before it gets destroyed. + DeleteCurrentProcess(); + m_process_sp = GetPlatform()->DebugProcess(launch_info, debugger, this, error); - // Cleanup the old process since someone might still have a strong - // reference to this process and we would like to allow it to cleanup as - // much as it can without the object being destroyed. We try to lock the - // shared pointer and if that works, then someone else still has a strong - // reference to the process. - - ProcessSP old_process_sp(process_wp.lock()); - if (old_process_sp) - old_process_sp->Finalize(); } else { if (log) log->Printf("Target::%s the platform doesn't know how to debug a " _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits