| 117 | class CallGuard { |
| 118 | public: |
| 119 | CallGuard() { |
| 120 | struct sigaction sa = {}; |
| 121 | sa.sa_handler = CrashHandler; |
| 122 | sigemptyset(&sa.sa_mask); |
| 123 | sa.sa_flags = SA_RESETHAND; |
| 124 | sigaction(SIGSEGV, &sa, &m_segv); |
| 125 | sigaction(SIGBUS, &sa, &m_bus); |
| 126 | // Don't trap SIGABRT: it fires async on the CM thread after this guard dies; |
| 127 | // let init.cpp's CrashDumpHandler own it. |
| 128 | g_inCall = 1; |
| 129 | } |
| 130 | ~CallGuard() { |
| 131 | g_inCall = 0; |
| 132 | sigaction(SIGSEGV, &m_segv, nullptr); |