aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormmentovai <mmentovai@4c0a9323-5329-0410-9bdc-e9ce6186880e>2006-11-28 19:47:44 +0000
committermmentovai <mmentovai@4c0a9323-5329-0410-9bdc-e9ce6186880e>2006-11-28 19:47:44 +0000
commited61ae0bbdb965e434b6cd629ca30cc7836163fc (patch)
tree9f0769b3256aebac643572766d01ec8a71e0194a
parentEliminate usage of vector<>[0] for 0-sized vectors in processor library (#84). (diff)
downloadbreakpad-ed61ae0bbdb965e434b6cd629ca30cc7836163fc.tar.xz
Don't use CRT in exception handler code (#86). r=bryner
http://groups.google.com/group/airbag-dev/browse_thread/thread/f671277ebd6ea7fd git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@73 4c0a9323-5329-0410-9bdc-e9ce6186880e
-rw-r--r--src/client/windows/handler/exception_handler.cc13
-rw-r--r--src/client/windows/handler/exception_handler.h9
2 files changed, 14 insertions, 8 deletions
diff --git a/src/client/windows/handler/exception_handler.cc b/src/client/windows/handler/exception_handler.cc
index 130add2e..4df0cef3 100644
--- a/src/client/windows/handler/exception_handler.cc
+++ b/src/client/windows/handler/exception_handler.cc
@@ -173,14 +173,9 @@ bool ExceptionHandler::WriteMinidump(const wstring &dump_path,
bool ExceptionHandler::WriteMinidumpWithException(DWORD requesting_thread_id,
EXCEPTION_POINTERS *exinfo) {
- wchar_t dump_file_name[MAX_PATH];
- WindowsStringUtils::safe_swprintf(dump_file_name, MAX_PATH, L"%s\\%s.dmp",
- dump_path_.c_str(),
- next_minidump_id_.c_str());
-
bool success = false;
if (minidump_write_dump_) {
- HANDLE dump_file = CreateFile(dump_file_name,
+ HANDLE dump_file = CreateFile(next_minidump_path_.c_str(),
GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
@@ -239,6 +234,12 @@ void ExceptionHandler::UpdateNextID() {
GUID id;
CoCreateGuid(&id);
next_minidump_id_ = GUIDString::GUIDToWString(&id);
+
+ wchar_t minidump_path[MAX_PATH];
+ WindowsStringUtils::safe_swprintf(minidump_path, MAX_PATH, L"%s\\%s.dmp",
+ dump_path_.c_str(),
+ next_minidump_id_.c_str());
+ next_minidump_path_ = minidump_path;
}
} // namespace google_airbag
diff --git a/src/client/windows/handler/exception_handler.h b/src/client/windows/handler/exception_handler.h
index b49093aa..b24a37b7 100644
--- a/src/client/windows/handler/exception_handler.h
+++ b/src/client/windows/handler/exception_handler.h
@@ -93,7 +93,10 @@ class ExceptionHandler {
// Get and set the minidump path.
wstring dump_path() const { return dump_path_; }
- void set_dump_path(const wstring &dump_path) { dump_path_ = dump_path; }
+ void set_dump_path(const wstring &dump_path) {
+ dump_path_ = dump_path;
+ UpdateNextID(); // Necessary to put dump_path_ in next_minidump_path_.
+ }
// Writes a minidump immediately. This can be used to capture the
// execution state independently of a crash. Returns true on success.
@@ -140,7 +143,8 @@ class ExceptionHandler {
bool WriteMinidumpWithException(DWORD requesting_thread_id,
EXCEPTION_POINTERS *exinfo);
- // Generates a new ID and stores it in next_minidump_id_.
+ // Generates a new ID and stores it in next_minidump_id_, and stores the
+ // path of the next minidump to be written in next_minidump_path_.
void UpdateNextID();
MinidumpCallback callback_;
@@ -148,6 +152,7 @@ class ExceptionHandler {
wstring dump_path_;
wstring next_minidump_id_;
+ wstring next_minidump_path_;
HMODULE dbghelp_module_;
MiniDumpWriteDump_type minidump_write_dump_;