You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2005/03/08 09:41:58 UTC

cvs commit: ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp BeanParamWriter.java ClientStubWriter.java

samisa      2005/03/08 00:41:58

  Modified:    c/src/soap SoapDeSerializer.cpp
               c/src/soap/xsd Int.cpp Long.cpp
               c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp
                        BeanParamWriter.java ClientStubWriter.java
  Log:
  Fixed memory leak problems for RPC style code
  AXISCPP-507
  
  Revision  Changes    Path
  1.152     +3 -2      ws-axis/c/src/soap/SoapDeSerializer.cpp
  
  Index: SoapDeSerializer.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/SoapDeSerializer.cpp,v
  retrieving revision 1.151
  retrieving revision 1.152
  diff -u -r1.151 -r1.152
  --- SoapDeSerializer.cpp	4 Mar 2005 17:03:11 -0000	1.151
  +++ SoapDeSerializer.cpp	8 Mar 2005 08:41:56 -0000	1.152
  @@ -1051,8 +1051,9 @@
       m_pNode = m_pParser->next(true); /* charactor node */\
       if (m_pNode && (CHARACTER_ELEMENT == m_pNode->m_type))\
       {\
  -        ((cpp_type*)Array.m_Array)[nIndex] = \
  -        *conv_func(m_pNode->m_pchNameOrValue);\
  +        cpp_type* pr = conv_func(m_pNode->m_pchNameOrValue); \
  +        ((cpp_type*)Array.m_Array)[nIndex] = *pr;\
  +        delete pr;\
           m_pNode = m_pParser->next(); /* skip end element node too */\
           continue;\
       }\
  
  
  
  1.11      +1 -0      ws-axis/c/src/soap/xsd/Int.cpp
  
  Index: Int.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/Int.cpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- Int.cpp	4 Mar 2005 13:51:40 -0000	1.10
  +++ Int.cpp	8 Mar 2005 08:41:57 -0000	1.11
  @@ -37,6 +37,7 @@
       }
       m_Int = new xsd__int;
       *m_Int = static_cast<xsd__int> (*returnValue);
  +    delete returnValue; // Samissa - need to clean this memory
       return m_Int;
   }
   
  
  
  
  1.7       +1 -0      ws-axis/c/src/soap/xsd/Long.cpp
  
  Index: Long.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/soap/xsd/Long.cpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Long.cpp	4 Mar 2005 13:51:40 -0000	1.6
  +++ Long.cpp	8 Mar 2005 08:41:57 -0000	1.7
  @@ -38,6 +38,7 @@
       }
       m_Long = new xsd__long;
       *m_Long = static_cast<xsd__long> (*returnValue);
  +    delete returnValue; // Samissa - need to clean this memory
       return m_Long;
   }
   
  
  
  
  1.35      +27 -20    ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
  
  Index: BeanParamWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- BeanParamWriter.java	22 Feb 2005 14:14:49 -0000	1.34
  +++ BeanParamWriter.java	8 Mar 2005 08:41:57 -0000	1.35
  @@ -450,16 +450,19 @@
   								|| attribs[i].getTypeName().equals("xsd__notation"))
                       	{
   	                        //TODO handle optional attributes
  -	                        writer.write(
  -	                            "\tparam->"
  -	                                + attribs[i].getParamNameAsMember()
  -	                                + " = *(pIWSDZ->"
  -	                                + CUtils.getParameterGetValueMethodName(
  -	                                    attribs[i].getTypeName(),
  -	                                    attribs[i].isAttribute())
  -	                                + "(\""
  -	                                + attribs[i].getParamName()
  -	                                + "\",0));\n");
  +				writer.write( "\t" + attribs[i].getTypeName() + "* p_" + attribs[i].getParamNameAsMember()
  +                                        + " = (pIWSDZ->"
  +                                        + CUtils.getParameterGetValueMethodName(
  +                                            attribs[i].getTypeName(),
  +                                            attribs[i].isAttribute())
  +                                        + "(\""
  +                                        + attribs[i].getParamName()
  +                                        + "\",0));\n");
  +                                writer.write(
  +                                    "\tparam->"
  +                                        + attribs[i].getParamNameAsMember() + " = *p_" + attribs[i].getParamNameAsMember() + ";\n");
  +
  +                                writer.write("\tdelete p_" + attribs[i].getParamNameAsMember() + ";\n");
                       	}
                       	else if(attribs[i].getTypeName().equals("xsd__string"))
   			{
  @@ -477,16 +480,20 @@
                       	else
                       	{
   	                        //TODO handle optional attributes
  -	                        writer.write(
  -	                            "\tparam->"
  -	                                + attribs[i].getParamNameAsMember()
  -	                                + " = *(pIWSDZ->"
  -	                                + CUtils.getParameterGetValueMethodName(
  -	                                    attribs[i].getTypeName(),
  -	                                    attribs[i].isAttribute())
  -	                                + "(\""
  -	                                + attribs[i].getParamName()
  -	                                + "\",0));\n");
  +				writer.write( "\t" + attribs[i].getTypeName() + "* p_" + attribs[i].getParamNameAsMember()
  +                                        + " = (pIWSDZ->"
  +                                        + CUtils.getParameterGetValueMethodName(
  +                                            attribs[i].getTypeName(),
  +                                            attribs[i].isAttribute())
  +                                        + "(\""
  +                                        + attribs[i].getParamName()
  +                                        + "\",0));\n");
  +                                writer.write(
  +                                    "\tparam->"
  +                                        + attribs[i].getParamNameAsMember() + " = *p_" + attribs[i].getParamNameAsMember() + ";\n");
  +
  +                                writer.write("\tdelete p_" + attribs[i].getParamNameAsMember() + ";\n");
  +
                       	}
                       }
                       else
  
  
  
  1.75      +6 -2      ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java
  
  Index: ClientStubWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/ClientStubWriter.java,v
  retrieving revision 1.74
  retrieving revision 1.75
  diff -u -r1.74 -r1.75
  --- ClientStubWriter.java	4 Mar 2005 14:54:56 -0000	1.74
  +++ ClientStubWriter.java	8 Mar 2005 08:41:57 -0000	1.75
  @@ -709,8 +709,12 @@
                           //            writer.write("\t\t}\n\t\tm_pCall->unInitialize();\n");
   			if (outparamTypeName.equals("xsd__string") ) 
                           	writer.write("\t\treturn Ret;\n");
  -			else 
  -	                        writer.write("\t\treturn *Ret;\n");
  +			else
  +                        {
  +				writer.write("\t\t" + outparamTypeName + " r = *Ret;\n"); // make deep copy
  +				writer.write("\t\tdelete Ret;\n");  // delete pointer
  +                                writer.write("\t\treturn r;\n");
  +                        }
                       }
                       else
                       {