xref: /llvm-project/compiler-rt/lib/scudo/standalone/condition_variable_linux.h (revision ab17ecd107670cd843a9074e4d0bc33810abcf5e)
1*ab17ecd1SChiaHungDuan //===-- condition_variable_linux.h ------------------------------*- C++ -*-===//
2*ab17ecd1SChiaHungDuan //
3*ab17ecd1SChiaHungDuan // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*ab17ecd1SChiaHungDuan // See https://llvm.org/LICENSE.txt for license information.
5*ab17ecd1SChiaHungDuan // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*ab17ecd1SChiaHungDuan //
7*ab17ecd1SChiaHungDuan //===----------------------------------------------------------------------===//
8*ab17ecd1SChiaHungDuan 
9*ab17ecd1SChiaHungDuan #ifndef SCUDO_CONDITION_VARIABLE_LINUX_H_
10*ab17ecd1SChiaHungDuan #define SCUDO_CONDITION_VARIABLE_LINUX_H_
11*ab17ecd1SChiaHungDuan 
12*ab17ecd1SChiaHungDuan #include "platform.h"
13*ab17ecd1SChiaHungDuan 
14*ab17ecd1SChiaHungDuan #if SCUDO_LINUX
15*ab17ecd1SChiaHungDuan 
16*ab17ecd1SChiaHungDuan #include "atomic_helpers.h"
17*ab17ecd1SChiaHungDuan #include "condition_variable_base.h"
18*ab17ecd1SChiaHungDuan #include "thread_annotations.h"
19*ab17ecd1SChiaHungDuan 
20*ab17ecd1SChiaHungDuan namespace scudo {
21*ab17ecd1SChiaHungDuan 
22*ab17ecd1SChiaHungDuan class ConditionVariableLinux
23*ab17ecd1SChiaHungDuan     : public ConditionVariableBase<ConditionVariableLinux> {
24*ab17ecd1SChiaHungDuan public:
25*ab17ecd1SChiaHungDuan   void notifyAllImpl(HybridMutex &M) REQUIRES(M);
26*ab17ecd1SChiaHungDuan 
27*ab17ecd1SChiaHungDuan   void waitImpl(HybridMutex &M) REQUIRES(M);
28*ab17ecd1SChiaHungDuan 
29*ab17ecd1SChiaHungDuan private:
30*ab17ecd1SChiaHungDuan   u32 LastNotifyAll = 0;
31*ab17ecd1SChiaHungDuan   atomic_u32 Counter = {};
32*ab17ecd1SChiaHungDuan };
33*ab17ecd1SChiaHungDuan 
34*ab17ecd1SChiaHungDuan } // namespace scudo
35*ab17ecd1SChiaHungDuan 
36*ab17ecd1SChiaHungDuan #endif // SCUDO_LINUX
37*ab17ecd1SChiaHungDuan 
38*ab17ecd1SChiaHungDuan #endif // SCUDO_CONDITION_VARIABLE_LINUX_H_
39