diff options
author | Ben Pfaff <blp@nicira.com> | 2011-02-23 10:27:04 -0800 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2011-02-23 15:14:42 -0800 |
commit | 1cec7ca1a2d9341b6c69d9b6c19792b341db3f6e (patch) | |
tree | 2414da9e055c37bf9d9898352c35521654ba287d /vswitchd/ovs-brcompatd.c | |
parent | 0f0b102dcf5c067259788e54a0a5352851ed1565 (diff) |
ovs-brcompatd: Simplify code in brc_recv_update().
This code was baffling and it confused Coverity, too.
Coverity #11070.
Diffstat (limited to 'vswitchd/ovs-brcompatd.c')
-rw-r--r-- | 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 fe953f43..60744627 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; } |