Retire init_node()
authorMarco Costalba <mcostalba@gmail.com>
Tue, 1 Jun 2010 07:21:11 +0000 (08:21 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 1 Jun 2010 11:34:49 +0000 (12:34 +0100)
Also don't poll in qsearch()

No functional change.

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

index f5e3b2bb8b3d441a636a94a45c02a2d5118b267d..292c35b0c38fb6934eb2002895002fc29a4928d3 100644 (file)
@@ -296,7 +296,6 @@ namespace {
   template <NodeType PvNode>
   Depth extension(const Position& pos, Move m, bool captureOrPromotion, bool moveIsCheck, bool singleEvasion, bool mateThreat, bool* dangerous);
 
-  void init_node(SearchStack* ss, int ply, int threadID);
   void update_pv(SearchStack* ss, int ply);
   void sp_update_pv(SearchStack* pss, SearchStack* ss, int ply);
   bool connected_moves(const Position& pos, Move m1, Move m2);
@@ -1060,9 +1059,16 @@ namespace {
     if (depth < OnePly)
         return qsearch<PvNode>(pos, ss, alpha, beta, Depth(0), threadID);
 
-    // Step 1. Initialize node and poll
-    // Polling can abort search.
-    init_node(ss, ply, threadID);
+    // Step 1. Initialize node and poll. Polling can abort search
+    TM.incrementNodeCounter(threadID);
+    ss->init(ply);
+    (ss + 2)->initKillers();
+
+    if (threadID == 0 && ++NodesSincePoll > NodesBetweenPolls)
+    {
+        NodesSincePoll = 0;
+        poll();  
+    }
 
     // Step 2. Check for aborted search and immediate draw
     if (AbortSearch || TM.thread_should_stop(threadID))
@@ -1446,14 +1452,10 @@ namespace {
     int ply = pos.ply();
     Value oldAlpha = alpha;
 
-    // Initialize, and make an early exit in case of an aborted search,
-    // an instant draw, maximum ply reached, etc.
-    init_node(ss, ply, threadID);
-
-    // After init_node() that calls poll()
-    if (AbortSearch || TM.thread_should_stop(threadID))
-        return Value(0);
+    TM.incrementNodeCounter(threadID);
+    ss->init(ply);
 
+    // Check for an instant draw or maximum ply reached
     if (pos.is_draw() || ply >= PLY_MAX - 1)
         return VALUE_DRAW;
 
@@ -1771,32 +1773,6 @@ namespace {
     lock_release(&(sp->lock));
   }
 
-  // init_node() is called at the beginning of all the search functions
-  // (search() qsearch(), and so on) and initializes the
-  // search stack object corresponding to the current node. Once every
-  // NodesBetweenPolls nodes, init_node() also calls poll(), which polls
-  // for user input and checks whether it is time to stop the search.
-
-  void init_node(SearchStack* ss, int ply, int threadID) {
-
-    assert(ply >= 0 && ply < PLY_MAX);
-    assert(threadID >= 0 && threadID < TM.active_threads());
-
-    TM.incrementNodeCounter(threadID);
-
-    if (threadID == 0)
-    {
-        NodesSincePoll++;
-        if (NodesSincePoll >= NodesBetweenPolls)
-        {
-            poll();
-            NodesSincePoll = 0;
-        }
-    }
-    ss->init(ply);
-    (ss + 2)->initKillers();
-  }
-
   // update_pv() is called whenever a search returns a value > alpha.
   // It updates the PV in the SearchStack object corresponding to the
   // current node.
@@ -2530,7 +2506,7 @@ namespace {
 
     // Wait for thread termination
     for (int i = 1; i < MAX_THREADS; i++)
-        while (threads[i].state != THREAD_TERMINATED);
+        while (threads[i].state != THREAD_TERMINATED) {}
 
     // Now we can safely destroy the locks
     for (int i = 0; i < MAX_THREADS; i++)