[ovs-dev] [coverity3 07/13] ovs-brcompatd: Simplify code in brc_recv_update().

Ethan Jackson ethan at nicira.com
Wed Feb 23 21:52:31 UTC 2011


Looks Good.

On Wed, Feb 23, 2011 at 1:24 PM, Ben Pfaff <blp at nicira.com> wrote:
> This code was baffling and it confused Coverity, too.
>
> Coverity #11070.
> ---
>  vswitchd/ovs-brcompatd.c |   45 ++++++++++++++++++++++++++++++++-------------
>  1 files changed, 32 insertions(+), 13 deletions(-)
>
> diff --git a/vswitchd/ovs-brcompatd.c b/vswitchd/ovs-brcompatd.c
> index fe953f4..6074462 100644
> --- a/vswitchd/ovs-brcompatd.c
> +++ b/vswitchd/ovs-brcompatd.c
> @@ -1081,26 +1081,45 @@ handle_get_ports_cmd(const struct ovsrec_open_vswitch *ovs,
>     return 0;
>  }
>
> +static struct ofpbuf *
> +brc_recv_update__(void)
> +{
> +    for (;;) {
> +        struct ofpbuf *buffer;
> +        int retval;
> +
> +        retval = nl_sock_recv(brc_sock, &buffer, false);
> +        switch (retval) {
> +        case 0:
> +            if (nl_msg_nlmsgerr(buffer, NULL)
> +                || nl_msg_nlmsghdr(buffer)->nlmsg_type == NLMSG_DONE) {
> +                break;
> +            }
> +            return buffer;
> +
> +        case ENOBUFS:
> +            break;
> +
> +        case EAGAIN:
> +            return NULL;
> +
> +        default:
> +            VLOG_WARN_RL(&rl, "brc_recv_update: %s", strerror(retval));
> +            return NULL;
> +        }
> +        ofpbuf_delete(buffer);
> +    }
> +}
> +
>  static void
>  brc_recv_update(struct ovsdb_idl *idl)
>  {
> -    int retval;
>     struct ofpbuf *buffer;
>     struct genlmsghdr *genlmsghdr;
>     const struct ovsrec_open_vswitch *ovs;
>
> -    buffer = NULL;
> -    do {
> -        ofpbuf_delete(buffer);
> -        retval = nl_sock_recv(brc_sock, &buffer, false);
> -    } while (retval == ENOBUFS
> -            || (!retval
> -                && (nl_msg_nlmsgerr(buffer, NULL)
> -                    || nl_msg_nlmsghdr(buffer)->nlmsg_type == NLMSG_DONE)));
> -    if (retval) {
> -        if (retval != EAGAIN) {
> -            VLOG_WARN_RL(&rl, "brc_recv_update: %s", strerror(retval));
> -        }
> +    buffer = brc_recv_update__();
> +    if (!buffer) {
>         return;
>     }
>
> --
> 1.7.2.3
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org
>




More information about the dev mailing list