1
0
Fork 0
mirror of https://github.com/sockspls/badfish synced 2025-04-30 08:43:09 +00:00

Revert using exceptions

Due to crashes. It will be reapplied once
we understand what's happening.

No functional change.
This commit is contained in:
Marco Costalba 2013-08-15 09:36:26 +02:00
parent a6c0ba2100
commit 4f55ed14d3
2 changed files with 24 additions and 30 deletions

View file

@ -232,7 +232,7 @@ ifeq ($(COMP),clang)
endif endif
### 3.2 General compiler settings ### 3.2 General compiler settings
CXXFLAGS = -Wall -Wcast-qual -fno-rtti $(EXTRACXXFLAGS) CXXFLAGS = -Wall -Wcast-qual -fno-exceptions -fno-rtti $(EXTRACXXFLAGS)
ifeq ($(comp),gcc) ifeq ($(comp),gcc)
CXXFLAGS += -ansi -pedantic -Wno-long-long -Wextra -Wshadow CXXFLAGS += -ansi -pedantic -Wno-long-long -Wextra -Wshadow

View file

@ -21,7 +21,6 @@
#include <cassert> #include <cassert>
#include <cmath> #include <cmath>
#include <cstring> #include <cstring>
#include <exception>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
@ -105,8 +104,6 @@ namespace {
bool refutes(const Position& pos, Move first, Move second); bool refutes(const Position& pos, Move first, Move second);
string uci_pv(const Position& pos, int depth, Value alpha, Value beta); string uci_pv(const Position& pos, int depth, Value alpha, Value beta);
class stop : public std::exception {};
struct Skill { struct Skill {
Skill(int l) : level(l), best(MOVE_NONE) {} Skill(int l) : level(l), best(MOVE_NONE) {}
~Skill() { ~Skill() {
@ -359,9 +356,7 @@ namespace {
// research with bigger window until not failing high/low anymore. // research with bigger window until not failing high/low anymore.
while (true) while (true)
{ {
try { bestValue = search<Root>(pos, ss, alpha, beta, depth * ONE_PLY, false);
bestValue = search<Root>(pos, ss, alpha, beta, depth * ONE_PLY, false);
} catch (stop&) {}
// Bring to front the best move. It is critical that sorting is // Bring to front the best move. It is critical that sorting is
// done with a stable algorithm because all the values but the first // done with a stable algorithm because all the values but the first
@ -546,13 +541,10 @@ namespace {
if (PvNode && thisThread->maxPly < ss->ply) if (PvNode && thisThread->maxPly < ss->ply)
thisThread->maxPly = ss->ply; thisThread->maxPly = ss->ply;
if (Signals.stop || thisThread->cutoff_occurred())
throw stop();
if (!RootNode) if (!RootNode)
{ {
// Step 2. Check for aborted search and immediate draw // Step 2. Check for aborted search and immediate draw
if (pos.is_draw() || ss->ply > MAX_PLY) if (Signals.stop || pos.is_draw() || ss->ply > MAX_PLY)
return DrawValue[pos.side_to_move()]; return DrawValue[pos.side_to_move()];
// Step 3. Mate distance pruning. Even if we mate at the next move our score // Step 3. Mate distance pruning. Even if we mate at the next move our score
@ -1007,6 +999,13 @@ moves_loop: // When in check and at SpNode search starts from here
alpha = splitPoint->alpha; alpha = splitPoint->alpha;
} }
// Finished searching the move. If Signals.stop is true, the search
// was aborted because the user interrupted the search or because we
// ran out of time. In this case, the return value of the search cannot
// be trusted, and we don't update the best move and/or PV.
if (Signals.stop || thisThread->cutoff_occurred())
return value; // To avoid returning VALUE_INFINITE
if (RootNode) if (RootNode)
{ {
RootMove& rm = *std::find(RootMoves.begin(), RootMoves.end(), move); RootMove& rm = *std::find(RootMoves.begin(), RootMoves.end(), move);
@ -1697,26 +1696,21 @@ void Thread::idle_loop() {
activePosition = &pos; activePosition = &pos;
try { switch (sp->nodeType) {
switch (sp->nodeType) { case Root:
case Root: search<SplitPointRoot>(pos, ss, sp->alpha, sp->beta, sp->depth, sp->cutNode);
search<SplitPointRoot>(pos, ss, sp->alpha, sp->beta, sp->depth, sp->cutNode); break;
break; case PV:
case PV: search<SplitPointPV>(pos, ss, sp->alpha, sp->beta, sp->depth, sp->cutNode);
search<SplitPointPV>(pos, ss, sp->alpha, sp->beta, sp->depth, sp->cutNode); break;
break; case NonPV:
case NonPV: search<SplitPointNonPV>(pos, ss, sp->alpha, sp->beta, sp->depth, sp->cutNode);
search<SplitPointNonPV>(pos, ss, sp->alpha, sp->beta, sp->depth, sp->cutNode); break;
break; default:
default: assert(false);
assert(false); }
}
assert(searching); assert(searching);
}
catch (stop&) {
sp->mutex.lock(); // Exception is thrown out of lock
}
searching = false; searching = false;
activePosition = NULL; activePosition = NULL;