Skip to content

Commit fe34580

Browse files
committed
Unlink file on failure
1 parent 96b7c64 commit fe34580

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1218,3 +1218,16 @@ Status MinidumpFileBuilder::DumpFile() {
12181218

12191219
return error;
12201220
}
1221+
1222+
1223+
void MinidumpFileBuilder::DeleteFile() {
1224+
Log *log = GetLog(LLDBLog::Object);
1225+
1226+
if (m_core_file) {
1227+
Status error = m_core_file->Close();
1228+
if (error.Fail())
1229+
LLDB_LOGF(log, "Failed to close minidump file: %s", error.AsCString());
1230+
1231+
m_core_file.reset();
1232+
}
1233+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ class MinidumpFileBuilder {
115115
// Run cleanup and write all remaining bytes to file
116116
lldb_private::Status DumpFile();
117117

118+
// Delete the file if it exists
119+
void DeleteFile();
120+
118121
private:
119122
// Add data to the end of the buffer, if the buffer exceeds the flush level,
120123
// trigger a flush.

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,28 +81,33 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
8181
if (error.Fail()) {
8282
LLDB_LOGF(log, "AddHeaderAndCalculateDirectories failed: %s",
8383
error.AsCString());
84+
builder.DeleteFile();
8485
return false;
8586
};
8687
error = builder.AddSystemInfo();
8788
if (error.Fail()) {
8889
LLDB_LOGF(log, "AddSystemInfo failed: %s", error.AsCString());
90+
builder.DeleteFile();
8991
return false;
9092
}
9193

9294
error = builder.AddModuleList();
9395
if (error.Fail()) {
9496
LLDB_LOGF(log, "AddModuleList failed: %s", error.AsCString());
97+
builder.DeleteFile();
9598
return false;
9699
}
97100
error = builder.AddMiscInfo();
98101
if (error.Fail()) {
99102
LLDB_LOGF(log, "AddMiscInfo failed: %s", error.AsCString());
103+
builder.DeleteFile();
100104
return false;
101105
}
102106

103107
error = builder.AddThreadList();
104108
if (error.Fail()) {
105109
LLDB_LOGF(log, "AddThreadList failed: %s", error.AsCString());
110+
builder.DeleteFile();
106111
return false;
107112
}
108113

@@ -116,6 +121,7 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
116121
error = builder.AddExceptions();
117122
if (error.Fail()) {
118123
LLDB_LOGF(log, "AddExceptions failed: %s", error.AsCString());
124+
builder.DeleteFile();
119125
return false;
120126
}
121127

@@ -124,12 +130,14 @@ bool ObjectFileMinidump::SaveCore(const lldb::ProcessSP &process_sp,
124130
error = builder.AddMemoryList();
125131
if (error.Fail()) {
126132
LLDB_LOGF(log, "AddMemoryList failed: %s", error.AsCString());
133+
builder.DeleteFile();
127134
return false;
128135
}
129136

130137
error = builder.DumpFile();
131138
if (error.Fail()) {
132139
LLDB_LOGF(log, "DumpFile failed: %s", error.AsCString());
140+
builder.DeleteFile();
133141
return false;
134142
}
135143

0 commit comments

Comments
 (0)