From 941016e7a230de019e491443afa7a5193d10e3ba Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sun, 24 Jan 2010 12:24:01 +0100 Subject: [PATCH] Check for thread creation successful completion It is a good programming practice to verify a system call has indeed succeed. No functional change. Signed-off-by: Marco Costalba --- src/search.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index a880500a..280851d2 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -573,6 +573,7 @@ bool think(const Position& pos, bool infinite, bool ponder, int side_to_move, void init_threads() { volatile int i; + bool ok; #if !defined(_MSC_VER) pthread_t pthread[1]; @@ -608,12 +609,18 @@ void init_threads() { for(i = 1; i < THREAD_MAX; i++) { #if !defined(_MSC_VER) - pthread_create(pthread, NULL, init_thread, (void*)(&i)); + ok = (pthread_create(pthread, NULL, init_thread, (void*)(&i)) == 0); #else DWORD iID[1]; - CreateThread(NULL, 0, init_thread, (LPVOID)(&i), 0, iID); + ok = (CreateThread(NULL, 0, init_thread, (LPVOID)(&i), 0, iID) != NULL); #endif + if (!ok) + { + std::cout << "Failed to create thread number " << i << std::endl; + Application::exit_with_failure(); + } + // Wait until the thread has finished launching while (!Threads[i].running); } @@ -2012,7 +2019,7 @@ namespace { // If another thread has failed high then sp->alpha has been increased // to be higher or equal then beta, if so, avoid to start a PV search. - localAlpha = sp->alpha; + Value localAlpha = sp->alpha; if (localAlpha < sp->beta) value = -search_pv(pos, ss, -sp->beta, -localAlpha, newDepth, sp->ply+1, threadID); else @@ -2780,13 +2787,17 @@ namespace { } // If this thread has been assigned work, launch a search - if(Threads[threadID].workIsWaiting) { - Threads[threadID].workIsWaiting = false; - if(Threads[threadID].splitPoint->pvNode) - sp_search_pv(Threads[threadID].splitPoint, threadID); - else - sp_search(Threads[threadID].splitPoint, threadID); - Threads[threadID].idle = true; + if (Threads[threadID].workIsWaiting) + { + assert(!Threads[threadID].idle); + + Threads[threadID].workIsWaiting = false; + if (Threads[threadID].splitPoint->pvNode) + sp_search_pv(Threads[threadID].splitPoint, threadID); + else + sp_search(Threads[threadID].splitPoint, threadID); + + Threads[threadID].idle = true; } // If this thread is the master of a split point and all threads have