Be sure book file is closed before we leave
authorMarco Costalba <mcostalba@gmail.com>
Thu, 7 May 2009 07:27:38 +0000 (09:27 +0200)
committerMarco Costalba <mcostalba@gmail.com>
Thu, 7 May 2009 07:27:38 +0000 (09:27 +0200)
Move closing of file in Book destructor. This
guarantees us against leaving the file open under
any case and simplifies also Book use.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/book.cpp
src/book.h
src/search.cpp
src/uci.cpp

index 8e4778e..c69eab7 100644 (file)
@@ -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);
   }
 }
index e70bd0f..740ef74 100644 (file)
@@ -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;
index 22bfe8d..64863be 100644 (file)
@@ -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);
index c9120dd..9c13eff 100644 (file)
@@ -119,7 +119,6 @@ namespace {
 
     if (token == "quit")
     {
-        OpeningBook.close();
         stop_threads();
         quit_eval();
         exit(0);