From 13bcc4ef14c0c61e8ed578ac9346291ae731b8df Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 10 Aug 2011 00:28:31 -0400 Subject: Replace the old sigaction for a signal when our Signal destructs --- src/main.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index f4316d6e0..97ee2a844 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -225,11 +225,14 @@ void Signal::Process() Signal::Signal(int s) : called(false), signal(s) { + memset(&this->old, 0, sizeof(this->old)); + this->action.sa_flags = 0; sigemptyset(&this->action.sa_mask); this->action.sa_handler = SignalHandler; - sigaction(s, &this->action, NULL); + if (sigaction(s, &this->action, &this->old) == -1) + throw CoreException("Unable to install signal " + stringify(s) + ": " + Anope::LastError()); SignalHandlers.push_back(this); } @@ -239,6 +242,8 @@ Signal::~Signal() std::vector::iterator it = std::find(SignalHandlers.begin(), SignalHandlers.end(), this); if (it != SignalHandlers.end()) SignalHandlers.erase(it); + + sigaction(this->signal, &this->old, NULL); } -- cgit