| Index: remoting/host/shutdown_watchdog.h
|
| diff --git a/remoting/host/shutdown_watchdog.h b/remoting/host/shutdown_watchdog.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..660d581a6f0bdfbba1bd442b474807b4366bc6d2
|
| --- /dev/null
|
| +++ b/remoting/host/shutdown_watchdog.h
|
| @@ -0,0 +1,42 @@
|
| +// 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.
|
| +
|
| +#ifndef REMOTING_HOST_SHUTDOWN_WATCHDOG_H_
|
| +#define REMOTING_HOST_SHUTDOWN_WATCHDOG_H_
|
| +
|
| +#include "base/synchronization/lock.h"
|
| +#include "base/threading/watchdog.h"
|
| +
|
| +namespace remoting {
|
| +
|
| +// This implements a watchdog timer that ensures the host process eventually
|
| +// terminates, even if some threads are blocked or being kept alive for
|
| +// some reason. This is not expected to trigger if host shutdown is working
|
| +// correctly (on a normally loaded system). The triggering of the alarm
|
| +// indicates a sign of trouble, and so the Alarm() method will log some
|
| +// diagnostic information before shutting down the process.
|
| +class ShutdownWatchdog : public base::Watchdog {
|
| + public:
|
| + // Creates a watchdog that waits for |duration| (after the watchdog is
|
| + // armed) before shutting down the process.
|
| + explicit ShutdownWatchdog(const base::TimeDelta& duration);
|
| +
|
| + // This method should be called to set the process's exit-code before arming
|
| + // the watchdog. Otherwise an exit-code of 0 is assumed.
|
| + void SetExitCode(int exit_code);
|
| +
|
| + void Alarm() override;
|
| +
|
| + private:
|
| + int exit_code_;
|
| +
|
| + // Protects |exit_code_|, since Alarm() gets called on a separate thread.
|
| + base::Lock lock_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ShutdownWatchdog);
|
| +};
|
| +
|
| +} // namespace remoting
|
| +
|
| +#endif // REMOTING_HOST_SHUTDOWN_WATCHDOG_H_
|
|
|