Glad to see that we resolved this! I got also AxisBench working with Mark's fix. (it took me a while to realize that the checked-in expected file contain times 8 hours before my timezone - how does developers unit test who are not in GMT+00 ?).
Carsten -----Original Message----- From: Samisa Abeysinghe [mailto:[EMAIL PROTECTED] Sent: Friday, July 08, 2005 10:06 AM To: Apache AXIS C Developers List Subject: Re: Fw: Re: FIXED: RE: Carston: please help Hi Mark, Yes you are correct, I as using Linux, and my client did delete the member data that the destructor was supposed to delete. Fixing that solved the problems Hence I could confirm that that your fix works for both C++ client as well as C++ server. Thanks, Samisa... On Fri, 2005-07-08 at 10:45, Mark Whitlock wrote: > > > Hi Samisa, > That maybe because the BenchBasicDataType's destructor is freeing the > storage for the StringType for which the testcase uses a local variable > when passed on input. The testcase needs fixing. > I guess you are running on Linux but I run on Windows, which is why you saw > this problem but I didn't. > Mark > Mark Whitlock > IBM > > ----- Forwarded by Mark Whitlock/UK/IBM on 08/07/2005 11:40 ----- > > Samisa Abeysinghe > <[EMAIL PROTECTED] > usa.com> To > Apache AXIS C Developers List > 08/07/2005 17:31 <[email protected]> > cc > > Please respond to Subject > "Apache AXIS C Re: FIXED: RE: Carston: please help > Developers List" > > > > > > > > > > Hi Mark, > Cool. With your fix, the C++ server do not send garbage. > However, my client segfaults in the > BenchBasicDataType::~BenchBasicDataType() - the destructor. > > Thanks, > Samisa... > > On Fri, 2005-07-08 at 10:05, Mark Whitlock wrote: > > > > > > 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" > > > <[EMAIL PROTECTED] > > > sion.com> > To > > "Apache AXIS C Developers List" > > > 08/07/2005 02:18 <[email protected]> > > > > 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:[EMAIL PROTECTED] > > Sent: Wednesday, July 06, 2005 3:05 PM > > To: [email protected] > > 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 > -- > Samisa Abeysinghe <[EMAIL PROTECTED]> > Virtusa Corporation -- Samisa Abeysinghe <[EMAIL PROTECTED]> Virtusa Corporation
