From: Ben Pfaff <blp@nicira.com>
Date: Thu, 5 Apr 2012 19:58:42 +0000 (-0700)
Subject: netlink-socket: Avoid forcing a reply for final message in a transaction.
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=407556ac6c902d060202f5e1aa3b92849b8f99ed;p=openvswitch

netlink-socket: Avoid forcing a reply for final message in a transaction.

Signed-off-by: Ben Pfaff <blp@nicira.com>
---

diff --git a/lib/netlink-socket.c b/lib/netlink-socket.c
index df6f1d8b..15a800b4 100644
--- a/lib/netlink-socket.c
+++ b/lib/netlink-socket.c
@@ -440,11 +440,6 @@ nl_sock_transact_multiple__(struct nl_sock *sock,
 
         nlmsg->nlmsg_len = request->size;
         nlmsg->nlmsg_pid = sock->pid;
-        if (i == n - 1) {
-            /* Ensure that we get a reply even if the final request doesn't
-             * ordinarily call for one. */
-            nlmsg->nlmsg_flags |= NLM_F_ACK;
-        }
 
         iovs[i].iov_base = request->data;
         iovs[i].iov_len = request->size;
@@ -474,8 +469,12 @@ nl_sock_transact_multiple__(struct nl_sock *sock,
     while (n > 0) {
         struct ofpbuf *reply;
 
-        error = nl_sock_recv__(sock, &reply, true);
-        if (error) {
+        error = nl_sock_recv__(sock, &reply, false);
+        if (error == EAGAIN) {
+            nl_sock_record_errors__(transactions, n, 0);
+            *done += n;
+            return 0;
+        } else if (error) {
             return error;
         }