From 13c096f839f991c5d0da1d9bf8d95eae6d0c0aa0 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Sat, 20 Feb 2010 23:56:02 +0100 Subject: [PATCH] Revert "Recursive lock" Joona says that sp_update_pv() does not pass the split point boundaries, so there is no risk to corrupt data from another split point. Also the race on thread_should_stop() is harmless because of this. So revert the patch and come back to single lock. No functional change. Signed-off-by: Marco Costalba --- src/search.cpp | 32 ++++---------------------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 611b2583..ecc53580 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1854,16 +1854,7 @@ namespace { // New best move? if (value > sp->bestValue) // Less then 2% of cases { - // Recursive locking, lock current split point and its ancestors to - // guarantee thread_should_stop() and sp_update_pv() are race free. - SplitPoint* spChain[MAX_THREADS * ACTIVE_SPLIT_POINTS_MAX]; - int cnt = 0; - for (spChain[cnt] = sp; spChain[cnt]; ) - { - lock_grab(&(spChain[cnt++]->lock)); - spChain[cnt] = spChain[cnt - 1]->parent; - } - + lock_grab(&(sp->lock)); if (value > sp->bestValue && !TM.thread_should_stop(threadID)) { sp->bestValue = value; @@ -1873,10 +1864,7 @@ namespace { sp_update_pv(sp->parentSstack, ss, sp->ply); } } - - // Release locks in reverse order - while (cnt > 0) - lock_release(&(spChain[--cnt]->lock)); + lock_release(&(sp->lock)); } } @@ -1975,16 +1963,7 @@ namespace { // New best move? if (value > sp->bestValue) // Less then 2% of cases { - // Recursive locking, lock current split point and its ancestors to - // guarantee thread_should_stop() and sp_update_pv() are race free. - SplitPoint* spChain[MAX_THREADS * ACTIVE_SPLIT_POINTS_MAX]; - int cnt = 0; - for (spChain[cnt] = sp; spChain[cnt]; ) - { - lock_grab(&(spChain[cnt++]->lock)); - spChain[cnt] = spChain[cnt - 1]->parent; - } - + lock_grab(&(sp->lock)); if (value > sp->bestValue && !TM.thread_should_stop(threadID)) { sp->bestValue = value; @@ -2001,10 +1980,7 @@ namespace { ss[sp->ply].mateKiller = move; } } - - // Release locks in reverse order - while (cnt > 0) - lock_release(&(spChain[--cnt]->lock)); + lock_release(&(sp->lock)); } } -- 2.39.2