@@ -55,6 +55,21 @@ size_t ObjectFileMinidump::GetModuleSpecifications(
55
55
return 0 ;
56
56
}
57
57
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
+
58
73
bool ObjectFileMinidump::SaveCore (const lldb::ProcessSP &process_sp,
59
74
lldb_private::SaveCoreOptions &options,
60
75
lldb_private::Status &error) {
@@ -75,39 +90,35 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
75
90
}
76
91
MinidumpFileBuilder builder (std::move (maybe_core_file.get ()), process_sp,
77
92
options);
93
+ SaveCoreRequest request (builder);
78
94
79
95
Log *log = GetLog (LLDBLog::Object);
80
96
error = builder.AddHeaderAndCalculateDirectories ();
81
97
if (error.Fail ()) {
82
98
LLDB_LOGF (log, " AddHeaderAndCalculateDirectories failed: %s" ,
83
99
error.AsCString ());
84
- builder.DeleteFile ();
85
100
return false ;
86
101
};
87
102
error = builder.AddSystemInfo ();
88
103
if (error.Fail ()) {
89
104
LLDB_LOGF (log, " AddSystemInfo failed: %s" , error.AsCString ());
90
- builder.DeleteFile ();
91
105
return false ;
92
106
}
93
107
94
108
error = builder.AddModuleList ();
95
109
if (error.Fail ()) {
96
110
LLDB_LOGF (log, " AddModuleList failed: %s" , error.AsCString ());
97
- builder.DeleteFile ();
98
111
return false ;
99
112
}
100
113
error = builder.AddMiscInfo ();
101
114
if (error.Fail ()) {
102
115
LLDB_LOGF (log, " AddMiscInfo failed: %s" , error.AsCString ());
103
- builder.DeleteFile ();
104
116
return false ;
105
117
}
106
118
107
119
error = builder.AddThreadList ();
108
120
if (error.Fail ()) {
109
121
LLDB_LOGF (log, " AddThreadList failed: %s" , error.AsCString ());
110
- builder.DeleteFile ();
111
122
return false ;
112
123
}
113
124
@@ -121,7 +132,6 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
121
132
error = builder.AddExceptions ();
122
133
if (error.Fail ()) {
123
134
LLDB_LOGF (log, " AddExceptions failed: %s" , error.AsCString ());
124
- builder.DeleteFile ();
125
135
return false ;
126
136
}
127
137
@@ -130,16 +140,16 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
130
140
error = builder.AddMemoryList ();
131
141
if (error.Fail ()) {
132
142
LLDB_LOGF (log, " AddMemoryList failed: %s" , error.AsCString ());
133
- builder.DeleteFile ();
134
143
return false ;
135
144
}
136
145
137
146
error = builder.DumpFile ();
138
147
if (error.Fail ()) {
139
148
LLDB_LOGF (log, " DumpFile failed: %s" , error.AsCString ());
140
- builder.DeleteFile ();
141
149
return false ;
142
150
}
143
151
152
+ request.SetSuccess ();
153
+
144
154
return true ;
145
155
}
0 commit comments