]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
vnc: recycle empty vs->output buffer
authorPeter Lieven <pl@kamp.de>
Fri, 30 Oct 2015 11:10:11 +0000 (12:10 +0100)
committerGerd Hoffmann <kraxel@redhat.com>
Thu, 5 Nov 2015 08:09:31 +0000 (09:09 +0100)
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 <pl@kamp.de>
Reviewed-by: Daniel P. Berrange <berrange@redhat.com>
Message-id: 1446203414-4013-17-git-send-email-kraxel@redhat.com

[ added a comment describing the non-obvious optimization ]

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
ui/vnc-jobs.c

index 12389cc2e840d570e010f93751316c577c87e275..08f0163fbcb42174a6334c69ba63df637e55ffb3 100644 (file)
@@ -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 */