X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmovepick.cpp;h=41b85f074ae0994a86c6615707ad03bb5be925b2;hp=2a57605e164fa0ceeb5c34f2e26bce6cc2af8a5b;hb=0a1092f64eb9eb232094036086fc5c98ed1f3c46;hpb=53ab32ef0b6e47d8d962f8c1fccd32d3c22f138c diff --git a/src/movepick.cpp b/src/movepick.cpp index 2a57605e..41b85f07 100644 --- a/src/movepick.cpp +++ b/src/movepick.cpp @@ -233,15 +233,15 @@ void MovePicker::generate_next() { killers[2].move = killers[3].move = MOVE_NONE; killers[4].move = killers[5].move = MOVE_NONE; + // Please note that following code is racy and could yield to rare (less + // than 1 out of a million) duplicated entries in SMP case. This is harmless. + // Be sure countermoves are different from killers for (int i = 0; i < 2; ++i) if ( countermoves[i] != (cur+0)->move && countermoves[i] != (cur+1)->move) (end++)->move = countermoves[i]; - if (countermoves[1] && countermoves[1] == countermoves[0]) // Due to SMP races - killers[3].move = MOVE_NONE; - // Be sure followupmoves are different from killers and countermoves for (int i = 0; i < 2; ++i) if ( followupmoves[i] != (cur+0)->move @@ -249,10 +249,6 @@ void MovePicker::generate_next() { && followupmoves[i] != (cur+2)->move && followupmoves[i] != (cur+3)->move) (end++)->move = followupmoves[i]; - - if (followupmoves[1] && followupmoves[1] == followupmoves[0]) // Due to SMP races - (--end)->move = MOVE_NONE; - return; case QUIETS_1_S1: @@ -300,7 +296,7 @@ void MovePicker::generate_next() { /// next_move() is the most important method of the MovePicker class. It returns /// a new pseudo legal move every time it is called, until there are no more moves /// left. It picks the move with the biggest score from a list of generated moves -/// taking care not returning the ttMove if it has already been searched previously. +/// taking care not to return the ttMove if it has already been searched. template<> Move MovePicker::next_move() {