[GLib] Avoid gint64, std::chrono::microseconds overflows in RunLoop::TimerBase
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 5 Nov 2015 14:51:07 +0000 (14:51 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 5 Nov 2015 14:51:07 +0000 (14:51 +0000)
commitb1d93eb7c937ceac64343c42a0dec2f4b86b3ed5
tree99ec88a9bcc4de1af6aa19b0285f12f2a4fe6d3f
parenta55c1ff251744c9d9ceda141bd5d46f77df4b0d6
[GLib] Avoid gint64, std::chrono::microseconds overflows in RunLoop::TimerBase
https://bugs.webkit.org/show_bug.cgi?id=150930

Reviewed by Carlos Garcia Campos.

In RunLoop::TimerBase::start(), avoid overflowing the std::chrono::microseconds
value in case the passed-in fire interval (in seconds) is too large (e.g. when
std::chrono::microseconds::max() is used as the desired interval). This is
achieved by using the passed-in fire interval, converted in microseconds, only
if the value of this interval is smaller than std::chrono::microseconds::max().

In RunLoop::TimerBase::updateReadyTime(), the zero-delay is still considered a
short cut, but we use G_MAXINT64 in case the sum of the current time and the
desired fire interval (now in microseconds) would overflow.

* wtf/glib/RunLoopGLib.cpp:
(WTF::RunLoop::TimerBase::updateReadyTime):
(WTF::RunLoop::TimerBase::start):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@192058 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WTF/ChangeLog
Source/WTF/wtf/glib/RunLoopGLib.cpp