| Index: client/crashpad_client_mac.cc
|
| diff --git a/client/crashpad_client_mac.cc b/client/crashpad_client_mac.cc
|
| index d5e3545b2094a312cb185bcfab081b6f402ca515..480828be78c115d6af0e1cf48690a2c33e8dadf5 100644
|
| --- a/client/crashpad_client_mac.cc
|
| +++ b/client/crashpad_client_mac.cc
|
| @@ -164,7 +164,8 @@ class HandlerStarter final : public NotifyServer::DefaultInterface {
|
| return base::mac::ScopedMachSendRight();
|
| }
|
|
|
| - if (handler_restarter && handler_restarter->StartRestartThread(
|
| + if (handler_restarter &&
|
| + handler_restarter->StartRestartThread(
|
| handler, database, url, annotations, arguments)) {
|
| // The thread owns the object now.
|
| ignore_result(handler_restarter.release());
|
| @@ -245,6 +246,8 @@ class HandlerStarter final : public NotifyServer::DefaultInterface {
|
| base::mac::ScopedMachReceiveRight receive_right,
|
| HandlerStarter* handler_restarter,
|
| bool restart) {
|
| + DCHECK(!restart || handler_restarter);
|
| +
|
| if (handler_restarter) {
|
| // The port-destroyed notification must be requested each time. It uses
|
| // a send-once right, so once the notification is received, it won’t be
|
| @@ -270,7 +273,7 @@ class HandlerStarter final : public NotifyServer::DefaultInterface {
|
| DCHECK(restart || !previous_owner.is_valid());
|
| }
|
|
|
| - if (handler_restarter->last_start_time_) {
|
| + if (restart) {
|
| // If the handler was ever started before, don’t restart it too quickly.
|
| const uint64_t kNanosecondsPerSecond = 1E9;
|
| const uint64_t kMinimumStartInterval = 1 * kNanosecondsPerSecond;
|
| @@ -279,7 +282,14 @@ class HandlerStarter final : public NotifyServer::DefaultInterface {
|
| handler_restarter->last_start_time_ + kMinimumStartInterval;
|
| const uint64_t now_time = ClockMonotonicNanoseconds();
|
| if (earliest_next_start_time > now_time) {
|
| + const uint64_t sleep_time = earliest_next_start_time - now_time;
|
| + LOG(INFO) << "restarting handler"
|
| + << base::StringPrintf(" in %.3fs",
|
| + static_cast<double>(sleep_time) /
|
| + kNanosecondsPerSecond);
|
| SleepNanoseconds(earliest_next_start_time - now_time);
|
| + } else {
|
| + LOG(INFO) << "restarting handler";
|
| }
|
| }
|
|
|
| @@ -517,13 +527,13 @@ bool CrashpadClient::StartHandler(
|
| // The “restartable” behavior can only be selected on OS X 10.10 and later. In
|
| // previous OS versions, if the initial client were to crash while attempting
|
| // to restart the handler, it would become an unkillable process.
|
| - base::mac::ScopedMachSendRight exception_port(HandlerStarter::InitialStart(
|
| - handler,
|
| - database,
|
| - url,
|
| - annotations,
|
| - arguments,
|
| - restartable && MacOSXMinorVersion() >= 10));
|
| + base::mac::ScopedMachSendRight exception_port(
|
| + HandlerStarter::InitialStart(handler,
|
| + database,
|
| + url,
|
| + annotations,
|
| + arguments,
|
| + restartable && MacOSXMinorVersion() >= 10));
|
| if (!exception_port.is_valid()) {
|
| return false;
|
| }
|
|
|