]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MONITOR/AliMonitorClient.cxx
Added the include to cstdlib in several places to avoid compilation problems with...
[u/mrichter/AliRoot.git] / MONITOR / AliMonitorClient.cxx
index f350d781190e80dd64b3c3e07da27642787e2a34..199b6b335fd1d660a33fc5b0bd639d322554d6b3 100644 (file)
 ///////////////////////////////////////////////////////////////////////////////
 
 
-#include "AliMonitorClient.h"
-#include "AliMonitorDialog.h"
-#include "AliMonitorProcess.h"
-#include <TGMsgBox.h>
+#include <cstdlib>
+#include <TApplication.h>
+#include <TCanvas.h>
+#include <TClass.h>
+#include <TFile.h>
+#include <TFolder.h>
+#include <TG3DLine.h>
+#include <TGButton.h>
+#include <TGCanvas.h>
 #include <TGFileDialog.h>
-#include <TSystem.h>
+#include <TGLabel.h>
+#include <TGListTree.h>
+#include <TGMenu.h>
+#include <TGMsgBox.h>
+#include <TGNumberEntry.h>
+#include <TGSplitter.h>
+#include <TGTextEntry.h>
+#include <TGTextView.h>
+#include <TGToolBar.h>
 #include <TMessage.h>
-#include <TCanvas.h>
-#include <TApplication.h>
+#include <TRootEmbeddedCanvas.h>
+#include <TSocket.h>
 #include <TStyle.h>
+#include <TTimer.h>
 
+#include "AliLog.h"
+#include "AliMonitorClient.h"
+#include "AliMonitorHisto.h"
+#include "AliMonitorProcess.h"
 
 ClassImp(AliMonitorClient) 
 
 
 const char* AliMonitorClient::fgSettingsFileName = ".AliMonitorClient";
 
-//_____________________________________________________________________________
-class AliMonitorStringDlg : public AliMonitorDialog {
-
-public:
-  AliMonitorStringDlg(TString& string, TGFrame* main, const char* title,
-                     const char* label);
-  virtual ~AliMonitorStringDlg();
-
-  virtual void       OnOkClicked();
-
-private:
-  TGLayoutHints*     fStringLayout;
-  TGLabel*           fStringLabel;
-  TGTextEntry*       fStringEntry;
-
-  TString&           fString;
-};
-
 
 //_____________________________________________________________________________
-AliMonitorStringDlg::AliMonitorStringDlg(TString& string, TGFrame* main, 
-                                        const char* title, 
-                                        const char* label) :
-  AliMonitorDialog(main, 300, 80), fString(string)
+AliMonitorClient::AliMonitorStringDlg::AliMonitorStringDlg(TString& string, 
+                                                          TGFrame* main, 
+                                                          const char* title, 
+                                                          const char* label) :
+  AliMonitorDialog(main, 300, 80),
+  fStringLayout(new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 5, 2, 2)),
+  fStringLabel(new TGLabel(fFrame, label)),
+  fStringEntry(new TGTextEntry(fFrame, string.Data())),
+  fString(string)
 {
 // create a dialog for connecting to a monitor process
 
-  fStringLayout = new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 5, 2, 2);
-  fStringLabel = new TGLabel(fFrame, label);
   fFrame->AddFrame(fStringLabel, fStringLayout);
-  fStringEntry = new TGTextEntry(fFrame, string.Data());
   fStringEntry->Resize(100, fStringEntry->GetDefaultHeight());
   fFrame->AddFrame(fStringEntry, fStringLayout);
 
@@ -84,7 +86,7 @@ AliMonitorStringDlg::AliMonitorStringDlg(TString& string, TGFrame* main,
 }
 
 //_____________________________________________________________________________
-AliMonitorStringDlg::~AliMonitorStringDlg()
+AliMonitorClient::AliMonitorStringDlg::~AliMonitorStringDlg()
 {
 // clean up
 
@@ -94,45 +96,27 @@ AliMonitorStringDlg::~AliMonitorStringDlg()
 }
 
 //_____________________________________________________________________________
-void AliMonitorStringDlg::OnOkClicked()
+void AliMonitorClient::AliMonitorStringDlg::OnOkClicked()
 {
   fString = fStringEntry->GetText();
 }
 
 
-
 //_____________________________________________________________________________
