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;
 | 
			
		||||
	nextInvocation += static_cast<Clock::ClockVal>(_startInterval)*1000;
 | 
			
		||||
	
 | 
			
		||||
	poco_assert (!_pCallback);
 | 
			
		||||
 | 
			
		||||
	FastMutex::ScopedLock lock(_mutex);	
 | 
			
		||||
 | 
			
		||||
	if (_pCallback)
 | 
			
		||||
	{
 | 
			
		||||
		throw Poco::IllegalStateException("Timer already running");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_nextInvocation = nextInvocation;
 | 
			
		||||
	_pCallback = method.clone();
 | 
			
		||||
	_wakeUp.reset();
 | 
			
		||||
	try
 | 
			
		||||
	{
 | 
			
		||||
		threadPool.startWithPriority(priority, *this);
 | 
			
		||||
	}
 | 
			
		||||
	catch (...)
 | 
			
		||||
	{
 | 
			
		||||
		delete _pCallback;
 | 
			
		||||
		_pCallback = 0;
 | 
			
		||||
		throw;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void Timer::stop()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user