Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
Choose a Base Repository
cuberite/cuberite
36451/MCServer
4264/cuberite
Akheon23/cuberite
Alyxey/cuberite
Ba4life/cuberite
BrainShit/MCServer
C-Elegans/cuberite
ChriPiv/MCServer
Dam63/MCServer
DevToaster/MCServer
DjKiDD/MCServer
Erbelding/cuberite
ErrAza/MCServer
FX-Master/MCServer
Floppy012/MCServer
FullStackUnicorns/MCServer
GameClub2000/cuberite
HackerTon/MCServer
HaoTNN/cuberite
Haxi52/cuberite
HelenaKitty/EbooMC
Hillvith/MCServer
Hmaal/MCServer
Howaner/MCServer
Infinity-Codeur/MCServer
JABirchall/MCServer
JJOL/cuberite
JoeClacks/MCServer
JoseDiaz27/MCServer
Jothle12/MCServer
Kungfumoo/MCServer
Limb/MCServer
LinEvil/cuberite
MaxM357/MCServer
Motoburger1/MCServer
MuhammadWang/MCServer
Nerkyator/MCServer
Noraaron1/MCServer
Pheo/MCServer
PixeLInc/cuberite
PyroCybin/cuberite
Raekye/MCServer
RedEnraged96/MCServer-1
Redd-Dasan/cuberite
Renoh47/MCServer
Roro534/cuberite
SOSDAN/cuberite
SamMauldin/MCServer
Samvbnm/MCServer
Schwertspize/cuberite
Seadragon91/cuberite
Sentir101/MCServer
Solexid/MCServer
StefanNemeth/cuberite
Tank-D/MCServer
ThisIsAgent1k/MCServer
ThuGie/MCServer
TigerHix/MCServer
TonyMo/MCServer
Toyz/MCServer
Tri125/MCServer
UltraCoderRU/cuberite
WillEccles/cuberite
Xury/MCServer
Zeenjayli/MCServer
Zignixx/cuberite
acrade/cuberite
adesnos/cuberite
ameuret/cuberite
arekinath/MCServer
arnaudlahalle/cuberite
artemist/cuberite
axisd/MCServer
balika011/MCServer
bendl/cuberite
benhc123/MCServer
bibo38/Cuberite
birkett/cuberite
bowlofstew/MCServer
cacaxi/MCServer
carriercomm/cuberite
cedeel/MCServer
cheryl0047/MCServer
christopher-montagna/MCServer
codebucketdev/MCServer
coding12/cuberite
commshare/MCServer
crexalbo/MCServer
crosbymichael/MCServer
daemon777/MCServer
daniel0916/MCServer
darkzmii/cuberite
dave-tucker/cuberite
daveh86/MCServer
debug-stick/cuberal
deckerrj/cuberite
decterous/MCServer
default0/MCServer
dmonger/MCServer
dougvj/MCServer
electromatter/cuberite
ezhangle/cuberite
f0rb1d/MCServer
gdevillele/cuberite
geekpower14/MCServer
giriko/MCServer
greatman/MCServer
guijun/MCServer
gushromp/MCServer
hallucino/cuberite
hammermaps/MCServer
harryhare/MCServer
hide92795/cuberite
hmartinh/cuberite
ionux/MCServer
irrelevantdotcom/MCServer
jacky526/cuberite
jalons/MCServer
jamesliu96/MCServer
jamesmunns/MCServer
jamestait/cuberite
jamiepg1/MCServer
jammet/MCServer
jaumealoy/MCServer
jayr0flmc/cuberite
jimfinnis/MCServer
jimiy/cuberite
joeflezer/MCServer
john092/MCServer
josephcopenhaver/cuberite
joshi07/MCServer2
jpdamon/cuberite
kharashubham/cuberite
kjanku1/MCServer
lighth7015/cuberite
lima900/MCServer
linnemannr/MCServer
lkolbly/MCServer
lvshiling/MCServer
madtomic/MCServer
maki-chan/MCServer
maniak89/MCServer
marmot21/MCServer
martindev2/cuberite
marvinkopf/cuberite
meiavy/cuberite
mgueydan/MCServer
mhmd05/cuberite
mjhanninen/cuberite
mjssw/cuberite
mmdk95/cuberite
mrhabib/MCServer
narroo/MCServer
nathankot/MCServer
necrophcodr/cuberite
nesco/MCServer
nevercast/cuberite
nicodinh/cuberite
nounoursheureux/MCServer
p-mcgowan/MCServer
paizzj/cuberite
parlock/cuberite
patthekenny/MCServer
pillsbury7901/MCServer
planetx/MCServer
prabhjeet27/cuberite
psrivast7788/MCServer
ravenscroftj/MCServer
rcrimp/MCServer
rhamilton1415/cuberite
ricucremop/cuberite
ryansnewell/MCServer
scribblemaniac/cuberite
scriptsboy/cuberite
seijikun/MCServer
shaunstanislaus/MCServer
sircodes/MCServer
skarlitz/MCServer
soemthlng/cuberite
stpinker/MCServer
straemer/MCServer
thatchristoph/MCServer
then0rTh/cuberite
tomthoros/MCServer
tonetheman/MCServer
tt7truong/MCServer
ubiGG/cuberite
vyeluri5/MCServer
w00tc0d3/MCServer
waluoo/MCServer
wang108/MCServer
wnwkimo/cuberite
worktycho/MCServer
xanahopper/MCServer
yamamushi/MCServer
yinyunqiao/MCServer
yo4you/cuberite
zackp30/cuberite
zeliard/MCServer
Nothing to show
Choose a Head Repository
cuberite/cuberite
36451/MCServer
4264/cuberite
Akheon23/cuberite
Alyxey/cuberite
Ba4life/cuberite
BrainShit/MCServer
C-Elegans/cuberite
ChriPiv/MCServer
Dam63/MCServer
DevToaster/MCServer
DjKiDD/MCServer
Erbelding/cuberite
ErrAza/MCServer
FX-Master/MCServer
Floppy012/MCServer
FullStackUnicorns/MCServer
GameClub2000/cuberite
HackerTon/MCServer
HaoTNN/cuberite
Haxi52/cuberite
HelenaKitty/EbooMC
Hillvith/MCServer
Hmaal/MCServer
Howaner/MCServer
Infinity-Codeur/MCServer
JABirchall/MCServer
JJOL/cuberite
JoeClacks/MCServer
JoseDiaz27/MCServer
Jothle12/MCServer
Kungfumoo/MCServer
Limb/MCServer
LinEvil/cuberite
MaxM357/MCServer
Motoburger1/MCServer
MuhammadWang/MCServer
Nerkyator/MCServer
Noraaron1/MCServer
Pheo/MCServer
PixeLInc/cuberite
PyroCybin/cuberite
Raekye/MCServer
RedEnraged96/MCServer-1
Redd-Dasan/cuberite
Renoh47/MCServer
Roro534/cuberite
SOSDAN/cuberite
SamMauldin/MCServer
Samvbnm/MCServer
Schwertspize/cuberite
Seadragon91/cuberite
Sentir101/MCServer
Solexid/MCServer
StefanNemeth/cuberite
Tank-D/MCServer
ThisIsAgent1k/MCServer
ThuGie/MCServer
TigerHix/MCServer
TonyMo/MCServer
Toyz/MCServer
Tri125/MCServer
UltraCoderRU/cuberite
WillEccles/cuberite
Xury/MCServer
Zeenjayli/MCServer
Zignixx/cuberite
acrade/cuberite
adesnos/cuberite
ameuret/cuberite
arekinath/MCServer
arnaudlahalle/cuberite
artemist/cuberite
axisd/MCServer
balika011/MCServer
bendl/cuberite
benhc123/MCServer
bibo38/Cuberite
birkett/cuberite
bowlofstew/MCServer
cacaxi/MCServer
carriercomm/cuberite
cedeel/MCServer
cheryl0047/MCServer
christopher-montagna/MCServer
codebucketdev/MCServer
coding12/cuberite
commshare/MCServer
crexalbo/MCServer
crosbymichael/MCServer
daemon777/MCServer
daniel0916/MCServer
darkzmii/cuberite
dave-tucker/cuberite
daveh86/MCServer
debug-stick/cuberal
deckerrj/cuberite
decterous/MCServer
default0/MCServer
dmonger/MCServer
dougvj/MCServer
electromatter/cuberite
ezhangle/cuberite
f0rb1d/MCServer
gdevillele/cuberite
geekpower14/MCServer
giriko/MCServer
greatman/MCServer
guijun/MCServer
gushromp/MCServer
hallucino/cuberite
hammermaps/MCServer
harryhare/MCServer
hide92795/cuberite
hmartinh/cuberite
ionux/MCServer
irrelevantdotcom/MCServer
jacky526/cuberite
jalons/MCServer
jamesliu96/MCServer
jamesmunns/MCServer
jamestait/cuberite
jamiepg1/MCServer
jammet/MCServer
jaumealoy/MCServer
jayr0flmc/cuberite
jimfinnis/MCServer
jimiy/cuberite
joeflezer/MCServer
john092/MCServer
josephcopenhaver/cuberite
joshi07/MCServer2
jpdamon/cuberite
kharashubham/cuberite
kjanku1/MCServer
lighth7015/cuberite
lima900/MCServer
linnemannr/MCServer
lkolbly/MCServer
lvshiling/MCServer
madtomic/MCServer
maki-chan/MCServer
maniak89/MCServer
marmot21/MCServer
martindev2/cuberite
marvinkopf/cuberite
meiavy/cuberite
mgueydan/MCServer
mhmd05/cuberite
mjhanninen/cuberite
mjssw/cuberite
mmdk95/cuberite
mrhabib/MCServer
narroo/MCServer
nathankot/MCServer
necrophcodr/cuberite
nesco/MCServer
nevercast/cuberite
nicodinh/cuberite
nounoursheureux/MCServer
p-mcgowan/MCServer
paizzj/cuberite
parlock/cuberite
patthekenny/MCServer
pillsbury7901/MCServer
planetx/MCServer
prabhjeet27/cuberite
psrivast7788/MCServer
ravenscroftj/MCServer
rcrimp/MCServer
rhamilton1415/cuberite
ricucremop/cuberite
ryansnewell/MCServer
scribblemaniac/cuberite
scriptsboy/cuberite
seijikun/MCServer
shaunstanislaus/MCServer
sircodes/MCServer
skarlitz/MCServer
soemthlng/cuberite
stpinker/MCServer
straemer/MCServer
thatchristoph/MCServer
then0rTh/cuberite
tomthoros/MCServer
tonetheman/MCServer
tt7truong/MCServer
ubiGG/cuberite
vyeluri5/MCServer
w00tc0d3/MCServer
waluoo/MCServer
wang108/MCServer
wnwkimo/cuberite
worktycho/MCServer
xanahopper/MCServer
yamamushi/MCServer
yinyunqiao/MCServer
yo4you/cuberite
zackp30/cuberite
zeliard/MCServer
Nothing to show
  • 2 commits
  • 4 files changed
  • 0 commit comments
  • 1 contributor
