mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 00:33: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:
parent
35a082064f
commit
dc3a5f791e
2 changed files with 5 additions and 1 deletions
|
@ -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).
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue