diff --git a/pvAccessApp/server/baseChannelRequester.cpp b/pvAccessApp/server/baseChannelRequester.cpp index 8469598..665844f 100644 --- a/pvAccessApp/server/baseChannelRequester.cpp +++ b/pvAccessApp/server/baseChannelRequester.cpp @@ -65,12 +65,12 @@ void BaseChannelRequester::message(const String message, const epics::pvData::Me void BaseChannelRequester::message(Transport* transport, const pvAccessID ioid, const String message, const MessageType messageType) { - transport->enqueueSendRequest( new BaseChannelRequesterMessageTransportSender(ioid, message, messageType)); + transport->enqueueSendRequest(new BaseChannelRequesterMessageTransportSender(ioid, message, messageType)); } void BaseChannelRequester::sendFailureMessage(const int8 command, Transport* transport, const pvAccessID ioid, const int8 qos, const Status status) { - transport->enqueueSendRequest( new BaseChannelRequesterFailureMessageTransportSender(command, transport, ioid, qos, status)); + transport->enqueueSendRequest(new BaseChannelRequesterFailureMessageTransportSender(command, transport, ioid, qos, status)); } BaseChannelRequesterMessageTransportSender::BaseChannelRequesterMessageTransportSender(const pvAccessID ioid, const String message,const epics::pvData::MessageType messageType): @@ -138,7 +138,7 @@ void BaseChannelRequesterFailureMessageTransportSender::unlock() void BaseChannelRequesterFailureMessageTransportSender::release() { - + delete this; } void BaseChannelRequesterFailureMessageTransportSender::acquire() diff --git a/pvAccessApp/server/baseChannelRequester.h b/pvAccessApp/server/baseChannelRequester.h index 33affe6..f7a9799 100644 --- a/pvAccessApp/server/baseChannelRequester.h +++ b/pvAccessApp/server/baseChannelRequester.h @@ -44,7 +44,6 @@ private: ServerContextImpl* _context; static const int32 NULL_REQUEST; int32 _pendingRequest; - int32 _refCount; }; class BaseChannelRequesterMessageTransportSender : public TransportSender diff --git a/pvAccessApp/server/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp index f5ff084..9857960 100644 --- a/pvAccessApp/server/responseHandlers.cpp +++ b/pvAccessApp/server/responseHandlers.cpp @@ -40,7 +40,7 @@ void ServerBadResponse::handleResponse(osiSockAddr* responseFrom, } ServerResponseHandler::ServerResponseHandler(ServerContextImpl* context) { - + // TODO replace with auto_ptr and vector _badResponse = new ServerBadResponse(context); _handlerTable = new ResponseHandler*[HANDLER_TABLE_LENGTH]; @@ -139,11 +139,12 @@ void ServerEchoHandler::handleResponse(osiSockAddr* responseFrom, AbstractServerResponseHandler::handleResponse(responseFrom, transport, version, command, payloadSize, payloadBuffer); - EchoTransportSender* echoReply = new EchoTransportSender( - responseFrom); + EchoTransportSender* echoReply = new EchoTransportSender(responseFrom); // send back transport->enqueueSendRequest(echoReply); + + echoReply->release(); } void ServerIntrospectionSearchHandler::handleResponse(osiSockAddr* responseFrom, @@ -328,6 +329,7 @@ void ServerCreateChannelHandler::handleResponse(osiSockAddr* responseFrom, return; } + // TODO memory leak... ChannelRequester* cr = new ServerChannelRequesterImpl(transport, channelName, cid); _provider->createChannel(channelName, cr, transport->getPriority()); } @@ -495,7 +497,9 @@ void ServerDestroyChannelHandler::handleResponse(osiSockAddr* responseFrom, casTransport->unregisterChannel(sid); // send response back - transport->enqueueSendRequest(new ServerDestroyChannelHandlerTransportSender(cid, sid)); + ServerDestroyChannelHandlerTransportSender* sr = new ServerDestroyChannelHandlerTransportSender(cid, sid); + transport->enqueueSendRequest(sr); + sr->release(); } /****************************************************************************************/ @@ -1697,6 +1701,7 @@ void ServerGetFieldRequesterImpl::getDone(const Status& status, FieldConstPtr fi _field = field; } _transport->enqueueSendRequest(this); + release(); } void ServerGetFieldRequesterImpl::lock() diff --git a/pvAccessApp/server/responseHandlers.h b/pvAccessApp/server/responseHandlers.h index e72ff7c..d3c8a53 100644 --- a/pvAccessApp/server/responseHandlers.h +++ b/pvAccessApp/server/responseHandlers.h @@ -149,6 +149,7 @@ namespace epics { virtual void send(ByteBuffer* buffer, TransportSendControl* control) { control->startMessage(CMD_ECHO, 0); control->setRecipient(_echoFrom); + // TODO content } virtual void lock() {