1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

Allow Bitbases::init() to be called more than once

Currently if we call it more than once, we crash.

This is not a real problem, because this function is
indeed called just once. Nevertheless with this small fix,
that gets rid of a hidden 'static' variable, we cleanly
resolve the issue.

While there, fix also ThreadPool::exit to return in a
consistent state. Now all the init() functions but
UCI::init() are reentrant and can be called multiple
times.

No functional change.
This commit is contained in:
Marco Costalba 2015-03-22 12:41:11 +01:00
parent 35a082064f
commit dc3a5f791e
2 changed files with 5 additions and 1 deletions

View file

@ -85,9 +85,10 @@ bool Bitbases::probe(Square wksq, Square wpsq, Square bksq, Color us) {
void Bitbases::init() {
std::vector<KPKPosition> db(MAX_INDEX);
unsigned id = 0;
// Initialize db with known win / draw positions
std::generate(db.begin(), db.end(), [](){ static unsigned id; return KPKPosition(id++); });
std::generate(db.begin(), db.end(), [&id](){ return KPKPosition(id++); });
// Iterate through the positions until none of the unknown positions can be
// changed to either wins or draws (15 cycles needed).

View file

@ -299,9 +299,12 @@ void ThreadPool::init() {
void ThreadPool::exit() {
delete_thread(timer); // As first because check_time() accesses threads data
timer = nullptr;
for (Thread* th : *this)
delete_thread(th);
clear(); // Get rid of stale pointers
}