Don't 'break' upon returning from split()
authorMarco Costalba <mcostalba@gmail.com>
Sat, 3 Nov 2012 13:37:10 +0000 (14:37 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Sat, 3 Nov 2012 13:54:38 +0000 (14:54 +0100)
There is no guarantee that split() consumes all the node's
moves. Indeed split() can return without performing any job
for instance because MAX_SPLITPOINTS_PER_THREAD is reached
or becuase no available threads are found (this latter case
is much more common).

So search must continue in those cases and we cannot force
exiting from move's loop.

Bug introduced by 1ac417edb845 of 5/10/2012

Spotted by Frank Genot.

No functional change.

src/search.cpp

index eda5ebc3f285ba02ebd53aea3d8c82a739da9f7f..9f617210662d1ead5f8347b3a497976d3f26e7df 100644 (file)
@@ -1020,11 +1020,8 @@ split_point_start: // At split points actual search starts from here
           &&  depth >= Threads.min_split_depth()
           &&  bestValue < beta
           &&  Threads.available_slave_exists(thisThread))
-      {
           bestValue = Threads.split<FakeSplit>(pos, ss, alpha, beta, bestValue, &bestMove,
                                                depth, threatMove, moveCount, mp, NT);
-          break;
-      }
     }
 
     if (SpNode)