From 7cca82578d796a88395081deca25d46cfddf2613 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 11 Mar 2012 12:32:17 +0100 Subject: [PATCH] Clean up how recvclient() deals with command abortion We must not block in io_input() after command abortion unblocked io_output(). Instead of checking player->aborted, compute the deadline according to player->may_sleep, like we do for io_output(). --- src/lib/player/recvclient.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/lib/player/recvclient.c b/src/lib/player/recvclient.c index 97cc86177..7dacb4508 100644 --- a/src/lib/player/recvclient.c +++ b/src/lib/player/recvclient.c @@ -87,13 +87,14 @@ recvclient(char *cmd, int size) ; /* - * If io_output() blocked and got unblocked by command - * abortion, we must return without blocking in io_input(). + * Try to receive some input. Need to check player->may_sleep + * again; command abortion during io_output() might have + * changed it. */ - if (player->aborted) - break; - - res = io_input(player->iop, player->curup + minutes(max_idle)); + deadline = player->curup + minutes(max_idle); + if (player->may_sleep < PLAYER_SLEEP_ON_INPUT) + deadline = 0; + res = io_input(player->iop, deadline); if (res > 0) ; else if (res < 0) -- 2.43.0