| 2038 | #endif |
| 2039 | |
| 2040 | Result<SignalHandler> GetSignalHandler(int signum) { |
| 2041 | #if ARROW_HAVE_SIGACTION |
| 2042 | struct sigaction sa; |
| 2043 | int ret = sigaction(signum, nullptr, &sa); |
| 2044 | if (ret != 0) { |
| 2045 | // TODO more detailed message using errno |
| 2046 | return Status::IOError("sigaction call failed"); |
| 2047 | } |
| 2048 | return SignalHandler(sa); |
| 2049 | #else |
| 2050 | // To read the old handler, set the signal handler to something else temporarily |
| 2051 | SignalHandler::Callback cb = signal(signum, SIG_IGN); |
| 2052 | if (cb == SIG_ERR || signal(signum, cb) == SIG_ERR) { |
| 2053 | // TODO more detailed message using errno |
| 2054 | return Status::IOError("signal call failed"); |
| 2055 | } |
| 2056 | return SignalHandler(cb); |
| 2057 | #endif |
| 2058 | } |
| 2059 | |
| 2060 | Result<SignalHandler> SetSignalHandler(int signum, const SignalHandler& handler) { |
| 2061 | #if ARROW_HAVE_SIGACTION |
nothing calls this directly
no test coverage detected