From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40504) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1duLfH-0007kk-44 for qemu-devel@nongnu.org; Tue, 19 Sep 2017 12:46:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1duLfG-0004Ok-4u for qemu-devel@nongnu.org; Tue, 19 Sep 2017 12:46:27 -0400 Received: from mail-io0-x243.google.com ([2607:f8b0:4001:c06::243]:35007) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1duLfF-0004OO-W4 for qemu-devel@nongnu.org; Tue, 19 Sep 2017 12:46:26 -0400 Received: by mail-io0-x243.google.com with SMTP id d16so217484ioj.2 for ; Tue, 19 Sep 2017 09:46:25 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <20170808203900.7661-4-jfreimann@redhat.com> References: <20170808203900.7661-1-jfreimann@redhat.com> <20170808203900.7661-4-jfreimann@redhat.com> From: =?UTF-8?B?TWFyYy1BbmRyw6kgTHVyZWF1?= Date: Tue, 19 Sep 2017 18:46:24 +0200 Message-ID: Content-Type: text/plain; charset="UTF-8" Subject: Re: [Qemu-devel] [PATCH v2 3/5] libvhost-user: quit when no more data received List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jens Freimann , QEMU Cc: Victor Kaplansky , "Michael S. Tsirkin" , Jason Wang , Maxime Coquelin , Stefan Hajnoczi Hi On Tue, Aug 8, 2017 at 10:52 PM Jens Freimann wrote: > > From: Jens Freimann > > End processing of messages when VHOST_USER_NONE > is received. > > Without this we run into a vubr_panic() call and get > "PANIC: Unhandled request: 0" > > Signed-off-by: Jens Freimann > --- > contrib/libvhost-user/libvhost-user.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/contrib/libvhost-user/libvhost-user.c b/contrib/libvhost-user/libvhost-user.c > index 9efb9dac0e..35fa0c5e56 100644 > --- a/contrib/libvhost-user/libvhost-user.c > +++ b/contrib/libvhost-user/libvhost-user.c > @@ -161,7 +161,7 @@ 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) { > vu_panic(dev, "Error while recvmsg: %s", strerror(errno)); > return false; > } > @@ -806,6 +806,8 @@ vu_process_message(VuDev *dev, VhostUserMsg *vmsg) > return vu_get_queue_num_exec(dev, vmsg); > case VHOST_USER_SET_VRING_ENABLE: > return vu_set_vring_enable_exec(dev, vmsg); > + case VHOST_USER_NONE: > + break; I am afraid this isn't working. vu_message_read() returns true/success, vu_process_message() returns false/no-reply, so vu_dispatch() will return success, and the caller has no clear way to know that the socket got disconnected. For me the vu_panic() was quite more appropriate here. What problem did this patch exactly solve? > > default: > vmsg_close_fds(vmsg); > vu_panic(dev, "Unhandled request: %d", vmsg->request); > -- > 2.13.3 > >