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:
parent
4647eded7c
commit
bc8de8a331
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user