From 3d8c681be7b88db8502d46a19bea286d5de7ba24 Mon Sep 17 00:00:00 2001 From: Matej Sekoranja Date: Wed, 18 May 2011 11:54:10 +0200 Subject: [PATCH] Monitor memory leak fixed --- pvAccessApp/server/responseHandlers.cpp | 9 ++++----- pvAccessApp/server/responseHandlers.h | 1 - testApp/remote/testServer.cpp | 2 +- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/pvAccessApp/server/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp index feededb..9f12d4a 100644 --- a/pvAccessApp/server/responseHandlers.cpp +++ b/pvAccessApp/server/responseHandlers.cpp @@ -1143,7 +1143,7 @@ void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom, /* if (!request->startRequest(qosCode)) { - BaseChannelRequester::sendFailureMessage((int8)13, transport, ioid, qosCode, BaseChannelRequester::otherRequestPendingStatus); + BaseChannelRequester::sendFailureMessage((int8)CMD_MONITOR, transport, ioid, qosCode, BaseChannelRequester::otherRequestPendingStatus); return; } */ @@ -1169,7 +1169,7 @@ void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom, ServerMonitorRequesterImpl::ServerMonitorRequesterImpl( ServerContextImpl::shared_pointer const & context, ServerChannelImpl::shared_pointer const & channel, const pvAccessID ioid, Transport::shared_pointer const & transport): - BaseChannelRequester(context, channel, ioid, transport), _monitor(), _channelMonitor(), _structure() + BaseChannelRequester(context, channel, ioid, transport), _channelMonitor(), _structure() { } @@ -1196,9 +1196,8 @@ void ServerMonitorRequesterImpl::monitorConnect(const Status& status, Monitor::s { Lock guard(_mutex); _status = status; - _monitor = monitor; + _channelMonitor = monitor; _structure = structure; - _monitor = monitor; } TransportSender::shared_pointer thisSender = shared_from_this(); _transport->enqueueSendRequest(thisSender); @@ -1288,7 +1287,7 @@ void ServerMonitorRequesterImpl::send(ByteBuffer* buffer, TransportSendControl* } else { - Monitor::shared_pointer monitor = _monitor; + Monitor::shared_pointer monitor = _channelMonitor; MonitorElement::shared_pointer element = monitor->poll(); if (element != NULL) { diff --git a/pvAccessApp/server/responseHandlers.h b/pvAccessApp/server/responseHandlers.h index 5708127..f710a90 100644 --- a/pvAccessApp/server/responseHandlers.h +++ b/pvAccessApp/server/responseHandlers.h @@ -484,7 +484,6 @@ namespace epics { epics::pvData::Monitor::shared_pointer getChannelMonitor(); void send(epics::pvData::ByteBuffer* buffer, TransportSendControl* control); private: - epics::pvData::Monitor::shared_pointer _monitor; epics::pvData::Monitor::shared_pointer _channelMonitor; epics::pvData::StructureConstPtr _structure; epics::pvData::Status _status; diff --git a/testApp/remote/testServer.cpp b/testApp/remote/testServer.cpp index d281281..851c5af 100644 --- a/testApp/remote/testServer.cpp +++ b/testApp/remote/testServer.cpp @@ -1098,7 +1098,7 @@ void testServer() ctx->printInfo(); - ctx->run(30); + ctx->run(100); ctx->destroy();