Commits on Aug 27, 2014
AnvilStats: Fixed thread start race condition.
The whole program would sometimes fail to process anything because the threads were waited-for before they were started.
Showing with 71 additions and 14 deletions.
  1. +16 −8 Tools/AnvilStats/Processor.cpp
  2. +8 −2 Tools/AnvilStats/Processor.h
  3. +44 −4 Tools/AnvilStats/Statistics.cpp
  4. +3 −0 Tools/AnvilStats/Statistics.h
@@ -28,18 +28,28 @@ cProcessor::cThread::cThread(cCallback & a_Callback, cProcessor & a_ParentProces
m_Callback(a_Callback),
m_ParentProcessor(a_ParentProcessor)
{
LOG("Created a new thread: %p", this);
super::Start();
}
void cProcessor::cThread::WaitForStart(void)
{
m_HasStarted.Wait();
}
void cProcessor::cThread::Execute(void)
{
LOG("Started a new thread: %d", cIsThread::GetCurrentID());
LOG("Started a new thread: %p, ID %d", this, cIsThread::GetCurrentID());
m_ParentProcessor.m_ThreadsHaveStarted.Set();
m_HasStarted.Set();
for (;;)
{
@@ -52,7 +62,7 @@ void cProcessor::cThread::Execute(void)
ProcessFile(FileName);
} // for-ever
LOG("Thread %d terminated", cIsThread::GetCurrentID());
LOG("Thread %p (ID %d) terminated", this, cIsThread::GetCurrentID());
}
@@ -522,20 +532,18 @@ void cProcessor::ProcessWorld(const AString & a_WorldFolder, cCallbackFactory &
#endif // _DEBUG
//*/
// Start all the threads:
for (int i = 0; i < NumThreads; i++)
{
cCallback * Callback = a_CallbackFactory.GetNewCallback();
m_Threads.push_back(new cThread(*Callback, *this));
}
// Wait for the first thread to start processing:
m_ThreadsHaveStarted.Wait();
// Wait for all threads to finish
// simply by calling each thread's destructor sequentially
// Wait for all threads to finish:
LOG("Waiting for threads to finish");
for (cThreads::iterator itr = m_Threads.begin(), end = m_Threads.end(); itr != end; ++itr)
{
(*itr)->WaitForStart();
delete *itr;
} // for itr - m_Threads[]
LOG("Processor finished");
@@ -30,6 +30,7 @@ class cProcessor
cCallback & m_Callback;
cProcessor & m_ParentProcessor;
cEvent m_HasStarted;
// cIsThread override:
virtual void Execute(void) override;
@@ -48,6 +49,9 @@ class cProcessor
public:
cThread(cCallback & a_Callback, cProcessor & a_ParentProcessor);
/** Waits until the thread starts processing the callback code. */
void WaitForStart(void);
} ;
typedef std::vector<cThread *> cThreads;
@@ -65,10 +69,12 @@ class cProcessor
AStringList m_FileQueue;
cThreads m_Threads;
cEvent m_ThreadsHaveStarted; // This is signalled by each thread to notify the parent thread that it can start waiting for those threads
/** Populates m_FileQueue with Anvil files from the specified folder. */
void PopulateFileQueue(const AString & a_WorldFolder);
/** Returns one filename from m_FileQueue, and removes the name from the queue. */
AString GetOneFileName(void);
} ;
@@ -342,6 +342,8 @@ cStatisticsFactory::~cStatisticsFactory()
SaveBiomeBlockTypes();
LOG(" Spawners.xls");
SaveSpawners();
LOG(" PerHeightSpawners.xls");
SavePerHeightSpawners();
}
@@ -429,7 +431,7 @@ void cStatisticsFactory::SavePerHeightBlockTypes(void)
}
// Write header:
f.Printf("Blocks 0 - 127:\nHeight\t");
f.Printf("Blocks 0 - 127:\nHeight");
for (int i = 0; i < 128; i++)
{
f.Printf("\t%s(%d)", GetBlockTypeString(i), i);
@@ -442,14 +444,14 @@ void cStatisticsFactory::SavePerHeightBlockTypes(void)
f.Printf("%d", y);
for (int BlockType = 0; BlockType < 128; BlockType++)
{
f.Printf("\t%d", m_CombinedStats.m_PerHeightBlockCounts[y][BlockType]);
f.Printf("\t%llu", m_CombinedStats.m_PerHeightBlockCounts[y][BlockType]);
} // for BlockType
f.Printf("\n");
} // for y - height (0 - 127)
f.Printf("\n");
// Write second header:
f.Printf("Blocks 128 - 255:\nHeight\t");
f.Printf("Blocks 128 - 255:\nHeight");
for (int i = 128; i < 256; i++)
{
f.Printf("\t%s(%d)", GetBlockTypeString(i), i);
@@ -462,7 +464,7 @@ void cStatisticsFactory::SavePerHeightBlockTypes(void)
f.Printf("%d", y);
for (int BlockType = 128; BlockType < 256; BlockType++)
{
f.Printf("\t%d", m_CombinedStats.m_PerHeightBlockCounts[y][BlockType]);
f.Printf("\t%llu", m_CombinedStats.m_PerHeightBlockCounts[y][BlockType]);
} // for BlockType
f.Printf("\n");
} // for y - height (0 - 127)
@@ -598,3 +600,41 @@ void cStatisticsFactory::SaveSpawners(void)
void cStatisticsFactory::SavePerHeightSpawners(void)
{
cFile f;
if (!f.Open("PerHeightSpawners.xls", cFile::fmWrite))
{
LOG("Cannot write to file PerHeightSpawners.xls. Statistics not written.");
return;
}
// Write header:
f.Printf("Height\tTotal");
for (int i = 0; i < entMax; i++)
{
f.Printf("\t%s", GetEntityTypeString((eEntityType)i));
}
f.Printf("\n");
// Write individual lines:
for (int y = 0; y < 256; y++)
{
UInt64 Total = 0;
for (int i = 0; i < entMax; i++)
{
Total += m_CombinedStats.m_PerHeightSpawners[y][i];
}
f.Printf("%d\t%llu", y, Total);
for (int i = 0; i < entMax; i++)
{
f.Printf("\t%llu", m_CombinedStats.m_PerHeightSpawners[y][i]);
}
f.Printf("\n");
}
}
@@ -76,6 +76,8 @@ class cStatistics :
virtual bool OnEmptySection(unsigned char a_Y) override;
virtual bool OnSectionsFinished(void) override { return false; } // continue processing
virtual bool OnEntity(
const AString & a_EntityType,
double a_PosX, double a_PosY, double a_PosZ,
@@ -134,6 +136,7 @@ class cStatisticsFactory :
void SaveBiomeBlockTypes(void);
void SaveStatistics(void);
void SaveSpawners(void);
void SavePerHeightSpawners(void);
} ;

No commit comments for this range