LCOV - code coverage report
Current view: top level - libs/bsw/asyncFreeRtos/include/async - ModifiableLock.h (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 17 17
Test Date: 2026-02-24 11:21:15 Functions: 100.0 % 4 4

            Line data    Source code
       1              : // Copyright 2024 Accenture.
       2              : 
       3              : /**
       4              :  * \ingroup async
       5              :  */
       6              : #pragma once
       7              : 
       8              : #include "interrupts/suspendResumeAllInterrupts.h"
       9              : 
      10              : namespace async
      11              : {
      12              : /**
      13              :  * A synchronization mechanism that blocks threads from accessing a resource.
      14              :  *
      15              :  * The `ModifiableLock` class ensures mutual exclusion,
      16              :  * allowing only one thread to access a protected
      17              :  * resource or function at a time. When a thread acquires the lock,
      18              :  * any other thread attempting to acquire it is blocked until the lock is released.
      19              :  * The lock can be acquired either in the constructor or on demand using the `lock` function.
      20              :  * Similarly, the lock can be released either in the destructor or on demand using the `unlock`
      21              :  * function.
      22              :  */
      23              : class ModifiableLock final
      24              : {
      25              : public:
      26              :     ModifiableLock();
      27              :     ~ModifiableLock();
      28              : 
      29              :     void unlock();
      30              :     void lock();
      31              : 
      32              : private:
      33              :     ::OldIntEnabledStatusValueType _oldIntEnabledStatusValue;
      34              :     bool _isLocked;
      35              : };
      36              : 
      37              : /**
      38              :  * Inline implementations.
      39              :  */
      40            3 : inline ModifiableLock::ModifiableLock()
      41            3 : : _oldIntEnabledStatusValue(::getOldIntEnabledStatusValueAndSuspendAllInterrupts()), _isLocked(true)
      42            3 : {}
      43              : 
      44            3 : inline ModifiableLock::~ModifiableLock()
      45              : {
      46            3 :     if (_isLocked)
      47              :     {
      48            2 :         ::resumeAllInterrupts(_oldIntEnabledStatusValue);
      49              :     }
      50            3 : }
      51              : 
      52            3 : inline void ModifiableLock::unlock()
      53              : {
      54            3 :     if (_isLocked)
      55              :     {
      56            2 :         ::resumeAllInterrupts(_oldIntEnabledStatusValue);
      57            2 :         _isLocked = false;
      58              :     }
      59            3 : }
      60              : 
      61            2 : inline void ModifiableLock::lock()
      62              : {
      63            2 :     if (!_isLocked)
      64              :     {
      65            1 :         _oldIntEnabledStatusValue = ::getOldIntEnabledStatusValueAndSuspendAllInterrupts();
      66            1 :         _isLocked                 = true;
      67              :     }
      68            2 : }
      69              : 
      70              : } // namespace async
        

Generated by: LCOV version 2.0-1