diff --git a/Foundation/src/Timer.cpp b/Foundation/src/Timer.cpp index 79fafae57..28dd6485a 100644 --- a/Foundation/src/Timer.cpp +++ b/Foundation/src/Timer.cpp @@ -61,14 +61,27 @@ void Timer::start(const AbstractTimerCallback& method, Thread::Priority priority { Clock nextInvocation; nextInvocation += static_cast(_startInterval)*1000; - - poco_assert (!_pCallback); - + FastMutex::ScopedLock lock(_mutex); + + if (_pCallback) + { + throw Poco::IllegalStateException("Timer already running"); + } + _nextInvocation = nextInvocation; _pCallback = method.clone(); _wakeUp.reset(); - threadPool.startWithPriority(priority, *this); + try + { + threadPool.startWithPriority(priority, *this); + } + catch (...) + { + delete _pCallback; + _pCallback = 0; + throw; + } }