-class AliMonitorNumberDlg : public AliMonitorDialog {
-
-public:
-  AliMonitorNumberDlg(Float_t& value, TGFrame* main, const char* title,
-                     const char* label, Float_t min);
-  virtual ~AliMonitorNumberDlg();
-
-  virtual void       OnOkClicked();
-
-private:
-  TGLayoutHints*     fNumberLayout;
-  TGLabel*           fNumberLabel;
-  TGNumberEntry*     fNumberEntry;
-
-  Float_t&           fNumber;
-};
-
-
-//_____________________________________________________________________________
-AliMonitorNumberDlg::AliMonitorNumberDlg(Float_t& value, TGFrame* main, 
-                                        const char* title, const char* label, 
-                                        Float_t min) :
-  AliMonitorDialog(main, 250, 80), fNumber(value)
+AliMonitorClient::AliMonitorNumberDlg::AliMonitorNumberDlg(Float_t& value, 
+                                                          TGFrame* main, 
+                                                          const char* title, 
+                                                          const char* label, 
+                                                          Float_t min) :
+  AliMonitorDialog(main, 250, 80),
+  fNumberLayout(new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 5, 2, 2)),
+  fNumberLabel(new TGLabel(fFrame, label)),
+  fNumberEntry(new TGNumberEntry(fFrame, value, 4, -1, TGNumberFormat::kNESRealOne)),
+  fNumber(value)
 {
 // create a dialog for getting a number
 
-  fNumberLayout = new TGLayoutHints(kLHintsLeft | kLHintsCenterY, 2, 5, 2, 2);
-  fNumberLabel = new TGLabel(fFrame, label);
   fFrame->AddFrame(fNumberLabel, fNumberLayout);
-  fNumberEntry = new TGNumberEntry(fFrame, value, 4, -1,
-                                  TGNumberFormat::kNESRealOne);
   fNumberEntry->SetLimits(TGNumberFormat::kNELLimitMin, min, 0);
   fFrame->AddFrame(fNumberEntry, fNumberLayout);
 
@@ -145,7 +129,7 @@ AliMonitorNumberDlg::AliMonitorNumberDlg(Float_t& value, TGFrame* main,
 }
 
 //_____________________________________________________________________________
-AliMonitorNumberDlg::~AliMonitorNumberDlg()
+AliMonitorClient::AliMonitorNumberDlg::~AliMonitorNumberDlg()
 {
 // clean up
 
@@ -155,7 +139,7 @@ AliMonitorNumberDlg::~AliMonitorNumberDlg()
 }
 
 //_____________________________________________________________________________
-void AliMonitorNumberDlg::OnOkClicked()
+void AliMonitorClient::AliMonitorNumberDlg::OnOkClicked()
 {
   fNumber = fNumberEntry->GetNumber();
 }
@@ -177,18 +161,68 @@ enum {kMenuFileConnect, kMenuFileDisconnect, kMenuFileOpen, kMenuFileExit,
 
 //_____________________________________________________________________________
 AliMonitorClient::AliMonitorClient():
-  TGMainFrame(gClient->GetRoot(), 500, 300)
+  TGMainFrame(gClient->GetRoot(), 500, 300),
+  fQObject(),
+  fMenuBarLayout(new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 0, 0, 1, 1)),
+  fMenuBarItemLayout(new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0)),
+  fMenuBarHelpLayout(new TGLayoutHints(kLHintsTop | kLHintsRight)),
+  fMenuFile(new TGPopupMenu(gClient->GetRoot())),
+  fMenuView(new TGPopupMenu(gClient->GetRoot())),
+  fMenuFavorites(new TGPopupMenu(gClient->GetRoot())),
+  fMenuReference(new TGPopupMenu(gClient->GetRoot())),
+  fMenuOptions(new TGPopupMenu(gClient->GetRoot())),
+  fMenuHelp(new TGPopupMenu(gClient->GetRoot())),
+  fMenuBar(new TGMenuBar(this, 1, 1, kHorizontalFrame)),
+  fToolBarLayout(new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 2, 2)),
+  fToolBarSep(new TGHorizontal3DLine(this)),
+  fToolBar(new TGToolBar(this, 60, 20, kHorizontalFrame)),
+  fEventNumberLayout(new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 10, 2, 10, 5)),
+  fEventNumber(new TGNumberEntry(fToolBar, 1, 4, 10, TGNumberFormat::kNESInteger)),
+  fEventButton(NULL),
+  fSumButton(NULL),
+  fRunButton(NULL),
+  fLoopButton(NULL),
+  fLoopOnPicture(NULL),
+  fLoopOffPicture(NULL),
+  fPreviousButton(NULL),
+  fNextButton(NULL),
+  fCopyButton(NULL),
+  fSaveButton(NULL),
+  fPrintButton(NULL),
+  fBottomLayout(new TGLayoutHints(kLHintsExpandX | kLHintsBottom)),
+  fLeftLayout(new TGLayoutHints(kLHintsLeft | kLHintsExpandY)),
+  fExpandLayout(new TGLayoutHints(kLHintsExpandX | kLHintsExpandY)),
+  fVerticalFrame(new TGVerticalFrame(this, 10, 10)),
+  fHorizontalFrame(new TGHorizontalFrame(fVerticalFrame, 10, 10)),
+  fTreeFrame(new TGCompositeFrame(fHorizontalFrame, 10, 10, kSunkenFrame | kFixedWidth)),
+  fTreeCanvas(new TGCanvas(fTreeFrame, 10, 10)),
+  fTree(new TGListTree(fTreeCanvas, kHorizontalFrame)),
+  fHistoPicture(fClient->GetPicture("h1_t.xpm")),
+  fAllItem(fTree->AddItem(NULL, "All")),
+  fFavoritesItem(fTree->AddItem(NULL, "Favorites")),
+  fComparisonItem(fTree->AddItem(NULL, "Comparison")),
+  fTreeSplitter(new TGVSplitter(fHorizontalFrame, 4)),
+  fDrawFrame(new TGCompositeFrame(fHorizontalFrame, 10, 10, kSunkenFrame)),
+  fDrawCanvas(new TRootEmbeddedCanvas("current monitor histogram", fDrawFrame, 10, 10)),
+  fDescriptionSplitter(new TGHSplitter(fVerticalFrame, 4, 4)),
+  fDescriptionFrame(new TGCompositeFrame(fVerticalFrame, 10, 60, kSunkenFrame | kFixedHeight)),
+  fDescription(new TGTextView(fDescriptionFrame, 10, 60, "")),
+  fServerName("localhost"),
+  fSocket(NULL),
+  fSocketHandler(NULL),
+  fFolder(CreateTopFolder()),
+  fCurrentItem(NULL),
+  fBaseItem(NULL),
+  fLoopTimer(NULL),
+  fLoopInterval(1000),
+  fFavoritesFileName(""),
+  fReferenceFileName(""),
+  fReference(CreateTopFolder()),
+  fPrintCommand("gv")
 {
 // initialize the monitoring client window
 
-  // *** menu bar ***
-  fMenuBarLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,
-                                      0, 0, 1, 1);
-  fMenuBarItemLayout = new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0);
-  fMenuBarHelpLayout = new TGLayoutHints(kLHintsTop | kLHintsRight);
-
   // File menu
