From: Joost VandeVondele Date: Sun, 16 Dec 2018 08:51:29 +0000 (+0100) Subject: Fix a segfault. X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=4e2bb8fa44fe03a2fdb2d3448ac93986354bf9ae;hp=4e2bb8fa44fe03a2fdb2d3448ac93986354bf9ae Fix a segfault. this patch fixes a rare but reproducible segfault observed playing a multi-threaded match, it is discussed somewhat in fishcooking. From the core file, it could be observed that the issue was in qsearch, namely: ```` ss->pv[0] = MOVE_NONE; ```` and the backtrace shows the it arrives there via razoring, called from the rootNode: ```` (gdb) bt alpha=-19, beta=682, depth=DEPTH_ZERO) at search.cpp:1247 ```` Indeed, ss->pv can indeed by a nullptr at the rootNode. However, why is the segfault so rare ? The reason is that the condition that guards razoring: ```` (depth < 2 * ONE_PLY && eval <= alpha - RazorMargin) ```` is almost never true, since at the root alpha for depth < 5 is -VALUE_INFINITE. Nevertheless with the new failHigh scheme, this is not guaranteed, and rootDepth > 5, can still result in a depth < 2 search at the rootNode. If now another thread, via the hash, writes a new low eval to the rootPos qsearch can be entered. Rare but not unseen... I assume that some of the crashes in fishtest recently might be due to this. Closes https://github.com/official-stockfish/Stockfish/pull/1860 No functional change ---