Complete.Org: Mailing Lists: Archives: freeciv-ai: September 2004:
[freeciv-ai] Re: [Freeciv-Dev] (PR#10301) cachemap is way too big
Home

[freeciv-ai] Re: [Freeciv-Dev] (PR#10301) cachemap is way too big

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: undisclosed-recipients: ;
Subject: [freeciv-ai] Re: [Freeciv-Dev] (PR#10301) cachemap is way too big
From: "Jason Short" <jdorje@xxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 28 Sep 2004 22:02:27 -0700
Reply-to: rt@xxxxxxxxxxx

<URL: http://rt.freeciv.org/Ticket/Display.html?id=10301 >

The bug here is pretty significant too.  auto_settlers_player is called 
twice: once in auto_settlers_init and again in srv_main. 
ai_settler_init, which must be called before auto_settlers_player, is 
not called until after auto_settlers_init.  Thus the autosettlers is run 
twice, and on the first run its cachemap is not initialized.

So, in this patch:

- I change the cachemap to be dynamically allocated.  It is realloc'ed 
in ai_settlers_player.

- I removed the first call to auto_settlers_player (the one in 
init_auto_settlers).  Now the function is only called once, and it's 
done after ai_settler_init.

jason


Index: ai/aisettler.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/ai/aisettler.c,v
retrieving revision 1.5
diff -u -r1.5 aisettler.c
--- ai/aisettler.c      29 Sep 2004 02:24:18 -0000      1.5
+++ ai/aisettler.c      29 Sep 2004 04:55:17 -0000
@@ -98,7 +98,7 @@
   char food;
   char trade;
   char shield;
-} cachemap[MAP_MAX_WIDTH * MAP_MAX_HEIGHT];
+} *cachemap;
 
 /**************************************************************************
   Fill cityresult struct with useful info about the city spot. It must 
@@ -441,7 +441,8 @@
 **************************************************************************/
 void ai_settler_init(struct player *pplayer)
 {
-  memset(&cachemap, -1, sizeof(cachemap));
+  cachemap = fc_realloc(cachemap, MAX_MAP_INDEX * sizeof(*cachemap));
+  memset(cachemap, -1, MAX_MAP_INDEX * sizeof(*cachemap));
 }
 
 /**************************************************************************
Index: server/settlers.c
===================================================================
RCS file: /home/freeciv/CVS/freeciv/server/settlers.c,v
retrieving revision 1.204
diff -u -r1.204 settlers.c
--- server/settlers.c   29 Sep 2004 02:24:24 -0000      1.204
+++ server/settlers.c   29 Sep 2004 04:55:18 -0000
@@ -1449,9 +1449,6 @@
   assign_settlers();
   assign_territory();
   recount_enemy_masks();
-  shuffled_players_iterate(pplayer) {
-    auto_settlers_player(pplayer);
-  } shuffled_players_iterate_end;
 }
 
 /**************************************************************************

[Prev in Thread] Current Thread [Next in Thread]