return;
}
- sigaction_map_[signo] = std::make_unique<SignalAction>(signo, old_action);
+ sigaction_map_[signo] = std::make_unique<SignalAction>(
+ signo, std::make_shared<struct sigaction>(old_action));
}
void SignalManager::RestoreSignalAction(int signo) {
auto& signal_action = found->second;
auto old_action = signal_action->GetSigaction();
- sigaction(signo, &old_action, nullptr);
+ sigaction(signo, old_action.get(), nullptr);
sigaction_map_.erase(found);
}
#include <memory>
#include <unordered_map>
+#include <utility>
#include <client_socket.hh>
#include <io_channel.hh>
private:
class SignalAction {
public:
- SignalAction(int signo, struct sigaction action)
- : signo_(signo), action_(action) {}
+ SignalAction(int signo, std::shared_ptr<struct sigaction> action)
+ : signo_(signo), action_(std::move(action)) {}
int GetSigno() const { return signo_; }
- struct sigaction GetSigaction() const {
+ std::shared_ptr<struct sigaction> GetSigaction() const {
return action_;
}
private:
int signo_;
- struct sigaction action_;
+ std::shared_ptr<struct sigaction> action_;
};
SignalManager() = default;