CCF
Loading...
Searching...
No Matches
sig_term.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the Apache 2.0 License.
3#pragma once
4
5#include "signal.h"
6
7#include <chrono>
8#include <cstring>
9
10namespace asynchost
11{
13 {
14 private:
15 ringbuffer::WriterPtr to_enclave;
16 bool ignore_first_signal = false;
17 size_t signal_count = 0;
18
19 public:
22 bool ignore_first_sigterm_) :
23 to_enclave(writer_factory.create_writer_to_inside()),
24 ignore_first_signal(ignore_first_sigterm_)
25 {}
26
27 void on_signal(int signal)
28 {
29 signal_count++;
30 if (ignore_first_signal && signal_count <= 1)
31 {
33 "SIG{}: Notifying enclave, but not shutting down.",
34 sigabbrev_np(signal));
35 RINGBUFFER_WRITE_MESSAGE(AdminMessage::stop_notice, to_enclave);
36 }
37 else
38 {
40 "SIG{}: Shutting down enclave gracefully...", sigabbrev_np(signal));
41 RINGBUFFER_WRITE_MESSAGE(AdminMessage::stop, to_enclave);
42 }
43 }
44 };
45
48}
Definition sig_term.h:13
void on_signal(int signal)
Definition sig_term.h:27
ShutdownSignalImpl(ringbuffer::AbstractWriterFactory &writer_factory, bool ignore_first_sigterm_)
Definition sig_term.h:20
Definition proxy.h:51
Definition ring_buffer_types.h:157
#define LOG_INFO_FMT
Definition internal_logger.h:15
Definition after_io.h:8
std::shared_ptr< AbstractWriter > WriterPtr
Definition ring_buffer_types.h:154
#define RINGBUFFER_WRITE_MESSAGE(MSG,...)
Definition ring_buffer_types.h:259