mirror of https://github.com/xemu-project/xemu.git
qemu-char: using qemu_set_nonblock() instead of fcntl(O_NONBLOCK)
Technically, fcntl(soc, F_SETFL, O_NONBLOCK) is incorrect since it clobbers all other file flags. We can use F_GETFL to get the current flags, set or clear the O_NONBLOCK flag, then use F_SETFL to set the flags. Using the qemu_set_nonblock() wrapper. Signed-off-by: Wangxin <wangxinxin.wang@huawei.com> Signed-off-by: Gonglei <arei.gonglei@huawei.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
271dddd133
commit
4ff12bdb1d
|
@ -975,7 +975,7 @@ static CharDriverState *qemu_chr_open_fd(int fd_in, int fd_out)
|
||||||
s = g_malloc0(sizeof(FDCharDriver));
|
s = g_malloc0(sizeof(FDCharDriver));
|
||||||
s->fd_in = io_channel_from_fd(fd_in);
|
s->fd_in = io_channel_from_fd(fd_in);
|
||||||
s->fd_out = io_channel_from_fd(fd_out);
|
s->fd_out = io_channel_from_fd(fd_out);
|
||||||
fcntl(fd_out, F_SETFL, O_NONBLOCK);
|
qemu_set_nonblock(fd_out);
|
||||||
s->chr = chr;
|
s->chr = chr;
|
||||||
chr->opaque = s;
|
chr->opaque = s;
|
||||||
chr->chr_add_watch = fd_chr_add_watch;
|
chr->chr_add_watch = fd_chr_add_watch;
|
||||||
|
@ -1062,7 +1062,7 @@ static CharDriverState *qemu_chr_open_stdio(ChardevStdio *opts)
|
||||||
}
|
}
|
||||||
old_fd0_flags = fcntl(0, F_GETFL);
|
old_fd0_flags = fcntl(0, F_GETFL);
|
||||||
tcgetattr (0, &oldtty);
|
tcgetattr (0, &oldtty);
|
||||||
fcntl(0, F_SETFL, O_NONBLOCK);
|
qemu_set_nonblock(0);
|
||||||
atexit(term_exit);
|
atexit(term_exit);
|
||||||
|
|
||||||
chr = qemu_chr_open_fd(0, 1);
|
chr = qemu_chr_open_fd(0, 1);
|
||||||
|
|
Loading…
Reference in New Issue