Terminate threads before to exit main()

It is very difficult and risky to assure
that a running thread doesn't access a global
variable. This is currently true, but could
change in the future and we don't want to rely
on code that works 'by accident'. The threads
are still running when ThreadPool destructor is
called (after main() returns) and this could
lead to crashes if a thread accesses a global
that has been already freed. The solution is to
use an exit() function and call it while we are
still in main(), ensuring global variables are
still alive at threads termination time.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
Marco Costalba
2012-08-29 16:43:01 +02:00
parent 0a003d3ba1
commit 8dcb4bc3cc
3 changed files with 7 additions and 5 deletions

View File

@@ -37,8 +37,8 @@ int main(int argc, char* argv[]) {
Zobrist::init();
Bitbases::init_kpk();
Search::init();
Threads.init();
Eval::init();
Threads.init();
TT.set_size(Options["Hash"]);
std::string args;
@@ -47,4 +47,6 @@ int main(int argc, char* argv[]) {
args += std::string(argv[i]) + " ";
UCI::loop(args);
Threads.exit();
}