mirror of
https://github.com/pocoproject/poco.git
synced 2025-11-04 12:17:37 +01:00
fixed GH #424: Poco::Timer deadlock
This commit is contained in:
@@ -62,14 +62,27 @@ void Timer::start(const AbstractTimerCallback& method, Thread::Priority priority
|
|||||||
Clock nextInvocation;
|
Clock nextInvocation;
|
||||||
nextInvocation += static_cast<Clock::ClockVal>(_startInterval)*1000;
|
nextInvocation += static_cast<Clock::ClockVal>(_startInterval)*1000;
|
||||||
|
|
||||||
poco_assert (!_pCallback);
|
|
||||||
|
|
||||||
FastMutex::ScopedLock lock(_mutex);
|
FastMutex::ScopedLock lock(_mutex);
|
||||||
|
|
||||||
|
if (_pCallback)
|
||||||
|
{
|
||||||
|
throw Poco::IllegalStateException("Timer already running");
|
||||||
|
}
|
||||||
|
|
||||||
_nextInvocation = nextInvocation;
|
_nextInvocation = nextInvocation;
|
||||||
_pCallback = method.clone();
|
_pCallback = method.clone();
|
||||||
_wakeUp.reset();
|
_wakeUp.reset();
|
||||||
|
try
|
||||||
|
{
|
||||||
threadPool.startWithPriority(priority, *this);
|
threadPool.startWithPriority(priority, *this);
|
||||||
}
|
}
|
||||||
|
catch (...)
|
||||||
|
{
|
||||||
|
delete _pCallback;
|
||||||
|
_pCallback = 0;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void Timer::stop()
|
void Timer::stop()
|
||||||
|
|||||||
Reference in New Issue
Block a user