[Lldb-commits] [lldb] r349435 - Call DeleteCurrentProcess before we replace the old process.
Jim Ingham via lldb-commits
lldb-commits at lists.llvm.org
Mon Dec 17 17:49:02 PST 2018
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 "
More information about the lldb-commits
mailing list