14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "mojo/system/simple_dispatcher.h"
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/logging.h"
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace mojo {
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace system {
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)SimpleDispatcher::SimpleDispatcher() {
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)SimpleDispatcher::~SimpleDispatcher() {
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SimpleDispatcher::StateChangedNoLock() {
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  lock().AssertAcquired();
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  waiter_list_.AwakeWaitersForStateChange(SatisfiedFlagsNoLock(),
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                          SatisfiableFlagsNoLock());
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SimpleDispatcher::CancelAllWaitersNoLock() {
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  lock().AssertAcquired();
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  waiter_list_.CancelAllWaiters();
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)MojoResult SimpleDispatcher::AddWaiterImplNoLock(Waiter* waiter,
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                                 MojoWaitFlags flags,
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                                 MojoResult wake_result) {
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  lock().AssertAcquired();
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if ((flags & SatisfiedFlagsNoLock()))
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return MOJO_RESULT_ALREADY_EXISTS;
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (!(flags & SatisfiableFlagsNoLock()))
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return MOJO_RESULT_FAILED_PRECONDITION;
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  waiter_list_.AddWaiter(waiter, flags, wake_result);
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return MOJO_RESULT_OK;
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void SimpleDispatcher::RemoveWaiterImplNoLock(Waiter* waiter) {
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  lock().AssertAcquired();
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  waiter_list_.RemoveWaiter(waiter);
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace system
494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace mojo
50