summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp7
1 files changed, 6 insertions, 1 deletions
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<Signal *>::iterator it = std::find(SignalHandlers.begin(), SignalHandlers.end(), this);
if (it != SignalHandlers.end())
SignalHandlers.erase(it);
+
+ sigaction(this->signal, &this->old, NULL);
}