[libvirt] [PATCH] [RESEND] qemu: record timestamp in qemu domain log

Osier Yang jyang at redhat.com
Tue Nov 16 15:41:07 UTC 2010


于 2010年11月16日 23:18, Daniel P. Berrange 写道:
> 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

yep, right, thanks. just replied with the updated patch.

>
> Regards,
> Daniel

- Osier




More information about the libvir-list mailing list