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:
parent
354b6aea3d
commit
42a3c10fd9
2 changed files with 5 additions and 6 deletions
|
@ -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));
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue