| Index: src/client/linux/minidump_writer/minidump_writer.cc
|
| diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc
|
| index 9a0a830b13723b02cdec7930c4e49e4e5d4044d1..04327338b81d55cc84c97d2898bd1d0ad25f39b7 100644
|
| --- a/src/client/linux/minidump_writer/minidump_writer.cc
|
| +++ b/src/client/linux/minidump_writer/minidump_writer.cc
|
| @@ -168,19 +168,26 @@ class MinidumpWriter {
|
| // of stream which we write.
|
| unsigned kNumWriters = 13;
|
|
|
| - TypedMDRVA<MDRawHeader> header(&minidump_writer_);
|
| TypedMDRVA<MDRawDirectory> dir(&minidump_writer_);
|
| - if (!header.Allocate())
|
| - return false;
|
| - if (!dir.AllocateArray(kNumWriters))
|
| - return false;
|
| - my_memset(header.get(), 0, sizeof(MDRawHeader));
|
| + {
|
| + // Ensure the header gets flushed, as that happens in the destructor.
|
| + // If a crash occurs somewhere below, at least the header will be
|
| + // intact.
|
| + TypedMDRVA<MDRawHeader> header(&minidump_writer_);
|
| + if (!header.Allocate())
|
| + return false;
|
|
|
| - header.get()->signature = MD_HEADER_SIGNATURE;
|
| - header.get()->version = MD_HEADER_VERSION;
|
| - header.get()->time_date_stamp = time(NULL);
|
| - header.get()->stream_count = kNumWriters;
|
| - header.get()->stream_directory_rva = dir.position();
|
| + if (!dir.AllocateArray(kNumWriters))
|
| + return false;
|
| +
|
| + my_memset(header.get(), 0, sizeof(MDRawHeader));
|
| +
|
| + header.get()->signature = MD_HEADER_SIGNATURE;
|
| + header.get()->version = MD_HEADER_VERSION;
|
| + header.get()->time_date_stamp = time(NULL);
|
| + header.get()->stream_count = kNumWriters;
|
| + header.get()->stream_directory_rva = dir.position();
|
| + }
|
|
|
| unsigned dir_index = 0;
|
| MDRawDirectory dirent;
|
|
|