forked from OSchip/llvm-project
[Reproducers] Stop recording instead of deallocating
The command interpreter holds a pointer to a DataRecorder. After generating the reproducer, we deallocated all the DataRecorders, causing the command interpreter to hold a non-null reference to an invalid object. This patch changes the behavior of the command provider to stop the DataRecorders when a reproducer is generated, rather than deallocating them. llvm-svn: 355940
This commit is contained in:
parent
6c0bbfc0c9
commit
5650eb5b00
|
@ -115,7 +115,7 @@ class DataRecorder {
|
|||
public:
|
||||
DataRecorder(FileSpec filename, std::error_code &ec)
|
||||
: m_filename(std::move(filename)),
|
||||
m_os(m_filename.GetPath(), ec, llvm::sys::fs::F_Text) {}
|
||||
m_os(m_filename.GetPath(), ec, llvm::sys::fs::F_Text), m_record(true) {}
|
||||
|
||||
static llvm::Expected<std::unique_ptr<DataRecorder>>
|
||||
Create(FileSpec filename);
|
||||
|
@ -128,9 +128,15 @@ public:
|
|||
|
||||
const FileSpec &GetFilename() { return m_filename; }
|
||||
|
||||
void Stop() {
|
||||
assert(m_record);
|
||||
m_record = false;
|
||||
}
|
||||
|
||||
private:
|
||||
FileSpec m_filename;
|
||||
llvm::raw_fd_ostream m_os;
|
||||
bool m_record;
|
||||
};
|
||||
|
||||
struct CommandInfo {
|
||||
|
|
|
@ -247,8 +247,10 @@ DataRecorder *CommandProvider::GetNewDataRecorder() {
|
|||
|
||||
void CommandProvider::Keep() {
|
||||
std::vector<std::string> files;
|
||||
for (auto &recorder : m_data_recorders)
|
||||
for (auto &recorder : m_data_recorders) {
|
||||
recorder->Stop();
|
||||
files.push_back(recorder->GetFilename().GetPath());
|
||||
}
|
||||
|
||||
FileSpec file = GetRoot().CopyByAppendingPathComponent(info::file);
|
||||
std::error_code ec;
|
||||
|
|
Loading…
Reference in New Issue