[libvirt] [PATCH] [RESEND] qemu: record timestamp in qemu domain log
Daniel P. Berrange
berrange at redhat.com
Tue Nov 16 15:18:30 UTC 2010
On Tue, Nov 16, 2010 at 10:54:34PM +0800, Osier Yang wrote:
> 于 2010年11月16日 21:17, Daniel P. Berrange 写道:
> >On Tue, Nov 16, 2010 at 04:11:40PM +0800, Osier Yang wrote:
> >>Currently only support domain start and shutdown, for domain start,
> >>record timestamp before the qemu command line, and for domain shutdown,
> >>just say it's shutting down with timestamp.
> >>
> >>* src/qemu/qemu_driver.c
> >>---
> >> src/qemu/qemu_driver.c | 47
> >> +++++++++++++++++++++++++++++++++++++++++++++--
> >> 1 files changed, 45 insertions(+), 2 deletions(-)
> >>
> >>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> >>index fd61864..423befb 100644
> >>--- a/src/qemu/qemu_driver.c
> >>+++ b/src/qemu/qemu_driver.c
> >>@@ -3877,6 +3877,7 @@ static int qemudStartVMDaemon(virConnectPtr conn,
> >> char ebuf[1024];
> >> char *pidfile = NULL;
> >> int logfile = -1;
> >>+ char *timestamp;
> >> qemuDomainObjPrivatePtr priv = vm->privateData;
> >>
> >> struct qemudHookData hookData;
> >>@@ -4084,7 +4085,17 @@ static int qemudStartVMDaemon(virConnectPtr conn,
> >> goto cleanup;
> >> }
> >>
> >>+ if ((timestamp = virTimestamp()) == NULL) {
> >>+ virReportOOMError();
> >>+ goto cleanup;
> >>+ } else if (safewrite(logfile, timestamp, strlen(timestamp))< 0) {
> >>+ VIR_WARN("Unable to write timestamp to logfile: %s",
> >>+ virStrerror(errno, ebuf, sizeof ebuf));
> >>+ VIR_FREE(timestamp);
> >>+ }
> >
> >Surely we want the VIR_FREE(timestamp) outside the 'else if'. This
> >code is only freeing the memory upon write failure.
>
> In 'if'branch, "timestamp" here returned by "virTimestamp" is
> NULL, no need to free it.
>
> And if it really needs to be freed, it should be freed
> in "virTimestamp", "virTimestamp" invokes "virAsprintf"
> there, but "virAsprintf" guarantees *strp is NULL upon
> failure. Isn't it? just recall you reminded me before.. :-)
Consider expanding the 'else if' into a fully bracketed expression
if ((timestamp = virTimestamp()) == NULL) {
virReportOOMError();
goto cleanup;
} else {
if (safewrite(logfile, timestamp, strlen(timestamp))< 0) {
VIR_WARN("Unable to write timestamp to logfile: %s",
virStrerror(errno, ebuf, sizeof ebuf));
VIR_FREE(timestamp);
}
}
The 'else' of the second 'if' statement is missing the VIR_FREE
for timestamp
Regards,
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.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