asyncqueue: fix timeout math on 32bit systems

88182d375e caught this issue in
g_async_queue_timed_pop() but failed to fix the same bug in the _unlocked()
variant.

This is only a problem on 32bit systems.  On 64bit systems, the tv_sec
in a timeval is already 64 bits, so no overflow occurs.

https://bugzilla.gnome.org/show_bug.cgi?id=722604
This commit is contained in:
Ryan Lortie 2014-02-23 01:11:50 -05:00
parent 4af9b8e9cb
commit 356fe2cec6

View File

@ -600,8 +600,7 @@ g_async_queue_timed_pop (GAsyncQueue *queue,
if (end_time != NULL) if (end_time != NULL)
{ {
m_end_time = g_get_monotonic_time () + m_end_time = g_get_monotonic_time () +
((gint64)end_time->tv_sec * G_USEC_PER_SEC + end_time->tv_usec - ((gint64) end_time->tv_sec * G_USEC_PER_SEC + end_time->tv_usec - g_get_real_time ());
g_get_real_time ());
} }
else else
m_end_time = -1; m_end_time = -1;
@ -644,8 +643,7 @@ g_async_queue_timed_pop_unlocked (GAsyncQueue *queue,
if (end_time != NULL) if (end_time != NULL)
{ {
m_end_time = g_get_monotonic_time () + m_end_time = g_get_monotonic_time () +
(end_time->tv_sec * G_USEC_PER_SEC + end_time->tv_usec - ((gint64) end_time->tv_sec * G_USEC_PER_SEC + end_time->tv_usec - g_get_real_time ());
g_get_real_time ());
} }
else else
m_end_time = -1; m_end_time = -1;