qemu-char: check errno together with ret < 0
In the tcp_chr_write function, we checked errno, but errno was not reset before a read or write operation. Therefore, this check of errno's actions is often incorrect after EAGAIN has occurred. we need check errno together with ret < 0. Signed-off-by: xinhua.Cao <caoxinhua@huawei.com> Message-Id: <20180704033642.15996-1-caoxinhua@huawei.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Fixes: 9fc53a10f81d3a9027b23fa810147d21be29e614 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
02693cc4f4
commit
81e34930ce
@ -134,8 +134,11 @@ static int tcp_chr_write(Chardev *chr, const uint8_t *buf, int len)
|
|||||||
s->write_msgfds,
|
s->write_msgfds,
|
||||||
s->write_msgfds_num);
|
s->write_msgfds_num);
|
||||||
|
|
||||||
/* free the written msgfds in any cases other than errno==EAGAIN */
|
/* free the written msgfds in any cases
|
||||||
if (EAGAIN != errno && s->write_msgfds_num) {
|
* other than ret < 0 && errno == EAGAIN
|
||||||
|
*/
|
||||||
|
if (!(ret < 0 && EAGAIN == errno)
|
||||||
|
&& s->write_msgfds_num) {
|
||||||
g_free(s->write_msgfds);
|
g_free(s->write_msgfds);
|
||||||
s->write_msgfds = 0;
|
s->write_msgfds = 0;
|
||||||
s->write_msgfds_num = 0;
|
s->write_msgfds_num = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user