blob: bfe47540588f76d7c722e70d915b1cf15c021b84 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
vnc: 0.920
socket: 0.895
graphic: 0.768
network: 0.731
device: 0.633
semantic: 0.609
instruction: 0.597
mistranslation: 0.586
other: 0.544
boot: 0.396
KVM: 0.191
assembly: 0.133
VNC unix-domain socket unlink()ed prematurely
With qemu 3.0.0 (I don't believe this happened with previous
versions), if I tell it `-vnc unix:/path/to/vnc.sock`, qemu will
unlink() that file when the first client disconnects, meaning that
once I disconnect, I can't ever reconnect without restarting the VM.
A stupid testcase demonstrating the issue:
In terminal A:
$ qemu-system-x86_64 -vnc unix:$PWD/vnc.sock
In terminal B:
$ ls vnc.sock
vnc.sock
$ socat STDIO UNIX-CONNECT:vnc.sock <<<''
RFB 003.008
$ ls vnc.sock
ls: cannot access 'vnc.sock': No such file or directory
I have determined that the offending unlink() call is the one in
io/channel-socket.c:qio_channel_socket_close(). That call was first
introduced in commit d66f78e1eaa832f73c771d9df1b606fe75d52a50, which
first appeared in version 3.0.0.
This type of premature unlink() does not happen on monitor.sock with
`-monitor unix:/path/to/monitor.sock,server,nowait`.
I am not familiar enough with the QIO subsystem to suggest a fix that
fixes VNC, but preserves the QMP fix targeted in the offending commit.
This is still a problem with 3.1.0.
Added Daniel to the bug.
It only affects VNC, not chardevs because the chardevs fail to call qio_channel_close() and just rely on finalize() cleaning up the open socket. To fix this we just need to made the code conditional on it being a listener socket
if (qio_channel_has_feature(ioc, QIO_CHANNEL_FEATURE_LISTEN)) {
...
}
Patch proposed at
https://lists.gnu.org/archive/html/qemu-devel/2019-01/msg02774.html
Fix merged to git master https://git.qemu.org/?p=qemu.git;a=commit;h=feff02089113839d233e40a9bd7134241de12d1d
|