[Spice-devel] [PATCH 3/3] worker: avoid server hanging when no client are connected.
Frediano Ziglio
fziglio at redhat.com
Wed Jan 20 08:46:49 PST 2016
>
> From: Marc-André Lureau <marcandre.lureau at gmail.com>
>
> ---
> server/red-worker.c | 27 ++++++++++++++++++---------
> 1 file changed, 18 insertions(+), 9 deletions(-)
>
> diff --git a/server/red-worker.c b/server/red-worker.c
> index a98c4a6..991a816 100644
> --- a/server/red-worker.c
> +++ b/server/red-worker.c
> @@ -227,7 +227,6 @@ static int red_process_display(RedWorker *worker,
> uint32_t max_pipe_size, int *r
> {
> QXLCommandExt ext_cmd;
> int n = 0;
> - uint64_t start = spice_get_monotonic_time_ns();
>
> if (!worker->running) {
> *ring_is_empty = TRUE;
> @@ -236,8 +235,23 @@ static int red_process_display(RedWorker *worker,
> uint32_t max_pipe_size, int *r
>
> worker->process_display_generation++;
> *ring_is_empty = FALSE;
> - while (!display_is_connected(worker) ||
> - red_channel_max_pipe_size(RED_CHANNEL(worker->display_channel))
> <= max_pipe_size) {
> + for (;;) {
> +
> + if (display_is_connected(worker)) {
> +
> + if
> (red_channel_all_blocked(RED_CHANNEL(worker->display_channel))) {
> + spice_info("all display clients are blocking");
> + return n;
> + }
> +
> +
> + // TODO: change to average pipe size?
> + if
> (red_channel_max_pipe_size(RED_CHANNEL(worker->display_channel)) >
> max_pipe_size) {
> + spice_info("too many items in the display clients pipe
> already");
> + return n;
> + }
> + }
> +
> if (!worker->qxl->st->qif->get_command(worker->qxl, &ext_cmd)) {
> *ring_is_empty = TRUE;;
> if (worker->display_poll_tries < CMD_RING_POLL_RETRIES) {
> @@ -327,13 +341,8 @@ static int red_process_display(RedWorker *worker,
> uint32_t max_pipe_size, int *r
> spice_error("bad command type");
> }
> n++;
> - if ((worker->display_channel &&
> - red_channel_all_blocked(&worker->display_channel->common.base))
> - || spice_get_monotonic_time_ns() - start > NSEC_PER_SEC / 100) {
> - worker->event_timeout = 0;
> - return n;
> - }
> }
> +
> return n;
> }
>
I don't remember why I have this patch still around.
Frediano
More information about the Spice-devel
mailing list