Added support for the QS_ALLPOSTMESSAGE flag.
diff --git a/server/queue.c b/server/queue.c
index 8827795..be80c85 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -471,7 +471,7 @@
if (list_empty( &queue->msg_list[kind] )) clear_queue_bits( queue, QS_SENDMESSAGE );
break;
case POST_MESSAGE:
- if (list_empty( &queue->msg_list[kind] )) clear_queue_bits( queue, QS_POSTMESSAGE );
+ if (list_empty( &queue->msg_list[kind] )) clear_queue_bits( queue, QS_POSTMESSAGE|QS_ALLPOSTMESSAGE );
break;
}
free_message( msg );
@@ -1420,7 +1420,7 @@
msg->data_size = 0;
list_add_tail( &thread->queue->msg_list[POST_MESSAGE], &msg->entry );
- set_queue_bits( thread->queue, QS_POSTMESSAGE );
+ set_queue_bits( thread->queue, QS_POSTMESSAGE|QS_ALLPOSTMESSAGE );
}
release_object( thread );
}
@@ -1592,7 +1592,7 @@
break;
}
list_add_tail( &recv_queue->msg_list[POST_MESSAGE], &msg->entry );
- set_queue_bits( recv_queue, QS_POSTMESSAGE );
+ set_queue_bits( recv_queue, QS_POSTMESSAGE|QS_ALLPOSTMESSAGE );
break;
case MSG_HARDWARE:
queue_hardware_message( recv_queue, msg );
@@ -1631,7 +1631,8 @@
if (req->flags & GET_MSG_SENT_ONLY) goto done; /* nothing else to check */
/* clear changed bits so we can wait on them if we don't find a message */
- queue->changed_bits = 0;
+ if (req->get_first == 0 && req->get_last == ~0U) queue->changed_bits = 0;
+ else queue->changed_bits &= QS_ALLPOSTMESSAGE;
/* then check for posted messages */
if (get_posted_message( queue, get_win, req->get_first, req->get_last, req->flags, reply ))