Follow-up Comment #7, bug #21116 (project freeciv):

> 1: in fill_grid_sprite_array() [client/tilespec.c::4561]: assertion
't->sprites.player[plrid].grid_borders [pedge->type][0] != NULL' failed.
This is interesting. Certainly if this condition has occurred, I think borders
won't be drawn but most other stuff will.

The only way I've spotted that we can end up in this situation is if someone
called tileset_player_free() while a player was still active.
(Or if in tileset.c someone ended up referring to a slot -- plrid -- that
didn't correspond to an active player, but I don't see how that can happen
since everything in tileset.c goes through a struct player *.)

Also, interestingly, Christian Knoke reports the following assertion failure
in bug #21151 (may be unrelated to main topic):
> 1: in fill_sprite_array() [tilespec.c::4554]: assertion
't->sprites.player[player_index(owner)].background != NULL' failed.
Which, again, would be explained by tileset_player_free() being called at the
wrong time. However, in that case it might be a sequencing problem while
removing a player, whereas here the player whose borders disappeared
definitely continues to exist.
(I'm a bit worried by handle_player_remove() calling tileset_player_free()
when not all of the player's cities/units might yet have been removed from the
map, but probably not relevant to this ticket.)

Is it possible that *a* player was removed at the time borders disappeared in
your game? I'm wondering about tileset_player_free() somehow hitting the wrong
players. (Although I don't see how it can have happened in my single-player
game; even if a player was killed in-game, that shouldn't trigger
PACKET_PLAYER_REMOVE. So I'm clutching at straws a bit here.)


Reply to this item at:


  Message sent via/by Gna!

Freeciv-dev mailing list

Reply via email to