From 1c316c41bb0b3a1522aecd0dd2447009f976ebd7 Mon Sep 17 00:00:00 2001 From: Joost VandeVondele Date: Fri, 6 Jan 2017 16:16:07 +0100 Subject: [PATCH] Correctly zero-initialize MainThread It can be used uninitialized in time management. Fixes all valgrind errors on './stockfish go wtime 8000 btime 8000 winc 500 binc 500' This is one (of the many) quirks of C++. There is a subtle difference between: new Foo new Foo() The first statement calls the default constructor (that in case of a POD leaves data members uninitialized), the second one performs a value-initialization (that in case of POD is equivalent to a zero-initialization) See: http://stackoverflow.com/questions/620137/do-the-parentheses-after-the-type-name-make-a-difference-with-new http://stackoverflow.com/questions/5116541/difference-between-creating-object-with-or-without No functional change. --- src/thread.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/thread.cpp b/src/thread.cpp index 3c3de60d..d900cbfc 100644 --- a/src/thread.cpp +++ b/src/thread.cpp @@ -123,7 +123,7 @@ void Thread::idle_loop() { void ThreadPool::init() { - push_back(new MainThread); + push_back(new MainThread()); read_uci_options(); } @@ -150,7 +150,7 @@ void ThreadPool::read_uci_options() { assert(requested > 0); while (size() < requested) - push_back(new Thread); + push_back(new Thread()); while (size() > requested) delete back(), pop_back(); -- 2.39.2