diff --git a/gui/canvaspainter/v7/src/TCanvasPainter.cxx b/gui/canvaspainter/v7/src/TCanvasPainter.cxx index 41a1395a21998dca40d138e109200464d2a91b94..4400951a7cbd738d5116d51defbdde6774d861de 100644 --- a/gui/canvaspainter/v7/src/TCanvasPainter.cxx +++ b/gui/canvaspainter/v7/src/TCanvasPainter.cxx @@ -569,7 +569,7 @@ void ROOT::Experimental::TCanvasPainter::ProcessData(unsigned connid, const std: conn->fGetMenu = cdata; } else if (arg == "QUIT") { // use window manager to correctly terminate http server - TWebWindowsManager::Instance()->Terminate(0); + TWebWindowsManager::Instance()->Terminate(); return; } else if (arg == "RELOAD") { conn->fSend = 0; // reset send version, causes new data sending diff --git a/gui/webdisplay/inc/ROOT/TWebWindowsManager.hxx b/gui/webdisplay/inc/ROOT/TWebWindowsManager.hxx index a1a5ee64bb41a0d47d043b7c71da54503e0c76ff..770cc3609345eb1b402ba6539c4b492fdffaa096 100644 --- a/gui/webdisplay/inc/ROOT/TWebWindowsManager.hxx +++ b/gui/webdisplay/inc/ROOT/TWebWindowsManager.hxx @@ -66,7 +66,7 @@ public: int WaitFor(WebWindowWaitFunc_t check, double tm); /// Terminate http server and ROOT application - void Terminate(int code = 0); + void Terminate(); }; diff --git a/gui/webdisplay/src/TWebWindowsManager.cxx b/gui/webdisplay/src/TWebWindowsManager.cxx index ba453cb5afe047825bea2a6630e4d27215d27806..9102a7509e3cf081925f7c0273756edbce5755b6 100644 --- a/gui/webdisplay/src/TWebWindowsManager.cxx +++ b/gui/webdisplay/src/TWebWindowsManager.cxx @@ -31,6 +31,7 @@ #include "TString.h" #include "TStopwatch.h" #include "TApplication.h" +#include "TTimer.h" /** \class ROOT::Experimental::TWebWindowManager \ingroup webdisplay @@ -323,11 +324,12 @@ int ROOT::Experimental::TWebWindowsManager::WaitFor(WebWindowWaitFunc_t check, d ////////////////////////////////////////////////////////////////////////// /// Terminate http server and ROOT application -void ROOT::Experimental::TWebWindowsManager::Terminate(int code) +void ROOT::Experimental::TWebWindowsManager::Terminate() { if (fServer) fServer->SetTerminate(); + // use timer to avoid situation when calling object is deleted by terminate if (gApplication) - gApplication->Terminate(code); + TTimer::SingleShot(100, "TApplication", gApplication, "Terminate()"); }