<URL: http://bugs.freeciv.org/Ticket/Display.html?id=39625 >
On 27/08/07, Marko Lindqvist <[EMAIL PROTECTED]> wrote: > > diplhand_free() has been only unlinking treaties from treaty list. > Attached patch makes it to also free memory allocated for treaties. > > This fixes just one bug. Treaty list handling still seems suspicious. - Release treaties between games, not only when server quits - ML
diff -Nurd -X.diff_ignore freeciv/server/diplhand.c freeciv/server/diplhand.c --- freeciv/server/diplhand.c 2007-08-12 17:20:57.000000000 +0300 +++ freeciv/server/diplhand.c 2007-08-28 20:19:58.000000000 +0300 @@ -59,22 +59,37 @@ /************************************************************************** ... **************************************************************************/ -void diplhand_init() +void diplhand_init(void) { treaties = treaty_list_new(); } /************************************************************************** -... + Free all the resources allocated by diplhand. **************************************************************************/ -void diplhand_free() +void diplhand_free(void) { - treaty_list_unlink_all(treaties); + free_treaties(); + treaty_list_free(treaties); treaties = NULL; } /************************************************************************** + Free all the treaties currently in treaty list. +**************************************************************************/ +void free_treaties(void) +{ + /* Free memory allocated for treaties */ + treaty_list_iterate(treaties, pt) { + clear_treaty(pt); + free(pt); + } treaty_list_iterate_end; + + treaty_list_unlink_all(treaties); +} + +/************************************************************************** ... **************************************************************************/ struct Treaty *find_treaty(struct player *plr0, struct player *plr1) diff -Nurd -X.diff_ignore freeciv/server/diplhand.h freeciv/server/diplhand.h --- freeciv/server/diplhand.h 2007-03-05 19:13:46.000000000 +0200 +++ freeciv/server/diplhand.h 2007-08-28 20:20:02.000000000 +0300 @@ -25,6 +25,7 @@ void diplhand_init(void); void diplhand_free(void); +void free_treaties(void); struct Treaty *find_treaty(struct player *plr0, struct player *plr1); diff -Nurd -X.diff_ignore freeciv/server/srv_main.c freeciv/server/srv_main.c --- freeciv/server/srv_main.c 2007-08-22 03:26:25.000000000 +0300 +++ freeciv/server/srv_main.c 2007-08-28 20:17:37.000000000 +0300 @@ -2040,8 +2040,11 @@ Bear in mind that this function is called when the 'load' command is used, for instance. **************************************************************************/ -void server_game_free() +void server_game_free(void) { + /* Free all the treaties that were left open when game finished. */ + free_treaties(); + players_iterate(pplayer) { unit_list_iterate(pplayer->units, punit) { vision_free(punit->server.vision);
diff -Nurd -X.diff_ignore freeciv/server/diplhand.c freeciv/server/diplhand.c --- freeciv/server/diplhand.c 2007-08-12 17:21:16.000000000 +0300 +++ freeciv/server/diplhand.c 2007-08-28 20:43:55.000000000 +0300 @@ -54,16 +54,30 @@ /************************************************************************** ... **************************************************************************/ -void diplhand_init() +void diplhand_init(void) { treaty_list_init(&treaties); } /************************************************************************** -... + Free all the resources allocated by diplhand. **************************************************************************/ -void diplhand_free() +void diplhand_free(void) +{ + free_treaties(); +} + +/************************************************************************** + Free all the treaties currently in treaty list. +**************************************************************************/ +void free_treaties(void) { + /* Free memory allocated for treaties */ + treaty_list_iterate(treaties, pt) { + clear_treaty(pt); + free(pt); + } treaty_list_iterate_end; + treaty_list_unlink_all(&treaties); } diff -Nurd -X.diff_ignore freeciv/server/diplhand.h freeciv/server/diplhand.h --- freeciv/server/diplhand.h 2007-03-05 19:15:25.000000000 +0200 +++ freeciv/server/diplhand.h 2007-08-28 20:42:00.000000000 +0300 @@ -27,6 +27,7 @@ void diplhand_init(void); void diplhand_free(void); +void free_treaties(void); struct Treaty *find_treaty(struct player *plr0, struct player *plr1); diff -Nurd -X.diff_ignore freeciv/server/srv_main.c freeciv/server/srv_main.c --- freeciv/server/srv_main.c 2007-08-11 12:26:38.000000000 +0300 +++ freeciv/server/srv_main.c 2007-08-28 20:42:00.000000000 +0300 @@ -1952,8 +1952,11 @@ /************************************************************************** ... **************************************************************************/ -void server_game_free() +void server_game_free(void) { + /* Free all the treaties that were left open when game finished. */ + free_treaties(); + players_iterate(pplayer) { player_map_free(pplayer); } players_iterate_end;
_______________________________________________ Freeciv-dev mailing list Freeciv-dev@gna.org https://mail.gna.org/listinfo/freeciv-dev