Hi Daniel, I can't see anything wrong. So, you should put in the old print statements where you allocate and delete (also indicate how much you allocated). Then we can see if you are indeed doing what you think you are doing. I can do that as well if you give me the stuff that compiles and create the appropriate shared library. Andy On Thu, 8 May 2014, Daniel L. Wang wrote: > Hi Andy, > > I'm trying to make sure that I don't leak memory using the client interface, > but I still end up leaking about 100 bytes for each sequence of > getservice-provision-request-close-cleanup. I seem to be failing to release > memory in 2 places. Here's a valgrind report for 30 iterations of the > sequence. > > ==13424== 450 bytes in 30 blocks are definitely lost in loss record 7 of 8 > ==13424== at 0x4A07152: operator new[](unsigned long) > (vg_replace_malloc.c:363) > ==13424== by 0x401C92: (anonymous > namespace)::MyRequest::MyRequest(XrdSsiSession*) (myclient.cc:30) > ==13424== by 0x402693: (anonymous namespace)::MyResource::makeRequest() > (myclient.cc:177) > ==13424== by 0x40263F: (anonymous > namespace)::MyResource::ProvisionDone(XrdSsiSession*) (myclient.cc:171) > ==13424== by 0x4C279C9: > XrdSsiSessReal::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*) > (XrdSsiSessReal.cc:157) > ==13424== by 0x4C26C69: > XrdCl::ResponseHandler::HandleResponseWithHosts(XrdCl::XRootDStatus*, > XrdCl::AnyObject*, std::vector<XrdCl::HostInfo, > std::allocator<XrdCl::HostInfo> >*) (XrdClXRootDResponses.hh:850) > ==13424== by 0x4F47693: (anonymous > namespace)::OpenHandler::HandleResponseWithHosts(XrdCl::XRootDStatus*, > XrdCl::AnyObject*, std::vector<XrdCl::HostInfo, > std::allocator<XrdCl::HostInfo> >*) (XrdClFileStateHandler.cc:86) > ==13424== by 0x4F3AEDF: XrdCl::XRootDMsgHandler::HandleResponse() > (XrdClXRootDMsgHandler.cc:1008) > ==13424== by 0x4F38204: XrdCl::XRootDMsgHandler::Process(XrdCl::Message*) > (XrdClXRootDMsgHandler.cc:300) > ==13424== by 0x4F198D1: XrdCl::Stream::HandleIncMsgJob::Run(void*) > (XrdClStream.hh:279) > ==13424== by 0x4F6FFED: XrdCl::JobManager::RunJobs() > (XrdClJobManager.cc:148) > ==13424== by 0x4F6FB37: RunRunnerThread (XrdClJobManager.cc:33) > ==13424== > ==13424== 3,360 bytes in 30 blocks are definitely lost in loss record 8 of 8 > ==13424== at 0x4A075BC: operator new(unsigned long) > (vg_replace_malloc.c:298) > ==13424== by 0x4C27F8C: XrdSsiSessReal::ProcessRequest(XrdSsiRequest*, > unsigned short) (XrdSsiSessReal.cc:260) > ==13424== by 0x4026DC: (anonymous namespace)::MyResource::makeRequest() > (myclient.cc:179) > ==13424== by 0x40263F: (anonymous > namespace)::MyResource::ProvisionDone(XrdSsiSession*) (myclient.cc:171) > ==13424== by 0x4C279C9: > XrdSsiSessReal::HandleResponse(XrdCl::XRootDStatus*, XrdCl::AnyObject*) > (XrdSsiSessReal.cc:157) > ==13424== by 0x4C26C69: > XrdCl::ResponseHandler::HandleResponseWithHosts(XrdCl::XRootDStatus*, > XrdCl::AnyObject*, std::vector<XrdCl::HostInfo, > std::allocator<XrdCl::HostInfo> >*) (XrdClXRootDResponses.hh:850) > ==13424== by 0x4F47693: (anonymous > namespace)::OpenHandler::HandleResponseWithHosts(XrdCl::XRootDStatus*, > XrdCl::AnyObject*, std::vector<XrdCl::HostInfo, > std::allocator<XrdCl::HostInfo> >*) (XrdClFileStateHandler.cc:86) > ==13424== by 0x4F3AEDF: XrdCl::XRootDMsgHandler::HandleResponse() > (XrdClXRootDMsgHandler.cc:1008) > ==13424== by 0x4F38204: XrdCl::XRootDMsgHandler::Process(XrdCl::Message*) > (XrdClXRootDMsgHandler.cc:300) > ==13424== by 0x4F198D1: XrdCl::Stream::HandleIncMsgJob::Run(void*) > (XrdClStream.hh:279) > ==13424== by 0x4F6FFED: XrdCl::JobManager::RunJobs() > (XrdClJobManager.cc:148) > ==13424== by 0x4F6FB37: RunRunnerThread (XrdClJobManager.cc:33) > > Is there something that sticks out at you? Code attached. > > Thanks, > -Daniel > > ######################################################################## Use REPLY-ALL to reply to list To unsubscribe from the QSERV-L list, click the following link: https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=QSERV-L&A=1