Install correct handler.

Avoid infinitely-recursive handler calls.
This commit is contained in:
W. Eric Norum
2004-03-24 17:57:56 +00:00
parent a170d40be2
commit 3bc6a48ade

View File

@@ -69,8 +69,12 @@ static void localInstallSigHandler ( int signalIn, pSigFunc pNewFunc,
extern "C" {
static void ignoreSigPipe ( int signal )
{
if ( pReplacedSigPipeFunc ) {
( *pReplacedSigPipeFunc ) ( signal );
static volatile int reentered = 1;
if (--reentered == 0) {
if ( pReplacedSigPipeFunc ) {
( *pReplacedSigPipeFunc ) ( signal );
}
}
}
}
@@ -81,9 +85,14 @@ static void ignoreSigPipe ( int signal )
extern "C" {
static void ignoreSigAlarm ( int signal )
{
if ( pReplacedSigAlarmFunc ) {
( *pReplacedSigAlarmFunc ) ( signal );
static volatile int reentered = 1;
if (--reentered == 0) {
if ( pReplacedSigAlarmFunc ) {
( *pReplacedSigAlarmFunc ) ( signal );
}
}
++reentered;
}
}
@@ -93,7 +102,7 @@ static void ignoreSigAlarm ( int signal )
epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore (void)
{
localInstallSigHandler ( SIGPIPE,
ignoreSigAlarm, & pReplacedSigPipeFunc );
ignoreSigPipe, & pReplacedSigPipeFunc );
}
/*
@@ -118,4 +127,3 @@ epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm
strerror ( status ) );
}
}