axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Whitlock <mark_whitl...@uk.ibm.com>
Subject FIXED: RE: Carston: please help
Date Fri, 08 Jul 2005 10:05:48 GMT




Hi Carsten, Dushshantha,
Once I read your note, Carsten, I realised what the problem was and I've
fixed it. AxisBench and ComplexLists now work. The delete [] p1 was
deleting the strings inside BenchBasicDataType so I
memset(p1,0,sizeof(BenchBasicDataType)*array.m_Size); before the delete.
This ensures that the array that's being deleted doesn't reference the
strings that we want to keep.

I don't like memset'ing objects to zero - I think I'll assign to them a
clean class whose fields have their default values.
Thank you for your help in solving this :-)
Mark
Mark Whitlock
IBM

----- Forwarded by Mark Whitlock/UK/IBM on 08/07/2005 10:58 -----
                                                                           
             "Carsten Blecken"                                             
             <cblecken@macrovi                                             
             sion.com>                                                  To 
                                       "Apache AXIS C Developers List"     
             08/07/2005 02:18          <axis-c-dev@ws.apache.org>          
                                                                        cc 
                                                                           
             Please respond to                                     Subject 
              "Apache AXIS C           RE: Carston: please help            
             Developers List"                                              
                                                                           
                                                                           
                                                                           
                                                                           
                                                                           




Hi Mark, Dushanta,

first of all sorry for obviously not testing sufficiently.

On the other hand at some point in time we need to get the
memory leaks stuffed in the stub and not in the client
program (I had to do this and it was painful).

I ran the AxisBench and had the problems you describe. There
was one problem in Int.cpp which deallocated the xsd__int
holder right away in the axis client library. Since that
was inconsistent with other base types I changed that.
After that AxisBench finished (commenting out the manual
delete's), but the StringType was garbled.

As you point out I suspect the copy section in BenchDataType.cpp
causes the problem.

             // Additional code to find is reference is pointer or pointer
to a pointer
             BenchBasicDataType **         pp1 = param->infos.m_Array;

             param->infos.m_Size = array.m_Size;

             if( param->infos.m_Array == NULL)
             {
                         pp1 = new BenchBasicDataType*[array.m_Size];
                         param->infos.m_Array = pp1;
             }

             BenchBasicDataType *          p1 = (BenchBasicDataType *)
array.m_Array;

             for( int iCount1 = 0; iCount1 < array.m_Size; iCount1++)
             {
                         pp1[iCount1] = new BenchBasicDataType();
                         *(pp1[iCount1]) = p1[iCount1];
             }
             delete [] p1;

The last delete [] p1; will have now destructors which really deallocate
the StringType, instead of the keeping the copy as it was before.
One question : I'm not quite sure I understand why this copy is needed?

I want to try tomorrow to comment out the delete [] p1; - and see where
this goes.

I don't have the ComplexLists yet up, but I suspect that this is a similar
problem.

Carsten




-----Original Message-----
From: Carsten Blecken
Sent: Wednesday, July 06, 2005 7:05 PM
To: Apache AXIS C Developers List
Subject: RE: Carston: please help


Hi Mark,

this is a tough one (but we need the destructors working).
I'll see how far I get. Thanks for looking at it.

Carsten

-----Original Message-----
From: Mark Whitlock [mailto:mark_whitlock@uk.ibm.com]
Sent: Wednesday, July 06, 2005 3:05 PM
To: axis-c-dev@ws.apache.org
Subject: Carston: please help






Hi Carston,
The fix you made to BeanParamWriter.java on 28/06/05 1.78 has broken a
couple of our tests and I am struggling to fix them. Please could you help
me. I agree with your fix - I think the generated classes should clean up
their storage in their destructor. Unfortunately this breaks the AxisBench
and ComplexLists tests. AxisBench is set up for unit testing - so that you
can run it without a server. Just specify

ant -f test.xml -Dtest.name=AxisBench -DmockServer=true

This will run it against a mock server which simply returns the response
message from AxisBench_ServerResponse.expected.

AxisBench fails by corrupting strings and qnames within the
BenchBasicDataType and throwing an exception when storage is cleaned at the
end of the testcase. When I commented out the lines that you added to
BeanParamWriter, AxisBench passed. The problem occurs in deserialization
since it is the output object that is corrrupted. Looking in the trace, I
can see the strings being deserialized correctly by
SoapDeSerializer::getElementAsString, so it must later on that they are
corrupted. I am running on Windows, although I expect the problem will
occur on all platforms.

The similarity between AxisBench and ComplexLists is that they both return
an array of complex types which contain string types that get corrupted.
There is code in Axis_Create_BenchBasicDataType that extends an array by
new'ing a new array, memcpy'ing the old array into the new array and
deleting the old array. I thought that this might be the problem since
~BenchBasicDataType will delete the embedded strings when the old array is
deleted. So I commented out the delete (just to try it) but this did not
fix the problem. My guess is that the problem is in this area.

Do you have any thoughts on what the problem might be?
Any help would be greatly appreciated,
Thanks,
Mark
Mark Whitlock
IBM



Mime
View raw message