The code wrote the swept sector after calling shp_check_one_mines().
This failed to use up the mine that hit the minesweeper, and triggered
a seqno mismatch oops.
The code wrote the minesweeper after calling shp_check_one_mines().
This used freed memory when the minesweeper got sunk there.
Broken in 4.0.17. Fix by moving both calls before
shp_check_one_mines().
(cherry picked from commit
b0644e822cd10d93c1168f7b356068fabc02b2bf)
}
sect.sct_mines = mines;
mlp->unit.ship.shp_item[I_SHELL] = shells;
+ putship(mlp->unit.ship.shp_uid, &mlp->unit.ship);
+ putsect(§);
if (shp_check_one_mines(mlp)) {
stopping = 1;
emp_remque(qp);
free(qp);
}
- putship(mlp->unit.ship.shp_uid, &mlp->unit.ship);
- putsect(§);
}
if (changed)
writemap(actor);