/* Copyright (c) 1993 Xerox Corporation. All rights reserved. */ /* $Id$ $Date$ * * PCR threads glue */ #ifndef ←←PCR←ThGlue←h #define ←←PCR←ThGlue←h 1 #include <config/PCR←StdTypes.h> #include <th/PCR←ThTypes.h> /* * The following boolean variables may be set externally to cause the * thread switcher to call the associated proc on the next thread * switch ... * - the argument is always NIL, * - all procs are called in sys critical sections, * - the procs may do (sticky) notifies, but may *not* block. * ( ?? June 28, 1992 ajd ?? ) * Client need not initialize the proc var before the associated boolean * var is set; if NIL it will not be called. * The proc should be prepared to be called even if the variable is not set. * It is the proc's responsibility to clear the variable. * The intended uses are described with the procs. */ PCR←Bool volatile PCR←ThGlue←doCheckIO; void (* volatile PCR←ThGlue←checkIO)(PCR←Any); /* A host file descriptor may have become ready for a requested I/O op. */ PCR←Bool volatile PCR←ThGlue←doCheckTimeout; void (* volatile PCR←ThGlue←checkTimeout)(PCR←Any); /* A clock tick occurred and could not be processed immediately */ PCR←Bool volatile PCR←ThGlue←doCheckChildren; void (* volatile PCR←ThGlue←checkChildren)(PCR←Any); /* SIGCHLD handling. */ PCR←Bool volatile PCR←ThGlue←doCollectSigs; void (* volatile PCR←ThGlue←collectSigs)(PCR←sigset←t * sigs); /* A host signal has arrived. The switcher calls collectSigs(s) to set *s to the set of traps that have arrived since the last call to collectSigs. External POSIX signals are handled by this mechanism without being returned here; see PCR←Sig←GetExternalInterrupts(). This mechanism delivers a trap to client code "immediately", *unless* the trap occurs in a critical section. Well, client code isn't supposed to be using critical sections, and the PCR implementation isn't supposed to generate traps, it says here ... The signal set is a PCR←sigset←t, *not* a host sigset←t -- i.e., signal numbers have already been translated. */ /* * Determine action associated with given signal */ void (* volatile PCR←ThGlue←getSigAction)( int sig, /* result */ PCR←Sig←Action * sa ); /* * The following is maintained by exclusive running threads */ PCR←Bool volatile PCR←ThGlue←runExclusive; PCR←Bool (* volatile PCR←ThGlue←checkRunExclusive)(PCR←Th←T *t); /* Return true iff t is allowed to run. */ #endif /* !←←PCR←ThGlue←h */ /* $Log$ */