forked from pool/libvirt
56 lines
2.0 KiB
Diff
56 lines
2.0 KiB
Diff
|
commit aeda1b8c56dc58b0a413acc61bbea938b40499e1
|
||
|
Author: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||
|
Date: Thu Mar 9 10:54:32 2017 +0100
|
||
|
|
||
|
qemu: monitor: do not report error on shutdown
|
||
|
|
||
|
If a shutdown is expected because it was triggered via libvirt we can
|
||
|
also expect the monitor to close. In those cases do not report an
|
||
|
internal error like:
|
||
|
"internal error: End of file from qemu monitor"
|
||
|
|
||
|
Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
|
||
|
|
||
|
Index: libvirt-3.3.0/src/qemu/qemu_monitor.c
|
||
|
===================================================================
|
||
|
--- libvirt-3.3.0.orig/src/qemu/qemu_monitor.c
|
||
|
+++ libvirt-3.3.0/src/qemu/qemu_monitor.c
|
||
|
@@ -63,6 +63,7 @@ struct _qemuMonitor {
|
||
|
int fd;
|
||
|
int watch;
|
||
|
int hasSendFD;
|
||
|
+ int willhangup;
|
||
|
|
||
|
virDomainObjPtr vm;
|
||
|
|
||
|
@@ -693,8 +694,10 @@ qemuMonitorIO(int watch, int fd, int eve
|
||
|
if (events & VIR_EVENT_HANDLE_HANGUP) {
|
||
|
hangup = true;
|
||
|
if (!error) {
|
||
|
- virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||
|
- _("End of file from qemu monitor"));
|
||
|
+ if (!mon->willhangup) {
|
||
|
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||
|
+ _("End of file from qemu monitor"));
|
||
|
+ }
|
||
|
eof = true;
|
||
|
events &= ~VIR_EVENT_HANDLE_HANGUP;
|
||
|
}
|
||
|
@@ -733,7 +736,7 @@ qemuMonitorIO(int watch, int fd, int eve
|
||
|
if (mon->lastError.code != VIR_ERR_OK) {
|
||
|
/* Already have an error, so clear any new error */
|
||
|
virResetLastError();
|
||
|
- } else {
|
||
|
+ } else if (!mon->willhangup) {
|
||
|
virErrorPtr err = virGetLastError();
|
||
|
if (!err)
|
||
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||
|
@@ -1327,6 +1330,7 @@ qemuMonitorEmitShutdown(qemuMonitorPtr m
|
||
|
{
|
||
|
int ret = -1;
|
||
|
VIR_DEBUG("mon=%p", mon);
|
||
|
+ mon->willhangup = 1;
|
||
|
|
||
|
QEMU_MONITOR_CALLBACK(mon, ret, domainShutdown, mon->vm);
|
||
|
return ret;
|