Chromium Code Reviews| 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 |