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