2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/internal/system/common/abort-handler.h>
30 AbortHandler* AbortHandler::gInstance(NULL);
32 AbortHandler::AbortHandler(CallbackBase* callback)
36 DALI_ASSERT_ALWAYS(gInstance == NULL && "Only one instance of abort handler allowed");
39 memset(mSignalOldHandlers, 0, sizeof(SignalHandlerFuncPtr) * (_NSIG - 1));
42 AbortHandler::~AbortHandler()
47 for(signum = 1; signum < _NSIG; signum++)
49 if(mSignalMask & (1ULL << (signum - 1)))
51 // set signals back to default handling
52 signal(signum, mSignalOldHandlers[signum - 1]);
58 bool AbortHandler::AbortOnSignal(int signum)
64 SignalHandlerFuncPtr signalHandlerPrevious = signal(signum, &AbortHandler::SignalHandler);
66 // SIG_ERR is a macro with C cast
67 #pragma GCC diagnostic push
68 #pragma GCC diagnostic ignored "-Wold-style-cast"
69 if(SIG_ERR != signalHandlerPrevious)
71 mSignalOldHandlers[signum - 1] = signalHandlerPrevious;
72 mSignalMask |= (1ULL << (signum - 1));
76 #pragma GCC diagnostic pop
80 void AbortHandler::SignalHandler(int signum)
84 if(gInstance->mCallback)
86 CallbackBase::Execute(*gInstance->mCallback);
91 } // namespace Adaptor
92 } // namespace Internal