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=" );