diff mbox

[16/19] vnc: recycle empty vs->output buffer

Message ID 1446203414-4013-17-git-send-email-kraxel@redhat.com
State New
Headers show

Commit Message

Gerd Hoffmann Oct. 30, 2015, 11:10 a.m. UTC
From: Peter Lieven <pl@kamp.de>

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>

[ added a comment describing the non-obvious optimization ]

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/vnc-jobs.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Daniel P. Berrangé Oct. 30, 2015, 12:27 p.m. UTC | #1
On Fri, Oct 30, 2015 at 12:10:11PM +0100, Gerd Hoffmann wrote:
> From: Peter Lieven <pl@kamp.de>
> 
> 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>
> 
> [ added a comment describing the non-obvious optimization ]
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  ui/vnc-jobs.c | 8 ++++++++
>  1 file changed, 8 insertions(+)

Reviewed-by: Daniel P. Berrange <berrange@redhat.com>

Regards,
Daniel
diff mbox

Patch

diff --git a/ui/vnc-jobs.c b/ui/vnc-jobs.c
index 12389cc..08f0163 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 */