Don't need pthread_detach() after pthread_join()
authorMarco Costalba <mcostalba@gmail.com>
Tue, 9 Aug 2011 20:08:55 +0000 (21:08 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Wed, 10 Aug 2011 07:17:15 +0000 (08:17 +0100)
Spotted by Joona and verified with Valgrind.

No functional change.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/search.cpp
src/thread.cpp

index 8088ff76c94ce36418d7307347ab16d211ae350e..9923ef1dbc1fdf5ce2d6493dc05662d599900e29 100644 (file)
@@ -2129,13 +2129,11 @@ split_point_start: // At split points actual search starts from here
 } // namespace
 
 
-// Little helper used by idle_loop() to check that all the slaves of a
-// master thread have finished searching.
+// Little helper used by idle_loop() to check that all the slave threads of a
+// split point have finished searching.
 
 static bool all_slaves_finished(SplitPoint* sp) {
 
-  assert(sp);
-
   for (int i = 0; i < Threads.size(); i++)
       if (sp->is_slave[i])
           return false;
index 6044d0aa0df5777bdc0f89d72ccc6999d5caf662..ac0be89fdcaee7766bbe8a3ede5765f90d7c691f 100644 (file)
@@ -27,7 +27,7 @@ ThreadsManager Threads; // Global object definition
 namespace { extern "C" {
 
  // start_routine() is the C function which is called when a new thread
- // is launched. It simply calls idle_loop() of the supplied threadID.
+ // is launched. It simply calls idle_loop() of the supplied thread.
  // There are two versions of this function; one for POSIX threads and
  // one for Windows threads.
 
@@ -63,9 +63,8 @@ void Thread::wake_up() {
 }
 
 
-// cutoff_occurred() checks whether a beta cutoff has occurred in
-// the thread's currently active split point, or in some ancestor of
-// the current split point.
+// cutoff_occurred() checks whether a beta cutoff has occurred in the current
+// active split point, or in some ancestor of the split point.
 
 bool Thread::cutoff_occurred() const {
 
@@ -148,11 +147,6 @@ void ThreadsManager::set_size(int cnt) {
 
 void ThreadsManager::init() {
 
-  // Threads will go to sleep as soon as created, only main thread is kept alive
-  set_size(1);
-  threads[0].state = Thread::SEARCHING;
-  threads[0].threadID = 0;
-
   // Initialize threads lock, used when allocating slaves during splitting
   lock_init(&threadsLock);
 
@@ -166,7 +160,13 @@ void ThreadsManager::init() {
           lock_init(&(threads[i].splitPoints[j].lock));
   }
 
-  // Create and startup all the threads but the main that is already running
+  // Initialize main thread's associated data
+  threads[0].state = Thread::SEARCHING;
+  threads[0].threadID = 0;
+  set_size(1); // This makes all the threads but the main to go to sleep
+
+  // Create and launch all the threads but the main that is already running,
+  // threads will go immediately to sleep.
   for (int i = 1; i < MAX_THREADS; i++)
   {
       threads[i].state = Thread::AVAILABLE;
@@ -205,7 +205,6 @@ void ThreadsManager::exit() {
           CloseHandle(threads[i].handle);
 #else
           pthread_join(threads[i].handle, NULL);
-          pthread_detach(threads[i].handle);
 #endif
       }