Avoid sending info strings before 'uci' has been received
authorSami Kiminki <skiminki@users.noreply.github.com>
Tue, 19 May 2020 09:08:01 +0000 (12:08 +0300)
committerJoost VandeVondele <Joost.VandeVondele@gmail.com>
Tue, 19 May 2020 15:02:21 +0000 (17:02 +0200)
Do not send the following info string on the first call to
aligned_ttmem_alloc() on Windows:

  info string Hash table allocation: Windows large pages [not] used.

The first call occurs before the 'uci' command has been received. This
confuses some GUIs, which expect the first engine-sent command to be
'id' as the response to the 'uci' command. (see https://github.com/official-stockfish/Stockfish/issues/2681)

closes https://github.com/official-stockfish/Stockfish/pull/2689

No functional change.

src/misc.cpp

index e0cc6ed5977d9d39b838d5cf99e6ea1d92777f37..c625478462e3b29d417f41f0cc01d99218a9526c 100644 (file)
@@ -358,12 +358,21 @@ static void* aligned_ttmem_alloc_large_pages(size_t allocSize) {
 
 void* aligned_ttmem_alloc(size_t allocSize, void*& mem) {
 
+  static bool firstCall = true;
+
   // try to allocate large pages
   mem = aligned_ttmem_alloc_large_pages(allocSize);
-  if (mem)
-      sync_cout << "info string Hash table allocation: Windows large pages used." << sync_endl;
-  else
-      sync_cout << "info string Hash table allocation: Windows large pages not used." << sync_endl;
+
+  // Suppress info strings on the first call. The first call occurs before 'uci'
+  // is received and in that case this output confuses some GUIs.
+  if (!firstCall)
+  {
+      if (mem)
+          sync_cout << "info string Hash table allocation: Windows large pages used." << sync_endl;
+      else
+          sync_cout << "info string Hash table allocation: Windows large pages not used." << sync_endl;
+  }
+  firstCall = false;
 
   // fall back to regular, page aligned, allocation if necessary
   if (!mem)