From 28310f0938a8776d0cb42ba8a64f125cc42bff6b Mon Sep 17 00:00:00 2001 From: Elron103 Date: Sat, 25 Feb 2012 02:16:08 +0100 Subject: [PATCH] Core: Fix the SFMT randgen-initbug Signed-off-by: click --- src/server/shared/Utilities/Util.cpp | 5 +++++ src/server/shared/Utilities/Util.h | 5 +++++ src/server/worldserver/Master.cpp | 4 +++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp index 52ce74be8f..d3ae82e4ff 100755 --- a/src/server/shared/Utilities/Util.cpp +++ b/src/server/shared/Utilities/Util.cpp @@ -31,6 +31,11 @@ typedef ACE_TSS SFMTRandTSS; static SFMTRandTSS sfmtRand; +void init_sfmt() +{ + sfmtRand->RandomInit((int)(time(0))); +} + int32 irand(int32 min, int32 max) { return int32(sfmtRand->IRandom(min, max)); diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h index 4c2c193699..1a542ff15e 100755 --- a/src/server/shared/Utilities/Util.h +++ b/src/server/shared/Utilities/Util.h @@ -24,6 +24,11 @@ #include #include +#ifdef USE_SFMT_FOR_RNG + // Initialize SFMT before first use, if enabled. + void init_sfmt(); +#endif + // Searcher for map of structs template struct Finder { diff --git a/src/server/worldserver/Master.cpp b/src/server/worldserver/Master.cpp index d84cfc1a4a..892328dcc8 100755 --- a/src/server/worldserver/Master.cpp +++ b/src/server/worldserver/Master.cpp @@ -139,7 +139,9 @@ int Master::Run() #ifdef USE_SFMT_FOR_RNG sLog->outString("\n"); sLog->outString("SFMT has been enabled as the random number generator, if worldserver"); - sLog->outString("freezes or crashes randomly, first, try disabling SFMT in CMAKE configuration"); + sLog->outString("freezes or crashes randomly, first, try disabling SFMT in CMAKE configuration."); + sLog->outString("Initializing SFMT before first use."); + init_sfmt(); sLog->outString("\n"); #endif //USE_SFMT_FOR_RNG