[lttng-dev] [PATCH lttng-tools] Fix: relayd relay_cmd_pipe/thread_quit_pipe should be closed on exit/error.

Julien Desfossez jdesfossez at efficios.com
Fri Jul 20 18:41:19 EDT 2012


Signed-off-by: Julien Desfossez <jdesfossez at efficios.com>

On 20/07/12 03:26 PM, Christian Babeux wrote:
> Use the utils functions found in common/utils.h on pipes operations
> (open/close).
> 
> Signed-off-by: Christian Babeux <christian.babeux at efficios.com>
> ---
>  src/bin/lttng-relayd/main.c | 57 +++++++++++----------------------------------
>  1 file changed, 14 insertions(+), 43 deletions(-)
> 
> diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c
> index bdefd16..795a694 100644
> --- a/src/bin/lttng-relayd/main.c
> +++ b/src/bin/lttng-relayd/main.c
> @@ -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);
>  }



More information about the lttng-dev mailing list