Description
Check duplicate issues.
- Checked for duplicates
Description
Class TProcessEventTimer
is async timer and used inside TTreePlayer::Process()
method to enable events processing during TTree::Draw()
. Main problem - all data handling in the THttpServer
performed inside THttpTimer
handler - including TTree::Draw()
invoked from RBrowser
. So to say one cannot initiate async timer inside sync timer handler.
There is simple solution. In TUnixSystem::DispatchTimers(Bool_t mode)
one should change line 2947:
https://github.com/root-project/root/blob/master/core/unix/src/TUnixSystem.cxx#L2947
fInsideNotify = !mode;
Means handling of "normal" sync timers is not dangerous and do not block functionality to reset async timer inside
TUnixSystem::ResetTimer
which implemented as:
void TUnixSystem::ResetTimer(TTimer *ti)
{
if (!fInsideNotify && ti && ti->IsAsync())
UnixSetitimer(NextTimeOut(kFALSE));
}
Another solution - let process THttpServer
events differently - not in the THttpTimer
handler.
But this means extension of TSystem::DispatchOneEvent
method. Like adding generic event handlers called every time gSystem->ProcessEvents()
is called.
Reproducer
Not provided
ROOT version
master
Installation method
build from source
Operating system
OpenSUSE Linux
Additional context
No response