-static int red_process_cursor(RedWorker *worker, uint32_t max_pipe_size)
+static int red_process_cursor(RedWorker *worker, uint32_t max_pipe_size, int 
*ring_is_empty)
  {
      QXLCommandExt ext_cmd;
      int n = 0;

+    *ring_is_empty = FALSE;
      while (!worker->cursor_channel || 
worker->cursor_channel->base.pipe_size<= max_pipe_size) {
          if (!worker->qxl->st->qif->get_cursor_command(worker->qxl,&ext_cmd)) {
+            *ring_is_empty = TRUE;

Hmm, I think this extra parameter isn't needed.
red_process_cursor() returns the number of commands processed.

@@ -9981,17 +9986,18 @@ static inline void flush_display_commands(RedWorker 
*worker)
  {

Here you can do:

  (1)  make sure there is room in the output pipe.
  (2)  call red_process_commands().
  (2a) if return value is zero the ring is empty -> we are done.
  (2b) otherwise repeat (until timeout hits).

+static inline void flush_cursor_commands(RedWorker *worker)
+{

I think instead of cut+paste you can change flush_display_commands to take a function pointer and a RedChannel as additional arguments, then call it with red_process_cursor + worker->cursor_channel or red_process_commands + worker->display_channel.

cheers,
  Gerd

_______________________________________________
Spice-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to