blob: 1d33e324e86e608e1aa7767337c2a2fb59dc1fc5 [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#include "update_engine/terminator.h"
6
7#include <cstdlib>
8
9namespace chromeos_update_engine {
10
11volatile sig_atomic_t Terminator::exit_blocked_ = 0;
12volatile sig_atomic_t Terminator::exit_requested_ = 0;
13
14void Terminator::Init() {
15 signal(SIGTERM, HandleSignal);
16}
17
18void Terminator::Exit() {
19 exit(0);
20}
21
22void Terminator::HandleSignal(int signum) {
23 if (exit_blocked_ == 0) {
24 Exit();
25 }
26 exit_requested_ = 1;
27}
28
29ScopedTerminatorExitUnblocker::~ScopedTerminatorExitUnblocker() {
30 Terminator::set_exit_blocked(false);
31 if (Terminator::exit_requested()) {
32 Terminator::Exit();
33 }
34}
35
36} // namespace chromeos_update_engine