From 9869f6dc5af85caf2e0fd4c56713a7f2049ecfff Mon Sep 17 00:00:00 2001 From: Marc Hoersken Date: Sat, 11 Apr 2020 08:35:05 +0200 Subject: tests/server: move all signal handling routines to util.[ch] Avoid code duplication to prepare for portability enhancements. --- tests/server/rtspd.c | 136 +-------------------------------------------------- 1 file changed, 2 insertions(+), 134 deletions(-) (limited to 'tests/server/rtspd.c') diff --git a/tests/server/rtspd.c b/tests/server/rtspd.c index 7563fd22a..d3f0fe2f5 100644 --- a/tests/server/rtspd.c +++ b/tests/server/rtspd.c @@ -201,138 +201,6 @@ static const char *doc404_RTSP = "RTSP/1.0 404 Not Found\r\n" #define RTP_DATA_SIZE 12 static const char *RTP_DATA = "$_1234\n\0asdf"; -/* do-nothing macro replacement for systems which lack siginterrupt() */ - -#ifndef HAVE_SIGINTERRUPT -#define siginterrupt(x,y) do {} while(0) -#endif - -/* vars used to keep around previous signal handlers */ - -typedef RETSIGTYPE (*SIGHANDLER_T)(int); - -#ifdef SIGHUP -static SIGHANDLER_T old_sighup_handler = SIG_ERR; -#endif - -#ifdef SIGPIPE -static SIGHANDLER_T old_sigpipe_handler = SIG_ERR; -#endif - -#ifdef SIGALRM -static SIGHANDLER_T old_sigalrm_handler = SIG_ERR; -#endif - -#ifdef SIGINT -static SIGHANDLER_T old_sigint_handler = SIG_ERR; -#endif - -#ifdef SIGTERM -static SIGHANDLER_T old_sigterm_handler = SIG_ERR; -#endif - -#if defined(SIGBREAK) && defined(WIN32) -static SIGHANDLER_T old_sigbreak_handler = SIG_ERR; -#endif - -/* var which if set indicates that the program should finish execution */ - -SIG_ATOMIC_T got_exit_signal = 0; - -/* if next is set indicates the first signal handled in exit_signal_handler */ - -static volatile int exit_signal = 0; - -/* signal handler that will be triggered to indicate that the program - should finish its execution in a controlled manner as soon as possible. - The first time this is called it will set got_exit_signal to one and - store in exit_signal the signal that triggered its execution. */ - -static RETSIGTYPE exit_signal_handler(int signum) -{ - int old_errno = errno; - if(got_exit_signal == 0) { - got_exit_signal = 1; - exit_signal = signum; - } - (void)signal(signum, exit_signal_handler); - errno = old_errno; -} - -static void install_signal_handlers(void) -{ -#ifdef SIGHUP - /* ignore SIGHUP signal */ - old_sighup_handler = signal(SIGHUP, SIG_IGN); - if(old_sighup_handler == SIG_ERR) - logmsg("cannot install SIGHUP handler: %s", strerror(errno)); -#endif -#ifdef SIGPIPE - /* ignore SIGPIPE signal */ - old_sigpipe_handler = signal(SIGPIPE, SIG_IGN); - if(old_sigpipe_handler == SIG_ERR) - logmsg("cannot install SIGPIPE handler: %s", strerror(errno)); -#endif -#ifdef SIGALRM - /* ignore SIGALRM signal */ - old_sigalrm_handler = signal(SIGALRM, SIG_IGN); - if(old_sigalrm_handler == SIG_ERR) - logmsg("cannot install SIGALRM handler: %s", strerror(errno)); -#endif -#ifdef SIGINT - /* handle SIGINT signal with our exit_signal_handler */ - old_sigint_handler = signal(SIGINT, exit_signal_handler); - if(old_sigint_handler == SIG_ERR) - logmsg("cannot install SIGINT handler: %s", strerror(errno)); - else - siginterrupt(SIGINT, 1); -#endif -#ifdef SIGTERM - /* handle SIGTERM signal with our exit_signal_handler */ - old_sigterm_handler = signal(SIGTERM, exit_signal_handler); - if(old_sigterm_handler == SIG_ERR) - logmsg("cannot install SIGTERM handler: %s", strerror(errno)); - else - siginterrupt(SIGTERM, 1); -#endif -#if defined(SIGBREAK) && defined(WIN32) - /* handle SIGBREAK signal with our exit_signal_handler */ - old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler); - if(old_sigbreak_handler == SIG_ERR) - logmsg("cannot install SIGBREAK handler: %s", strerror(errno)); - else - siginterrupt(SIGBREAK, 1); -#endif -} - -static void restore_signal_handlers(void) -{ -#ifdef SIGHUP - if(SIG_ERR != old_sighup_handler) - (void)signal(SIGHUP, old_sighup_handler); -#endif -#ifdef SIGPIPE - if(SIG_ERR != old_sigpipe_handler) - (void)signal(SIGPIPE, old_sigpipe_handler); -#endif -#ifdef SIGALRM - if(SIG_ERR != old_sigalrm_handler) - (void)signal(SIGALRM, old_sigalrm_handler); -#endif -#ifdef SIGINT - if(SIG_ERR != old_sigint_handler) - (void)signal(SIGINT, old_sigint_handler); -#endif -#ifdef SIGTERM - if(SIG_ERR != old_sigterm_handler) - (void)signal(SIGTERM, old_sigterm_handler); -#endif -#if defined(SIGBREAK) && defined(WIN32) - if(SIG_ERR != old_sigbreak_handler) - (void)signal(SIGBREAK, old_sigbreak_handler); -#endif -} - static int ProcessRequest(struct httprequest *req) { char *line = &req->reqbuf[req->checkindex]; @@ -1275,7 +1143,7 @@ int main(int argc, char *argv[]) atexit(win32_cleanup); #endif - install_signal_handlers(); + install_signal_handlers(false); pid = (long)getpid(); @@ -1465,7 +1333,7 @@ server_cleanup: clear_advisor_read_lock(SERVERLOGS_LOCK); } - restore_signal_handlers(); + restore_signal_handlers(false); if(got_exit_signal) { logmsg("========> %s rtspd (port: %d pid: %ld) exits with signal (%d)", -- cgit v1.2.3