On 07/07/2020 09:56, Jason Wang wrote: > > 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; > } >
Yes, I think you're right, all fd that come from monitor and passed to qemu_set_nonblock() before any other use should use qemu_try_set_nonblock() and report an error. I update my patch accordingly. Thanks, Laurent