]> git.pond.sub.org Git - empserver/commitdiff
recvclient: Track potential yield on input
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 29 Nov 2015 09:20:52 +0000 (10:20 +0100)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 5 Dec 2015 12:19:38 +0000 (13:19 +0100)
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 <armbru@pond.sub.org>
src/lib/player/recvclient.c
tests/navi-march/server.log

index 2088ec2c3ca94fb072f7c78a242fd1b646dc07aa..14d921b7b4535937dd51f3c0c3802276bd99520b 100644 (file)
  *
  *  Known contributors to this file:
  *     Dave Pare, 1986
- *     Markus Armbruster, 2006-2012
+ *     Markus Armbruster, 2006-2015
  *     Ron Koenderink, 2009
  */
 
 #include <config.h>
 
 #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)
index b5b9382b35987a01775dbd8206905c69e767c315..5a0c4c933e2c77dcc0b3f43b2f34424059416c44 100644 (file)
@@ -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