On 2020/7/2 上午3:39, Laurent Vivier wrote:
+void qemu_set_nonblock(int fd) +{ + int f; + f = qemu_try_set_nonblock(fd); + assert(f == 0); }
So we keep this assert which means it can still be triggered from monitor? I don't check all the callers, but I got: in tap_init_one() we had: if (vhostfdname) { vhostfd = monitor_fd_param(cur_mon, vhostfdname, &err); if (vhostfd == -1) { if (tap->has_vhostforce && tap->vhostforce) { error_propagate(errp, err); } else { warn_report_err(err); } return; } qemu_set_nonblock(vhostfd); } else { and in net_init_socket() we had: if (sock->has_fd) { int fd; fd = monitor_fd_param(cur_mon, sock->fd, errp); if (fd == -1) { return -1; } qemu_set_nonblock(fd); if (!net_socket_fd_init(peer, "socket", name, fd, 1, sock->mcast, errp)) { return -1; } return 0; } Thanks