Re: [RFC PATCH 07/11] [CLEANUP] trace-cmd: Split out binding a portand fork reader from open_udp()

From: Steven Rostedt
Date: Tue Aug 20 2013 - 13:49:11 EST


On Mon, 19 Aug 2013 18:46:37 +0900
Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@xxxxxxxxxxx> wrote:

> Split out binding a port and fork reader from open_udp() for avoiding duplicate
> codes between listen mode and virt-server mode.
>
> Signed-off-by: Yoshihiro YUNOMAE <yoshihiro.yunomae.ez@xxxxxxxxxxx>
> ---
> trace-listen.c | 34 ++++++++++++++++++++++++++--------
> 1 file changed, 26 insertions(+), 8 deletions(-)
>
> diff --git a/trace-listen.c b/trace-listen.c
> index f29dd35..bf9ef9d 100644
> --- a/trace-listen.c
> +++ b/trace-listen.c
> @@ -228,13 +228,12 @@ static void process_udp_child(int sfd, const char *host, const char *port,
> #define START_PORT_SEARCH 1500
> #define MAX_PORT_SEARCH 6000
>
> -static int open_udp(const char *node, const char *port, int *pid,
> - int cpu, int pagesize, int start_port)
> +static int udp_bind_a_port(int start_port, int *sfd)
> {
> struct addrinfo hints;
> struct addrinfo *result, *rp;
> - int sfd, s;
> char buf[BUFSIZ];
> + int s;
> int num_port = start_port;
>
> again:
> @@ -250,15 +249,15 @@ static int open_udp(const char *node, const char *port, int *pid,
> pdie("getaddrinfo: error opening udp socket");
>
> for (rp = result; rp != NULL; rp = rp->ai_next) {
> - sfd = socket(rp->ai_family, rp->ai_socktype,
> - rp->ai_protocol);
> - if (sfd < 0)
> + *sfd = socket(rp->ai_family, rp->ai_socktype,
> + rp->ai_protocol);
> + if (*sfd < 0)
> continue;
>
> - if (bind(sfd, rp->ai_addr, rp->ai_addrlen) == 0)
> + if (bind(*sfd, rp->ai_addr, rp->ai_addrlen) == 0)
> break;
>
> - close(sfd);
> + close(*sfd);
> }
>
> if (rp == NULL) {
> @@ -270,6 +269,12 @@ static int open_udp(const char *node, const char *port, int *pid,
>
> freeaddrinfo(result);
>
> + return num_port;
> +}
> +
> +static void fork_udp_reader(int sfd, const char *node, const char *port,
> + int *pid, int cpu, int pagesize)
> +{
> *pid = fork();
>
> if (*pid < 0)
> @@ -279,6 +284,19 @@ static int open_udp(const char *node, const char *port, int *pid,
> process_udp_child(sfd, node, port, cpu, pagesize);
>
> close(sfd);
> +}
> +
> +static int open_udp(const char *node, const char *port, int *pid,
> + int cpu, int pagesize, int start_port)
> +{
> + int sfd;
> + int num_port;
> +
> + num_port = udp_bind_a_port(start_port, &sfd);
> + if (num_port < 0)
> + return num_port;

I don't see how num_port could be less than zero.

-- Steve

> +
> + fork_udp_reader(sfd, node, port, pid, cpu, pagesize);
>
> return num_port;
> }

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/