From c3d6899c5e67dfd7ff195eccc10541f3b7e141a7 Mon Sep 17 00:00:00 2001 From: Peter Lieven Date: Fri, 30 Oct 2015 12:10:11 +0100 Subject: [PATCH] vnc: recycle empty vs->output buffer If the vs->output buffer is empty it will be dropped by the next qio_buffer_move_empty in vnc_jobs_consume_buffer anyway. So reuse the allocated buffer from this buffer in the worker thread where we otherwise would start with an empty (unallocated buffer). Signed-off-by: Peter Lieven Reviewed-by: Daniel P. Berrange Message-id: 1446203414-4013-17-git-send-email-kraxel@redhat.com [ added a comment describing the non-obvious optimization ] Signed-off-by: Gerd Hoffmann --- ui/vnc-jobs.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c index 12389cc2e8..08f0163fbc 100644 --- a/ui/vnc-jobs.c +++ b/ui/vnc-jobs.c @@ -235,6 +235,14 @@ static int vnc_worker_thread_loop(VncJobQueue *queue) vnc_unlock_output(job->vs); goto disconnected; } + if (buffer_empty(&job->vs->output)) { + /* + * Looks like a NOP as it obviously moves no data. But it + * moves the empty buffer, so we don't have to malloc a new + * one for vs.output + */ + buffer_move_empty(&vs.output, &job->vs->output); + } vnc_unlock_output(job->vs); /* Make a local copy of vs and switch output buffers */