| Index: remoting/host/shutdown_watchdog.cc
|
| diff --git a/remoting/host/shutdown_watchdog.cc b/remoting/host/shutdown_watchdog.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..afebb0c9a692abd341df84fad335d020d6da2c67
|
| --- /dev/null
|
| +++ b/remoting/host/shutdown_watchdog.cc
|
| @@ -0,0 +1,39 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "remoting/host/shutdown_watchdog.h"
|
| +
|
| +#include <stdlib.h> // For _exit() on Windows.
|
| +
|
| +#include "base/logging.h"
|
| +
|
| +#if defined(OS_POSIX)
|
| +#include <unistd.h>
|
| +#endif // defined(OS_POSIX)
|
| +
|
| +namespace remoting {
|
| +
|
| +ShutdownWatchdog::ShutdownWatchdog(const base::TimeDelta& duration)
|
| + : base::Watchdog(duration, "Shutdown watchdog", true) {
|
| +}
|
| +
|
| +void ShutdownWatchdog::SetExitCode(int exit_code) {
|
| + base::AutoLock lock(lock_);
|
| + exit_code_ = exit_code;
|
| +}
|
| +
|
| +void ShutdownWatchdog::Alarm() {
|
| + // Holding a lock while calling _exit() might not be a safe thing to do, so
|
| + // make a local copy.
|
| + int exit_code;
|
| + {
|
| + base::AutoLock lock(lock_);
|
| + exit_code = exit_code_;
|
| + }
|
| +
|
| + LOG(ERROR) << "Shutdown watchdog triggered, exiting with code " << exit_code;
|
| + _exit(exit_code);
|
| +}
|
| +
|
| +} // namespace remoting
|
|
|