From: Rémi Bernon rbernon@codeweavers.com
The masks are checked in win32u, and updated if necessary, right before waiting for messages. They tell wineserver which of the bits we want the queue to be signaled for in the following wait.
There should be no need to clear the mask after waiting, and doing it will always force clients to update them again on the next wait, causing an additional request. --- server/queue.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/server/queue.c b/server/queue.c index 0e0339109fa..9994e0fbe6c 100644 --- a/server/queue.c +++ b/server/queue.c @@ -1348,14 +1348,6 @@ static int msg_queue_signaled( struct object *obj, struct wait_queue_entry *entr static void msg_queue_satisfied( struct object *obj, struct wait_queue_entry *entry ) { struct msg_queue *queue = (struct msg_queue *)obj; - queue_shm_t *queue_shm = queue->shared; - - SHARED_WRITE_BEGIN( queue_shm, queue_shm_t ) - { - shared->wake_mask = 0; - shared->changed_mask = 0; - } - SHARED_WRITE_END; reset_queue_sync( queue ); }
@@ -3180,7 +3172,7 @@ DECL_HANDLER(set_queue_mask)
if (!get_queue_status( queue )) reset_queue_sync( queue ); else if (!req->skip_wait) signal_queue_sync( queue ); - else msg_queue_satisfied( &queue->obj, NULL ); + else reset_queue_sync( queue ); } }