asyncqueue: fix timeout math on 32bit systems
authorRyan Lortie <desrt@desrt.ca>
Sun, 23 Feb 2014 06:11:50 +0000 (01:11 -0500)
committerRyan Lortie <desrt@desrt.ca>
Sun, 23 Feb 2014 06:14:27 +0000 (01:14 -0500)
88182d375e13ae6519a288d5295220c83ca27e73 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

glib/gasyncqueue.c

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