Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(466)

Unified Diff: remoting/host/shutdown_watchdog.h

Issue 784243003: Ensure the Chromoting Host process eventually terminates when shut down. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Increase lifetime of watchdog, named constant for timeout Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_

Powered by Google App Engine
This is Rietveld 408576698