[sheepdog] [PATCH] shepherd: bugs fixed in shepherd_init

Hitoshi Mitake mitake.hitoshi at gmail.com
Sun Jul 27 07:20:31 CEST 2014


At Thu, 24 Jul 2014 17:25:25 +0800,
Ruoyu wrote:
> 
> This patch fix some problems as below.
> 
> 1. memory leak in error cases
> 2. when error occured, exit is tough, just return -1 is better
> 3. incorrect error message
> 
> Signed-off-by: Ruoyu <liangry at ucweb.com>
> ---
>  sheep/cluster/shepherd.c | 21 +++++++++++----------
>  1 file changed, 11 insertions(+), 10 deletions(-)

Applied, thanks.
Hitoshi

> 
> diff --git a/sheep/cluster/shepherd.c b/sheep/cluster/shepherd.c
> index 9453ff8..45a85c1 100644
> --- a/sheep/cluster/shepherd.c
> +++ b/sheep/cluster/shepherd.c
> @@ -467,25 +467,25 @@ static void shepherd_comm_handler(int fd, int events, void *data)
>  
>  static int shepherd_init(const char *option)
>  {
> -	int ret, port;
> +	int ret = -1, port;
>  	char *copied, *s_addr, *s_port, *saveptr;
>  
>  	if (!option) {
>  		sd_err("shepherd cluster driver requires at least IP"
>  		       " address of shepherd as an option");
> -		exit(1);
> +		return ret;
>  	}
>  
>  	copied = strdup(option);
>  	if (!copied) {
>  		sd_err("strdup() failed: %m");
> -		exit(1);
> +		return ret;
>  	}
>  
>  	s_addr = strtok_r(copied, ":", &saveptr);
>  	if (!s_addr) {
> -		sd_err("strdup() failed: %m");
> -		exit(1);
> +		sd_err("strtok_r() failed: %m");
> +		goto out;
>  	}
>  
>  	s_port = strtok_r(NULL, ":", &saveptr);
> @@ -495,7 +495,7 @@ static int shepherd_init(const char *option)
>  
>  		if (*p != '\0') {
>  			sd_err("invalid option for host and port: %s", option);
> -			exit(1);
> +			goto out;
>  		}
>  	} else
>  		port = SHEPHERD_PORT;
> @@ -504,19 +504,20 @@ static int shepherd_init(const char *option)
>  	if (sph_comm_fd == -1) {
>  		sd_err("cannot connect to shepherd,"
>  		       " is shepherd running? errno: %m");
> -		return -1;
> +		goto out;
>  	}
>  
>  	sph_event_fd = eventfd(0, EFD_NONBLOCK);
>  	ret = register_event(sph_event_fd, sph_event_handler, NULL);
>  	if (ret) {
>  		sd_err("register_event() failed: %m");
> -		exit(1);
> +		goto out;
>  	}
>  
> +	ret = 0;
> +out:
>  	free(copied);
> -
> -	return 0;
> +	return ret;
>  }
>  
>  static int shepherd_join(const struct sd_node *myself,
> -- 
> 1.8.3.2
> 
> 
> -- 
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog



More information about the sheepdog mailing list