Index: mojo/system/local_message_pipe_endpoint.h |
diff --git a/mojo/system/local_message_pipe_endpoint.h b/mojo/system/local_message_pipe_endpoint.h |
index 99ebec25c63506eae14134ff495813f1613bdb2f..6961827fd917eb3c5595b5cc30c7c51a9403139c 100644 |
--- a/mojo/system/local_message_pipe_endpoint.h |
+++ b/mojo/system/local_message_pipe_endpoint.h |
@@ -6,6 +6,7 @@ |
#define MOJO_SYSTEM_LOCAL_MESSAGE_PIPE_ENDPOINT_H_ |
#include <deque> |
+#include <vector> |
#include "base/basictypes.h" |
#include "base/compiler_specific.h" |
@@ -25,9 +26,12 @@ class MOJO_SYSTEM_EXPORT LocalMessagePipeEndpoint : public MessagePipeEndpoint { |
// |MessagePipeEndpoint| implementation: |
virtual void Close() OVERRIDE; |
virtual bool OnPeerClose() OVERRIDE; |
- virtual MojoResult EnqueueMessage( |
- MessageInTransit* message, |
+ virtual MojoResult CanEnqueueMessage( |
+ const MessageInTransit* message, |
const std::vector<Dispatcher*>* dispatchers) OVERRIDE; |
+ virtual void EnqueueMessage( |
+ MessageInTransit* message, |
+ std::vector<scoped_refptr<Dispatcher> >* dispatchers) OVERRIDE; |
// There's a dispatcher for |LocalMessagePipeEndpoint|s, so we have to |
// implement/override these: |
@@ -43,13 +47,30 @@ class MOJO_SYSTEM_EXPORT LocalMessagePipeEndpoint : public MessagePipeEndpoint { |
virtual void RemoveWaiter(Waiter* waiter) OVERRIDE; |
private: |
+ struct MessageQueueEntry { |
+ MessageQueueEntry(); |
+ // Provide an explicit copy constructor, so that we can use this directly in |
+ // a (C++03) STL container. However, we only allow the case where |other| is |
+ // empty. (We don't provide a nontrivial constructor, because it wouldn't be |
+ // useful with these constraints. This will change with C++11.) |
+ MessageQueueEntry(const MessageQueueEntry& other); |
+ ~MessageQueueEntry(); |
+ |
+ MessageInTransit* message; |
+ std::vector<scoped_refptr<Dispatcher> > dispatchers; |
+ |
+ private: |
+ // We don't need assignment, however. |
+ DISALLOW_ASSIGN(MessageQueueEntry); |
+ }; |
+ |
MojoWaitFlags SatisfiedFlags(); |
MojoWaitFlags SatisfiableFlags(); |
bool is_open_; |
bool is_peer_open_; |
- std::deque<MessageInTransit*> message_queue_; |
+ std::deque<MessageQueueEntry> message_queue_; |
WaiterList waiter_list_; |
DISALLOW_COPY_AND_ASSIGN(LocalMessagePipeEndpoint); |