diff --git a/src/book.cpp b/src/book.cpp index 8e4778ee..c69eab73 100644 --- a/src/book.cpp +++ b/src/book.cpp @@ -344,10 +344,21 @@ namespace { //// +/// Destructor. Be sure file is closed before we leave. + +Book::~Book() { + + close(); +} + + /// Book::open() opens a book file with a given file name void Book::open(const string& fName) { + // Close old file before opening the new + close(); + fileName = fName; ifstream::open(fileName.c_str(), ifstream::in | ifstream::binary); if (!is_open()) @@ -361,7 +372,6 @@ void Book::open(const string& fName) { if (!good()) { cerr << "Failed to open book file " << fileName << endl; - close(); exit(EXIT_FAILURE); } } @@ -479,7 +489,6 @@ void Book::read_entry(BookEntry& entry, int idx) { if (!good()) { cerr << "Failed to read book entry at index " << idx << endl; - close(); exit(EXIT_FAILURE); } } diff --git a/src/book.h b/src/book.h index e70bd0f1..740ef749 100644 --- a/src/book.h +++ b/src/book.h @@ -53,8 +53,8 @@ struct BookEntry { }; class Book : private std::ifstream { - public: + ~Book(); void open(const std::string& fName); void close(); const std::string file_name() const; diff --git a/src/search.cpp b/src/search.cpp index 22bfe8d6..64863be1 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -371,10 +371,8 @@ void think(const Position &pos, bool infinite, bool ponder, int side_to_move, { Move bookMove; if (get_option_value_string("Book File") != OpeningBook.file_name()) - { - OpeningBook.close(); OpeningBook.open("book.bin"); - } + bookMove = OpeningBook.get_move(pos); if (bookMove != MOVE_NONE) { @@ -545,7 +543,6 @@ void think(const Position &pos, bool infinite, bool ponder, int side_to_move, if (Quit) { - OpeningBook.close(); stop_threads(); quit_eval(); exit(0); @@ -2561,7 +2558,6 @@ namespace { command = "quit"; if(command == "quit") { - OpeningBook.close(); stop_threads(); quit_eval(); exit(0); diff --git a/src/uci.cpp b/src/uci.cpp index c9120ddb..9c13eff7 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -119,7 +119,6 @@ namespace { if (token == "quit") { - OpeningBook.close(); stop_threads(); quit_eval(); exit(0);