Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(404)

Side by Side Diff: mojo/edk/system/wait_set_dispatcher.cc

Issue 1748503002: [mojo-edk] Add MojoWatch and MojoCancelWatch APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/wait_set_dispatcher.h" 5 #include "mojo/edk/system/wait_set_dispatcher.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 25 matching lines...) Expand all
36 36
37 WaitSetDispatcher::WaitState::~WaitState() {} 37 WaitSetDispatcher::WaitState::~WaitState() {}
38 38
39 WaitSetDispatcher::WaitSetDispatcher() 39 WaitSetDispatcher::WaitSetDispatcher()
40 : waiter_(new WaitSetDispatcher::Waiter(this)) {} 40 : waiter_(new WaitSetDispatcher::Waiter(this)) {}
41 41
42 Dispatcher::Type WaitSetDispatcher::GetType() const { 42 Dispatcher::Type WaitSetDispatcher::GetType() const {
43 return Type::WAIT_SET; 43 return Type::WAIT_SET;
44 } 44 }
45 45
46 MojoResult WaitSetDispatcher::Close() { 46 MojoResult WaitSetDispatcher::Close(RequestContext* request_context) {
47 base::AutoLock lock(lock_); 47 base::AutoLock lock(lock_);
48 48
49 if (is_closed_) 49 if (is_closed_)
50 return MOJO_RESULT_INVALID_ARGUMENT; 50 return MOJO_RESULT_INVALID_ARGUMENT;
51 is_closed_ = true; 51 is_closed_ = true;
52 52
53 { 53 {
54 base::AutoLock locker(awakable_lock_); 54 base::AutoLock locker(awakable_lock_);
55 awakable_list_.CancelAll(); 55 awakable_list_.CancelAll();
56 } 56 }
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 void WaitSetDispatcher::RemoveAwakable(Awakable* awakable, 271 void WaitSetDispatcher::RemoveAwakable(Awakable* awakable,
272 HandleSignalsState* signals_state) { 272 HandleSignalsState* signals_state) {
273 { 273 {
274 base::AutoLock locker(awakable_lock_); 274 base::AutoLock locker(awakable_lock_);
275 awakable_list_.Remove(awakable); 275 awakable_list_.Remove(awakable);
276 } 276 }
277 if (signals_state) 277 if (signals_state)
278 *signals_state = GetHandleSignalsState(); 278 *signals_state = GetHandleSignalsState();
279 } 279 }
280 280
281 bool WaitSetDispatcher::BeginTransit() { 281 bool WaitSetDispatcher::BeginTransit(RequestContext* request_context) {
282 // You can't transfer wait sets! 282 // You can't transfer wait sets!
283 return false; 283 return false;
284 } 284 }
285 285
286 WaitSetDispatcher::~WaitSetDispatcher() { 286 WaitSetDispatcher::~WaitSetDispatcher() {
287 DCHECK(waiting_dispatchers_.empty()); 287 DCHECK(waiting_dispatchers_.empty());
288 DCHECK(awoken_queue_.empty()); 288 DCHECK(awoken_queue_.empty());
289 DCHECK(processed_dispatchers_.empty()); 289 DCHECK(processed_dispatchers_.empty());
290 } 290 }
291 291
292 void WaitSetDispatcher::WakeDispatcher(MojoResult result, uintptr_t context) { 292 void WaitSetDispatcher::WakeDispatcher(MojoResult result, uintptr_t context) {
293 { 293 {
294 base::AutoLock locker(awoken_lock_); 294 base::AutoLock locker(awoken_lock_);
295 295
296 if (result == MOJO_RESULT_ALREADY_EXISTS) 296 if (result == MOJO_RESULT_ALREADY_EXISTS)
297 result = MOJO_RESULT_OK; 297 result = MOJO_RESULT_OK;
298 298
299 awoken_queue_.push_back(std::make_pair(context, result)); 299 awoken_queue_.push_back(std::make_pair(context, result));
300 } 300 }
301 301
302 base::AutoLock locker(awakable_lock_); 302 base::AutoLock locker(awakable_lock_);
303 HandleSignalsState signals_state; 303 HandleSignalsState signals_state;
304 signals_state.satisfiable_signals = MOJO_HANDLE_SIGNAL_READABLE; 304 signals_state.satisfiable_signals = MOJO_HANDLE_SIGNAL_READABLE;
305 signals_state.satisfied_signals = MOJO_HANDLE_SIGNAL_READABLE; 305 signals_state.satisfied_signals = MOJO_HANDLE_SIGNAL_READABLE;
306 awakable_list_.AwakeForStateChange(signals_state); 306 awakable_list_.AwakeForStateChange(signals_state);
307 } 307 }
308 308
309 } // namespace edk 309 } // namespace edk
310 } // namespace mojo 310 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698