susantha 2003/08/16 05:48:29
Modified: c/src/common Debug.cpp Packet.h
c/src/engine AppScopeHandlerPool.cpp AxisEngine.cpp
DeserializerPool.cpp HandlerLoader.cpp
HandlerPool.cpp Main.c RequestScopeHandlerPool.cpp
SerializerPool.cpp SessionScopeHandlerPool.cpp
c/src/server/apache mod_axis.c
c/src/server/samples/webservicewrapper Service.cpp
c/src/soap SoapDeSerializer.cpp SoapDeSerializer.h
SoapSerializer.cpp SoapSerializer.h
c/src/wsdd WSDDDocument.cpp
Log:
fixed memory leaks
Revision Changes Path
1.7 +1 -1 xml-axis/c/src/common/Debug.cpp
Index: Debug.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/common/Debug.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Debug.cpp 16 Aug 2003 08:15:47 -0000 1.6
+++ Debug.cpp 16 Aug 2003 12:48:28 -0000 1.7
@@ -21,7 +21,7 @@
Debug::~Debug()
{
fout->close();
- fout = NULL;
+ delete fout;
}
int Debug::debug(const string &sLog,string arg2, int arg3)
1.7 +4 -4 xml-axis/c/src/common/Packet.h
Index: Packet.h
===================================================================
RCS file: /home/cvs/xml-axis/c/src/common/Packet.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- Packet.h 16 Aug 2003 08:15:47 -0000 1.6
+++ Packet.h 16 Aug 2003 12:48:28 -0000 1.7
@@ -7,8 +7,8 @@
typedef struct
{
- void* ip_stream;
- void* op_stream;
+ const void* ip_stream;
+ const void* op_stream;
} Ax_iostream;
/*
typedef enum
@@ -82,11 +82,11 @@
//This function should be implemented by module authors
//Allows to send pieces of soap response the transport handler
- int send_response_bytes(const char* res, void* opstream);
+ int send_response_bytes(const char* res, const void* opstream);
//This function should be implemented by module authors
//Allows axis to get pieces of the request as they come to the transport
listener
- int get_request_bytes(char* req, int reqsize, int* retsize, void* ipstream);
+ int get_request_bytes(char* req, int reqsize, int* retsize, const void*
ipstream);
//This fucntion should be implemented by module authors
int send_transport_information(Ax_soapstream *str);
1.2 +9 -1 xml-axis/c/src/engine/AppScopeHandlerPool.cpp
Index: AppScopeHandlerPool.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/AppScopeHandlerPool.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AppScopeHandlerPool.cpp 13 Aug 2003 14:07:47 -0000 1.1
+++ AppScopeHandlerPool.cpp 16 Aug 2003 12:48:28 -0000 1.2
@@ -19,7 +19,15 @@
AppScopeHandlerPool::~AppScopeHandlerPool()
{
-
+ for (map<int, list<BasicHandler*> >::iterator it = m_Handlers.begin(); it !=
m_Handlers.end(); it++)
+ {
+ for (list<BasicHandler*>::iterator itr = (*it).second.begin(); itr !=
(*it).second.end(); itr++)
+ {
+ g_HandlerLoader.DeleteHandler(*itr, (*it).first);
+ }
+ (*it).second.clear();
+ }
+ m_Handlers.clear();
}
//this method does not block the object. Instead expects that the calling thread
1.16 +1 -7 xml-axis/c/src/engine/AxisEngine.cpp
Index: AxisEngine.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/AxisEngine.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- AxisEngine.cpp 14 Aug 2003 14:03:14 -0000 1.15
+++ AxisEngine.cpp 16 Aug 2003 12:48:28 -0000 1.16
@@ -71,12 +71,6 @@
#include "DeserializerPool.h"
#include "SerializerPool.h"
-//extern int send_response_bytes(char * res);
-
-//extern int get_request_bytes(char * req, int reqsize, int* retsize);
-
-//extern int send_transport_information(soapstream *);
-
extern DeserializerPool g_DeserializerPool;
extern SerializerPool g_SerializerPool;
extern HandlerPool g_HandlerPool;
@@ -243,7 +237,7 @@
//send any transoport information like http headers first
send_transport_information(soap);
//Serialize
- m_pSZ->SetOutputStream(soap->str.ip_stream);
+ m_pSZ->SetOutputStream(soap->str.op_stream);
//Pool back the Service specific handlers
if (m_pSReqFChain) g_HandlerPool.PoolHandlerChain(m_pSReqFChain,
sSessionId);
1.3 +16 -13 xml-axis/c/src/engine/DeserializerPool.cpp
Index: DeserializerPool.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/DeserializerPool.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DeserializerPool.cpp 14 Aug 2003 14:03:14 -0000 1.2
+++ DeserializerPool.cpp 16 Aug 2003 12:48:28 -0000 1.3
@@ -15,7 +15,10 @@
DeserializerPool::~DeserializerPool()
{
-
+ for (list<SoapDeSerializer*>::iterator it = m_DZList.begin(); it !=
m_DZList.end(); it++)
+ {
+ delete (*it);
+ }
}
int DeserializerPool::GetInstance(SoapDeSerializer** ppDZ)
@@ -29,18 +32,13 @@
else
{
*ppDZ = new SoapDeSerializer();
- }
- if (!(*ppDZ))
- {
- unlock();
- return FAIL;
- }
- if (SUCCESS != (*ppDZ)->Init())
- {
- m_DZList.push_back(*ppDZ);
- *ppDZ = NULL;
- unlock();
- return FAIL;
+ if (SUCCESS != (*ppDZ)->Init())
+ {
+ delete *ppDZ;
+ *ppDZ = NULL;
+ unlock();
+ return FAIL;
+ }
}
unlock();
return SUCCESS;
@@ -48,6 +46,11 @@
int DeserializerPool::PutInstance(SoapDeSerializer* pDZ)
{
+ if (SUCCESS != pDZ->Init())
+ {
+ delete pDZ;
+ return FAIL;
+ }
lock();
m_DZList.push_back(pDZ);
unlock();
1.6 +1 -0 xml-axis/c/src/engine/HandlerLoader.cpp
Index: HandlerLoader.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/HandlerLoader.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- HandlerLoader.cpp 16 Aug 2003 08:15:47 -0000 1.5
+++ HandlerLoader.cpp 16 Aug 2003 12:48:28 -0000 1.6
@@ -136,6 +136,7 @@
if (m_HandlerInfoList.find(nLibId) == m_HandlerInfoList.end())
{
HandlerInformation* pHandlerInfo = new HandlerInformation();
+ memset(pHandlerInfo, 0, sizeof(HandlerInformation));
pHandlerInfo->m_sLib = g_WSDDDeployment.GetLibName(nLibId);
if (pHandlerInfo->m_sLib.empty())
{
1.8 +4 -0 xml-axis/c/src/engine/HandlerPool.cpp
Index: HandlerPool.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/HandlerPool.cpp,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- HandlerPool.cpp 15 Aug 2003 04:31:25 -0000 1.7
+++ HandlerPool.cpp 16 Aug 2003 12:48:28 -0000 1.8
@@ -86,6 +86,10 @@
HandlerPool::~HandlerPool()
{
+ for (list<HandlerChain*>::iterator it = m_ChainStore.begin(); it !=
m_ChainStore.end(); it++)
+ {
+ delete (*it);
+ }
}
int HandlerPool::GetHandler(BasicHandler** ppHandler, string& sSessionId, int
nScope, int nLibId)
1.9 +8 -6 xml-axis/c/src/engine/Main.c
Index: Main.c
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/Main.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Main.c 16 Aug 2003 08:15:47 -0000 1.8
+++ Main.c 16 Aug 2003 12:48:28 -0000 1.9
@@ -188,7 +188,8 @@
str->trtype = APTHTTP;
str->sessionid = "somesessionid";
str->so.http.ip_method = AXIS_HTTP_POST;
-
+ str->str.ip_stream = "is";
+ str->str.op_stream = "os";
str->so.http.ip_headers = (Ax_header*)malloc(sizeof(Ax_header));
str->so.http.ip_headers->headername = SOAPACTIONHEADER;
str->so.http.ip_headers->headervalue = "\"Calculator\"";
@@ -197,19 +198,20 @@
printf("soap request :\n %s\n", ip);
initialize_module();
- for (xx =0; xx < 1000 ; xx++)
+ for (xx =0; xx < 100 ; xx++)
process_request(str);
-
+ free(str->so.http.ip_headers);
+ free(str);
return 0;
}
-int send_response_bytes(const char * res, void* pOutputStream)
+int send_response_bytes(const char * res, const void* opstream)
{
-// printf("sending SOAP response : \n%s\n", res);
+ printf("sending SOAP response : \n%s\n", res);
return 0;
}
-int get_request_bytes(char * req, int reqsize, int* retsize)
+int get_request_bytes(char * req, int reqsize, int* retsize, const void* ipstream)
{
req[0]= '\0';
strcat(req, ip);
1.2 +9 -1 xml-axis/c/src/engine/RequestScopeHandlerPool.cpp
Index: RequestScopeHandlerPool.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/RequestScopeHandlerPool.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- RequestScopeHandlerPool.cpp 13 Aug 2003 14:07:47 -0000 1.1
+++ RequestScopeHandlerPool.cpp 16 Aug 2003 12:48:28 -0000 1.2
@@ -17,7 +17,15 @@
RequestScopeHandlerPool::~RequestScopeHandlerPool()
{
-
+ for (map<int, list<BasicHandler*> >::iterator it = m_Handlers.begin(); it !=
m_Handlers.end(); it++)
+ {
+ for (list<BasicHandler*>::iterator itr = (*it).second.begin(); itr !=
(*it).second.end(); itr++)
+ {
+ g_HandlerLoader.DeleteHandler(*itr, (*it).first);
+ }
+ (*it).second.clear();
+ }
+ m_Handlers.clear();
}
int RequestScopeHandlerPool::GetInstance(BasicHandler** pHandler, int nLibId)
1.3 +16 -13 xml-axis/c/src/engine/SerializerPool.cpp
Index: SerializerPool.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/SerializerPool.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SerializerPool.cpp 14 Aug 2003 14:03:14 -0000 1.2
+++ SerializerPool.cpp 16 Aug 2003 12:48:28 -0000 1.3
@@ -15,7 +15,10 @@
SerializerPool::~SerializerPool()
{
-
+ for (list<SoapSerializer*>::iterator it = m_SZList.begin(); it !=
m_SZList.end(); it++)
+ {
+ delete (*it);
+ }
}
//pooling should be implemented
@@ -30,18 +33,13 @@
else
{
*ppSZ = new SoapSerializer();
- }
- if (!(*ppSZ))
- {
- unlock();
- return FAIL;
- }
- if (SUCCESS != (*ppSZ)->Init())
- {
- m_SZList.push_back(*ppSZ);
- *ppSZ = NULL;
- unlock();
- return FAIL;
+ if (SUCCESS != (*ppSZ)->Init())
+ {
+ delete *ppSZ;
+ *ppSZ = NULL;
+ unlock();
+ return FAIL;
+ }
}
unlock();
return SUCCESS;
@@ -49,6 +47,11 @@
int SerializerPool::PutInstance(SoapSerializer* pSZ)
{
+ if (SUCCESS != pSZ->Init())
+ {
+ delete pSZ;
+ return FAIL;
+ }
lock();
m_SZList.push_back(pSZ);
unlock();
1.2 +14 -1 xml-axis/c/src/engine/SessionScopeHandlerPool.cpp
Index: SessionScopeHandlerPool.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/engine/SessionScopeHandlerPool.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SessionScopeHandlerPool.cpp 13 Aug 2003 14:07:47 -0000 1.1
+++ SessionScopeHandlerPool.cpp 16 Aug 2003 12:48:28 -0000 1.2
@@ -18,7 +18,20 @@
SessionScopeHandlerPool::~SessionScopeHandlerPool()
{
-
+ for (map<int, SessionHandlers*>::iterator it = m_Handlers.begin(); it !=
m_Handlers.end(); it++)
+ {
+ SessionHandlers* pSH = (*it).second;
+ for (SessionHandlers::iterator itr = pSH->begin(); itr != pSH->end();
itr++)
+ {
+ for (list<BasicHandler*>::iterator ite =
(*itr).second.begin(); ite != (*itr).second.end(); ite++)
+ {
+ g_HandlerLoader.DeleteHandler(*ite, (*it).first);
+ }
+ (*itr).second.clear();
+ }
+ delete pSH;
+ }
+ m_Handlers.clear();
}
int SessionScopeHandlerPool::GetInstance(string& sSessionId, BasicHandler**
pHandler, int nLibId)
1.6 +2 -2 xml-axis/c/src/server/apache/mod_axis.c
Index: mod_axis.c
===================================================================
RCS file: /home/cvs/xml-axis/c/src/server/apache/mod_axis.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- mod_axis.c 16 Aug 2003 08:15:47 -0000 1.5
+++ mod_axis.c 16 Aug 2003 12:48:29 -0000 1.6
@@ -39,7 +39,7 @@
initialize_module();
}
-int send_response_bytes(const char* res, void* opstream)
+int send_response_bytes(const char* res, const void* opstream)
{
ap_rputs(res, (request_rec*)opstream);
return 0;
@@ -52,7 +52,7 @@
void axis_Fini(server_rec *svr_rec, pool* p)
{}
-int get_request_bytes(char* req, int reqsize, int* retsize, void* ipstream)
+int get_request_bytes(char* req, int reqsize, int* retsize, const void* ipstream)
{
int len_read;
ap_hard_timeout("util_read", (request_rec*)ipstream);
1.2 +1 -1 xml-axis/c/src/server/samples/webservicewrapper/Service.cpp
Index: Service.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/server/samples/webservicewrapper/Service.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Service.cpp 25 Jun 2003 04:55:18 -0000 1.1
+++ Service.cpp 16 Aug 2003 12:48:29 -0000 1.2
@@ -91,7 +91,7 @@
{
if (inst)
{
- WrapperClassHandler* pWCH = dynamic_cast<WrapperClassHandler*>(inst);
+ WrapperClassHandler* pWCH = static_cast<WrapperClassHandler*>(inst);
pWCH->Fini();
delete pWCH;
return SUCCESS;
1.7 +3 -4 xml-axis/c/src/soap/SoapDeSerializer.cpp
Index: SoapDeSerializer.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/soap/SoapDeSerializer.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SoapDeSerializer.cpp 14 Aug 2003 14:03:35 -0000 1.6
+++ SoapDeSerializer.cpp 16 Aug 2003 12:48:29 -0000 1.7
@@ -92,10 +92,9 @@
delete m_pParser;
}
-int SoapDeSerializer::SetInputStream(void* InputStream)
+int SoapDeSerializer::SetInputStream(const void* InputStream)
{
m_pInputStream = InputStream;
- MemBufInputSource* pSoapInput = NULL;
//---------------------start--------------------------
//Deserialize
//---------START XERCES SAX2 SPCIFIC CODE---------//
@@ -107,8 +106,8 @@
get_request_bytes(m_hugebuffer, HUGE_BUFFER_SIZE, &nChars, m_pInputStream);
//if no soap then quit
if (nChars <= 0) return FAIL;
- pSoapInput = new MemBufInputSource((const unsigned char*)m_hugebuffer, nChars
,"bufferid",false);
- m_pParser->parse(*pSoapInput);
+ MemBufInputSource Input((const unsigned char*)m_hugebuffer, nChars ,
"bufferid");
+ m_pParser->parse(Input);
return SUCCESS;
}
1.9 +2 -2 xml-axis/c/src/soap/SoapDeSerializer.h
Index: SoapDeSerializer.h
===================================================================
RCS file: /home/cvs/xml-axis/c/src/soap/SoapDeSerializer.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SoapDeSerializer.h 14 Aug 2003 14:03:35 -0000 1.8
+++ SoapDeSerializer.h 16 Aug 2003 12:48:29 -0000 1.9
@@ -88,7 +88,7 @@
private:
XMLStreamHandler* m_pHandler;
SAX2XMLReader* m_pParser;
- void* m_pInputStream;
+ const void* m_pInputStream;
char m_hugebuffer[HUGE_BUFFER_SIZE];
public:
int GetVersion();
@@ -101,7 +101,7 @@
SoapBody* GetBody();
ISoapHeader* GetHeader();
SoapEnvelope* GetEnvelope();
- int SetInputStream(void* InputStream);
+ int SetInputStream(const void* InputStream);
SoapDeSerializer();
virtual ~SoapDeSerializer();
1.14 +1 -1 xml-axis/c/src/soap/SoapSerializer.cpp
Index: SoapSerializer.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/soap/SoapSerializer.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- SoapSerializer.cpp 16 Aug 2003 08:15:47 -0000 1.13
+++ SoapSerializer.cpp 16 Aug 2003 12:48:29 -0000 1.14
@@ -178,7 +178,7 @@
return m_sSerializedStream;
}*/
-int SoapSerializer::SetOutputStream(void* pStream)
+int SoapSerializer::SetOutputStream(const void* pStream)
{
m_pOutputStream = pStream;
int iStatus= SUCCESS;
1.12 +2 -2 xml-axis/c/src/soap/SoapSerializer.h
Index: SoapSerializer.h
===================================================================
RCS file: /home/cvs/xml-axis/c/src/soap/SoapSerializer.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- SoapSerializer.h 16 Aug 2003 08:15:47 -0000 1.11
+++ SoapSerializer.h 16 Aug 2003 12:48:29 -0000 1.12
@@ -103,7 +103,7 @@
const char* getNewNamespacePrefix();
int setSoapVersion(SOAP_VERSION);
int Init();
- int SetOutputStream(void* pStream);
+ int SetOutputStream(const void* pStream);
int setSoapFault(SoapFault* pSoapFault);
int setSoapMethod(SoapMethod* pSoapMethod);
int setSoapBody(SoapBody* pSoapBody);
@@ -122,7 +122,7 @@
string& SerializeBasicType(const string& sName, int nValue);
private:
BasicTypeSerializer m_BTSZ;
- void* m_pOutputStream;
+ const void* m_pOutputStream;
};
#endif //
!defined(AFX_SOAPSERIALIZER_H__C37229AD_BD54_430D_9619_E4574CF95334__INCLUDED_)
1.7 +3 -2 xml-axis/c/src/wsdd/WSDDDocument.cpp
Index: WSDDDocument.cpp
===================================================================
RCS file: /home/cvs/xml-axis/c/src/wsdd/WSDDDocument.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- WSDDDocument.cpp 16 Aug 2003 08:15:47 -0000 1.6
+++ WSDDDocument.cpp 16 Aug 2003 12:48:29 -0000 1.7
@@ -99,11 +99,12 @@
DEBUG1("inside ParseDocument\n");
try
{
- SAX2XMLReader * parser = XMLReaderFactory::createXMLReader();
+ SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
parser->setContentHandler(this);
parser->setErrorHandler(this);
DEBUG1("BEFORE parser->parse(sWSDD.c_str());");
- parser->parse(sWSDD.c_str());
+ parser->parse(sWSDD.c_str());
+ delete parser;
}
catch (...)
{