blob: abf57c8a2979793c2e832b3e484f98600fdc857c [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() {
Darin Petkov80f19562010-11-19 12:00:15 -080015 exit_blocked_ = 0;
16 exit_requested_ = 0;
Darin Petkov9c0baf82010-10-07 13:44:48 -070017 signal(SIGTERM, HandleSignal);
18}
19
20void Terminator::Exit() {
Darin Petkov8e07f1e2010-11-22 10:57:37 -080021 exit(1);
Darin Petkov9c0baf82010-10-07 13:44:48 -070022}
23
24void Terminator::HandleSignal(int signum) {
25 if (exit_blocked_ == 0) {
26 Exit();
27 }
28 exit_requested_ = 1;
29}
30
31ScopedTerminatorExitUnblocker::~ScopedTerminatorExitUnblocker() {
32 Terminator::set_exit_blocked(false);
33 if (Terminator::exit_requested()) {
34 Terminator::Exit();
35 }
36}
37
38} // namespace chromeos_update_engine