qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH RFC 3/3] libvhost-user: quit when no more data r


From: Maxime Coquelin
Subject: Re: [Qemu-devel] [PATCH RFC 3/3] libvhost-user: quit when no more data received
Date: Wed, 12 Jul 2017 18:05:20 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.0



On 07/12/2017 11:41 AM, Jens Freimann wrote:
From: Jens Freimann<address@hidden>

When recvmsg() returns a message size of zero and
errno is ENOENT end processing of vhost-user messages.

Without this we run into a vubr_panic() call and get
      PANIC: Error while recvmsg: No such file or directory
      Error while dispatching.

Add a switch "quit" to the vhost user device and set true to stop
processing messages.

Signed-off-by: Jens Freimann<address@hidden>
---
  contrib/libvhost-user/libvhost-user.c | 12 +++++++++++-
  contrib/libvhost-user/libvhost-user.h |  1 +
  2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/contrib/libvhost-user/libvhost-user.c 
b/contrib/libvhost-user/libvhost-user.c
index 9efb9da..5538859 100644
--- a/contrib/libvhost-user/libvhost-user.c
+++ b/contrib/libvhost-user/libvhost-user.c
@@ -161,7 +161,10 @@ vu_message_read(VuDev *dev, int conn_fd, VhostUserMsg 
*vmsg)
          rc = recvmsg(conn_fd, &msg, 0);
      } while (rc < 0 && (errno == EINTR || errno == EAGAIN));
- if (rc <= 0) {
+    if (rc == 0 && (errno == ENOENT)) {
+        vmsg->size = 0;
+        dev->quit = true;
+    } else if (rc < 0) {
          vu_panic(dev, "Error while recvmsg: %s", strerror(errno));
          return false;
      }
@@ -755,6 +758,10 @@ vu_process_message(VuDev *dev, VhostUserMsg *vmsg)
      DPRINT("Flags:   0x%x\n", vmsg->flags);
      DPRINT("Size:    %d\n", vmsg->size);
+ if (dev->quit) {
+        return true;
+    }
+

You may want to return false here, as true means a reply is requested?

Maxime



reply via email to

[Prev in Thread] Current Thread [Next in Thread]