On Thu, Feb 05, 2009 at 11:28:48AM -0800, john.levon@xxxxxxx wrote: > # HG changeset patch > # User john.levon@xxxxxxx > # Date 1233859425 28800 > # Node ID c594c1c54b88947082a01b6aaa81ad7756bbd951 > # Parent a23da778e0ddf954d8bf0a185b508fc236feb4be > Improve error reporting in virsh > > Rather than verbosely printing every error, save the last error and > report that only if the entire command fails. > +/* > + * Report an error when a command finishes. This is better than before > + * (when correct operation would report errors), but it has some > + * problems: we lose the smarter formatting of virDefaultErrorFunc(), > + * and it can become harder to debug problems, if errors get reported > + * twice during one command. This case shouldn't really happen anyway, > + * and it's IMHO a bug that libvirt does that sometimes. > + */ > +static void > +virshReportError(vshControl *ctl) > +{ > + if (last_error == NULL) > + return; > + > + if (last_error->code == VIR_ERR_OK) { > + vshError(ctl, FALSE, "%s", _("unknown error")); > + goto out; > + } > + > + vshError(ctl, FALSE, "%s", last_error->message); > + > +out: > + free(last_error); > + last_error = NULL; > } This actually still leaks the char * strings associated with the error - we probably need to now add a virErrorFree() function to go along with the new virSaveError function. 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 :| -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list