From 268c12bf31f347d7cc9e9b5b8d5fc0bbcc445bc5 Mon Sep 17 00:00:00 2001 From: Marco Costalba Date: Fri, 5 Dec 2008 09:50:18 +0100 Subject: [PATCH] Allow to call Position::print() from MovePicker Fix a recursion issue that gives a stack overflow. Signed-off-by: Marco Costalba --- src/position.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/position.cpp b/src/position.cpp index abac6efc..dceaa5a4 100644 --- a/src/position.cpp +++ b/src/position.cpp @@ -52,6 +52,7 @@ Key Position::zobSideToMove; Value Position::MgPieceSquareTable[16][64]; Value Position::EgPieceSquareTable[16][64]; +static bool RequestPending = false; //// //// Functions @@ -272,6 +273,13 @@ void Position::print(Move m) const { static const std::string pieceLetters = " PNBRQK PNBRQK ."; + // Check for reentrancy, as example when called from inside + // MovePicker that is used also here in move_to_san() + if (RequestPending) + return; + + RequestPending = true; + std::cout << std::endl; if (m != MOVE_NONE) { @@ -296,6 +304,8 @@ void Position::print(Move m) const { std::cout << "+---+---+---+---+---+---+---+---+" << std::endl << "Fen is: " << to_fen() << std::endl << "Key is: " << key << std::endl; + + RequestPending = false; } -- 2.39.2