ATLAS Offline Software
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
EventContainers::IDC_WriteHandleBase Class Reference

#include <IDC_WriteHandleBase.h>

Inheritance diagram for EventContainers::IDC_WriteHandleBase:
Collaboration diagram for EventContainers::IDC_WriteHandleBase:

Public Member Functions

void LockOn (std::atomic< const void * > *in, mutexPair *pair) noexcept
 
void DropLock () noexcept
 
void ReleaseLock ()
 
 ~IDC_WriteHandleBase ()
 

Protected Member Functions

 IDC_WriteHandleBase ()
 

Protected Attributes

std::atomic< const void * > * m_atomic
 
mutexPairm_mut
 

Detailed Description

Definition at line 27 of file IDC_WriteHandleBase.h.

Constructor & Destructor Documentation

◆ IDC_WriteHandleBase()

EventContainers::IDC_WriteHandleBase::IDC_WriteHandleBase ( )
inlineprotected

Definition at line 34 of file IDC_WriteHandleBase.h.

34  : m_atomic(nullptr)
35 #ifndef __cpp_lib_atomic_wait
36  , m_mut(nullptr)
37 #endif
38  { }

◆ ~IDC_WriteHandleBase()

IDC_WriteHandleBase::~IDC_WriteHandleBase ( )

Definition at line 13 of file IDC_WriteHandleBase.cxx.

13 { ReleaseLock(); }

Member Function Documentation

◆ DropLock()

void IDC_WriteHandleBase::DropLock ( )
noexcept

Definition at line 43 of file IDC_WriteHandleBase.cxx.

43  {
44  m_atomic = nullptr;
45 }

◆ LockOn()

void EventContainers::IDC_WriteHandleBase::LockOn ( std::atomic< const void * > *  in,
mutexPair pair 
)
inlinenoexcept

Definition at line 42 of file IDC_WriteHandleBase.h.

42  {
43  m_atomic = in;
44  m_mut = pair;
45  }

◆ ReleaseLock()

void IDC_WriteHandleBase::ReleaseLock ( )

Definition at line 17 of file IDC_WriteHandleBase.cxx.

17  {
18  if(m_atomic==nullptr) return;
19 //Convenience declarations
20  const void* waitstate = reinterpret_cast<const void*>(IdentifiableCacheBase::INVALIDflag);
21  const void* ABORTstate = reinterpret_cast<const void*>(IdentifiableCacheBase::ABORTEDflag);
22 
23 //Running code
24  assert(m_atomic->load() != ABORTstate);
25 #ifndef __cpp_lib_atomic_wait
26  typedef std::scoped_lock<decltype(m_mut->mutex)> lockguard;
27  lockguard lk(m_mut->mutex);
28  m_atomic->compare_exchange_strong(waitstate, ABORTstate);
29  m_mut->condition.notify_all();
30 #else
31  //If you have got here the ptr was not set so creation is being aborted
32  //The hash is being set to the aborted flag
33  //I think memory ordering can be relaxed here but to be safe we will use defaults.
34  m_atomic->compare_exchange_strong(waitstate, ABORTstate);
35  //Notify_all to wake up any threads waiting for this hash
36  m_atomic->notify_all();
37 #endif
38 
39  m_atomic = nullptr;
40 }

Member Data Documentation

◆ m_atomic

std::atomic<const void*>* EventContainers::IDC_WriteHandleBase::m_atomic
protected

Definition at line 29 of file IDC_WriteHandleBase.h.

◆ m_mut

mutexPair* EventContainers::IDC_WriteHandleBase::m_mut
protected

Definition at line 31 of file IDC_WriteHandleBase.h.


The documentation for this class was generated from the following files:
EventContainers::IDC_WriteHandleBase::m_mut
mutexPair * m_mut
Definition: IDC_WriteHandleBase.h:31
EventContainers::IdentifiableCacheBase::ABORTEDflag
static constexpr uintptr_t ABORTEDflag
Definition: IdentifiableCacheBase.h:31
EventContainers::mutexPair::condition
std::condition_variable condition
Definition: IDC_WriteHandleBase.h:20
EventContainers::IDC_WriteHandleBase::m_atomic
std::atomic< const void * > * m_atomic
Definition: IDC_WriteHandleBase.h:29
EventContainers::mutexPair::mutex
std::mutex mutex
Definition: IDC_WriteHandleBase.h:21
EventContainers::IDC_WriteHandleBase::ReleaseLock
void ReleaseLock()
Definition: IDC_WriteHandleBase.cxx:17
EventContainers::IdentifiableCacheBase::INVALIDflag
static constexpr uintptr_t INVALIDflag
Definition: IdentifiableCacheBase.h:30