| 938 | |
| 939 | |
| 940 | static void addSignalHandler(const std::vector<int> & signals, signal_function handler, std::vector<int> * out_handled_signals) |
| 941 | { |
| 942 | struct sigaction sa; |
| 943 | memset(&sa, 0, sizeof(sa)); |
| 944 | sa.sa_sigaction = handler; |
| 945 | sa.sa_flags = SA_SIGINFO; |
| 946 | |
| 947 | #if defined(OS_DARWIN) |
| 948 | sigemptyset(&sa.sa_mask); |
| 949 | for (auto signal : signals) |
| 950 | sigaddset(&sa.sa_mask, signal); |
| 951 | #else |
| 952 | if (sigemptyset(&sa.sa_mask)) |
| 953 | throw Poco::Exception("Cannot set signal handler."); |
| 954 | |
| 955 | for (auto signal : signals) |
| 956 | if (sigaddset(&sa.sa_mask, signal)) |
| 957 | throw Poco::Exception("Cannot set signal handler."); |
| 958 | #endif |
| 959 | |
| 960 | for (auto signal : signals) |
| 961 | if (sigaction(signal, &sa, nullptr)) |
| 962 | throw Poco::Exception("Cannot set signal handler."); |
| 963 | |
| 964 | if (out_handled_signals) |
| 965 | std::copy(signals.begin(), signals.end(), std::back_inserter(*out_handled_signals)); |
| 966 | }; |
| 967 | |
| 968 | |
| 969 | static void blockSignals(const std::vector<int> & signals) |
no test coverage detected