| 2058 | } |
| 2059 | |
| 2060 | Result<SignalHandler> SetSignalHandler(int signum, const SignalHandler& handler) { |
| 2061 | #if ARROW_HAVE_SIGACTION |
| 2062 | struct sigaction old_sa; |
| 2063 | int ret = sigaction(signum, &handler.action(), &old_sa); |
| 2064 | if (ret != 0) { |
| 2065 | // TODO more detailed message using errno |
| 2066 | return Status::IOError("sigaction call failed"); |
| 2067 | } |
| 2068 | return SignalHandler(old_sa); |
| 2069 | #else |
| 2070 | SignalHandler::Callback cb = signal(signum, handler.callback()); |
| 2071 | if (cb == SIG_ERR) { |
| 2072 | // TODO more detailed message using errno |
| 2073 | return Status::IOError("signal call failed"); |
| 2074 | } |
| 2075 | return SignalHandler(cb); |
| 2076 | #endif |
| 2077 | return Status::OK(); |
| 2078 | } |
| 2079 | |
| 2080 | void ReinstateSignalHandler(int signum, SignalHandler::Callback handler) { |
| 2081 | #if !ARROW_HAVE_SIGACTION |