[Spice-devel] [PATCH 3/6] worker: make it clear it returns from process when no cmd

Jonathon Jongsma jjongsma at redhat.com
Tue Sep 29 08:25:54 PDT 2015


On Tue, 2015-09-29 at 11:56 +0100, Frediano Ziglio wrote:
> From: Marc-André Lureau <marcandre.lureau at gmail.com>
> 
> ---
>  server/red_worker.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/server/red_worker.c b/server/red_worker.c
> index 2efb311..d8a081e 100644
> --- a/server/red_worker.c
> +++ b/server/red_worker.c
> @@ -4966,12 +4966,12 @@ static int red_process_cursor(RedWorker *worker, uint32_t max_pipe_size, int *ri
>              if (worker->repoll_cursor_ring < CMD_RING_POLL_RETRIES) {
>                  worker->repoll_cursor_ring++;
>                  worker->event_timeout = MIN(worker->event_timeout, CMD_RING_POLL_TIMEOUT);
> -                break;
> +                return n;
>              }
>              if (worker->repoll_cursor_ring > CMD_RING_POLL_RETRIES ||
>                  worker->qxl->st->qif->req_cursor_notification(worker->qxl)) {
>                  worker->repoll_cursor_ring++;
> -                break;
> +                return n;
>              }
>              continue;
>          }
> @@ -5028,12 +5028,12 @@ static int red_process_commands(RedWorker *worker, uint32_t max_pipe_size, int *
>              if (worker->repoll_cmd_ring < CMD_RING_POLL_RETRIES) {
>                  worker->repoll_cmd_ring++;
>                  worker->event_timeout = MIN(worker->event_timeout, CMD_RING_POLL_TIMEOUT);
> -                break;
> +                return n;
>              }
>              if (worker->repoll_cmd_ring > CMD_RING_POLL_RETRIES ||
>                           worker->qxl->st->qif->req_cmd_notification(worker->qxl)) {
>                  worker->repoll_cmd_ring++;
> -                break;
> +                return n;
>              }
>              continue;
>          }


This change looks fine to me, but while looking at the code, I noticed
something unrelated. It seems that e.g.
worker->qxl->st->qif->req_cursor_notification() will never be called.
worker->repoll_cursor_ring is incremented if it is less than
CMD_RING_POLL_RETRIES and is incremented if it's greater than
CMD_RING_POLL_RETRIES, but it is not incremented if it is equal. Which
means that once it reaches CMD_RING_POLL_RETRIES, it will stay there and
the second if statement will never be satisfied. The same appears to be
true in the second hunk.

Jonathon



More information about the Spice-devel mailing list