Kaydet (Commit) 22cd725f authored tarafından Michael Meeks's avatar Michael Meeks

vcl timers: avoid crash with vcldemo.

The system timer needs earlier and/or more consistent initialization.

Change-Id: I148d98537cc055a091181bd36a654ae35f665aaf
üst 4e4d38fa
......@@ -34,6 +34,9 @@ protected:
virtual bool ReadyForSchedule( bool bTimer ) SAL_OVERRIDE;
virtual sal_uInt64 UpdateMinPeriod( sal_uInt64 nMinPeriod, sal_uInt64 nTime ) SAL_OVERRIDE;
private:
void InitSystemTimer();
public:
Timer();
Timer( const Timer& rTimer );
......
......@@ -81,11 +81,27 @@ sal_uInt64 Timer::UpdateMinPeriod( sal_uInt64 nMinPeriod, sal_uInt64 nTime )
return nMinPeriod;
}
/**
* Initialize the platform specific timer on which all the
* platform independent timers are built
*/
void Timer::InitSystemTimer()
{
ImplSVData* pSVData = ImplGetSVData();
if( ! pSVData->mpSalTimer )
{
pSVData->mnTimerPeriod = MAX_TIMER_PERIOD;
pSVData->mpSalTimer = pSVData->mpDefInst->CreateSalTimer();
pSVData->mpSalTimer->SetCallback( CallbackTaskScheduling );
}
}
Timer::Timer() : Scheduler()
{
mnTimeout = 1;
mbAuto = false;
mePriority = SchedulerPriority::HIGHEST;
InitSystemTimer();
}
Timer::Timer( const Timer& rTimer ) : Scheduler(rTimer)
......@@ -93,6 +109,7 @@ Timer::Timer( const Timer& rTimer ) : Scheduler(rTimer)
mnTimeout = rTimer.mnTimeout;
mbAuto = rTimer.mbAuto;
maTimeoutHdl = rTimer.maTimeoutHdl;
InitSystemTimer();
}
void Timer::Invoke()
......@@ -103,13 +120,9 @@ void Timer::Invoke()
void Timer::Start()
{
Scheduler::Start();
ImplSVData* pSVData = ImplGetSVData();
if( ! pSVData->mpSalTimer )
{
pSVData->mnTimerPeriod = MAX_TIMER_PERIOD;
pSVData->mpSalTimer = pSVData->mpDefInst->CreateSalTimer();
pSVData->mpSalTimer->SetCallback( CallbackTaskScheduling );
}
assert( pSVData->mpSalTimer != NULL );
if ( mnTimeout < pSVData->mnTimerPeriod )
Timer::ImplStartTimer( pSVData, mnTimeout );
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment