Home | History | Annotate | Download | only in system
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef MOJO_EDK_SYSTEM_AWAKABLE_H_
      6 #define MOJO_EDK_SYSTEM_AWAKABLE_H_
      7 
      8 #include <stdint.h>
      9 
     10 #include "mojo/edk/system/system_impl_export.h"
     11 #include "mojo/public/c/system/types.h"
     12 
     13 namespace mojo {
     14 namespace edk {
     15 
     16 // An interface that may be waited on |AwakableList|.
     17 class MOJO_SYSTEM_IMPL_EXPORT Awakable {
     18  public:
     19   // |Awake()| must satisfy the following contract:
     20   // * As this is called from any thread, this must be thread-safe.
     21   // * As this is called inside a lock, this must not call anything that takes
     22   //   "non-terminal" locks, i.e., those which are always safe to take.
     23   // This should return false if this must not be called again for the same
     24   // reason (e.g., for the same call to |AwakableList::Add()|).
     25   virtual bool Awake(MojoResult result, uintptr_t context) = 0;
     26 
     27  protected:
     28   Awakable() {}
     29 };
     30 
     31 }  // namespace edk
     32 }  // namespace mojo
     33 
     34 #endif  // MOJO_EDK_SYSTEM_AWAKABLE_H_
     35