locking of ChannelRequest data

This commit is contained in:
Matej Sekoranja
2011-10-04 14:51:23 +02:00
parent 179e99559b
commit e21938968c
4 changed files with 210 additions and 25 deletions

View File

@@ -100,31 +100,31 @@ namespace epics {
Requester::shared_pointer m_requester;
bool m_destroyed;
bool m_initialized;
/* negative... */
static const int NULL_REQUEST = -1;
static const int PURE_DESTROY_REQUEST = -2;
int32 m_pendingRequest;
pvAccessID m_ioid;
int32 m_pendingRequest;
Mutex m_mutex;
// used to hold ownership until create is called (to support complete async usage)
ResponseRequest::shared_pointer m_thisPointer;
bool m_destroyed;
bool m_initialized;
virtual ~BaseRequestImpl() {};
BaseRequestImpl(ChannelImpl::shared_pointer const & channel, Requester::shared_pointer requester) :
m_channel(channel),
m_requester(requester),
m_destroyed(false),
m_initialized(false),
m_ioid(INVALID_IOID),
m_pendingRequest(NULL_REQUEST),
m_ioid(INVALID_IOID)
m_destroyed(false),
m_initialized(false)
{
}
@@ -271,10 +271,6 @@ namespace epics {
// default is noop
}
virtual void lock() {
// noop
}
virtual void send(ByteBuffer* buffer, TransportSendControl* control) {
int8 qos = getPendingRequest();
if (qos == -1)
@@ -288,10 +284,6 @@ namespace epics {
stopRequest();
}
virtual void unlock() {
// noop
}
};
@@ -437,6 +429,14 @@ namespace epics {
{
BaseRequestImpl::destroy();
}
virtual void lock() {
// noop
}
virtual void unlock() {
// noop
}
};
@@ -458,6 +458,8 @@ namespace epics {
PVStructure::shared_pointer m_data;
BitSet::shared_pointer m_bitSet;
Mutex m_dataMutex;
ChannelGetImpl(ChannelImpl::shared_pointer const & channel, ChannelGetRequester::shared_pointer const & channelGetRequester, PVStructure::shared_pointer const & pvRequest) :
BaseRequestImpl(channel, static_pointer_cast<Requester>(channelGetRequester)),
@@ -608,6 +610,16 @@ namespace epics {
{
BaseRequestImpl::destroy();
}
virtual void lock()
{
m_dataMutex.lock();
}
virtual void unlock()
{
m_dataMutex.unlock();
}
};
@@ -632,6 +644,8 @@ namespace epics {
PVStructure::shared_pointer m_data;
BitSet::shared_pointer m_bitSet;
Mutex m_dataMutex;
ChannelPutImpl(ChannelImpl::shared_pointer const & channel, ChannelPutRequester::shared_pointer const & channelPutRequester, PVStructure::shared_pointer const & pvRequest) :
BaseRequestImpl(channel, static_pointer_cast<Requester>(channelPutRequester)),
m_channelPutRequester(channelPutRequester), m_pvRequest(pvRequest)
@@ -821,6 +835,16 @@ namespace epics {
{
BaseRequestImpl::destroy();
}
virtual void lock()
{
m_dataMutex.lock();
}
virtual void unlock()
{
m_dataMutex.unlock();
}
};
@@ -842,6 +866,8 @@ namespace epics {
PVStructure::shared_pointer m_putData;
PVStructure::shared_pointer m_getData;
Mutex m_dataMutex;
ChannelPutGetImpl(ChannelImpl::shared_pointer const & channel, ChannelPutGetRequester::shared_pointer const & channelPutGetRequester, PVStructure::shared_pointer const & pvRequest) :
BaseRequestImpl(channel, static_pointer_cast<Requester>(channelPutGetRequester)),
m_channelPutGetRequester(channelPutGetRequester), m_pvRequest(pvRequest)
@@ -1079,6 +1105,17 @@ namespace epics {
{
BaseRequestImpl::destroy();
}
virtual void lock()
{
m_dataMutex.lock();
}
virtual void unlock()
{
m_dataMutex.unlock();
}
};
@@ -1101,6 +1138,8 @@ namespace epics {
PVStructure::shared_pointer m_data;
BitSet::shared_pointer m_bitSet;
Mutex m_dataMutex;
ChannelRPCImpl(ChannelImpl::shared_pointer const & channel, ChannelRPCRequester::shared_pointer const & channelRPCRequester, PVStructure::shared_pointer const & pvRequest) :
BaseRequestImpl(channel, static_pointer_cast<Requester>(channelRPCRequester)),
@@ -1259,6 +1298,16 @@ namespace epics {
{
BaseRequestImpl::destroy();
}
virtual void lock()
{
m_dataMutex.lock();
}
virtual void unlock()
{
m_dataMutex.unlock();
}
};
@@ -1285,6 +1334,8 @@ namespace epics {
int32 m_length;
int32 m_capacity;
Mutex m_dataMutex;
ChannelArrayImpl(ChannelImpl::shared_pointer const & channel, ChannelArrayRequester::shared_pointer const & channelArrayRequester, PVStructure::shared_pointer const & pvRequest) :
BaseRequestImpl(channel, static_pointer_cast<Requester>(channelArrayRequester)),
@@ -1522,6 +1573,16 @@ namespace epics {
{
BaseRequestImpl::destroy();
}
virtual void lock()
{
m_dataMutex.lock();
}
virtual void unlock()
{
m_dataMutex.unlock();
}
};
@@ -2242,6 +2303,16 @@ namespace epics {
m_monitorStrategy->release(monitorElement);
}
virtual void lock()
{
// noop
}
virtual void unlock()
{
// noop
}
};