On Thu, Aug 20, 2009 at 08:18:17PM +0200, Miloslav Trma?? wrote:
The interface allows qemudMonitorSendCont() to report errors that
are
not overridden by its callers.
Also fix a potential infinite loop in qemuDomainCoreDump() if sending
cont repeatedly fails.
---
src/qemu_driver.c | 89 +++++++++++++++++++++++++++++++----------------------
1 files changed, 52 insertions(+), 37 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 3ab0fcc..d013007 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -28,6 +28,7 @@
#include <dirent.h>
#include <limits.h>
#include <string.h>
+#include <stdbool.h>
#include <stdio.h>
#include <strings.h>
#include <stdarg.h>
@@ -135,6 +136,9 @@ static int qemudMonitorCommandExtra(const virDomainObjPtr vm,
const char *extraPrompt,
int scm_fd,
char **reply);
+static int qemudMonitorSendCont(virConnectPtr conn,
+ const virDomainObjPtr vm,
+ bool *error_reported);
[snip]
if (migrateFrom == NULL) {
+ bool error_reported;
+
/* Allow the CPUS to start executing */
- if (qemudMonitorCommand(vm, "cont", &info) < 0) {
- qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
- "%s", _("resume operation failed"));
+ if (qemudMonitorSendCont(conn, vm, &error_reported) < 0) {
+ if (!error_reported)
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ "%s", _("resume operation
failed"));
return -1;
}
- VIR_FREE(info);
}
I think we can do something a little nicer than this 'error_reported'
boolean. At the start of every API call we do a 'virResetError',
so we can guarentee no error is set. Thus, you ought to be able to see
if an error has been set by qemudMonitorSendCont() just by doing
once it returns
if (virGetLastError() == NULL)
The only minor bump on the road in that plan, is that I've just
noticed a bug in qemudAutostartConfigs() which fails to call
the virResetErrror() before runing qemudStartVMDaemon(), but
that's easily fixed.
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|