From 7c7a77698a56855d618fbea16fab442205ae6cf6 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Tue, 12 Oct 2010 09:06:33 +0200 Subject: [PATCH] Better document some threads functions No functional change. Signed-off-by: Marco Costalba --- src/search.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 93243ed7..63a8221a 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -2463,13 +2463,11 @@ namespace { void ThreadsManager::exit_threads() { - ActiveThreads = MAX_THREADS; // HACK - AllThreadsShouldSleep = true; // HACK + ActiveThreads = MAX_THREADS; // Wake up all the threads + AllThreadsShouldExit = true; // Let the woken up threads to exit idle_loop() + AllThreadsShouldSleep = true; // Avoid an assert in wake_sleeping_threads() wake_sleeping_threads(); - // This makes the threads to exit idle_loop() - AllThreadsShouldExit = true; - // Wait for thread termination for (int i = 1; i < MAX_THREADS; i++) while (threads[i].state != THREAD_TERMINATED) {} @@ -2492,9 +2490,9 @@ namespace { assert(threadID >= 0 && threadID < ActiveThreads); - SplitPoint* sp; + SplitPoint* sp = threads[threadID].splitPoint; - for (sp = threads[threadID].splitPoint; sp && !sp->stopRequest; sp = sp->parent) {} + for ( ; sp && !sp->stopRequest; sp = sp->parent) {} return sp != NULL; } @@ -2519,12 +2517,9 @@ namespace { // Make a local copy to be sure doesn't change under our feet int localActiveSplitPoints = threads[slave].activeSplitPoints; - if (localActiveSplitPoints == 0) - // No active split points means that the thread is available as - // a slave for any other thread. - return true; - - if (ActiveThreads == 2) + // No active split points means that the thread is available as + // a slave for any other thread. + if (localActiveSplitPoints == 0 || ActiveThreads == 2) return true; // Apply the "helpful master" concept if possible. Use localActiveSplitPoints -- 2.39.2