From 8daeffbd8f5bd7d98939ffeacadbe3737b8ab7c7 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 29 Nov 2015 10:20:52 +0100 Subject: [PATCH] recvclient: Track potential yield on input recvclient() calls ef_make_stale() only when it does actual I/O, via io_output() and io_input(). Missed in commit 2fa5f652, v4.3.24. Call it directly when it doesn't do actual I/O. This makes navi-march-test expose a bug in march: when the player declines to abandon a sector, we write back stale land units, triggering a generation oops. Signed-off-by: Markus Armbruster --- src/lib/player/recvclient.c | 5 ++++- tests/navi-march/server.log | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lib/player/recvclient.c b/src/lib/player/recvclient.c index 2088ec2c..14d921b7 100644 --- a/src/lib/player/recvclient.c +++ b/src/lib/player/recvclient.c @@ -28,13 +28,14 @@ * * Known contributors to this file: * Dave Pare, 1986 - * Markus Armbruster, 2006-2012 + * Markus Armbruster, 2006-2015 * Ron Koenderink, 2009 */ #include #include "empio.h" +#include "file.h" #include "journal.h" #include "player.h" #include "prototypes.h" @@ -68,6 +69,8 @@ recvclient(char *cmd, int size) count = io_gets(player->iop, cmd, size); if (count >= 0) { /* got it */ + if (player_io_deadline(player, 0)) + ef_make_stale(); if (strcmp(cmd, "ctld") == 0) player->aborted = player->got_ctld = 1; if (strcmp(cmd, "aborted") == 0) diff --git a/tests/navi-march/server.log b/tests/navi-march/server.log index b5b9382b..5a0c4c93 100644 --- a/tests/navi-march/server.log +++ b/tests/navi-march/server.log @@ -12,6 +12,10 @@ tester@127.0.0.1 logged out, country #1 Connect from 127.0.0.1 tester@127.0.0.1 using country #1 tester@127.0.0.1 logged in as country #1 +Oops: elt->generation != (ef_generation & 0xfff) in ../src/lib/common/file.c:699 +Crash dump complete +Oops: elt->generation != (ef_generation & 0xfff) in ../src/lib/common/file.c:699 +Crash dump complete tester@127.0.0.1 logged out, country #1 Connect from 127.0.0.1 tester@127.0.0.1 using country #0