Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: util/win/exception_handler_server.cc

Issue 1356383002: win: Implement CRASHPAD_SIMULATE_CRASH() (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: . Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: util/win/exception_handler_server.cc
diff --git a/util/win/exception_handler_server.cc b/util/win/exception_handler_server.cc
index bcdec6a21d43b10ed14b077bc0b6f2d69ebb5038..fba8c1a310213e78876424eef5d07308034bfff9 100644
--- a/util/win/exception_handler_server.cc
+++ b/util/win/exception_handler_server.cc
@@ -113,6 +113,8 @@ class ClientData {
delegate_(delegate),
dump_requested_event_(
CreateEvent(nullptr, false /* auto reset */, false, nullptr)),
+ dump_completed_event_(
+ CreateEvent(nullptr, false /* auto reset */, false, nullptr)),
process_(process.Pass()),
exception_information_address_(exception_information_address) {
RegisterThreadPoolWaits(dump_request_callback, process_end_callback);
@@ -129,6 +131,7 @@ class ClientData {
HANDLE port() const { return port_; }
ExceptionHandlerServer::Delegate* delegate() const { return delegate_; }
HANDLE dump_requested_event() const { return dump_requested_event_.get(); }
+ HANDLE dump_completed_event() const { return dump_completed_event_.get(); }
WinVMAddress exception_information_address() const {
return exception_information_address_;
}
@@ -175,6 +178,7 @@ class ClientData {
HANDLE port_; // weak
ExceptionHandlerServer::Delegate* delegate_; // weak
ScopedKernelHANDLE dump_requested_event_;
+ ScopedKernelHANDLE dump_completed_event_;
ScopedKernelHANDLE process_;
WinVMAddress exception_information_address_;
@@ -379,6 +383,9 @@ bool ExceptionHandlerServer::ServiceClientConnection(
response.registration.request_report_event =
base::checked_cast<uint32_t>(reinterpret_cast<uintptr_t>(
DuplicateEvent(client->process(), client->dump_requested_event())));
+ response.registration.report_completed_event =
+ base::checked_cast<uint32_t>(reinterpret_cast<uintptr_t>(
+ DuplicateEvent(client->process(), client->dump_completed_event())));
if (!LoggingWriteFile(service_context.pipe(), &response, sizeof(response)))
return false;
@@ -414,10 +421,11 @@ void __stdcall ExceptionHandlerServer::OnDumpEvent(void* ctx, BOOLEAN) {
base::AutoLock lock(*client->lock());
// Capture the exception.
- unsigned int exit_code = client->delegate()->ExceptionHandlerServerException(
+ client->delegate()->ExceptionHandlerServerException(
client->process(), client->exception_information_address());
- TerminateProcess(client->process(), exit_code);
+ // Release the client.
+ SetEvent(client->dump_completed_event());
Mark Mentovai 2015/09/23 20:00:52 PLOG_IF this fails.
scottmg 2015/09/24 19:16:52 Done.
}
// static

Powered by Google App Engine
This is Rietveld 408576698