diff -Nur -Xfreecivdiff.ignore freeciv-cvs/client/civclient.c freeciv-patched/client/civclient.c --- freeciv-cvs/client/civclient.c Sat May 4 19:17:29 2002 +++ freeciv-patched/client/civclient.c Tue May 14 17:02:15 2002 @@ -557,7 +557,11 @@ popdown_all_city_dialogs(); close_all_diplomacy_dialogs(); client_remove_all_cli_conn(); + players_iterate(pplayer) { + client_cleanup_player(pplayer); + } players_iterate_end; game_remove_all_players(); + game_cleanup(); set_unit_focus_no_center(NULL); clear_notify_window(); idex_init(); /* clear old data */ diff -Nur -Xfreecivdiff.ignore freeciv-cvs/client/climisc.c freeciv-patched/client/climisc.c --- freeciv-cvs/client/climisc.c Fri May 3 16:03:00 2002 +++ freeciv-patched/client/climisc.c Tue May 14 17:00:55 2002 @@ -199,11 +199,19 @@ } /************************************************************************** + Frees any dynamic memory used by a player structure +**************************************************************************/ +void client_cleanup_player(struct player *plr) +{ + player_free_island_imprs(plr, max_cont_used); +} + +/************************************************************************** ... **************************************************************************/ void client_remove_player(int plrno) { - player_free_island_imprs(get_player(plrno), max_cont_used); + client_cleanup_player(get_player(plrno)); game_renumber_players(plrno); } diff -Nur -Xfreecivdiff.ignore freeciv-cvs/client/climisc.h freeciv-patched/client/climisc.h --- freeciv-cvs/client/climisc.h Sun Mar 17 18:34:11 2002 +++ freeciv-patched/client/climisc.h Tue May 14 17:00:25 2002 @@ -23,6 +23,7 @@ typedef int wid; void client_init_player(struct player *plr); +void client_cleanup_player(struct player *plr); void client_remove_player(int plrno); void client_remove_city(struct city *pcity); void client_remove_unit(int unit_id); diff -Nur -Xfreecivdiff.ignore freeciv-cvs/common/game.c freeciv-patched/common/game.c --- freeciv-cvs/common/game.c Sat May 11 20:45:33 2002 +++ freeciv-patched/common/game.c Tue May 14 16:56:47 2002 @@ -838,6 +838,19 @@ /*************************************************************** + Frees any dynamic memory used by global game structures +***************************************************************/ +void game_cleanup(void) +{ + /* Free vector of effects with world-wide range. */ + geff_vector_free(&game.effects); + + /* Free vector of destroyed effects */ + ceff_vector_free(&game.destroyed_effects); +} + + +/*************************************************************** ... ***************************************************************/ void game_remove_all_players(void) diff -Nur -Xfreecivdiff.ignore freeciv-cvs/common/game.h freeciv-patched/common/game.h --- freeciv-cvs/common/game.h Fri May 3 16:03:00 2002 +++ freeciv-patched/common/game.h Tue May 14 16:32:09 2002 @@ -231,6 +231,7 @@ struct unit *find_unit_by_id(int id); struct city *find_city_by_id(int id); +void game_cleanup(void); void game_remove_player(struct player *pplayer); void game_remove_all_players(void); void game_renumber_players(int plrno);