navigate march: Fix abort not to wipe out concurrent updates

When the player aborts the command at the movement prompt, we write
back stale ships or land units, triggering a generation oops.  Any
updates made by other threads meanwhile are wiped out, triggering a
seqno mismatch oops.

Broken in commit 24000b4, v4.3.33.  Fix by restoring the lost
shp_nav_stay_behind() and lnd_mar_stay_behind() calls.

Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
This commit is contained in:
Markus Armbruster 2015-11-29 11:30:45 +01:00
parent 354b6aea3d
commit 42a3c10fd9
2 changed files with 5 additions and 6 deletions

View file

@ -407,10 +407,13 @@ unit_move(struct emp_qelem *list)
if (!*cp) { if (!*cp) {
cp = unit_move_getpath(list, suppress_map, path); cp = unit_move_getpath(list, suppress_map, path);
if (!cp) { if (!cp) {
if (type == EF_SHIP) if (type == EF_SHIP) {
shp_nav_stay_behind(list, player->cnum);
shp_nav_put(list, player->cnum); shp_nav_put(list, player->cnum);
else } else {
lnd_mar_stay_behind(list, player->cnum);
lnd_mar_put(list, player->cnum); lnd_mar_put(list, player->cnum);
}
return RET_FAIL; return RET_FAIL;
} }
cp = unit_move_route(leader, path, sizeof(path)); cp = unit_move_route(leader, path, sizeof(path));

View file

@ -8,14 +8,10 @@ Connect from 127.0.0.1
Connect from 127.0.0.1 Connect from 127.0.0.1
tester@127.0.0.1 using country #1 tester@127.0.0.1 using country #1
tester@127.0.0.1 logged in as 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
tester@127.0.0.1 logged out, country #1 tester@127.0.0.1 logged out, country #1
Connect from 127.0.0.1 Connect from 127.0.0.1
tester@127.0.0.1 using country #1 tester@127.0.0.1 using country #1
tester@127.0.0.1 logged in as 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
tester@127.0.0.1 logged out, country #1 tester@127.0.0.1 logged out, country #1
Connect from 127.0.0.1 Connect from 127.0.0.1
tester@127.0.0.1 using country #0 tester@127.0.0.1 using country #0