Moved queue paint count to the server. Removed a few no longer used
routines.
diff --git a/server/queue.c b/server/queue.c
index ccbd1ea..7e94cde 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -69,6 +69,7 @@
unsigned int wake_mask; /* wakeup mask */
unsigned int changed_bits; /* changed wakeup bits */
unsigned int changed_mask; /* changed wakeup mask */
+ int paint_count; /* pending paint messages count */
struct message_list msg_list[NB_MSG_KINDS]; /* lists of messages */
struct message_result *send_result; /* stack of sent messages waiting for result */
struct message_result *recv_result; /* stack of received messages waiting for result */
@@ -114,6 +115,7 @@
queue->wake_mask = 0;
queue->changed_bits = 0;
queue->changed_mask = 0;
+ queue->paint_count = 0;
queue->send_result = NULL;
queue->recv_result = NULL;
queue->first_timer = NULL;
@@ -581,18 +583,27 @@
}
-/* set the message queue wake bits */
-DECL_HANDLER(set_queue_bits)
+/* increment the message queue paint count */
+DECL_HANDLER(inc_queue_paint_count)
{
- struct msg_queue *queue = (struct msg_queue *)get_handle_obj( current->process, req->handle,
- 0, &msg_queue_ops );
- if (queue)
+ struct msg_queue *queue;
+ struct thread *thread = get_thread_from_id( req->id );
+
+ if (!thread) return;
+
+ if ((queue = thread->queue))
{
- req->changed_mask = queue->changed_mask;
- if (!req->mask_cond || (queue->changed_mask & req->mask_cond))
- change_queue_bits( queue, req->set, req->clear );
- release_object( queue );
+ if ((queue->paint_count += req->incr) < 0) queue->paint_count = 0;
+
+ if (queue->paint_count)
+ change_queue_bits( queue, QS_PAINT, 0 );
+ else
+ change_queue_bits( queue, 0, QS_PAINT );
}
+ else set_error( STATUS_INVALID_PARAMETER );
+
+ release_object( thread );
+
}