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