Il 10/04/2013 19:59, Amit Shah ha scritto: > On (Wed) 10 Apr 2013 [15:23:27], Paolo Bonzini wrote: >> After attaching the source, we have to remove the reference we hold >> to it, because we do not hold anymore a pointer to the source. >> >> If we do not do this, removing the source will not finalize it and >> will not drop the "real" I/O watch source. >> >> This showed up when backporting the new flow control patches to older >> versions of QEMU that still used select. The whole select then failed >> with EBADF (poll instead will reporting POLLNVAL on a single pollfd) >> and QEMU froze. > > This patch doesn't apply directly to master, applies with some fuzz. > However, this patch causes qemu freeze. My testcase is: > > Open chardev on host > Write something to a virtserialport in guest > Close chardev on host > Keep writing to virtserialport in guest > > When I apply the patch to the old qemu version with select, that > starts working fine with the testcase above.
I cannot replicate the freeze. The patch works on both old and new versions of QEMU. My testcases are: 1) on host, nc -l -p 12345 on host, start qemu in guest, cat > /dev/vport0p1 in guest, write something on host, close nc in guest, write something in guest, ^D and poweroff 2) on host, nc -l -p 12345 on host, start qemu in guest, echo abc > /dev/vport0p1 on host, close nc in guest, echo abc > /dev/vport0p1 in guest, poweroff > There's a slight difference in my old qemu tree, I have Hans's > "virtio-console: Remove any pending watches on close" patch applied, > which makes use of the tag obtained on adding the watch. That patch > hasn't found its way to master yet, but it should go in soon. I don't have that patch in my (new) tree. It's vanilla upstream QEMU. Paolo