aboutsummaryrefslogtreecommitdiff
path: root/vswitchd/ovs-brcompatd.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2011-02-23 10:27:04 -0800
committerBen Pfaff <blp@nicira.com>2011-02-23 15:14:42 -0800
commit1cec7ca1a2d9341b6c69d9b6c19792b341db3f6e (patch)
tree2414da9e055c37bf9d9898352c35521654ba287d /vswitchd/ovs-brcompatd.c
parent0f0b102dcf5c067259788e54a0a5352851ed1565 (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.c45
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;
}