recvclient() flushes the output queue before receiving input. The
receive obeys max_idle, the flush doesn't.
Broken in commit
08b94556 (v4.3.20) "Reimplement max_idle without a
separate thread". Until then, the idle thread aborted a stuck attempt
to flush output.
* Flush all queued output before potentially sleeping in
* io_input(), to make sure player sees the prompt.
*/
- deadline = (time_t)(player->may_sleep >= PLAYER_SLEEP_ON_INPUT
- ? -1 : 0);
+ deadline = player->curup + minutes(max_idle);
+ if (player->may_sleep < PLAYER_SLEEP_ON_INPUT)
+ deadline = 0;
while (io_output(player->iop, deadline) > 0)
;