-  fMenuFile = new TGPopupMenu(gClient->GetRoot());
   fMenuFile->AddEntry("&Connect...", kMenuFileConnect);
   fMenuFile->AddEntry("&Disconnect...", kMenuFileDisconnect);
   fMenuFile->HideEntry(kMenuFileDisconnect);
@@ -199,7 +233,6 @@ AliMonitorClient::AliMonitorClient():
                     "OnMenuActivated(Int_t)");
 
   // View menu
-  fMenuView = new TGPopupMenu(gClient->GetRoot());
   fMenuView->AddEntry("Tool&bar", kMenuViewToolBar);
   fMenuView->CheckEntry(kMenuViewToolBar);
   fMenuView->AddEntry("&Tree", kMenuViewTree);
@@ -217,7 +250,6 @@ AliMonitorClient::AliMonitorClient():
                     "OnMenuActivated(Int_t)");
 
   // Favorites menu
-  fMenuFavorites = new TGPopupMenu(gClient->GetRoot());
   fMenuFavorites->AddEntry("&Add", kMenuFavAdd);
   fMenuFavorites->DisableEntry(kMenuFavAdd);
   fMenuFavorites->AddEntry("&Delete", kMenuFavDelete);
@@ -234,7 +266,6 @@ AliMonitorClient::AliMonitorClient():
                          "OnMenuActivated(Int_t)");
 
   // Reference menu
-  fMenuReference = new TGPopupMenu(gClient->GetRoot());
   fMenuReference->AddEntry("&Load...", kMenuRefLoad);
   fMenuReference->AddEntry("&Threshold...", kMenuRefThreshold);
   fMenuReference->AddSeparator();
@@ -248,7 +279,6 @@ AliMonitorClient::AliMonitorClient():
                          "OnMenuActivated(Int_t)");
 
   // Options menu
