Fixed bug: re-insert time events in list before calling the callback to allow scripts to safely remove the event in callback.

git-svn-id: http://yate.null.ro/svn/yate/trunk@6493 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
marian 2021-05-19 14:16:06 +00:00
parent 8e46e881e4
commit ac7293cfa6
1 changed files with 6 additions and 10 deletions

View File

@ -4972,7 +4972,6 @@ void JsEngineWorker::run()
m_engine->resetWorker();
return;
}
Time t;
Lock myLock(m_eventsMutex);
ObjList* o = m_events.skipNull();
if (!o) {
@ -4981,21 +4980,18 @@ void JsEngineWorker::run()
continue;
}
RefPointer<JsTimeEvent> ev = static_cast<JsTimeEvent*>(o->get());
myLock.drop();
Time t;
if (!ev->timeout(t)) {
myLock.drop();
ev = 0;
Thread::idle(true);
continue;
}
ev->processTimeout(t);
if (!ev->repeatable()) {
myLock.acquire(m_eventsMutex);
m_events.remove(ev);
continue;
}
myLock.acquire(m_eventsMutex);
if (m_events.remove(ev,false))
if (o->remove(!ev->repeatable()))
postponeEvent(ev);
myLock.drop();
ev->processTimeout(t);
ev = 0;
}
}