/* -----------------------------------------------------------------------------
- * $Id: Signals.c,v 1.2 1998/12/02 13:28:46 simonm Exp $
+ * $Id: Signals.c,v 1.6 1999/06/25 09:16:46 simonmar Exp $
+ *
+ * (c) The GHC Team, 1998-1999
*
* Signal processing / handling.
*
#include "Rts.h"
#include "SchedAPI.h"
+#include "Schedule.h"
#include "Signals.h"
#include "RtsUtils.h"
#include "RtsFlags.h"
-#include "StablePtr.h"
+#include "StablePriv.h"
+
+#ifndef mingw32_TARGET_OS
#ifndef PAR
either. However, we have to schedule a new thread somehow.
It's probably ok to request a context switch and allow the
- scheduler to start the handler thread, but how to we
+ scheduler to start the handler thread, but how do we
communicate this to the scheduler?
We need some kind of locking, but with low overhead (i.e. no
circumstances, depending on the signal.
*/
- *next_pending_handler++ = deRefStablePointer(handlers[sig]);
+ *next_pending_handler++ = deRefStablePtr(handlers[sig]);
/* stack full? */
if (next_pending_handler == &pending_handler_buf[N_PENDING_HANDLERS]) {
sigemptyset(&signals);
sigaddset(&signals, sig);
sigprocmask(SIG_UNBLOCK, &signals, NULL);
+
+ context_switch = 1;
}
/* -----------------------------------------------------------------------------
sigdelset(&userSignals, sig);
action.sa_handler = SIG_DFL;
break;
+
case STG_SIG_HAN:
handlers[sig] = (I_)handler;
sigaddset(&userSignals, sig);
action.sa_handler = generic_handler;
break;
+
default:
barf("sig_install: bad spi");
}
* by freeing the previous handler if there was one.
*/
if (previous_spi >= 0) {
- freeStablePointer(handlers[sig]);
+ freeStablePtr(handlers[sig]);
}
return STG_SIG_ERR;
}
{
}
#endif
+
+#endif /*! mingw32_TARGET_OS */