/* Copyright (c) 1993 Xerox Corporation. All rights reserved. */ /* $Id$ $Date$ * * PCR sigs */ #ifndef __PCR_Sig_h #define __PCR_Sig_h 1 #include #include #include /* * * TODO: Fix this comment ??? * Unix/POSIX signals fall into two classes: * * - asynchronous signals, or "interrupts". * - synchronous signals, or "traps". * * In addition, every signal * * - is either resumable or not. * - has a default action. * * A trap is delivered to the thread that caused it. * An externally-generated interrupt (sent from another POSIX * process using kill(2)) is simply recorded; it is available * to any thread calling PCR_Sig_GetExternalInterrupts(). * The procedure PCR_Th_T_SendSigs (in th/PCR_Th.h) can be used to * deliver signals to individual threads. * Unlike POSIX, PCR allows any signal or (resumable) trap to be ignored * or blocked. This feature is admittedly dangerous. The POSIX * signal handling emulation enforces the standard semantics. * The meaning of SIG_DFL is as in POSIX (or the host OS, for non-POSIX * signals). */ /* * Signal Ops */ #undef PCR_sigset_t_Add extern int PCR_sigset_t_Add(PCR_sigset_t *mask, int signo); #define PCR_sigset_t_Add PCR_sigset_t__Add #undef PCR_sigset_t_Del extern int PCR_sigset_t_Del(PCR_sigset_t *mask, int signo); #define PCR_sigset_t_Del PCR_sigset_t__Del #undef PCR_sigset_t_SetEmpty extern int PCR_sigset_t_SetEmpty(PCR_sigset_t *mask); #define PCR_sigset_t_SetEmpty PCR_sigset_t__SetEmpty #undef PCR_sigset_t_SetFull extern int PCR_sigset_t_SetFull(PCR_sigset_t *mask); #define PCR_sigset_t_SetFull PCR_sigset_t__SetFull #undef PCR_sigset_t_IsMember extern int PCR_sigset_t_IsMember(PCR_sigset_t *mask, int signo); #define PCR_sigset_t_IsMember PCR_sigset_t__IsMember /* * Useful signal sets */ extern const PCR_sigset_t PCR_sigset_t_readonlyFull; extern const PCR_sigset_t PCR_sigset_t_readonlyEmpty; extern /* const */ PCR_sigset_t PCR_Sig_sigsTrap; extern /* const */ PCR_sigset_t PCR_Sig_sigsInt; extern /* const */ PCR_sigset_t PCR_Sig_sigsResumable; extern /* const */ PCR_sigset_t PCR_Sig_sigsNotCatchable; extern /* const */ PCR_sigset_t PCR_Sig_sigsDefaultExit; extern /* const */ PCR_sigset_t PCR_Sig_sigsDefaultIgnore; extern /* const */ PCR_sigset_t PCR_Sig_sigsDefaultPause; extern /* const */ PCR_sigset_t PCR_Sig_sigsDefaultContinue; /* * PCR signal handling */ extern PCR_Sig_Handler * const PCR_Sig_Handler_default; extern PCR_Sig_Handler * const PCR_Sig_Handler_ignore; /* * Externally Generated Signals (from another POSIX process). */ extern PCR_ERes PCR_Sig_GetExternalInterrupts( PCR_sigset_t *newInterruptsRecvd, const PCR_sigset_t *sigMask, PCR_Msec wakeup ); /* Block until a new interrupt may have been received by the ppcr process; then atomically copy all received interrupts into *newInterruptsRecvd and clear the pending interrupts. */ #endif /* !__PCR_Sig_h */ /* $Log$ */