MCPcopy Create free account
hub / github.com/awslabs/aws-lambda-cpp / SignalHandling

Method SignalHandling

src/backward.h:4220–4260  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4218 }
4219
4220 SignalHandling(const std::vector<int>& posix_signals = make_default_signals()) : _loaded(false)
4221 {
4222 bool success = true;
4223
4224 const size_t stack_size = 1024 * 1024 * 8;
4225 _stack_content.reset(static_cast<char*>(malloc(stack_size)));
4226 if (_stack_content) {
4227 stack_t ss;
4228 ss.ss_sp = _stack_content.get();
4229 ss.ss_size = stack_size;
4230 ss.ss_flags = 0;
4231 if (sigaltstack(&ss, nullptr) < 0) {
4232 success = false;
4233 }
4234 }
4235 else {
4236 success = false;
4237 }
4238
4239 for (size_t i = 0; i < posix_signals.size(); ++i) {
4240 struct sigaction action;
4241 memset(&action, 0, sizeof action);
4242 action.sa_flags = static_cast<int>(SA_SIGINFO | SA_ONSTACK | SA_NODEFER | SA_RESETHAND);
4243 sigfillset(&action.sa_mask);
4244 sigdelset(&action.sa_mask, posix_signals[i]);
4245# if defined(__clang__)
4246# pragma clang diagnostic push
4247# pragma clang diagnostic ignored "-Wdisabled-macro-expansion"
4248# endif
4249 action.sa_sigaction = &sig_handler;
4250# if defined(__clang__)
4251# pragma clang diagnostic pop
4252# endif
4253
4254 int r = sigaction(posix_signals[i], &action, nullptr);
4255 if (r < 0)
4256 success = false;
4257 }
4258
4259 _loaded = success;
4260 }
4261
4262 bool loaded() const { return _loaded; }
4263

Callers

nothing calls this directly

Calls 4

resetMethod · 0.80
getMethod · 0.80
sigactionClass · 0.70
sizeMethod · 0.45

Tested by

no test coverage detected