]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Fix use of an initialized SearchStack
[stockfish] / src / search.cpp
index 08b2c00686cd21de07c440a7e616dcc155dd0e22..17a1aeab984884b261c08bd858556bcdb8884614 100644 (file)
@@ -299,6 +299,7 @@ namespace {
   void ponderhit();
   void print_current_line(SearchStack ss[], int ply, int threadID);
   void wait_for_stop_or_ponderhit();
+  void init_ss_array(SearchStack ss[]);
 
   void idle_loop(int threadID, SplitPoint* waitSp);
   void init_split_point_stack();
@@ -636,11 +637,7 @@ namespace {
     // Initialize
     TT.new_search();
     H.clear();
-    for (int i = 0; i < 3; i++)
-    {
-        ss[i].init(i);
-        ss[i].initKillers();
-    }
+    init_ss_array(ss);
     IterationInfo[1] = IterationInfoType(rml.get_move_score(0), rml.get_move_score(0));
     Iteration = 1;
 
@@ -947,7 +944,7 @@ namespace {
             // Update PV
             rml.set_move_score(i, value);
             update_pv(ss, 0);
-            TT.extract_pv(pos, ss[0].pv);
+            TT.extract_pv(pos, ss[0].pv, PLY_MAX);
             rml.set_move_pv(i, ss[0].pv);
 
             if (MultiPV == 1)
@@ -1961,6 +1958,7 @@ namespace {
         // Find a quick score for the move
         StateInfo st;
         SearchStack ss[PLY_MAX_PLUS_2];
+        init_ss_array(ss);
 
         moves[count].move = cur->move;
         pos.do_move(moves[count].move, st);
@@ -2560,6 +2558,18 @@ namespace {
   }
 
 
+  // init_ss_array() does a fast reset of the first entries of a SearchStack array
+
+  void init_ss_array(SearchStack ss[]) {
+
+    for (int i = 0; i < 3; i++)
+    {
+        ss[i].init(i);
+        ss[i].initKillers();
+    }
+  }
+
+
   // wait_for_stop_or_ponderhit() is called when the maximum depth is reached
   // while the program is pondering.  The point is to work around a wrinkle in
   // the UCI protocol:  When pondering, the engine is not allowed to give a