[libvirt] [PATCH 19/20] Consolidate "cont" into qemudMonitorSendCont()

Daniel P. Berrange berrange at redhat.com
Thu Aug 27 17:30:19 UTC 2009


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 :|




More information about the libvir-list mailing list