<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

Reply via email to