Philippe Mathieu-Daudé <f4...@amsat.org> writes: > If qemu_chr_fe_read_all() returns -EINTR the do {} statement continues and the > n accumulator used to complete reads upto sizeof(msg) is decremented by 4 (the > value of EINTR on Linux). > To avoid that, use simpler if() statements and continue if EINTR occured. > > hw/misc/ivshmem.c:650:14: warning: Loss of sign in implicit conversion > } while (n < sizeof(msg)); > ^ >
Let's add "Screwed up in commit 3a55fc0f, v2.6.0." > Reported-by: Clang Static Analyzer > Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > get_maintainer.pl: No maintainers found! > > hw/misc/ivshmem.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c > index a58f9ee579..47a015f072 100644 > --- a/hw/misc/ivshmem.c > +++ b/hw/misc/ivshmem.c > @@ -642,7 +642,10 @@ static int64_t ivshmem_recv_msg(IVShmemState *s, int > *pfd, Error **errp) > do { > ret = qemu_chr_fe_read_all(&s->server_chr, (uint8_t *)&msg + n, > sizeof(msg) - n); > - if (ret < 0 && ret != -EINTR) { > + if (ret < 0) { > + if (ret == -EINTR) { > + continue; > + } > error_setg_errno(errp, -ret, "read from server failed"); > return INT64_MIN; > } Reviewed-by: Markus Armbruster <arm...@redhat.com> Paolo, you taking this through your miscellaneous queue would save me (and possibly Peter) a bit of work. Only if you have something queued already. Let me know.