blob: 1c014ea79acece92bc52ce0f5383ceb36a0dd896 [file] [log] [blame]
Darin Petkov9c0baf82010-10-07 13:44:48 -07001// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_TERMINATOR_H__
6#define CHROMEOS_PLATFORM_UPDATE_ENGINE_TERMINATOR_H__
7
8#include <signal.h>
9
10namespace chromeos_update_engine {
11
12// A class allowing graceful delayed exit.
13class Terminator {
14 public:
15 // Initializes the terminator and sets up signal handlers.
16 static void Init();
17
18 // Terminates the current process.
19 static void Exit();
20
21 // Set to true if the terminator should block termination requests in an
22 // attempt to block exiting.
23 static void set_exit_blocked(bool block) { exit_blocked_ = block ? 1 : 0; }
24
25 // Returns true if the system is trying to terminate the process, false
26 // otherwise. Returns true only if exit was blocked when the termination
27 // request arrived.
28 static bool exit_requested() { return exit_requested_ != 0; }
29
30 private:
31 // The signal handler.
32 static void HandleSignal(int signum);
33
34 static volatile sig_atomic_t exit_blocked_;
35 static volatile sig_atomic_t exit_requested_;
36};
37
38class ScopedTerminatorExitUnblocker {
39 public:
40 ~ScopedTerminatorExitUnblocker();
41};
42
43} // namespace chromeos_update_engine
44
45#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_TERMINATOR_H__