Mixes for Privacy and Anonymity in the Internet
Public Member Functions | Protected Member Functions | Private Attributes | List of all members
CALockAble Class Reference

From this class other classes could be derived, which need some kind from "locking" in memory. More...

Inheritance diagram for CALockAble:
CASymChannelCipher CASymCipher CASymCipherGCM CASymCipherCTR CASymCipherNull CASymCipherOFB

Public Member Functions

 CALockAble ()
 
virtual ~CALockAble ()
 
SINT32 lock ()
 Locks the lockable object by threadsafe incrementing a reference counter. More...
 
SINT32 unlock ()
 Unlocks the lockable object by threadsafe decrementing a reference counter. More...
 

Protected Member Functions

SINT32 waitForDestroy ()
 If called checks if the reference counter equals zero. More...
 

Private Attributes

CAConditionVariable m_ConVar
 A conditional variable, which would be signaled if the rerference counter reaches zero. More...
 
UINT32 m_nLockCount
 The reference counter. More...
 

Detailed Description

From this class other classes could be derived, which need some kind from "locking" in memory.

Imagine for instance that thread t1 creates an object o of class c and uses it. During that a second thread t2 destroies o by calling delete o. Clearly this would be desasterous. To solve this problem cc should be derived from CALockAble. Than t1 calls o.lock() before using o and o.unlock() if t1 finsihed using o. If t2 calls delete o between the lock() / unlock() calls, it would block until all references of o are unlocked. Probablly this class is usefull for other tings, too...

Constructor & Destructor Documentation

◆ CALockAble()

CALockAble::CALockAble ( )

References m_nLockCount.

◆ ~CALockAble()

virtual CALockAble::~CALockAble ( )
virtual

Member Function Documentation

◆ lock()

SINT32 CALockAble::lock ( )

Locks the lockable object by threadsafe incrementing a reference counter.

Return values
E_SUCCESS

References E_SUCCESS, CAMutex::lock(), m_ConVar, m_nLockCount, and CAMutex::unlock().

Referenced by CAMiddleMixChannelList::getInToOut(), CAMiddleMixChannelList::getOutToIn_intern_without_lock(), and CAFirstMixA::loop().

◆ unlock()

SINT32 CALockAble::unlock ( )

Unlocks the lockable object by threadsafe decrementing a reference counter.

The counter would never become less than zero. Every thread, which waits in waitForDestroy() will be signaled.

Return values
E_SUCCESS

References E_SUCCESS, CAMutex::lock(), m_ConVar, m_nLockCount, CAConditionVariable::signal(), and CAMutex::unlock().

Referenced by mm_loopReadFromMixAfter(), and mm_loopReadFromMixBefore().

◆ waitForDestroy()

SINT32 CALockAble::waitForDestroy ( )
protected

If called checks if the reference counter equals zero.

If the reference counter is greater than zero, the call blocks.

Return values
E_SUCCESS

References E_SUCCESS, CAMutex::lock(), m_ConVar, m_nLockCount, CAMutex::unlock(), and CAConditionVariable::wait().

Referenced by CASymCipher::~CASymCipher(), CASymCipherCTR::~CASymCipherCTR(), CASymCipherGCM::~CASymCipherGCM(), CASymCipherNull::~CASymCipherNull(), and CASymCipherOFB::~CASymCipherOFB().

Member Data Documentation

◆ m_ConVar

CAConditionVariable CALockAble::m_ConVar
private

A conditional variable, which would be signaled if the rerference counter reaches zero.

Referenced by lock(), unlock(), and waitForDestroy().

◆ m_nLockCount

UINT32 CALockAble::m_nLockCount
private

The reference counter.

Referenced by CALockAble(), lock(), unlock(), and waitForDestroy().