@ -11,16 +11,34 @@
* IDENTIFICATION
* src / port / pqsignal . c
*
* We now assume that all Unix - oid systems have POSIX sigaction ( 2 )
* with support for restartable signals ( SA_RESTART ) . We used to also
* support BSD - style signal ( 2 ) , but there really shouldn ' t be anything
* out there anymore that doesn ' t have the POSIX API .
* This is the signal ( ) implementation from " Advanced Programming in the UNIX
* Environment " , with minor changes. It was originally a replacement needed
* for old SVR4 systems whose signal ( ) behaved as if sa_flags = SA_RESETHAND |
* SA_NODEFER , also known as " unreliable " signals due to races when the
* handler was reset .
*
* By now , all known modern Unix systems have a " reliable " signal ( ) call .
* We still don ' t want to use it though , because it remains
* implementation - defined by both C99 and POSIX whether the handler is reset
* or signals are blocked when the handler runs , and default restart behavior
* is also unspecified . Therefore we take POSIX ' s advice and call sigaction ( )
* so we can provide explicit sa_flags , but wrap it in this more convenient
* traditional interface style . It also provides a place to set any extra
* flags we want everywhere , such as SA_NOCLDSTOP .
*
* Windows , of course , is resolutely in a class by itself . In the backend ,
* we don ' t use this file at all ; src / backend / port / win32 / signal . c provides
* pqsignal ( ) for the backend environment . Frontend programs can use
* this version of pqsignal ( ) if they wish , but beware that this does
* not provide restartable signals on Windows .
* this relies on pqsigaction ( ) in src / backend / port / win32 / signal . c , which
* provides limited emulation of reliable signals .
*
* Frontend programs can use this version of pqsignal ( ) to forward to the
* native Windows signal ( ) call if they wish , but beware that Windows signals
* behave quite differently . Only the 6 signals required by C are supported .
* SIGINT handlers run in another thread instead of interrupting an existing
* thread , and the others don ' t interrupt system calls either , so SA_RESTART
* is moot . All except SIGFPE have SA_RESETHAND semantics , meaning the
* handler is reset to SIG_DFL each time it runs . The set of things you are
* allowed to do in a handler is also much more restricted than on Unix ,
* according to the documentation .
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/