server: Change the timeout handling to use NT-style 64-bit timeouts everywhere.
diff --git a/server/queue.c b/server/queue.c
index 85e0856..3220fcb 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -85,7 +85,7 @@
struct timer
{
struct list entry; /* entry in timer list */
- struct timeval when; /* next expiration */
+ timeout_t when; /* next expiration */
unsigned int rate; /* timer rate in ms */
user_handle_t win; /* window handle */
unsigned int msg; /* message to post */
@@ -131,7 +131,7 @@
struct timeout_user *timeout; /* timeout for next timer to expire */
struct thread_input *input; /* thread input descriptor */
struct hook_table *hooks; /* hook table */
- struct timeval last_get_msg; /* time of last get message call */
+ timeout_t last_get_msg; /* time of last get message call */
};
static void msg_queue_dump( struct object *obj, int verbose );
@@ -536,7 +536,7 @@
/* allocate and fill a message result structure */
static struct message_result *alloc_message_result( struct msg_queue *send_queue,
struct msg_queue *recv_queue,
- struct message *msg, int timeout )
+ struct message *msg, timeout_t timeout )
{
struct message_result *result = mem_alloc( sizeof(*result) );
if (result)
@@ -583,12 +583,8 @@
list_add_head( &send_queue->send_result, &result->sender_entry );
}
- if (timeout)
- {
- struct timeval when = current_time;
- add_timeout( &when, timeout );
- result->timeout = add_timeout_user( &when, result_timeout, result );
- }
+ if (timeout != TIMEOUT_INFINITE)
+ result->timeout = add_timeout_user( timeout, result_timeout, result );
}
return result;
}
@@ -766,7 +762,7 @@
{
struct wait_queue_entry *entry;
- if (current_time.tv_sec - queue->last_get_msg.tv_sec <= 5)
+ if (current_time - queue->last_get_msg <= 5 * TICKS_PER_SEC)
return 0; /* less than 5 seconds since last get message -> not hung */
LIST_FOR_EACH_ENTRY( entry, &queue->obj.wait_queue, struct wait_queue_entry, entry )
@@ -997,7 +993,7 @@
if ((ptr = list_head( &queue->pending_timers )))
{
struct timer *timer = LIST_ENTRY( ptr, struct timer, entry );
- queue->timeout = add_timeout_user( &timer->when, timer_callback, queue );
+ queue->timeout = add_timeout_user( timer->when, timer_callback, queue );
}
/* set/clear QS_TIMER bit */
if (list_empty( &queue->expired_timers ))
@@ -1049,7 +1045,7 @@
for (ptr = queue->pending_timers.next; ptr != &queue->pending_timers; ptr = ptr->next)
{
struct timer *t = LIST_ENTRY( ptr, struct timer, entry );
- if (!time_before( &t->when, &timer->when )) break;
+ if (t->when >= timer->when) break;
}
list_add_before( ptr, &timer->entry );
}
@@ -1066,7 +1062,7 @@
static void restart_timer( struct msg_queue *queue, struct timer *timer )
{
list_remove( &timer->entry );
- while (!time_before( ¤t_time, &timer->when )) add_timeout( &timer->when, timer->rate );
+ while (timer->when <= current_time) timer->when += (timeout_t)timer->rate * 10000;
link_timer( queue, timer );
set_next_timer( queue );
}
@@ -1098,8 +1094,7 @@
if (timer)
{
timer->rate = max( rate, 1 );
- timer->when = current_time;
- add_timeout( &timer->when, rate );
+ timer->when = current_time + (timeout_t)timer->rate * 10000;
link_timer( queue, timer );
/* check if we replaced the next timer */
if (list_head( &queue->pending_timers ) == &timer->entry) set_next_timer( queue );