Index: c/src/exec/score/src/coremsgclose.c
===================================================================
--- c/src/exec/score/src/coremsgclose.c	(revision d65c376845847ea7a697904b5222c39331bd56ec)
+++ c/src/exec/score/src/coremsgclose.c	(revision 9c1c778d56ef42f8f00dbd87b2bcf2293bf49380)
@@ -51,13 +51,24 @@
 )
 {
+
+  /*
+   *  This will flush blocked threads whether they were blocked on
+   *  a send or receive.
+   */
+
+  _Thread_queue_Flush(
+    &the_message_queue->Wait_queue,
+    remote_extract_callout,
+    status
+  );
+
+  /*
+   *  This removes all messages from the pending message queue.  Since
+   *  we just flushed all waiting threads, we don't have to worry about
+   *  the flush satisfying any blocked senders as a side-effect.
+   */
  
   if ( the_message_queue->number_of_pending_messages != 0 )
     (void) _CORE_message_queue_Flush_support( the_message_queue );
-  else
-    _Thread_queue_Flush(
-      &the_message_queue->Wait_queue,
-      remote_extract_callout,
-      status
-    );
 
   (void) _Workspace_Free( the_message_queue->message_buffers );
Index: c/src/exec/score/src/coremsgflush.c
===================================================================
--- c/src/exec/score/src/coremsgflush.c	(revision d65c376845847ea7a697904b5222c39331bd56ec)
+++ c/src/exec/score/src/coremsgflush.c	(revision 9c1c778d56ef42f8f00dbd87b2bcf2293bf49380)
@@ -34,6 +34,6 @@
  *  _CORE_message_queue_Flush
  *
- *  This function flushes the message_queue's task wait queue.  The number
- *  of messages flushed from the queue is returned.
+ *  This function flushes the message_queue's pending message queue.  The
+ *  number of messages flushed from the queue is returned.
  *
  *  Input parameters:
Index: c/src/exec/score/src/coremsgflushsupp.c
===================================================================
--- c/src/exec/score/src/coremsgflushsupp.c	(revision d65c376845847ea7a697904b5222c39331bd56ec)
+++ c/src/exec/score/src/coremsgflushsupp.c	(revision 9c1c778d56ef42f8f00dbd87b2bcf2293bf49380)
@@ -58,4 +58,31 @@
   unsigned32  count;
 
+  /*
+   *  Currently, RTEMS supports no API that has both flush and blocking
+   *  sends.  Thus, this routine assumes that there are no senders
+   *  blocked waiting to send messages.  In the event, that an API is
+   *  added that can flush a message queue when threads are blocked
+   *  waiting to send, there are two basic behaviors envisioned:
+   *
+   *  (1) The thread queue of pending senders is a logical extension
+   *  of the pending message queue.  In this case, it should be 
+   *  flushed using the _Thread_queue_Flush() service with a status
+   *  such as CORE_MESSAGE_QUEUE_SENDER_FLUSHED (which currently does
+   *  not exist).  This can be implemented without changing the "big-O"
+   *  of the message flushing part of the routine.
+   *
+   *  (2) Only the actual messages queued should be purged.  In this case,
+   *  the blocked sender threads must be allowed to send their messages.
+   *  In this case, the implementation will be forced to individually
+   *  dequeue the senders and queue their messages.  This will force
+   *  this routine to have "big O(n)" where n is the number of blocked
+   *  senders.  If there are more messages pending than senders blocked,
+   *  then the existing flush code can be used to dispose of the remaining
+   *  pending messages.
+   *
+   *  For now, though, we are very happy to have a small routine with 
+   *  fixed execution time that only deals with pending messages.
+   */
+
   _ISR_Disable( level );
     inactive_first      = the_message_queue->Inactive_messages.first;
Index: cpukit/score/src/coremsgclose.c
===================================================================
--- cpukit/score/src/coremsgclose.c	(revision d65c376845847ea7a697904b5222c39331bd56ec)
+++ cpukit/score/src/coremsgclose.c	(revision 9c1c778d56ef42f8f00dbd87b2bcf2293bf49380)
@@ -51,13 +51,24 @@
 )
 {
+
+  /*
+   *  This will flush blocked threads whether they were blocked on
+   *  a send or receive.
+   */
+
+  _Thread_queue_Flush(
+    &the_message_queue->Wait_queue,
+    remote_extract_callout,
+    status
+  );
+
+  /*
+   *  This removes all messages from the pending message queue.  Since
+   *  we just flushed all waiting threads, we don't have to worry about
+   *  the flush satisfying any blocked senders as a side-effect.
+   */
  
   if ( the_message_queue->number_of_pending_messages != 0 )
     (void) _CORE_message_queue_Flush_support( the_message_queue );
-  else
-    _Thread_queue_Flush(
-      &the_message_queue->Wait_queue,
-      remote_extract_callout,
-      status
-    );
 
   (void) _Workspace_Free( the_message_queue->message_buffers );
Index: cpukit/score/src/coremsgflush.c
===================================================================
--- cpukit/score/src/coremsgflush.c	(revision d65c376845847ea7a697904b5222c39331bd56ec)
+++ cpukit/score/src/coremsgflush.c	(revision 9c1c778d56ef42f8f00dbd87b2bcf2293bf49380)
@@ -34,6 +34,6 @@
  *  _CORE_message_queue_Flush
  *
- *  This function flushes the message_queue's task wait queue.  The number
- *  of messages flushed from the queue is returned.
+ *  This function flushes the message_queue's pending message queue.  The
+ *  number of messages flushed from the queue is returned.
  *
  *  Input parameters:
Index: cpukit/score/src/coremsgflushsupp.c
===================================================================
--- cpukit/score/src/coremsgflushsupp.c	(revision d65c376845847ea7a697904b5222c39331bd56ec)
+++ cpukit/score/src/coremsgflushsupp.c	(revision 9c1c778d56ef42f8f00dbd87b2bcf2293bf49380)
@@ -58,4 +58,31 @@
   unsigned32  count;
 
+  /*
+   *  Currently, RTEMS supports no API that has both flush and blocking
+   *  sends.  Thus, this routine assumes that there are no senders
+   *  blocked waiting to send messages.  In the event, that an API is
+   *  added that can flush a message queue when threads are blocked
+   *  waiting to send, there are two basic behaviors envisioned:
+   *
+   *  (1) The thread queue of pending senders is a logical extension
+   *  of the pending message queue.  In this case, it should be 
+   *  flushed using the _Thread_queue_Flush() service with a status
+   *  such as CORE_MESSAGE_QUEUE_SENDER_FLUSHED (which currently does
+   *  not exist).  This can be implemented without changing the "big-O"
+   *  of the message flushing part of the routine.
+   *
+   *  (2) Only the actual messages queued should be purged.  In this case,
+   *  the blocked sender threads must be allowed to send their messages.
+   *  In this case, the implementation will be forced to individually
+   *  dequeue the senders and queue their messages.  This will force
+   *  this routine to have "big O(n)" where n is the number of blocked
+   *  senders.  If there are more messages pending than senders blocked,
+   *  then the existing flush code can be used to dispose of the remaining
+   *  pending messages.
+   *
+   *  For now, though, we are very happy to have a small routine with 
+   *  fixed execution time that only deals with pending messages.
+   */
+
   _ISR_Disable( level );
     inactive_first      = the_message_queue->Inactive_messages.first;
