Update of /cvsroot/pclasses/pclasses2/src/System
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30213/src/System
Modified Files:
SignalListener.h SignalListener.posix.cpp
Log Message:
- Restore previous signal handlers
Index: SignalListener.posix.cpp
===================================================================
RCS file: /cvsroot/pclasses/pclasses2/src/System/SignalListener.posix.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- SignalListener.posix.cpp 25 Apr 2005 10:57:31 -0000 1.5
+++ SignalListener.posix.cpp 28 Apr 2005 10:23:57 -0000 1.6
@@ -18,6 +18,7 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+#include "pclasses/Trace.h"
#include "pclasses/System/EventQueue.h"
#include "pclasses/CircularQueue.h"
#include "SignalListener.h"
@@ -138,6 +139,8 @@
qs = _signals.front();
_signals.pop();
+ P_TRACE(SignalFdListener) << "Dispatching signal sig=" << qs.sig;
+
if(_listeners[qs.sig])
_listeners[qs.sig]->onSignal(qs.val);
}
@@ -179,29 +182,29 @@
}
SignalListener::SignalListener(int sig)
+: _sig(sig)
{
- setup(sig);
-}
+ P_TRACE(SignalListener) << "Installing signal handler for sig=" << sig;
+
+ struct sigaction sa;
+ sa.sa_sigaction = &signal_handler;
+ sigfillset(&sa.sa_mask); // block all signals during signal handler's execution
+ sa.sa_flags = SA_RESTART|SA_SIGINFO; // restart system calls, use 3 param sighandler
-SignalListener::~SignalListener()
-{
SignalFdListener& l = SignalFdListener::instance();
- l.removeListener(*this);
+ l.addListener(_sig, *this);
- //TODO: restore previous signal handler ...
+ sigaction(_sig, &sa, &savedSigActions[_sig]);
}
-void SignalListener::setup(int sig)
+SignalListener::~SignalListener()
{
- struct sigaction sa;
- sa.sa_sigaction = &signal_handler;
- sigfillset(&sa.sa_mask); // block all signals during signal handler's execution
- sa.sa_flags = SA_RESTART|SA_SIGINFO; // restart system calls, use 3 param sighandler
+ P_TRACE(SignalListener) << "Destroying signal handler for sig=" << _sig;
SignalFdListener& l = SignalFdListener::instance();
- l.addListener(sig, *this);
+ l.removeListener(*this);
- sigaction(sig, &sa, &savedSigActions[sig]);
+ sigaction(_sig, &savedSigActions[_sig], 0);
}
} //! namespace System
Index: SignalListener.h
===================================================================
RCS file: /cvsroot/pclasses/pclasses2/src/System/SignalListener.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- SignalListener.h 23 Apr 2005 17:48:03 -0000 1.2
+++ SignalListener.h 28 Apr 2005 10:23:57 -0000 1.3
@@ -37,7 +37,7 @@
virtual void onSignal(const sigval& sv) = 0;
private:
- void setup(int sig);
+ int _sig;
};
} // !namespace System
|