| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mojo/edk/system/local_message_pipe_endpoint.h" | 5 #include "mojo/edk/system/local_message_pipe_endpoint.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 | 150 |
| 151 MojoResult LocalMessagePipeEndpoint::AddAwakable( | 151 MojoResult LocalMessagePipeEndpoint::AddAwakable( |
| 152 Awakable* awakable, | 152 Awakable* awakable, |
| 153 MojoHandleSignals signals, | 153 MojoHandleSignals signals, |
| 154 bool force, | 154 bool force, |
| 155 uint64_t context, | 155 uint64_t context, |
| 156 HandleSignalsState* signals_state) { | 156 HandleSignalsState* signals_state) { |
| 157 DCHECK(is_open_); | 157 DCHECK(is_open_); |
| 158 | 158 |
| 159 HandleSignalsState state = GetHandleSignalsState(); | 159 HandleSignalsState state = GetHandleSignalsState(); |
| 160 if (signals_state) |
| 161 *signals_state = state; |
| 160 if (state.satisfies(signals)) { | 162 if (state.satisfies(signals)) { |
| 161 if (force) | 163 if (force) |
| 162 awakable_list_.Add(awakable, signals, context); | 164 awakable_list_.Add(awakable, signals, context); |
| 163 if (signals_state) | |
| 164 *signals_state = state; | |
| 165 return MOJO_RESULT_ALREADY_EXISTS; | 165 return MOJO_RESULT_ALREADY_EXISTS; |
| 166 } | 166 } |
| 167 if (!state.can_satisfy(signals)) { | 167 if (!state.can_satisfy(signals)) |
| 168 if (signals_state) | |
| 169 *signals_state = state; | |
| 170 return MOJO_RESULT_FAILED_PRECONDITION; | 168 return MOJO_RESULT_FAILED_PRECONDITION; |
| 171 } | |
| 172 | 169 |
| 173 awakable_list_.Add(awakable, signals, context); | 170 awakable_list_.Add(awakable, signals, context); |
| 174 return MOJO_RESULT_OK; | 171 return MOJO_RESULT_OK; |
| 175 } | 172 } |
| 176 | 173 |
| 177 void LocalMessagePipeEndpoint::RemoveAwakable( | 174 void LocalMessagePipeEndpoint::RemoveAwakable( |
| 178 Awakable* awakable, | 175 Awakable* awakable, |
| 179 HandleSignalsState* signals_state) { | 176 HandleSignalsState* signals_state) { |
| 180 DCHECK(is_open_); | 177 DCHECK(is_open_); |
| 181 awakable_list_.Remove(awakable); | 178 awakable_list_.Remove(awakable); |
| 182 if (signals_state) | 179 if (signals_state) |
| 183 *signals_state = GetHandleSignalsState(); | 180 *signals_state = GetHandleSignalsState(); |
| 184 } | 181 } |
| 185 | 182 |
| 186 void LocalMessagePipeEndpoint::RemoveAwakableWithContext( | 183 void LocalMessagePipeEndpoint::RemoveAwakableWithContext( |
| 187 Awakable* awakable, | 184 Awakable* awakable, |
| 188 uint64_t context, | 185 uint64_t context, |
| 189 HandleSignalsState* signals_state) { | 186 HandleSignalsState* signals_state) { |
| 190 DCHECK(is_open_); | 187 DCHECK(is_open_); |
| 191 awakable_list_.RemoveWithContext(awakable, context); | 188 awakable_list_.RemoveWithContext(awakable, context); |
| 192 if (signals_state) | 189 if (signals_state) |
| 193 *signals_state = GetHandleSignalsState(); | 190 *signals_state = GetHandleSignalsState(); |
| 194 } | 191 } |
| 195 | 192 |
| 196 } // namespace system | 193 } // namespace system |
| 197 } // namespace mojo | 194 } // namespace mojo |
| OLD | NEW |