| OLD | NEW |
| 1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. | 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at | 5 // You may obtain a copy of the License at |
| 6 // | 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // | 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "base/posix/eintr_wrapper.h" | 25 #include "base/posix/eintr_wrapper.h" |
| 26 #include "base/strings/stringprintf.h" | 26 #include "base/strings/stringprintf.h" |
| 27 #include "util/mac/mac_util.h" | 27 #include "util/mac/mac_util.h" |
| 28 #include "util/mach/child_port_handshake.h" | 28 #include "util/mach/child_port_handshake.h" |
| 29 #include "util/mach/exception_ports.h" | 29 #include "util/mach/exception_ports.h" |
| 30 #include "util/mach/mach_extensions.h" | 30 #include "util/mach/mach_extensions.h" |
| 31 #include "util/mach/mach_message.h" | 31 #include "util/mach/mach_message.h" |
| 32 #include "util/mach/notify_server.h" | 32 #include "util/mach/notify_server.h" |
| 33 #include "util/misc/clock.h" | 33 #include "util/misc/clock.h" |
| 34 #include "util/misc/implicit_cast.h" | 34 #include "util/misc/implicit_cast.h" |
| 35 #include "util/stdlib/move.h" |
| 35 #include "util/posix/close_multiple.h" | 36 #include "util/posix/close_multiple.h" |
| 36 | 37 |
| 37 namespace crashpad { | 38 namespace crashpad { |
| 38 | 39 |
| 39 namespace { | 40 namespace { |
| 40 | 41 |
| 41 std::string FormatArgumentString(const std::string& name, | 42 std::string FormatArgumentString(const std::string& name, |
| 42 const std::string& value) { | 43 const std::string& value) { |
| 43 return base::StringPrintf("--%s=%s", name.c_str(), value.c_str()); | 44 return base::StringPrintf("--%s=%s", name.c_str(), value.c_str()); |
| 44 } | 45 } |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 // without the ability to restart. | 152 // without the ability to restart. |
| 152 handler_restarter.reset(); | 153 handler_restarter.reset(); |
| 153 } | 154 } |
| 154 } | 155 } |
| 155 | 156 |
| 156 if (!CommonStart(handler, | 157 if (!CommonStart(handler, |
| 157 database, | 158 database, |
| 158 url, | 159 url, |
| 159 annotations, | 160 annotations, |
| 160 arguments, | 161 arguments, |
| 161 receive_right.Pass(), | 162 crashpad::move(receive_right), |
| 162 handler_restarter.get(), | 163 handler_restarter.get(), |
| 163 false)) { | 164 false)) { |
| 164 return base::mac::ScopedMachSendRight(); | 165 return base::mac::ScopedMachSendRight(); |
| 165 } | 166 } |
| 166 | 167 |
| 167 if (handler_restarter && | 168 if (handler_restarter && |
| 168 handler_restarter->StartRestartThread( | 169 handler_restarter->StartRestartThread( |
| 169 handler, database, url, annotations, arguments)) { | 170 handler, database, url, annotations, arguments)) { |
| 170 // The thread owns the object now. | 171 // The thread owns the object now. |
| 171 ignore_result(handler_restarter.release()); | 172 ignore_result(handler_restarter.release()); |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 HandlerStarter::InitialStart(handler, | 532 HandlerStarter::InitialStart(handler, |
| 532 database, | 533 database, |
| 533 url, | 534 url, |
| 534 annotations, | 535 annotations, |
| 535 arguments, | 536 arguments, |
| 536 restartable && MacOSXMinorVersion() >= 10)); | 537 restartable && MacOSXMinorVersion() >= 10)); |
| 537 if (!exception_port.is_valid()) { | 538 if (!exception_port.is_valid()) { |
| 538 return false; | 539 return false; |
| 539 } | 540 } |
| 540 | 541 |
| 541 SetHandlerMachPort(exception_port.Pass()); | 542 SetHandlerMachPort(crashpad::move(exception_port)); |
| 542 return true; | 543 return true; |
| 543 } | 544 } |
| 544 | 545 |
| 545 bool CrashpadClient::SetHandlerMachService(const std::string& service_name) { | 546 bool CrashpadClient::SetHandlerMachService(const std::string& service_name) { |
| 546 base::mac::ScopedMachSendRight exception_port(BootstrapLookUp(service_name)); | 547 base::mac::ScopedMachSendRight exception_port(BootstrapLookUp(service_name)); |
| 547 if (!exception_port.is_valid()) { | 548 if (!exception_port.is_valid()) { |
| 548 return false; | 549 return false; |
| 549 } | 550 } |
| 550 | 551 |
| 551 SetHandlerMachPort(exception_port.Pass()); | 552 SetHandlerMachPort(crashpad::move(exception_port)); |
| 552 return true; | 553 return true; |
| 553 } | 554 } |
| 554 | 555 |
| 555 void CrashpadClient::SetHandlerMachPort( | 556 void CrashpadClient::SetHandlerMachPort( |
| 556 base::mac::ScopedMachSendRight exception_port) { | 557 base::mac::ScopedMachSendRight exception_port) { |
| 557 DCHECK(exception_port.is_valid()); | 558 DCHECK(exception_port.is_valid()); |
| 558 exception_port_ = exception_port.Pass(); | 559 exception_port_ = crashpad::move(exception_port); |
| 559 } | 560 } |
| 560 | 561 |
| 561 bool CrashpadClient::UseHandler() { | 562 bool CrashpadClient::UseHandler() { |
| 562 DCHECK(exception_port_.is_valid()); | 563 DCHECK(exception_port_.is_valid()); |
| 563 | 564 |
| 564 return SetCrashExceptionPorts(exception_port_.get()); | 565 return SetCrashExceptionPorts(exception_port_.get()); |
| 565 } | 566 } |
| 566 | 567 |
| 567 // static | 568 // static |
| 568 void CrashpadClient::UseSystemDefaultHandler() { | 569 void CrashpadClient::UseSystemDefaultHandler() { |
| 569 base::mac::ScopedMachSendRight | 570 base::mac::ScopedMachSendRight |
| 570 system_crash_reporter_handler(SystemCrashReporterHandler()); | 571 system_crash_reporter_handler(SystemCrashReporterHandler()); |
| 571 | 572 |
| 572 // Proceed even if SystemCrashReporterHandler() failed, setting MACH_PORT_NULL | 573 // Proceed even if SystemCrashReporterHandler() failed, setting MACH_PORT_NULL |
| 573 // to clear the current exception ports. | 574 // to clear the current exception ports. |
| 574 if (!SetCrashExceptionPorts(system_crash_reporter_handler.get())) { | 575 if (!SetCrashExceptionPorts(system_crash_reporter_handler.get())) { |
| 575 SetCrashExceptionPorts(MACH_PORT_NULL); | 576 SetCrashExceptionPorts(MACH_PORT_NULL); |
| 576 } | 577 } |
| 577 } | 578 } |
| 578 | 579 |
| 579 } // namespace crashpad | 580 } // namespace crashpad |
| OLD | NEW |