GCC Code Coverage Report


Directory: ./
File: Os/Posix/ConditionVariable.cpp
Date: 2026-09-03 22:12:29
Exec Total Coverage
Lines: 16 22 72.7%
Functions: 4 6 66.7%
Branches: 0 0 -%

Line Branch Exec Source
1 // ======================================================================
2 // \title Os/Posix/ConditionVariable.cpp
3 // \brief Posix implementations for Os::ConditionVariable
4 // ======================================================================
5 #include "Os/Posix/ConditionVariable.hpp"
6 #include "Fw/Types/Assert.hpp"
7 #include "Os/Posix/Mutex.hpp"
8 #include "Os/Posix/error.hpp"
9
10 namespace Os {
11 namespace Posix {
12 namespace Mutex {
13
14 56 PosixConditionVariable::PosixConditionVariable() {
15 56 int status = pthread_cond_init(&this->m_handle.m_condition, nullptr);
16 56 FW_ASSERT(status == 0, static_cast<FwAssertArgType>(status)); // If this fails, something horrible happened.
17 56 }
18 112 PosixConditionVariable::~PosixConditionVariable() {
19 112 (void)pthread_cond_destroy(&this->m_handle.m_condition);
20 112 }
21
22 4768 PosixConditionVariable::Status PosixConditionVariable::pend(Os::Mutex& mutex) {
23 4768 PosixMutexHandle* mutex_handle = reinterpret_cast<PosixMutexHandle*>(mutex.getHandle());
24 4767 FW_ASSERT(mutex_handle != nullptr);
25 4767 int status = pthread_cond_wait(&this->m_handle.m_condition, &mutex_handle->m_mutex_descriptor);
26 4771 return posix_status_to_conditional_status(status);
27 }
28 13847 void PosixConditionVariable::notify() {
29 13847 const int status = pthread_cond_signal(&this->m_handle.m_condition);
30 13831 FW_ASSERT(status == 0);
31 13831 }
32 void PosixConditionVariable::notifyAll() {
33 const int status = pthread_cond_broadcast(&this->m_handle.m_condition);
34 FW_ASSERT(status == 0);
35 }
36
37 ConditionVariableHandle* PosixConditionVariable::getHandle() {
38 return &m_handle;
39 }
40
41 } // namespace Mutex
42 } // namespace Posix
43 } // namespace Os
44