diff options
Diffstat (limited to 'modules/ACE/tests/Dev_Poll_Reactor_Test.cpp')
-rw-r--r-- | modules/ACE/tests/Dev_Poll_Reactor_Test.cpp | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/modules/ACE/tests/Dev_Poll_Reactor_Test.cpp b/modules/ACE/tests/Dev_Poll_Reactor_Test.cpp index 81dbd1f49f4..062c4ccd04b 100644 --- a/modules/ACE/tests/Dev_Poll_Reactor_Test.cpp +++ b/modules/ACE/tests/Dev_Poll_Reactor_Test.cpp @@ -441,9 +441,46 @@ public: // ---------------------------------------------------- +static int +disable_signal (int sigmin, int sigmax) +{ +#if !defined (ACE_LACKS_UNIX_SIGNALS) + sigset_t signal_set; + if (ACE_OS::sigemptyset (&signal_set) == - 1) + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("Error: (%P|%t):%p\n"), + ACE_TEXT ("sigemptyset failed"))); + + for (int i = sigmin; i <= sigmax; i++) + ACE_OS::sigaddset (&signal_set, i); + + // Put the <signal_set>. +# if defined (ACE_LACKS_PTHREAD_THR_SIGSETMASK) + // In multi-threaded application this is not POSIX compliant + // but let's leave it just in case. + if (ACE_OS::sigprocmask (SIG_BLOCK, &signal_set, 0) != 0) +# else + if (ACE_OS::thr_sigsetmask (SIG_BLOCK, &signal_set, 0) != 0) +# endif /* ACE_LACKS_PTHREAD_THR_SIGSETMASK */ + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("Error: (%P|%t): %p\n"), + ACE_TEXT ("SIG_BLOCK failed")), + -1); +#else + ACE_UNUSED_ARG (sigmin); + ACE_UNUSED_ARG (sigmax); +#endif /* ACE_LACKS_UNIX_SIGNALS */ + + return 0; +} + +// ---------------------------------------------------- + ACE_THR_FUNC_RETURN server_worker (void *p) { + disable_signal (SIGPIPE, SIGPIPE); + const unsigned short port = *(static_cast<unsigned short *> (p)); ACE_INET_Addr addr; @@ -510,11 +547,7 @@ run_main (int, ACE_TCHAR *[]) ACE_START_TEST (ACE_TEXT ("Dev_Poll_Reactor_Test")); // Make sure we ignore SIGPIPE - sigset_t sigsetNew[1]; - sigset_t sigsetOld[1]; - ACE_OS::sigemptyset (sigsetNew); - ACE_OS::sigaddset (sigsetNew, SIGPIPE); - ACE_OS::sigprocmask (SIG_BLOCK, sigsetNew, sigsetOld); + disable_signal (SIGPIPE, SIGPIPE); ACE_Dev_Poll_Reactor dp_reactor; dp_reactor.restart (1); // Restart on EINTR |