-  fMenuOptions = new TGPopupMenu(gClient->GetRoot());
   fMenuOptions->AddEntry("&Loop Interval...", kMenuOptLoop);
   fMenuOptions->AddEntry("&Print Command...", kMenuOptPrint);
   fMenuOptions->AddSeparator();
@@ -259,14 +289,12 @@ AliMonitorClient::AliMonitorClient():
                        "OnMenuActivated(Int_t)");
 
   // Help menu
-  fMenuHelp = new TGPopupMenu(gClient->GetRoot());
   fMenuHelp->AddEntry("&Documentation...", kMenuHelpDoc);
   fMenuHelp->AddEntry("A&bout...", kMenuHelpAbout);
   fMenuHelp->Connect("Activated(Int_t)", "AliMonitorClient", this,
                     "OnMenuActivated(Int_t)");
 
   // menu bar
-  fMenuBar = new TGMenuBar(this, 1, 1, kHorizontalFrame);
   fMenuBar->AddPopup("&File", fMenuFile, fMenuBarItemLayout);
   fMenuBar->AddPopup("&View", fMenuView, fMenuBarItemLayout);
   fMenuBar->AddPopup("F&avorites", fMenuFavorites, fMenuBarItemLayout);
@@ -278,17 +306,10 @@ AliMonitorClient::AliMonitorClient():
 
 
   // *** tool bar ***
-  fToolBarLayout = new TGLayoutHints(kLHintsTop | kLHintsExpandX, 0, 0, 2, 2);
-  fToolBarSep = new TGHorizontal3DLine(this);
   AddFrame(fToolBarSep, fToolBarLayout);
-  fToolBar = new TGToolBar(this, 60, 20, kHorizontalFrame);
   AddFrame(fToolBar, fToolBarLayout);
 
   // event number field
-  fEventNumberLayout = new TGLayoutHints(kLHintsCenterY | kLHintsLeft, 
-                                        10, 2, 10, 5);
-  fEventNumber = new TGNumberEntry(fToolBar, 1, 4, 10, 
-                                  TGNumberFormat::kNESInteger);
   fEventNumber->SetLimits(TGNumberFormat::kNELLimitMin, 1, 0);
   fToolBar->AddFrame(fEventNumber, fEventNumberLayout);
   fEventNumber->GetNumberEntry()->Connect("ReturnPressed()", 
@@ -386,23 +407,13 @@ AliMonitorClient::AliMonitorClient():
                        "OnPrintButtonClicked()");
 
   // *** frames ***
-  fBottomLayout = new TGLayoutHints(kLHintsExpandX | kLHintsBottom);
-  fLeftLayout = new TGLayoutHints(kLHintsLeft | kLHintsExpandY);
-  fExpandLayout = new TGLayoutHints(kLHintsExpandX | kLHintsExpandY);
-
-  fVerticalFrame = new TGVerticalFrame(this, 10, 10);
   AddFrame(fVerticalFrame, fExpandLayout);
 
-  fHorizontalFrame = new TGHorizontalFrame(fVerticalFrame, 10, 10);
   fVerticalFrame->AddFrame(fHorizontalFrame, fExpandLayout);
 
   // tree frame
-  fTreeFrame = new TGCompositeFrame(fHorizontalFrame, 10, 10, 
-                                   kSunkenFrame | kFixedWidth);
   fHorizontalFrame->AddFrame(fTreeFrame, fLeftLayout);
-  fTreeCanvas = new TGCanvas(fTreeFrame, 10, 10);
   fTreeFrame->AddFrame(fTreeCanvas, fExpandLayout);
-  fTree = new TGListTree(fTreeCanvas, kHorizontalFrame);
   fTreeCanvas->AddFrame(fTree, fExpandLayout);
   fTree->Connect("Clicked(TGListTreeItem*,Int_t)", "AliMonitorClient",
                 this, "OnTreeClicked(TGListTreeItem*,Int_t)");
@@ -410,33 +421,21 @@ AliMonitorClient::AliMonitorClient():
                 this, "OnTreeReturnPressed(TGListTreeItem*)");
 
   // tree items
-  fAllItem = fTree->AddItem(NULL, "All");
-  fFavoritesItem = fTree->AddItem(NULL, "Favorites");
-  fComparisonItem = fTree->AddItem(NULL, "Comparison");
-  fHistoPicture = fClient->GetPicture("h1_t.xpm"); 
   fTreeFrame->Resize(100, fTreeFrame->GetDefaultHeight());
 
   // tree / histogram splitter
