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>
if (!*cp) {
cp = unit_move_getpath(list, suppress_map, path);
if (!cp) {
- if (type == EF_SHIP)
+ if (type == EF_SHIP) {
+ shp_nav_stay_behind(list, player->cnum);
shp_nav_put(list, player->cnum);
- else
+ } else {
+ lnd_mar_stay_behind(list, player->cnum);
lnd_mar_put(list, player->cnum);
+ }
return RET_FAIL;
}
cp = unit_move_route(leader, path, sizeof(path));
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
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
tester@127.0.0.1 logged out, country #1
Connect from 127.0.0.1
tester@127.0.0.1 using country #0