I've been looking at the ut_unixTimer behaviour, and I've find that:

When the timer fires up, it call the function _Timer_Proc, which in
turn, calls the real callback.  After that, it performs a
"resetIfStarted" (which creates a new one with the same period), and
then [_Timer_Proc] finish returning 0 (which destroy the first timer).

So, in short, each time that a timer is fired, we are recreating &
destroying a timer.

That, along with some problems in the way that we managed the timer
id's, prevent us for doing that:

UT_Timer *timer = UT_Timer::static_constructor(callback, data);
int id = timer->getIdentifier();
timer->set(1);
someOperationThatTakesMoreThatOneMillisecond();
UT_ASSERT(timer == UT_Timer::findTimer(id));  // This line will stop the
app!

furthermore, if we save id, and we don't save "timer", and we try to do
something like:

UT_Timer *timer = UT_Timer::findTimer(id);

timer will be NULL.

Is it intended behaviour?
I don't think so.  I will send a patch (as soon as I fix the bugs the
Jesper found in the autosave stuff) to fix it.  If somebody has further
comments, please speak up.

Cheers,

--
Joaquín Cuenca Abela
[EMAIL PROTECTED]

Reply via email to