-  fTreeSplitter = new TGVSplitter(fHorizontalFrame, 4);
   fTreeSplitter->SetFrame(fTreeFrame, kTRUE);
   fHorizontalFrame->AddFrame(fTreeSplitter, fLeftLayout);
 
   // histogram frame
-  fDrawFrame = new TGCompositeFrame(fHorizontalFrame, 10, 10, kSunkenFrame);
   fHorizontalFrame->AddFrame(fDrawFrame, fExpandLayout);
-  fDrawCanvas = new TRootEmbeddedCanvas("current monitor histogram", 
-                                       fDrawFrame, 10, 10);
   fDrawFrame->AddFrame(fDrawCanvas, fExpandLayout);
 
   // description frame
-  fDescriptionFrame = new TGCompositeFrame(fVerticalFrame, 10, 60, 
-                                          kSunkenFrame | kFixedHeight);
   fVerticalFrame->AddFrame(fDescriptionFrame, fBottomLayout);
-  fDescription = new TGTextView(fDescriptionFrame, 10, 60, "");
   fDescriptionFrame->AddFrame(fDescription, fExpandLayout);
 
   // histogram / description splitter
-  fDescriptionSplitter = new TGHSplitter(fVerticalFrame, 4, 4);
   fVerticalFrame->AddFrame(fDescriptionSplitter, fBottomLayout);
   fDescriptionSplitter->SetFrame(fDescriptionFrame, kFALSE);
 
@@ -452,25 +451,12 @@ AliMonitorClient::AliMonitorClient():
 
 
   // default data members
-  fServerName = "localhost";
-  fSocket = NULL;
-  fSocketHandler = NULL;
 
   fFolder = CreateTopFolder();
 
-  fCurrentItem = NULL;
-  fBaseItem = NULL;
-  fLoopTimer = NULL;
-  fLoopInterval = 1000;
-
-  fFavoritesFileName = "";
-
-  fReferenceFileName = "";
   fReference = CreateTopFolder();
   AliMonitorHisto::SetThreshold(5.0);
 
-  fPrintCommand = "gv";
-
   // load saved settings
   LoadSettings();
 }
@@ -517,6 +503,8 @@ AliMonitorClient::~AliMonitorClient()
   delete fHorizontalFrame;
 
   if (fSocket) {
+    fSocketHandler->Remove();
+    fSocket->Send("disconnect");
     fSocket->Close();
     delete fSocket;
     delete fSocketHandler;
@@ -544,6 +532,16 @@ void AliMonitorClient::CloseWindow()
   if (fMenuOptions->IsEntryChecked(kMenuOptSaveOnExit)) {
     SaveSettings();
   }
+  if (fSocket) {
+    fSocketHandler->Remove();
+    fSocket->Send("disconnect");
+    fSocket->Close();
+    delete fSocket;
+    fSocket = NULL;
+    delete fSocketHandler;
+    fSocketHandler = NULL;
+  }
+
   gApplication->Terminate(0);
 }
 
@@ -938,7 +936,7 @@ void AliMonitorClient::OnLoopTimer()
 
 
 //_____________________________________________________________________________
-TFolder* AliMonitorClient::CreateTopFolder()
+TFolder* AliMonitorClient::CreateTopFolder() const
 {
 // create a top folder for monitor histograms
 
@@ -1001,7 +999,7 @@ Bool_t AliMonitorClient::ConnectToServer()
     if (serverName.IsNull()) return kFALSE;
 
     // connect to the server
-    fSocket = new TSocket(serverName, AliMonitorProcess::kgPort);
+    fSocket = new TSocket(serverName, AliMonitorProcess::GetPort());
     if (!fSocket || !fSocket->IsValid() || (fSocket->Send("client") <= 0)) {
       if (fSocket) delete fSocket;
       fSocket = NULL;
@@ -1018,8 +1016,8 @@ Bool_t AliMonitorClient::ConnectToServer()
                              "OnNewData()");
       fSocketHandler->Add();
       TInetAddress adr = fSocket->GetInetAddress();
-      Info("ConnectToServer", "connected to server:\n %s (%s), port %d\n",
-          adr.GetHostName(), adr.GetHostAddress(), adr.GetPort());
+      AliInfo(Form("connected to server: %s (%s), port %d",
+                  adr.GetHostName(), adr.GetHostAddress(), adr.GetPort()));
       fMenuFile->HideEntry(kMenuFileConnect);
       fMenuFile->HideEntry(kMenuFileOpen);
       fMenuFile->EnableEntry(kMenuFileDisconnect);
@@ -1046,6 +1044,8 @@ void AliMonitorClient::DisconnectFromServer()
   if (result == kMBNo) return;
 
   // disconnect from the server
+  fSocketHandler->Remove();
+  fSocket->Send("disconnect");
   fSocket->Close();
   delete fSocket;
   fSocket = NULL;
@@ -1280,8 +1280,8 @@ Bool_t AliMonitorClient::LoadFavorites(Bool_t dialog)
   char buffer[256];
   while (!feof(file)) {
     if (fgets(buffer, 255, file) == NULL) break;
-    char* item = buffer;
-    char* folder = strsep(&item, "/");
+    char* folder = strtok(buffer, "/");
+    char* item = strtok(NULL, "\n");
     if (item[strlen(item)-1] == '\n') item[strlen(item)-1] = 0;
     if (!folder || !item) continue;
 
@@ -1342,8 +1342,7 @@ Bool_t AliMonitorClient::SaveFavorites()
   }
 
   fclose(file);
-  Info("SaveFavorites", "favorites saved to file %s", 
-       fFavoritesFileName.Data());
+  AliInfo(Form("favorites saved to file %s", fFavoritesFileName.Data()));
   return kTRUE;
 }
 
@@ -1549,8 +1548,8 @@ Bool_t AliMonitorClient::SaveReference()
   fReference->Write();
   file->Close();
   delete file;
-  Info("SaveReference", "reference histograms saved to file %s", 
-       fReferenceFileName.Data());
+  AliInfo(Form("reference histograms saved to file %s", 
+              fReferenceFileName.Data()));
   return kTRUE;
 }
 
@@ -1608,8 +1607,8 @@ void AliMonitorClient::LoadSettings()
   char buffer[256];
   while (!feof(file)) {
     if (fgets(buffer, 255, file) == NULL) break;
-    char* value = buffer;
-    char* token = strsep(&value, "=");
+    char* token = strtok(buffer, "=");
+    char* value = strtok(NULL, "\n");
     if (!token || !value) continue;
     if (value[strlen(value)-1] == '\n') value[strlen(value)-1] = 0;
 
@@ -1657,7 +1656,7 @@ void AliMonitorClient::LoadSettings()
   }
 
   fclose(file);
-  Info("LoadSettings", "settings from file %s applied", fileName);
+  AliDebug(1, Form("settings from file %s applied", fileName));
   free(fileName);
 }
 
@@ -1710,7 +1709,7 @@ void AliMonitorClient::SaveSettings()
          fMenuOptions->IsEntryChecked(kMenuOptSaveOnExit));
 
   fclose(file);
-  Info("SaveSettings", "settings saved to file %s", fileName);
+  AliInfo(Form("settings saved to file %s", fileName));
   free(fileName);
 }
 
@@ -1876,23 +1875,47 @@ Bool_t AliMonitorClient::CheckForNewData()
 {
 // check whether the monitor process server sent new data
 
-  // receive a message from the server
+  // disable the socket handler in this method
   if (!fSocket || !fSocket->IsValid()) return kFALSE;
+  fSocketHandler->Remove();
+
+  // receive a control message from the server
+  char controlMessage[256];
+  if (fSocket->Recv(controlMessage, 255) <= 0) {
+    fSocketHandler->Add();
+    return kFALSE;
+  }
+
+  // if it is new histogram data, send ok
+  if ((strcmp(controlMessage, "histograms") != 0) ||
+      (fSocket->Send("ok") <= 0)) {
+    fSocketHandler->Add();
+    return kFALSE;
+  }
+
+  // get the histogram data
   TMessage* message = NULL;
-  Int_t result = fSocket->Recv(message);
+  if (fSocket->Recv(message) <= 0) {
+    fSocketHandler->Add();
+    return kFALSE;
+  }
 
   // replace the old folder of monitor histos with the new one
-  if (result > 0) {
+  if (message->GetClass()->InheritsFrom(TFolder::Class())) {
     if (fFolder) delete fFolder;
     fFolder = (TFolder*) message->ReadObject(message->GetClass());
+    delete message;
+    fSocketHandler->Add();
     return kTRUE;
   }
 
+  delete message;
+  fSocketHandler->Add();
   return kFALSE;
 }
 
 //_____________________________________________________________________________
-void AliMonitorClient::ClearItems(TGListTreeItem* base)
+void AliMonitorClient::ClearItems(TGListTreeItem* base) const
 {
 // remove the references to the histograms from all subitems of the 
 // given tree item