Skip to content

Commit 7150acb

Browse files
committed
use RAII object
1 parent 8a51bd0 commit 7150acb

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

lldb/source/Plugins/ObjectFile/Minidump/MinidumpFileBuilder.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1220,7 +1220,7 @@ Status MinidumpFileBuilder::DumpFile() {
12201220
}
12211221

12221222

1223-
void MinidumpFileBuilder::DeleteFile() {
1223+
void MinidumpFileBuilder::DeleteFile() noexcept {
12241224
Log *log = GetLog(LLDBLog::Object);
12251225

12261226
if (m_core_file) {

lldb/source/Plugins/ObjectFile/Minidump/MinidumpFileBuilder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ class MinidumpFileBuilder {
116116
lldb_private::Status DumpFile();
117117

118118
// Delete the file if it exists
119-
void DeleteFile();
119+
void DeleteFile() noexcept;
120120

121121
private:
122122
// Add data to the end of the buffer, if the buffer exceeds the flush level,

lldb/source/Plugins/ObjectFile/Minidump/ObjectFileMinidump.cpp

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
5873
bool 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

Comments
 (0)