Fix: relayd pipes should be closed on exit/error
authorChristian Babeux <christian.babeux@efficios.com>
Fri, 20 Jul 2012 19:26:47 +0000 (15:26 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Mon, 23 Jul 2012 11:46:58 +0000 (07:46 -0400)
Use the utils functions found in common/utils.h on pipes operations
(open/close).

Acked-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng-relayd/main.c

index bdefd16763850b7e75a5a9f294ebfb434aca41b3..795a694158d26d15c2cb4fdb5f0eee3cac6bbe39 100644 (file)
@@ -49,6 +49,7 @@
 #include <common/hashtable/hashtable.h>
 #include <common/sessiond-comm/relayd.h>
 #include <common/uri.h>
+#include <common/utils.h>
 
 #include "lttng-relayd.h"
 
@@ -228,18 +229,13 @@ exit:
 static
 void cleanup(void)
 {
-       int i, ret;
-
        DBG("Cleaning up");
 
-       for (i = 0; i < 2; i++) {
-               if (thread_quit_pipe[i] >= 0) {
-                       ret = close(thread_quit_pipe[i]);
-                       if (ret) {
-                               PERROR("close");
-                       }
-               }
-       }
+       /* Close thread quit pipes */
+       utils_close_pipe(thread_quit_pipe);
+
+       /* Close relay cmd pipes */
+       utils_close_pipe(relay_cmd_pipe);
 }
 
 /*
@@ -351,23 +347,10 @@ int set_signal_handler(void)
 static
 int init_thread_quit_pipe(void)
 {
-       int ret, i;
-
-       ret = pipe(thread_quit_pipe);
-       if (ret < 0) {
-               PERROR("thread quit pipe");
-               goto error;
-       }
+       int ret;
 
-       for (i = 0; i < 2; i++) {
-               ret = fcntl(thread_quit_pipe[i], F_SETFD, FD_CLOEXEC);
-               if (ret < 0) {
-                       PERROR("fcntl");
-                       goto error;
-               }
-       }
+       ret = utils_create_pipe_cloexec(thread_quit_pipe);
 
-error:
        return ret;
 }
 
@@ -1444,23 +1427,10 @@ error_poll_create:
  */
 static int create_relay_cmd_pipe(void)
 {
-       int ret, i;
-
-       ret = pipe(relay_cmd_pipe);
-       if (ret < 0) {
-               PERROR("relay cmd pipe");
-               goto error;
-       }
+       int ret;
 
-       for (i = 0; i < 2; i++) {
-               ret = fcntl(relay_cmd_pipe[i], F_SETFD, FD_CLOEXEC);
-               if (ret < 0) {
-                       PERROR("fcntl relay_cmd_pipe");
-                       goto error;
-               }
-       }
+       ret = utils_create_pipe_cloexec(relay_cmd_pipe);
 
-error:
        return ret;
 }
 
@@ -1480,7 +1450,7 @@ int main(int argc, char **argv)
        /* Parse arguments */
        progname = argv[0];
        if ((ret = parse_args(argc, argv) < 0)) {
-               goto error;
+               goto exit;
        }
 
        if ((ret = set_signal_handler()) < 0) {
@@ -1492,7 +1462,7 @@ int main(int argc, char **argv)
                ret = daemon(0, 0);
                if (ret < 0) {
                        PERROR("daemon");
-                       goto error;
+                       goto exit;
                }
        }
 
@@ -1503,7 +1473,7 @@ int main(int argc, char **argv)
                if (control_uri->port < 1024 || data_uri->port < 1024) {
                        ERR("Need to be root to use ports < 1024");
                        ret = -1;
-                       goto error;
+                       goto exit;
                }
        }
 
@@ -1568,6 +1538,7 @@ exit:
        if (!ret) {
                exit(EXIT_SUCCESS);
        }
+
 error:
        exit(EXIT_FAILURE);
 }
This page took 0.029724 seconds and 4 git commands to generate.