Fix bug in sending cores command to engine
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 11 Jul 2010 08:54:59 +0000 (10:54 +0200)
committerArun Persaud <arun@nubati.net>
Wed, 14 Jul 2010 04:25:36 +0000 (21:25 -0700)
The cores command was alwas sent to the engine(s) when the user changed
it through the menu, even when the engine had sent feature smp=0 (which
is default anyway). NewSettingEvent() was patched to send the new
setting conditionally, based on the engine properties as recorded in
ChessProgramStates first, second; In this particular case it now
consults cps->maxCores. (Note the code for testing the second engine
contains some dirty pointer arithmetic.)

backend.c
backend.h
winboard/woptions.c
xoptions.c

index 5d0c420..bb52007 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -13867,17 +13867,17 @@ PonderNextMoveEvent(newState)
 }
 
 void
-NewSettingEvent(option, command, value)
+NewSettingEvent(option, feature, command, value)
      char *command;
-     int option, value;
+     int option, value, *feature;
 {
     char buf[MSG_SIZ];
 
     if (gameMode == EditPosition) EditPositionDone(TRUE);
     sprintf(buf, "%s%s %d\n", (option ? "option ": ""), command, value);
-    SendToProgram(buf, &first);
+    if(feature == NULL || *feature) SendToProgram(buf, &first);
     if (gameMode == TwoMachinesPlay) {
-       SendToProgram(buf, &second);
+       if(feature == NULL || feature[(int*)&second - (int*)&first]) SendToProgram(buf, &second);
     }
 }
 
index a5caec7..38515df 100644 (file)
--- a/backend.h
+++ b/backend.h
@@ -203,7 +203,7 @@ void ExitAnalyzeMode P((void));
 void AnalyzeModeEvent P((void));
 void AnalyzeFileEvent P((void));
 void InitPosition P((int redraw));
-void NewSettingEvent P((int option, char *command, int value));
+void NewSettingEvent P((int option, int *feature, char *command, int value));
 void DoEcho P((void));
 void DontEcho P((void));
 void TidyProgramName P((char *prog, char *host, char *buf));
index f9f3ce4..7420fc0 100644 (file)
@@ -131,7 +131,6 @@ void SelectComboValue(HANDLE hwndCombo, ComboData *cd, unsigned value);
 VOID SetLoadOptionEnables(HWND hDlg);\r
 VOID SetSaveOptionEnables(HWND hDlg);\r
 VOID SetTimeControlEnables(HWND hDlg);\r
-void NewSettingEvent(int option, char *command, int value);\r
 \r
 /*---------------------------------------------------------------------------*\\r
  *\r
@@ -2939,7 +2938,7 @@ LRESULT CALLBACK UciOptionsDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM
       // [HGM] smp: get nr of cores:\r
       oldCores = appData.smpCores;\r
       appData.smpCores = GetDlgItemInt(hDlg, IDC_Cores, NULL, FALSE );\r
-      if(appData.smpCores != oldCores) NewSettingEvent(FALSE, "cores", appData.smpCores);\r
+      if(appData.smpCores != oldCores) NewSettingEvent(FALSE, &(first.maxCores), "cores", appData.smpCores);\r
       // [HGM] book: read tick boxes for own book use\r
       appData.firstHasOwnBookUCI  = (Boolean) IsDlgButtonChecked( hDlg, IDC_OwnBook1 );\r
       appData.secondHasOwnBookUCI = (Boolean) IsDlgButtonChecked( hDlg, IDC_OwnBook2 );\r
index e60e845..526dfd9 100644 (file)
@@ -1233,7 +1233,7 @@ void UciCallback(w, client_data, call_data)
            // Some changed setting need immediate sending always.
            PonderNextMoveEvent(ponder);
            if(oldCores != appData.smpCores)
-               NewSettingEvent(False, "cores", appData.smpCores);
+               NewSettingEvent(False, &(first.maxCores), "cores", appData.smpCores);
       }
       UciPopDown();
       return;