On Thu, Nov 11, 2021 at 7:38 PM Roman Kagan wrote: > tcp_chr_recv communicates the specific error condition to the caller via > errno. However, after setting it, it may call into some system calls or > library functions which can clobber the errno. > > Avoid this by moving the errno assignment to the end of the function. > > Signed-off-by: Roman Kagan > Reviewed-by: Marc-André Lureau --- > chardev/char-socket.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/chardev/char-socket.c b/chardev/char-socket.c > index 836cfa0bc2..90054ce58c 100644 > --- a/chardev/char-socket.c > +++ b/chardev/char-socket.c > @@ -346,13 +346,6 @@ static ssize_t tcp_chr_recv(Chardev *chr, char *buf, > size_t len) > NULL); > } > > - if (ret == QIO_CHANNEL_ERR_BLOCK) { > - errno = EAGAIN; > - ret = -1; > - } else if (ret == -1) { > - errno = EIO; > - } > - > if (msgfds_num) { > /* close and clean read_msgfds */ > for (i = 0; i < s->read_msgfds_num; i++) { > @@ -381,6 +374,13 @@ static ssize_t tcp_chr_recv(Chardev *chr, char *buf, > size_t len) > #endif > } > > + if (ret == QIO_CHANNEL_ERR_BLOCK) { > + errno = EAGAIN; > + ret = -1; > + } else if (ret == -1) { > + errno = EIO; > + } > + > return ret; > } > > -- > 2.33.1 > > > -- Marc-André Lureau