From 4c5dab8e72b4d738aea69d7ab3d2185bf663e6c9 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Thu, 1 May 2003 21:53:14 +0000 Subject: [PATCH] use SIGALRM instead of SIGURG to wakeup blocking socket calls --- src/ca/cac.cpp | 2 +- src/ca/tcpiiu.cpp | 4 +-- src/libCom/osi/epicsSignal.h | 4 +-- src/libCom/osi/os/RTEMS/osdSignal.cpp | 4 +-- src/libCom/osi/os/WIN32/osdSignal.cpp | 4 +-- src/libCom/osi/os/WIN32/osdThread.c | 2 +- src/libCom/osi/os/default/osdSignal.cpp | 4 +-- src/libCom/osi/os/posix/osdSignal.cpp | 38 ++++++++++++++----------- src/libCom/osi/os/vxWorks/osdSignal.cpp | 4 +-- 9 files changed, 36 insertions(+), 30 deletions(-) diff --git a/src/ca/cac.cpp b/src/ca/cac.cpp index 72be0704e..b5259ad7d 100644 --- a/src/ca/cac.cpp +++ b/src/ca/cac.cpp @@ -167,7 +167,7 @@ cac::cac ( cacNotify & notifyIn ) : * close(). To solve this problem we need to employ OS specific * mechanisms. */ - epicsSignalInstallSigUrgIgnore (); + epicsSignalInstallSigAlarmIgnore (); epicsSignalInstallSigPipeIgnore (); { diff --git a/src/ca/tcpiiu.cpp b/src/ca/tcpiiu.cpp index 698093751..db63ce2af 100644 --- a/src/ca/tcpiiu.cpp +++ b/src/ca/tcpiiu.cpp @@ -1493,14 +1493,14 @@ void tcpRecvThread::interruptSocketRecv () { epicsThreadId threadId = this->thread.getId (); if ( threadId ) { - epicsSignalRaiseSigUrg ( threadId ); + epicsSignalRaiseSigAlarm ( threadId ); } } void tcpSendThread::interruptSocketSend () { epicsThreadId threadId = this->thread.getId (); if ( threadId ) { - epicsSignalRaiseSigUrg ( threadId ); + epicsSignalRaiseSigAlarm ( threadId ); } } diff --git a/src/libCom/osi/epicsSignal.h b/src/libCom/osi/epicsSignal.h index cd53b1ef5..98fa23083 100644 --- a/src/libCom/osi/epicsSignal.h +++ b/src/libCom/osi/epicsSignal.h @@ -33,8 +33,8 @@ epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ); * required only if shutdown() and close() do not interrupt a thread blocking in * a socket system call */ -epicsShareFunc void epicsShareAPI epicsSignalInstallSigUrgIgnore ( void ); -epicsShareFunc void epicsShareAPI epicsSignalRaiseSigUrg ( struct epicsThreadOSD * ); +epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ); +epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * ); #ifdef __cplusplus } diff --git a/src/libCom/osi/os/RTEMS/osdSignal.cpp b/src/libCom/osi/os/RTEMS/osdSignal.cpp index 673021d82..620fc0353 100644 --- a/src/libCom/osi/os/RTEMS/osdSignal.cpp +++ b/src/libCom/osi/os/RTEMS/osdSignal.cpp @@ -15,6 +15,6 @@ * All NOOPs if the os isnt POSIX */ epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ) {} -epicsShareFunc void epicsShareAPI epicsSignalInstallSigUrgIgnore ( void ) {} -epicsShareFunc void epicsShareAPI epicsSignalRaiseSigUrg ( struct epicsThreadOSD * /* threadId */ ) {} +epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {} +epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {} diff --git a/src/libCom/osi/os/WIN32/osdSignal.cpp b/src/libCom/osi/os/WIN32/osdSignal.cpp index a826bab77..bcc7781e6 100644 --- a/src/libCom/osi/os/WIN32/osdSignal.cpp +++ b/src/libCom/osi/os/WIN32/osdSignal.cpp @@ -15,6 +15,6 @@ * NOOP */ epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ) {} -epicsShareFunc void epicsShareAPI epicsSignalInstallSigUrgIgnore ( void ) {} -epicsShareFunc void epicsShareAPI epicsSignalRaiseSigUrg ( struct epicsThreadOSD * /* threadid */ ) {} +epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {} +epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadid */ ) {} diff --git a/src/libCom/osi/os/WIN32/osdThread.c b/src/libCom/osi/os/WIN32/osdThread.c index 03ca215c6..a1522bf86 100644 --- a/src/libCom/osi/os/WIN32/osdThread.c +++ b/src/libCom/osi/os/WIN32/osdThread.c @@ -732,7 +732,7 @@ epicsShareFunc void epicsShareAPI epicsThreadSleep ( double seconds ) } /* - * epicsThreadGetIdSelf () + * epicsThreadSleepQuantum () */ double epicsShareAPI epicsThreadSleepQuantum () { diff --git a/src/libCom/osi/os/default/osdSignal.cpp b/src/libCom/osi/os/default/osdSignal.cpp index 673021d82..620fc0353 100644 --- a/src/libCom/osi/os/default/osdSignal.cpp +++ b/src/libCom/osi/os/default/osdSignal.cpp @@ -15,6 +15,6 @@ * All NOOPs if the os isnt POSIX */ epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ) {} -epicsShareFunc void epicsShareAPI epicsSignalInstallSigUrgIgnore ( void ) {} -epicsShareFunc void epicsShareAPI epicsSignalRaiseSigUrg ( struct epicsThreadOSD * /* threadId */ ) {} +epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {} +epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {} diff --git a/src/libCom/osi/os/posix/osdSignal.cpp b/src/libCom/osi/os/posix/osdSignal.cpp index 26efe8f20..e0a07a8b9 100644 --- a/src/libCom/osi/os/posix/osdSignal.cpp +++ b/src/libCom/osi/os/posix/osdSignal.cpp @@ -8,6 +8,10 @@ * in file LICENSE that is included with this distribution. \*************************************************************************/ +/* + * Author: J. Hill + */ + #include #include #include @@ -23,7 +27,7 @@ typedef void ( *pSigFunc ) ( int ); } static pSigFunc pReplacedSigPipeFunc = 0; -static pSigFunc pReplacedSigUrgFunc = 0; +static pSigFunc pReplacedSigAlarmFunc = 0; /* * localInstallSigHandler () @@ -61,8 +65,6 @@ static void localInstallSigHandler ( int signalIn, pSigFunc pNewFunc, /* * ignoreSigPipe () - * - * install NOOP SIGPIPE handler */ extern "C" { static void ignoreSigPipe ( int signal ) @@ -74,15 +76,13 @@ static void ignoreSigPipe ( int signal ) } /* - * ignoreSigUrg () - * - * install NOOP SIGURG handler + * ignoreSigAlarm () */ extern "C" { -static void ignoreSigUrg ( int signal ) +static void ignoreSigAlarm ( int signal ) { - if ( pReplacedSigUrgFunc ) { - ( *pReplacedSigUrgFunc ) ( signal ); + if ( pReplacedSigAlarmFunc ) { + ( *pReplacedSigAlarmFunc ) ( signal ); } } } @@ -93,22 +93,28 @@ static void ignoreSigUrg ( int signal ) epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore (void) { localInstallSigHandler ( SIGPIPE, - ignoreSigPipe, & pReplacedSigPipeFunc ); + ignoreSigAlarm, & pReplacedSigPipeFunc ); } -epicsShareFunc void epicsShareAPI epicsSignalInstallSigUrgIgnore ( void ) +/* + * epicsSignalInstallSigAlarmIgnore () + */ +epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) { - localInstallSigHandler ( SIGURG, - ignoreSigUrg, & pReplacedSigUrgFunc ); + localInstallSigHandler ( SIGALRM, + ignoreSigUrg, & pReplacedSigAlarmFunc ); } -epicsShareFunc void epicsShareAPI epicsSignalRaiseSigUrg +/* + * epicsSignalRaiseSigAlarm () + */ +epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * threadId ) { pthread_t id = epicsThreadGetPosixThreadId ( threadId ); - int status = pthread_kill ( id, SIGURG ); + int status = pthread_kill ( id, SIGALRM ); if ( status ) { - errlogPrintf ( "Failed to send SIGURG to thread. Status = \"%s\"\n", + errlogPrintf ( "Failed to send SIGALARM to thread. Status = \"%s\"\n", strerror ( status ) ); } } diff --git a/src/libCom/osi/os/vxWorks/osdSignal.cpp b/src/libCom/osi/os/vxWorks/osdSignal.cpp index 5948bab9f..14ae0caab 100644 --- a/src/libCom/osi/os/vxWorks/osdSignal.cpp +++ b/src/libCom/osi/os/vxWorks/osdSignal.cpp @@ -15,5 +15,5 @@ * NOOP */ epicsShareFunc void epicsShareAPI epicsSignalInstallSigPipeIgnore ( void ) {} -epicsShareFunc void epicsShareAPI epicsSignalInstallSigUrgIgnore ( void ) {} -epicsShareFunc void epicsShareAPI epicsSignalRaiseSigUrg ( struct epicsThreadOSD * /* threadId */ ) {} +epicsShareFunc void epicsShareAPI epicsSignalInstallSigAlarmIgnore ( void ) {} +epicsShareFunc void epicsShareAPI epicsSignalRaiseSigAlarm ( struct epicsThreadOSD * /* threadId */ ) {}