mm of TransportSender

This commit is contained in:
Matej Sekoranja
2011-02-01 00:38:11 +01:00
parent 5ee480beee
commit d0db4588ee
11 changed files with 163 additions and 74 deletions
@@ -54,6 +54,12 @@ namespace epics {
virtual void unlock() {
}
virtual void acquire() {
}
virtual void release() {
}
virtual void
send(ByteBuffer* buffer, TransportSendControl* control);
@@ -129,7 +135,18 @@ namespace epics {
BlockingTCPTransport::~BlockingTCPTransport() {
close(true);
TransportSender* sender;
while (sender = _monitorSendQueue->extract())
sender->release();
delete _monitorSendQueue;
while (sender = _sendQueue->extract())
sender->release();
delete _sendQueue;
delete _monitorSender;
delete _socketBuffer;
delete _sendBuffer;
@@ -244,6 +261,7 @@ namespace epics {
internalVerified = _verified;
_verifiedMutex.unlock();
}
return internalVerified;
}
@@ -806,6 +824,7 @@ namespace epics {
_sendBuffer->setPosition(_lastMessageStartPosition);
}
sender->unlock();
sender->release();
} // if(sender!=NULL)
} // while(!_closed)
}
@@ -869,6 +888,7 @@ printf("sendThreadRunnner exception\n");
void BlockingTCPTransport::enqueueSendRequest(TransportSender* sender) {
Lock lock(&_sendQueueMutex);
if(_closed) return;
sender->acquire();
_sendQueue->insert(sender);
_sendQueueEvent.signal();
}
@@ -876,6 +896,7 @@ printf("sendThreadRunnner exception\n");
void BlockingTCPTransport::enqueueMonitorSendRequest(TransportSender* sender) {
Lock lock(&_monitorMutex);
if(_closed) return;
sender->acquire();
_monitorSendQueue->insert(sender);
if(_monitorSendQueue->size()==1) enqueueSendRequest(_monitorSender);
}
@@ -898,6 +919,7 @@ printf("sendThreadRunnner exception\n");
break;
}
sender->send(buffer, control);
sender->release();
}
}