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; |