On a Saturday in 2023, Guoyi Tu wrote:
Currently, libvirt creates a thread pool with only on thread to handle
all
qemu monitor events for virtual machines, In the cases that if the thread
gets stuck while handling a monitor EOF event, such as unable to kill the
virtual machine process or release resources, the events of other virtual
machine will be also blocked, which will lead to the abnormal behavior of
other virtual machines.
For instance, when another virtual machine completes a shutdown operation
and the monitor EOF event has been queued but remains unprocessed, we
immediately destroy and start the virtual machine again, at a later time
when EOF event get processed, the processMonitorEOFEvent() will kill the
virtual machine that just started.
To address this issue, in the processMonitorEOFEvent(), we check whether
the current virtual machine's monitor object matches the one at the time
the event was generated. If they do not match, we immediately return.
Signed-off-by: Guoyi Tu <tugy(a)chinatelecom.cn>
Signed-off-by: dengpengcheng <dengpc12(a)chinatelecom.cn>
---
src/qemu/qemu_domain.c | 2 +-
src/qemu/qemu_driver.c | 11 +++++++++--
src/qemu/qemu_process.c | 2 +-
3 files changed, 11 insertions(+), 4 deletions(-)
The patch looks reasonable to me, but I cannot apply it:
warning: Patch sent with format=flowed; space at the end of lines might be lost.
Applying: qemu_driver: Don't handle the EOF event if monitor changed
error: corrupt patch at line 32
Patch failed at 0001 qemu_driver: Don't handle the EOF event if monitor changed
Do you have it applied somewhere on GitLab or can you try sending the
output of 'git format-patch' as an attachment?
Thank you,
Jano