Fixed bug that could cause SendMessage to return too early in certain
cases.

diff --git a/server/protocol.def b/server/protocol.def
index f1a4edb..3c27b38 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -1589,6 +1589,7 @@
 
 /* Reply to a sent message */
 @REQ(reply_message)
+    int             type;      /* type of original message */
     unsigned int    result;    /* message result */
     int             remove;    /* should we remove the message? */
     VARARG(data,bytes);        /* message data for sent messages */
diff --git a/server/queue.c b/server/queue.c
index a441fdb..5315886 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -1380,15 +1380,15 @@
         set_error( STATUS_ACCESS_DENIED );
         return;
     }
-    if (current->queue->recv_result)
-        reply_message( current->queue, req->result, 0, req->remove,
-                       get_req_data(), get_req_data_size() );
-    else
+    if (req->type == MSG_HARDWARE)
     {
         struct thread_input *input = current->queue->input;
         if (input->msg_thread == current) release_hardware_message( current, req->remove );
         else set_error( STATUS_ACCESS_DENIED );
     }
+    else if (current->queue->recv_result)
+        reply_message( current->queue, req->result, 0, req->remove,
+                       get_req_data(), get_req_data_size() );
 }
 
 
diff --git a/server/trace.c b/server/trace.c
index b9c6f1c..33a93a1 100644
--- a/server/trace.c
+++ b/server/trace.c
@@ -1835,6 +1835,7 @@
 
 static void dump_reply_message_request( const struct reply_message_request *req )
 {
+    fprintf( stderr, " type=%d,", req->type );
     fprintf( stderr, " result=%08x,", req->result );
     fprintf( stderr, " remove=%d,", req->remove );
     fprintf( stderr, " data=" );