| Index: mojo/public/cpp/bindings/lib/connector.h
|
| diff --git a/mojo/public/cpp/bindings/lib/connector.h b/mojo/public/cpp/bindings/lib/connector.h
|
| index 3978171101ce0d8f7368954b37ee29171a4e3b67..8e664a196cd7811ebb1ea10bd9d931e89652dc89 100644
|
| --- a/mojo/public/cpp/bindings/lib/connector.h
|
| +++ b/mojo/public/cpp/bindings/lib/connector.h
|
| @@ -6,6 +6,7 @@
|
| #define MOJO_PUBLIC_CPP_BINDINGS_LIB_CONNECTOR_H_
|
|
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| #include "base/threading/thread_checker.h"
|
| #include "mojo/public/c/environment/async_waiter.h"
|
| #include "mojo/public/cpp/bindings/callback.h"
|
| @@ -121,9 +122,31 @@ class Connector : public MessageReceiver {
|
| return message_pipe_.get();
|
| }
|
|
|
| + // Requests to register |message_pipe_| with SyncHandleWatcher whenever this
|
| + // instance is expecting incoming messages.
|
| + //
|
| + // Please note that UnregisterSyncHandleWatch() needs to be called as many
|
| + // times as successful RegisterSyncHandleWatch() calls in order to cancel the
|
| + // effect.
|
| + bool RegisterSyncHandleWatch();
|
| + void UnregisterSyncHandleWatch();
|
| +
|
| + // Watches all handles registered with SyncHandleWatcher on the same thread.
|
| + // The method returns true when |*should_stop| is set to true; returns false
|
| + // when any failure occurs during the watch, including |message_pipe_| is
|
| + // closed.
|
| + bool RunSyncHandleWatch(const bool* should_stop);
|
| +
|
| + // Whether currently the control flow is inside the sync handle watcher
|
| + // callback.
|
| + bool during_sync_handle_watcher_callback() const {
|
| + return sync_handle_watcher_callback_count_ > 0;
|
| + }
|
| +
|
| private:
|
| static void CallOnHandleReady(void* closure, MojoResult result);
|
| - void OnHandleReady(MojoResult result);
|
| + void OnSyncHandleWatcherHandleReady(MojoResult result);
|
| + void OnHandleReadyInternal(MojoResult result);
|
|
|
| void WaitToReadMore();
|
|
|
| @@ -155,17 +178,22 @@ class Connector : public MessageReceiver {
|
|
|
| bool paused_;
|
|
|
| - // If non-null, this will be set to true when the Connector is destroyed. We
|
| - // use this flag to allow for the Connector to be destroyed as a side-effect
|
| - // of dispatching an incoming message.
|
| - bool* destroyed_flag_;
|
| -
|
| // If sending messages is allowed from multiple threads, |lock_| is used to
|
| // protect modifications to |message_pipe_| and |drop_writes_|.
|
| scoped_ptr<base::Lock> lock_;
|
|
|
| + // If non-zero, |message_pipe_| should be registered with SyncHandleWatcher.
|
| + size_t register_sync_handle_watch_count_;
|
| + // Whether |message_pipe_| has been registered with SyncHandleWatcher.
|
| + bool registered_with_sync_handle_watcher_;
|
| + // If non-zero, currently the control flow is inside the sync handle watcher
|
| + // callback.
|
| + size_t sync_handle_watcher_callback_count_;
|
| +
|
| base::ThreadChecker thread_checker_;
|
|
|
| + base::WeakPtrFactory<Connector> weak_factory_;
|
| +
|
| MOJO_DISALLOW_COPY_AND_ASSIGN(Connector);
|
| };
|
|
|
|
|