On 06/01/2018 01:27 PM, Marc-André Lureau wrote: > Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > hw/virtio/vhost-user.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/hw/virtio/vhost-user.c b/hw/virtio/vhost-user.c > index ca554d4ff1..cc9298792d 100644 > --- a/hw/virtio/vhost-user.c > +++ b/hw/virtio/vhost-user.c > @@ -869,7 +869,10 @@ static void slave_read(void *opaque) > iov.iov_base = &hdr; > iov.iov_len = VHOST_USER_HDR_SIZE; > > - size = recvmsg(u->slave_fd, &msgh, 0); > + do { > + size = recvmsg(u->slave_fd, &msgh, 0); > + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); > + > if (size != VHOST_USER_HDR_SIZE) { > error_report("Failed to read from slave."); > goto err; > @@ -898,7 +901,10 @@ static void slave_read(void *opaque) > } > > /* Read payload */ > - size = read(u->slave_fd, &payload, hdr.size); > + do { > + size = read(u->slave_fd, &payload, hdr.size); > + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); > + > if (size != hdr.size) { > error_report("Failed to read payload from slave."); > goto err; > @@ -941,7 +947,10 @@ static void slave_read(void *opaque) > iovec[1].iov_base = &payload; > iovec[1].iov_len = hdr.size; > > - size = writev(u->slave_fd, iovec, ARRAY_SIZE(iovec)); > + do { > + size = writev(u->slave_fd, iovec, ARRAY_SIZE(iovec)); > + } while (size < 0 && (errno == EINTR || errno == EAGAIN)); > + > if (size != VHOST_USER_HDR_SIZE + hdr.size) { > error_report("Failed to send msg reply to slave."); > goto err; >