@@ -55,6 +55,21 @@ size_t ObjectFileMinidump::GetModuleSpecifications(
5555 return 0 ;
5656}
5757
58+ struct SaveCoreRequest {
59+ SaveCoreRequest (MinidumpFileBuilder &builder) : m_builder(builder) {}
60+
61+ ~SaveCoreRequest () {
62+ if (!m_success)
63+ m_builder.DeleteFile ();
64+ }
65+
66+ void SetSuccess () { m_success = true ; }
67+
68+ private:
69+ MinidumpFileBuilder &m_builder;
70+ bool m_success = false ;
71+ };
72+
5873bool ObjectFileMinidump::SaveCore (const lldb::ProcessSP &process_sp,
5974 lldb_private::SaveCoreOptions &options,
6075 lldb_private::Status &error) {
@@ -75,39 +90,35 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
7590 }
7691 MinidumpFileBuilder builder (std::move (maybe_core_file.get ()), process_sp,
7792 options);
93+ SaveCoreRequest request (builder);
7894
7995 Log *log = GetLog (LLDBLog::Object);
8096 error = builder.AddHeaderAndCalculateDirectories ();
8197 if (error.Fail ()) {
8298 LLDB_LOGF (log, " AddHeaderAndCalculateDirectories failed: %s" ,
8399 error.AsCString ());
84- builder.DeleteFile ();
85100 return false ;
86101 };
87102 error = builder.AddSystemInfo ();
88103 if (error.Fail ()) {
89104 LLDB_LOGF (log, " AddSystemInfo failed: %s" , error.AsCString ());
90- builder.DeleteFile ();
91105 return false ;
92106 }
93107
94108 error = builder.AddModuleList ();
95109 if (error.Fail ()) {
96110 LLDB_LOGF (log, " AddModuleList failed: %s" , error.AsCString ());
97- builder.DeleteFile ();
98111 return false ;
99112 }
100113 error = builder.AddMiscInfo ();
101114 if (error.Fail ()) {
102115 LLDB_LOGF (log, " AddMiscInfo failed: %s" , error.AsCString ());
103- builder.DeleteFile ();
104116 return false ;
105117 }
106118
107119 error = builder.AddThreadList ();
108120 if (error.Fail ()) {
109121 LLDB_LOGF (log, " AddThreadList failed: %s" , error.AsCString ());
110- builder.DeleteFile ();
111122 return false ;
112123 }
113124
@@ -121,7 +132,6 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
121132 error = builder.AddExceptions ();
122133 if (error.Fail ()) {
123134 LLDB_LOGF (log, " AddExceptions failed: %s" , error.AsCString ());
124- builder.DeleteFile ();
125135 return false ;
126136 }
127137
@@ -130,16 +140,16 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
130140 error = builder.AddMemoryList ();
131141 if (error.Fail ()) {
132142 LLDB_LOGF (log, " AddMemoryList failed: %s" , error.AsCString ());
133- builder.DeleteFile ();
134143 return false ;
135144 }
136145
137146 error = builder.DumpFile ();
138147 if (error.Fail ()) {
139148 LLDB_LOGF (log, " DumpFile failed: %s" , error.AsCString ());
140- builder.DeleteFile ();
141149 return false ;
142150 }
143151
152+ request.SetSuccess ();
153+
144154 return true ;
145155}
0 commit comments