• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
Awakable()28   Awakable() {}
29 };
30 
31 }  // namespace edk
32 }  // namespace mojo
33 
34 #endif  // MOJO_EDK_SYSTEM_AWAKABLE_H_
35