| 201 | } |
| 202 | |
| 203 | bool CrashHandler::bindToProcess() |
| 204 | { |
| 205 | if (oldProcessHandlers_) { |
| 206 | CRASH_LOG_ERROR("CrashHandler::bindToProcess: tried to install process handlers twice"); |
| 207 | return false; |
| 208 | } |
| 209 | |
| 210 | // Reset old exception handlers. |
| 211 | oldProcessHandlers_.reset(new ProcessExceptionHandlers); |
| 212 | |
| 213 | // Set new handlers. |
| 214 | oldProcessHandlers_->seHandler = SetUnhandledExceptionFilter(LocalSehHandler); |
| 215 | oldProcessHandlers_->sigAbrtHandler = signal(SIGABRT, SignalHandler_Abrt); |
| 216 | oldProcessHandlers_->sigIntHandler = signal(SIGINT, SignalHandler_Int); |
| 217 | oldProcessHandlers_->sigTermHandler = signal(SIGTERM, SignalHandler_Term); |
| 218 | oldProcessHandlers_->ipHandler = _set_invalid_parameter_handler(InvalidParameterHandler); |
| 219 | oldProcessHandlers_->pureCallHandler = _set_purecall_handler(PureCallHandler); |
| 220 | oldProcessHandlers_->newHandler = _set_new_handler(NewHandler); |
| 221 | |
| 222 | // Install for the main thread as well. |
| 223 | return bindToThread(); |
| 224 | } |
| 225 | |
| 226 | void CrashHandler::unbindFromProcess() |
| 227 | { |
no test coverage detected