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