[libvirt] [PATCH 7/7] qemu: monitor: Avoid unnecessary copies of command string

Laine Stump laine at laine.org
Wed Apr 3 00:35:13 UTC 2019


On 3/29/19 9:33 AM, Peter Krempa wrote:
> Use virJSONValueToBuffer so that we can append the command terminator
> string without copying of the string again. Also avoid a 'strlen' as we
> can query the buffer use size.
>
> Signed-off-by: Peter Krempa <pkrempa at redhat.com>


Reviewed-by: Laine Stump <laine at laine.org>


> ---
>   src/qemu/qemu_monitor_json.c | 13 ++++++++-----
>   1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index c7a7e3fa56..8e6c3ccd63 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -277,7 +277,7 @@ qemuMonitorJSONCommandWithFd(qemuMonitorPtr mon,
>   {
>       int ret = -1;
>       qemuMonitorMessage msg;
> -    char *cmdstr = NULL;
> +    VIR_AUTOCLEAN(virBuffer) cmdbuf = VIR_BUFFER_INITIALIZER;
>       char *id = NULL;
>
>       *reply = NULL;
> @@ -294,11 +294,15 @@ qemuMonitorJSONCommandWithFd(qemuMonitorPtr mon,
>           }
>       }
>
> -    if (!(cmdstr = virJSONValueToString(cmd, false)))
> +    if (virJSONValueToBuffer(cmd, &cmdbuf, false) < 0)
>           goto cleanup;
> -    if (virAsprintf(&msg.txBuffer, "%s\r\n", cmdstr) < 0)
> +    virBufferAddLit(&cmdbuf, "\r\n");
> +
> +    if (virBufferCheckError(&cmdbuf) < 0)
>           goto cleanup;
> -    msg.txLength = strlen(msg.txBuffer);
> +
> +    msg.txLength = virBufferUse(&cmdbuf);
> +    msg.txBuffer = virBufferContentAndReset(&cmdbuf);
>       msg.txFD = scm_fd;
>
>       ret = qemuMonitorSend(mon, &msg);
> @@ -315,7 +319,6 @@ qemuMonitorJSONCommandWithFd(qemuMonitorPtr mon,
>
>    cleanup:
>       VIR_FREE(id);
> -    VIR_FREE(cmdstr);
>       VIR_FREE(msg.txBuffer);
>
>       return ret;





More information about the libvir-list mailing list