Index: mojo/dart/embedder/mojo_natives.cc |
diff --git a/mojo/dart/embedder/mojo_natives.cc b/mojo/dart/embedder/mojo_natives.cc |
index 02eb5956ab4c5495bbe69f9989bfae0d028cd7ab..cd9bbd303f4eb9c7c666f792faa81620990ce10c 100644 |
--- a/mojo/dart/embedder/mojo_natives.cc |
+++ b/mojo/dart/embedder/mojo_natives.cc |
@@ -723,21 +723,34 @@ void MojoMessagePipe_Read(Dart_NativeArguments arguments) { |
} |
struct MojoWaitManyState { |
+ MojoWaitManyState() {} |
+ |
std::vector<uint32_t> handles; |
std::vector<uint32_t> signals; |
std::vector<uint32_t> out_index; |
std::vector<MojoHandleSignalsState> out_signals; |
+ |
+ static MojoWaitManyState* GetInstance(); |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(MojoWaitManyState); |
}; |
// This global is safe because it is only accessed by the single handle watcher |
// isolate. If multiple handle watcher isolates are ever needed, it will need |
// to be replicated. |
-static MojoWaitManyState handle_watcher_wait_state; |
+MojoWaitManyState* MojoWaitManyState::GetInstance() { |
+ static MojoWaitManyState* state = new MojoWaitManyState; |
+ return state; |
+} |
void MojoHandleWatcher_GrowStateArrays(Dart_NativeArguments arguments) { |
int64_t new_length; |
CHECK_INTEGER_ARGUMENT(arguments, 0, &new_length, InvalidArgument); |
+ MojoWaitManyState& handle_watcher_wait_state = |
+ *MojoWaitManyState::GetInstance(); |
+ |
handle_watcher_wait_state.handles.resize(new_length); |
handle_watcher_wait_state.signals.resize(new_length); |
handle_watcher_wait_state.out_index.resize(1); |
@@ -801,6 +814,9 @@ void MojoHandleWatcher_WaitMany(Dart_NativeArguments arguments) { |
CHECK_INTEGER_ARGUMENT(arguments, 0, &handles_len, InvalidArgument); |
CHECK_INTEGER_ARGUMENT(arguments, 1, &deadline, InvalidArgument); |
+ MojoWaitManyState& handle_watcher_wait_state = |
+ *MojoWaitManyState::GetInstance(); |
+ |
uint32_t* handles = handle_watcher_wait_state.handles.data(); |
uint32_t* signals = handle_watcher_wait_state.signals.data(); |
uint32_t* out_index = handle_watcher_wait_state.out_index.data(); |