1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-25 01:02:24 +00:00

Another fix to timer handling.

Robert de Bath points out that failure to remove the timer whose
callback returned FALSE may not have been the cause of runaway timer
explosion; another possibility is that a function called from
timer_trigger()'s call to run_timers() has already set a timer up by
the time run_timers() returns, and then we set another one up on top
of it. Fix that too.

[originally from svn r10206]
This commit is contained in:
Simon Tatham 2014-07-13 07:49:29 +00:00
parent 4647eded7c
commit bc8de8a331

View File

@ -1477,15 +1477,20 @@ static gint timer_trigger(gpointer data)
long ticks;
/*
* Remove the timer we got here on; if we need another one, we'll
* set it up below.
* Destroy the timer we got here on.
*/
if (timer_id) {
gtk_timeout_remove(timer_id);
timer_id = 0;
}
if (run_timers(now, &next)) {
/*
* run_timers() may cause a call to timer_change_notify, in which
* case a new timer will already have been set up and left in
* timer_id. If it hasn't, and run_timers reports that some timing
* still needs to be done, we do it ourselves.
*/
if (run_timers(now, &next) && !timer_id) {
then = now;
now = GETTICKCOUNT();
if (now - then > next - then)