macOS: Fix a timer inconsistency and prevent a crash
Calling Fl::repeat_timeout() instead of Fl::add_timeout() to create
a timer would crash on macOS but fall back to Fl::add_timeout() on
Windows and Unix/Linux. Although this is documented as "undefined
behavior" a crash should always be avoided and the fallback is now
consistent on all major platforms.
Backported from 1.4: 87475c20d6
This commit is contained in:
parent
371eb65654
commit
f091b18adf
@ -1,9 +1,7 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// MacOS-Cocoa specific code for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
// Copyright 1998-2020 by Bill Spitzak and others.
|
||||
// Copyright 1998-2021 by Bill Spitzak and others.
|
||||
//
|
||||
// This library is free software. Distribution and use rights are outlined in
|
||||
// the file "COPYING" which should have been included with this file. If this
|
||||
@ -613,6 +611,10 @@ void Fl::add_timeout(double time, Fl_Timeout_Handler cb, void* data)
|
||||
|
||||
void Fl::repeat_timeout(double time, Fl_Timeout_Handler cb, void* data)
|
||||
{
|
||||
if (!current_timer) {
|
||||
add_timeout(time, cb, data);
|
||||
return;
|
||||
}
|
||||
// k = how many times 'time' seconds after the last scheduled timeout until the future
|
||||
double k = ceil( (CFAbsoluteTimeGetCurrent() - current_timer->next_timeout) / time);
|
||||
if (k < 1) k = 1;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user