On Wed, Feb 12, 2025 at 11:08:09AM +0100, Olaf Hering via Devel wrote:
Hello,
the command 'virsh -c qemu+ssh://root@remotehost/system console vm' from
libvirt 10.0.0 just hangs when the remotehost is rebooted. It prints
error: Disconnected from qemu+ssh://root@remotehost/system due to end of file
and waits for the user to press return. Then it prints
The problem here is that the code in virshRunConsole():
https://gitlab.com/libvirt/libvirt/-/blob/master/tools/virsh-console.c?re...
is waiting for a condition that gets signaled from virConsoleShutdown()
that gets called only on events on the stream. The part of the code
that gets the information about the disconnection handles it in
virshCatchDisconnect():
https://gitlab.com/libvirt/libvirt/-/blob/master/tools/virsh.c?ref_type=h...
which:
a) shouldn't do much
b) does not have access to that condition or that stream
and one of those will need to be linked together somehow.
error: internal error: client socket is closed
and the command terminates as expected. I tried to add -k and -K, but
that does not help. If for some reason the vm is shutdown manually via
'virsh shutdown --domain vm' on remotehost or via "poweroff", then
'virsh console' also terminates properly.
That's because any event (hitting <enter> triggers the stdin event)
wakes up the event loop which notices the disconnection.
Is there a way to avoid such a hang state if the ssh connection
drops?
It seems the simple reproducer is to send SIGTERM to the sshd child process.
Olaf