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)#ifndef MOJO_SYSTEM_SIMPLE_DISPATCHER_H_ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define MOJO_SYSTEM_SIMPLE_DISPATCHER_H_ 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <list> 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/macros.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "mojo/system/dispatcher.h" 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "mojo/system/system_impl_export.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "mojo/system/waiter_list.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace mojo { 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace system { 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// A base class for simple dispatchers. "Simple" means that there's a one-to-one 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// correspondence between handles and dispatchers (see the explanatory comment 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// in core.cc). This class implements the standard waiter-signalling mechanism 21a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// in that case. 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class MOJO_SYSTEM_IMPL_EXPORT SimpleDispatcher : public Dispatcher { 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected: 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SimpleDispatcher(); 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~SimpleDispatcher(); 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // To be called by subclasses when the state changes (so 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // |GetHandleSignalsStateImplNoLock()| should be checked again). Must be 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // called under lock. 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void HandleSignalsStateChangedNoLock(); 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // |Dispatcher| protected methods: 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void CancelAllWaitersNoLock() OVERRIDE; 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual MojoResult AddWaiterImplNoLock( 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Waiter* waiter, 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MojoHandleSignals signals, 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) uint32_t context, 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HandleSignalsState* signals_state) OVERRIDE; 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void RemoveWaiterImplNoLock( 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Waiter* waiter, 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HandleSignalsState* signals_state) OVERRIDE; 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Protected by |lock()|: 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) WaiterList waiter_list_; 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SimpleDispatcher); 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace system 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace mojo 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // MOJO_SYSTEM_SIMPLE_DISPATCHER_H_ 54