26 fInformEnabled(false),
40 signal(signalId,SIG_DFL);
47 if(signalId == SIGSEGV || signalId == SIGFPE)
51 signal(signalId,SIG_IGN);
60 if( (signalId == SIGFPE) || (signalId == SIGSEGV) )
74 std::map<int,ProcessStatus_t>::const_iterator sigMapIt;
77 std::cerr <<
"received unhandled signal " << signalId << std::endl;
91 std::cerr <<
"Unhandled critical Error: ";
92 if(SIGSEGV == signalId)
93 std::cerr <<
"Segmentation violation. ";
94 if(SIGFPE == signalId)
95 std::cerr <<
"Floating point exception. ";
96 std::cerr <<
"Exit forced" << std::endl;
100 if(signalId == SIGSEGV)
101 SetError(
"Segmentation Fault detected");
102 else if(signalId == SIGFPE)
103 SetError(
"Floating Point Exception detected");
126 SetError(
"Invalid state. Cannot STOP");
138 SetError(
"Invalid state. Cannot START (in 'wait mode')");
151 SetError(
"Invalid state. Cannot START");
181 SetError(
"Cannot disable trigger if process is neither "
182 "running nor ready");
196 SetError(
"Cannot re-enable trigger if process is neither "
197 "running nor ready");
204 SetError(
"Unexpected signal or process status");
205 std::cerr <<
"Error in signal handler: cannot handle signal "
206 << signalId << std::endl;
221 std::cout <<
err << std::endl;
233 std::cout <<
"set state called: old "
271 std::cerr <<
"Warning: maximum process status queue size exceeded"
289 std::cout <<
"QProcessStatus: signal " << signalId <<
" ("
290 << strsignal(signalId) <<
") detected" << std::endl;
void SigHandler(int signalId)
signal handler function
wrapper for ProcessStatus_ enum
std::string AsString() const
convert to string
error class with error type and description
base class for anything having an id
base class for anything that has a name
process status and signal handler
std::map< int, ProcessStatus_t > fSigMap
void Notify()
acknowledge oldest process status contained in staus queue
ProcessStatus_t fState
current process status
bool TrgCtrlEnabled() const
check wether trigger control signals are enabled
friend void SigHandler(int)
signal handler function
void SetError(const std::string &errMsg)
set error string
ProcessStatus_t GetLastStatus() const
get last status that have been added to status queue. If queue is empty current process status is ret...
static QProcessStatus & GetInstance()
get singleton Instance
void AddToQueue(ProcessStatus_t state)
add state to process status queue.
void InformServer()
inform MsgServer about current process status
bool Ignore(int signalId)
ignore signal
std::deque< ProcessStatus_t > fStatusQueue
void HandleSignal(int signalId)
this method is called each time a registered signal is caught. It updates the status queue and inform...
void Associate(int signalId, ProcessStatus_t pStatus)
associate a signal to a given process status
void SetState(ProcessStatus_t state)
change current process status bypassing status queue vector
ProcessStatus_t fPreviousState
previous process status
void Disable(int signalId)
disable handling of a signal (use defauls system handler)