Return-Path: Delivered-To: apmail-ws-axis-c-dev-archive@www.apache.org Received: (qmail 76502 invoked from network); 14 Apr 2004 04:54:42 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 14 Apr 2004 04:54:42 -0000 Received: (qmail 84878 invoked by uid 500); 14 Apr 2004 04:54:21 -0000 Delivered-To: apmail-ws-axis-c-dev-archive@ws.apache.org Received: (qmail 84842 invoked by uid 500); 14 Apr 2004 04:54:21 -0000 Mailing-List: contact axis-c-dev-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: list-post: List-Id: "Apache AXIS C Developers List" Reply-To: "Apache AXIS C Developers List" Delivered-To: mailing list axis-c-dev@ws.apache.org Received: (qmail 84817 invoked from network); 14 Apr 2004 04:54:20 -0000 Received: from unknown (HELO web40607.mail.yahoo.com) (66.218.78.144) by daedalus.apache.org with SMTP; 14 Apr 2004 04:54:20 -0000 Message-ID: <20040414045431.21062.qmail@web40607.mail.yahoo.com> Received: from [129.34.20.19] by web40607.mail.yahoo.com via HTTP; Tue, 13 Apr 2004 21:54:31 PDT Date: Tue, 13 Apr 2004 21:54:31 -0700 (PDT) From: Samisa Abeysinghe Subject: Memory leaks - patches To: axis-c-dev@ws.apache.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Hi All, Following are fixes for some of the memory leaks that I found when debugging Axis C++ clients. I think they are serious and need to be fixed as soon as possible. I tested the samples after the fixes and they work fine (which suggests that the fixes do not have any side effects) The files to be updated are... SharedObject.cpp WSDDDeployment.cpp SoapParserXerces.cpp SoapDeSerializer.cpp SoapSerializer.cpp Thanks, Samisa... --------------------------------------------- diff -u ../../original/ws-axis/c/src/engine/SharedObject.cpp ./src/engine/SharedObject.cpp --- ../../original/ws-axis/c/src/engine/SharedObject.cpp 2004-04-09 11:05:37.000000000 +0600 +++ ./src/engine/SharedObject.cpp 2004-04-12 16:08:29.000000000 +0600 @@ -36,6 +36,7 @@ #ifdef WIN32 #else //Linux pthread_mutex_destroy (mut); + delete mut; #endif } --------------------------------------------- diff -u ../../original/ws-axis/c/src/wsdd/WSDDDeployment.cpp ./src/wsdd/WSDDDeployment.cpp --- ../../original/ws-axis/c/src/wsdd/WSDDDeployment.cpp 2004-04-08 19:30:08.000000000 +0600 +++ ./src/wsdd/WSDDDeployment.cpp 2004-04-12 16:13:26.000000000 +0600 @@ -84,6 +84,7 @@ delete ((*iter2).second); } } + delete m_pLibNameIdMap; } const WSDDHandlerList* WSDDDeployment::GetGlobalRequestFlowHandlers() --------------------------------------------- diff -u ../../original/ws-axis/c/src/soap/SoapParserXerces.cpp ./src/soap/SoapParserXerces.cpp --- ../../original/ws-axis/c/src/soap/SoapParserXerces.cpp 2004-04-09 18:43:39.000000000 +0600 +++ ./src/soap/SoapParserXerces.cpp 2004-04-13 11:38:00.000000000 +0600 @@ -31,17 +31,24 @@ m_nStatus = NULL; firstParsed = false; m_pParser = XMLReaderFactory::createXMLReader(); + is = NULL; } SoapParserXerces::~SoapParserXerces() { m_nStatus = NULL; + if(is) + delete is; + delete m_pParser; } int SoapParserXerces::SetInputStream(const Ax_soapstream* pInputStream) { m_pInputStream = pInputStream; + //check if memeory is already allocated for is + if(is) + delete is; is = new SoapInputSource(m_pInputStream->transport.pGetFunct, m_pInputStream); /* SoapInputSource is(m_pInputStream->transport.pGetFunct, --------------------------------------------- diff -u ../../original/ws-axis/c/src/soap/SoapDeSerializer.cpp ./src/soap/SoapDeSerializer.cpp --- ../../original/ws-axis/c/src/soap/SoapDeSerializer.cpp 2004-04-09 18:43:39.000000000 +0600 +++ ./src/soap/SoapDeSerializer.cpp 2004-04-14 10:51:03.000000000 +0600 @@ -69,6 +69,10 @@ SoapDeSerializer::~SoapDeSerializer() { m_pParser->Init(); + if (m_pEnv) + delete m_pEnv; + if(m_pHeader) + delete m_pHeader; if (m_pParser) delete m_pParser; } @@ -155,6 +159,8 @@ (0 == strcmp(m_pNode->m_pchNameOrValue, SoapKeywordMapping::Map(m_nSoapVersion).pchWords[SKW_HEADER]))) { + if(m_pHeader) + delete m_pHeader; m_pHeader = new SoapHeader(); /* Set any attributes/namspaces to the SoapHeader object */ @@ -328,7 +334,10 @@ { if (VERSION_LAST == m_nSoapVersion) { - GetEnvelope(); + + if (m_pEnv) + delete m_pEnv; + m_pEnv = GetEnvelope(); } return m_nSoapVersion; } --------------------------------------------- diff -u ../../original/ws-axis/c/src/soap/SoapSerializer.cpp ./src/soap/SoapSerializer.cpp --- ../../original/ws-axis/c/src/soap/SoapSerializer.cpp 2004-04-08 18:24:45.000000000 +0600 +++ ./src/soap/SoapSerializer.cpp 2004-04-12 17:05:15.000000000 +0600 @@ -62,6 +62,12 @@ SoapSerializer::~SoapSerializer() { if (m_pSoapEnvelope) delete m_pSoapEnvelope; + + for (int x=0; x