This is Unofficial EPICS BASE Doxygen Site
epics::pvAccess::TransportRegistry::Reservation Class Reference

#include "transportRegistry.h"

Public Member Functions

 Reservation (TransportRegistry *owner, const osiSockAddr &address, epics::pvData::int16 prio)
 
 ~Reservation ()
 

Detailed Description

Definition at line 57 of file transportRegistry.h.

Constructor & Destructor Documentation

epics::pvAccess::TransportRegistry::Reservation::Reservation ( TransportRegistry owner,
const osiSockAddr address,
epics::pvData::int16  prio 
)

Definition at line 36 of file transportRegistry.cpp.

39  :owner(owner)
40  ,key(address, prio)
41 {
42  {
43  pvd::Lock G(owner->_mutex);
44 
45  std::tr1::shared_ptr<pvd::Mutex>& lock = owner->locks[key]; // fetch or alloc
46  if(!lock)
47  lock.reset(new pvd::Mutex());
48 
49  mutex = lock;
50  }
51 
52  mutex->lock();
53 }
epicsMutexId lock
Definition: osiClockTime.c:37
A lock for multithreading.
Definition: lock.h:36
epicsMutex Mutex
Definition: lock.h:28
epics::pvAccess::TransportRegistry::Reservation::~Reservation ( )

Definition at line 55 of file transportRegistry.cpp.

56 {
57  mutex->unlock();
58 
59  pvd::Lock G(owner->_mutex);
60 
61  assert(mutex.use_count()>=2);
62 
63  if(mutex.use_count()==2) {
64  // no other concurrent connect(), so can drop this lock
65  owner->locks.erase(key);
66  }
67 
68  assert(mutex.use_count()==1);
69 }
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
A lock for multithreading.
Definition: lock.h:36

The documentation for this class was generated from the following files: