Complete.Org: Mailing Lists: Archives: freeciv-dev: July 1999:
Re: [Freeciv-Dev] Server hangs on an Alpha
Home

Re: [Freeciv-Dev] Server hangs on an Alpha

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: Matthew OConnor <matthew@xxxxxxxxxxxxxx>
Cc: freeciv-dev@xxxxxxxxxxx
Subject: Re: [Freeciv-Dev] Server hangs on an Alpha
From: Peter Schaefer <schaefer@xxxxxx>
Date: Thu, 29 Jul 1999 11:32:38 +0200

Matthew OConnor wrote:
> 
> I searched the bug tracking system and the mailing list archives so I
> apologize if this has come up before, but I don't believe it has.
> 
> The Setup:
>   Running Alpha Linux Redhat 6.0 with glibc 2.1.1-7 and egcs 2.91.66.
>   int is 32-bit, long is 64-bit, long long is 64-bit, pointers are 64-bit
> 
> The Software:
>   Freeciv 1.8.0, FreeCiv 1.8.1 and FreeCiv CVS (Wed Jul 28 1999)
> 
> Compilation Flags:
>   All code was compiled with "-O0 -ggdb" no optimization was used.
> 
> The Bug:
> 
>   When you set the "generator" option to any value other than 1 the
>   server hangs.  (Note: this bug is present on an Alpha, Intel-like
>   machines work just fine)
> 
>   These exact steps will cause the server to hang for me:
> 
>      set generator 2
>      create ai
>      start
>      -- server hangs
> 
>   Also "set generator 3" and "set generator 4" will cause the server
>   to hang.
> 


>   Well the 1st time makeisland() is called islemass is 0, so we enter
>   in the then-block of the if-statement.  Now this is were the
>   weirdness happens.  I reproduce the then-block of the above
>   if-statement so I can refer to it easily:
> 
>   Line 1126  if (!islemass) {
>   Line 1127                               /* setup initial static parameters 
> */
>   Line 1128    balance = 0;
>   Line 1129    isleindex = 3; /* 0= none, 1= arctic, 2= antarctic */
>   Line 1130
>   Line 1131    checkmass= totalmass;
>   Line 1132
>   Line 1133    /* caveat: this should really be sent to all players */
>   Line 1134    if(totalmass>3000)
>   Line 1135      freelog(LOG_NORMAL,"high landmass - this may take a few 
> seconds");
>   Line 1136
>   Line 1137    i = map.riverlength + map.mountains
>   Line 1138                + map.deserts + map.forestsize + map.swampsize;
>   Line 1139    i = i <= 90 ? 100 : i * 11 / 10;
>   Line 1140    tilefactor = totalmass / i;
>   Line 1141    riverbuck = -myrand(totalmass);
>   Line 1142    mountbuck = -myrand(totalmass);
>   Line 1143    desertbuck = -myrand(totalmass);
>   Line 1144    forestbuck = -myrand(totalmass);
>   Line 1145    swampbuck = -myrand(totalmass);
>   Line 1146    lastplaced = totalmass;
>   Line 1147  } else {
> 
>   Now on the 1st call to makeisland() islemass is zero.  We go through
>   lines 1127 to 1140 just fine.  Then at line 1141 we "magically" go
>   back to the beginning of makeisland().  Now remember, I compiled
>   with -O0.  There is no code optimization going on.
>

Thank you, that is a very accurate and helpful report.
One idea would be to isolate the error and
 find out if it is really a compiler bug.

What happens if lines L 1141 to L 1145 are moved to the top( below L 1126 ?)
Does the bug also occur if completely different code ( several printf's for 
example ) 
is between L1126 and L1127 ?

-- 
Peter Schäfer - mailto:schaefer@xxxxxx, schaefer@xxxxxx
Support the Campaign to Save Iridium Telecom - 
phone Beavis 0049191088888888180332332 for a good time.
(Don't try this anywhere were you leave any evidence.)

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