diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2021-07-07 15:35:14 +0200 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2021-07-07 15:35:14 +0200 |
| commit | 87475c20d6cc81912e58f21369b101271d4732f6 (patch) | |
| tree | 0b06a315ca15cc3223fe7c9d67fd998cd927c4af /src/drivers | |
| parent | 1008cdfab27609a6f6a0e82dadad9fd9cbd8a66d (diff) | |
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.
In the future this may be documented as the standard behavior.
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx index 1838a73f3..2caf174d2 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx +++ b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx @@ -518,6 +518,10 @@ void Fl_Cocoa_Screen_Driver::add_timeout(double time, Fl_Timeout_Handler cb, voi void Fl_Cocoa_Screen_Driver::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; |
