core: Use ast_alertpipe for Asterisk signal monitoring thread.
authorCorey Farrell <git@cfware.com>
Fri, 10 Nov 2017 01:47:27 +0000 (20:47 -0500)
committerCorey Farrell <git@cfware.com>
Mon, 13 Nov 2017 22:41:07 +0000 (17:41 -0500)
Reduce the signal monitoring thread file descriptor use from two to one
on systems that support eventfd.

Change-Id: Id4041a237d481ff699639e153ea6982fee14a462

main/asterisk.c

index 40986a4..7cea6cd 100644 (file)
@@ -1761,15 +1761,13 @@ static struct sigaction urg_handler = {
 
 static void _hup_handler(int num)
 {
-       int a = 0, save_errno = errno;
+       int save_errno = errno;
        printf("Received HUP signal -- Reloading configs\n");
        if (restartnow)
                execvp(_argv[0], _argv);
        sig_flags.need_reload = 1;
-       if (sig_alert_pipe[1] != -1) {
-               if (write(sig_alert_pipe[1], &a, sizeof(a)) < 0) {
-                       fprintf(stderr, "hup_handler: write() failed: %s\n", strerror(errno));
-               }
+       if (ast_alertpipe_write(sig_alert_pipe)) {
+               fprintf(stderr, "hup_handler: write() failed: %s\n", strerror(errno));
        }
        errno = save_errno;
 }
@@ -2169,10 +2167,7 @@ static void really_quit(int num, shutdown_nice_t niceness, int restart)
                close(ast_consock);
        if (!ast_opt_remote)
                unlink(ast_config_AST_PID);
-       if (sig_alert_pipe[0])
-               close(sig_alert_pipe[0]);
-       if (sig_alert_pipe[1])
-               close(sig_alert_pipe[1]);
+       ast_alertpipe_close(sig_alert_pipe);
        printf("%s", term_quit());
        if (restart) {
                int i;
@@ -2208,12 +2203,9 @@ static void really_quit(int num, shutdown_nice_t niceness, int restart)
 
 static void __quit_handler(int num)
 {
-       int a = 0;
        sig_flags.need_quit = 1;
-       if (sig_alert_pipe[1] != -1) {
-               if (write(sig_alert_pipe[1], &a, sizeof(a)) < 0) {
-                       fprintf(stderr, "quit_handler: write() failed: %s\n", strerror(errno));
-               }
+       if (ast_alertpipe_write(sig_alert_pipe)) {
+               fprintf(stderr, "quit_handler: write() failed: %s\n", strerror(errno));
        }
        /* There is no need to restore the signal handler here, since the app
         * is going to exit */
@@ -3877,7 +3869,7 @@ static void *monitor_sig_flags(void *unused)
 {
        for (;;) {
                struct pollfd p = { sig_alert_pipe[0], POLLIN, 0 };
-               int a;
+
                ast_poll(&p, 1, -1);
                if (sig_flags.need_reload) {
                        sig_flags.need_reload = 0;
@@ -3892,8 +3884,7 @@ static void *monitor_sig_flags(void *unused)
                                quit_handler(0, SHUTDOWN_NORMAL, 0);
                        }
                }
-               if (read(sig_alert_pipe[0], &a, sizeof(a)) != sizeof(a)) {
-               }
+               ast_alertpipe_read(sig_alert_pipe);
        }
 
        return NULL;
@@ -4700,9 +4691,7 @@ static void asterisk_daemon(int isroot, const char *runuser, const char *rungrou
                consolethread = pthread_self();
        }
 
-       if (pipe(sig_alert_pipe)) {
-               sig_alert_pipe[0] = sig_alert_pipe[1] = -1;
-       }
+       ast_alertpipe_init(sig_alert_pipe);
 
        ast_process_pending_reloads();