[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