Dmitry Timoshkov : server: GetQueueStatus should clear only checked queue changed bits.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Apr 21 09:57:27 CDT 2015


Module: wine
Branch: master
Commit: c0e876cb9e0f0d5663eddeda0fdbf7d2b491f9a9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c0e876cb9e0f0d5663eddeda0fdbf7d2b491f9a9

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Tue Apr 21 16:01:37 2015 +0800

server: GetQueueStatus should clear only checked queue changed bits.

---

 dlls/user32/input.c            | 4 ++--
 dlls/user32/tests/msg.c        | 1 -
 include/wine/server_protocol.h | 4 ++--
 server/protocol.def            | 2 +-
 server/queue.c                 | 2 +-
 server/request.h               | 2 +-
 server/trace.c                 | 2 +-
 7 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index 57594a7..4fcc531 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -434,7 +434,7 @@ DWORD WINAPI GetQueueStatus( UINT flags )
 
     SERVER_START_REQ( get_queue_status )
     {
-        req->clear = 1;
+        req->clear_bits = flags;
         wine_server_call( req );
         ret = MAKELONG( reply->changed_bits & flags, reply->wake_bits & flags );
     }
@@ -454,7 +454,7 @@ BOOL WINAPI GetInputState(void)
 
     SERVER_START_REQ( get_queue_status )
     {
-        req->clear = 0;
+        req->clear_bits = 0;
         wine_server_call( req );
         ret = reply->wake_bits & (QS_KEY | QS_MOUSEBUTTON);
     }
diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c
index 4794b12..50e1e2b 100644
--- a/dlls/user32/tests/msg.c
+++ b/dlls/user32/tests/msg.c
@@ -14699,7 +14699,6 @@ static void test_SendMessage_other_thread(int thread_n)
     }
 
     ret = GetQueueStatus(QS_SENDMESSAGE|QS_POSTMESSAGE);
-todo_wine
     ok(ret == MAKELONG(QS_POSTMESSAGE, QS_SENDMESSAGE|QS_POSTMESSAGE), "wrong status %08x\n", ret);
 
     trace("main: call GetMessage\n");
diff --git a/include/wine/server_protocol.h b/include/wine/server_protocol.h
index d27914a..37dad95 100644
--- a/include/wine/server_protocol.h
+++ b/include/wine/server_protocol.h
@@ -2822,7 +2822,7 @@ struct set_queue_mask_reply
 struct get_queue_status_request
 {
     struct request_header __header;
-    int          clear;
+    unsigned int clear_bits;
 };
 struct get_queue_status_reply
 {
@@ -5972,6 +5972,6 @@ union generic_reply
     struct terminate_job_reply terminate_job_reply;
 };
 
-#define SERVER_PROTOCOL_VERSION 467
+#define SERVER_PROTOCOL_VERSION 468
 
 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */
diff --git a/server/protocol.def b/server/protocol.def
index 54501e8..5d57f96 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -2059,7 +2059,7 @@ enum char_info_mode
 
 /* Get the current message queue status */
 @REQ(get_queue_status)
-    int          clear;        /* should we clear the change bits? */
+    unsigned int clear_bits;   /* should we clear the change bits? */
 @REPLY
     unsigned int wake_bits;    /* wake bits */
     unsigned int changed_bits; /* changed bits since last time */
diff --git a/server/queue.c b/server/queue.c
index 3a321cd..912df3a 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -2198,7 +2198,7 @@ DECL_HANDLER(get_queue_status)
     {
         reply->wake_bits    = queue->wake_bits;
         reply->changed_bits = queue->changed_bits;
-        if (req->clear) queue->changed_bits = 0;
+        queue->changed_bits &= ~req->clear_bits;
     }
     else reply->wake_bits = reply->changed_bits = 0;
 }
diff --git a/server/request.h b/server/request.h
index f94235f..daa5301 100644
--- a/server/request.h
+++ b/server/request.h
@@ -1416,7 +1416,7 @@ C_ASSERT( sizeof(struct set_queue_mask_request) == 24 );
 C_ASSERT( FIELD_OFFSET(struct set_queue_mask_reply, wake_bits) == 8 );
 C_ASSERT( FIELD_OFFSET(struct set_queue_mask_reply, changed_bits) == 12 );
 C_ASSERT( sizeof(struct set_queue_mask_reply) == 16 );
-C_ASSERT( FIELD_OFFSET(struct get_queue_status_request, clear) == 12 );
+C_ASSERT( FIELD_OFFSET(struct get_queue_status_request, clear_bits) == 12 );
 C_ASSERT( sizeof(struct get_queue_status_request) == 16 );
 C_ASSERT( FIELD_OFFSET(struct get_queue_status_reply, wake_bits) == 8 );
 C_ASSERT( FIELD_OFFSET(struct get_queue_status_reply, changed_bits) == 12 );
diff --git a/server/trace.c b/server/trace.c
index 20895b1..6ac0549 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -2546,7 +2546,7 @@ static void dump_set_queue_mask_reply( const struct set_queue_mask_reply *req )
 
 static void dump_get_queue_status_request( const struct get_queue_status_request *req )
 {
-    fprintf( stderr, " clear=%d", req->clear );
+    fprintf( stderr, " clear_bits=%08x", req->clear_bits );
 }
 
 static void dump_get_queue_status_reply( const struct get_queue_status_reply *req )




More information about the wine-cvs mailing list