Hi again...,
I just look at the subject of the mail and test whether hello client works
or not. But that is not the issue and I tested the real issue and that's
true. Client crashes when the response is not recieve (As an example after
running the client without starting the server). I will fix the code in
axis2 manual.

Regs
lahiru

On Tue, Apr 8, 2008 at 3:48 PM, lahiru gunathilake <[EMAIL PROTECTED]>
wrote:

> Hi Alex...
>
> I've gone through the manul and hello service and client works fine.
> Here's the request and response I recieved
>
> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope";>
>    <soapenv:Header></soapenv:Header>
>    <soapenv:Body>
>       <greet>Hello Server!</greet>
>    </soapenv:Body></soapenv:Envelope>
> ===================================================
> <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope";>
>    <soapenv:Header></soapenv:Header>
>    <soapenv:Body>
>       <greetResponse>Hello Client!</greetResponse>
>    </soapenv:Body></soapenv:Envelope>
> ===================================================
>
> Regs
> lahiru
>
>
> On Thu, Mar 27, 2008 at 8:48 AM, Samisa Abeysinghe <[EMAIL PROTECTED]>
> wrote:
>
> > The user seems to run into problems :(
> >
> > Samisa...
> >
> > Alex Bolgarov wrote:
> >
> > > Well, I _am_ using the sample provided by the Axis project - the
> > > client I'm using is the exact code sample from the "Axis2/C Manual" -
> > > the manual that is available here:
> > > http://ws.apache.org/axis2/c/docs/axis2c_manual.html. The sample
> > > client code I'm using is, without any changes, from this page:
> > > http://ws.apache.org/axis2/c/docs/hello/client/hello.c.html (I'm
> > > attaching the file that I was compiling, just in case there are some
> > > differences I could not see, but I've just copied the code from the
> > > web browser window and pasted it into XEmacs editor and saved as a
> > > 'my_client.c' file)
> > >
> > > And, as you can see in the sample client code, this sample _releases_
> > > a payload memory that is passes to the send_receive operation:
> > >
> > >    if (payload)
> > >    {
> > >        axiom_node_free_tree(payload, env);
> > >        payload = NULL;
> > >    }
> > >
> > > Is the sample wrong? I will take a look at the samples from the source
> > > distribution, may be they don't release the payload?
> > >
> > > Anyway, when the service _is_ running and the client receives the
> > > response, why attempt to release the payload tree by the client (which
> > > this sample client does) does not cause the crash? If the Axis took
> > > ownership for the payload tree, it should have deleted it already, and
> > > attempt to delete if in the client code would have caused a crash.
> > > Something is not right here...
> > >
> > >
> > > Thank you,
> > >
> > >    alex.
> > >
> > >
> > >
> > > On Wed, Mar 26, 2008 at 10:30 AM, Samisa Abeysinghe <[EMAIL PROTECTED]>
> > > wrote:
> > >
> > >
> > > > In short, the AXIOM that you create and pass to service client
> > > >  send_receive operation would be taken control of by service client.
> > > > So,
> > > >  you do not have to free that, even though you will be creating it.
> > > > Same
> > > >  with the returned response payload. You can use it, but you do not
> > > > have
> > > >  ownership of that. All that you have to delete is the service
> > > > client
> > > >  instance.
> > > >
> > > >  If you can send in your client code, we can have a look.
> > > >
> > > >  Also, the samples follow the convention that I explained above, so
> > > > if
> > > >  you follow the samples, you can solve the problems.
> > > >
> > > >  Samisa...
> > > >
> > > >
> > > >
> > > >  Alex Bolgarov wrote:
> > > >  > Hi,
> > > >  >
> > > >  > I don't understand what's going on inside the Axis2/C client. My
> > > > test
> > > >  > client crashes. I looked at the Axis source code and did some
> > > >  > debugging (mostly, I've added a lots of AXIS2_LOG_DEBUG(...) to
> > > > the
> > > >  > Axis source code and recompiled - I have a fast enough computer,
> > > > and
> > > >  > this way you can receive repeating results, something that hard
> > > > to get
> > > >  > with a debugger), and run a client code with valgrind.
> > > >  >
> > > >  > I think there might be some mix up in the the
> > > >  > axis2_op_client_add_msg_ctx() function, which causes the memory
> > > > that
> > > >  > is not supposed to be freed by the Axis library (specifically,
> > > > the
> > > >  > payload data that is allocated by the client application before
> > > > it
> > > >  > calls the axis2_svc_client_send_receive()). Then, when the
> > > >  > axis2_svc_client_send_receive() returns to my client code, the
> > > > client
> > > >  > tries to free the payload it allocated, at which moment the
> > > > client
> > > >  > crashes - either silently, or with the glibc reporting "double
> > > > free or
> > > >  > corruption".
> > > >  >
> > > >  > Now that I've got your attention, here are the details (sorry,
> > > > this is
> > > >  > a long message):
> > > >  >
> > > >  > First, I'm using Ubuntu 7.10, and I downloaded and compiled
> > > > sources of
> > > >  > Axis2/C 1.3.0.
> > > >  >
> > > >  > I compiled a SOAP service - virtually unchanged code of the
> > > > example
> > > >  > from the user guide, but the service looks to be OK, there is a
> > > >  > problem with the client.
> > > >  >
> > > >  > I compiled a SOAP client - absolutely unchanged code of the
> > > > client
> > > >  > from the user guide
> > > >  > (http://ws.apache.org/axis2/c/docs/hello/client/hello.c.html).
> > > >  >
> > > >  > When I'm starting the Axis server (for example, stand-alone
> > > >  > axis2_http_server application), the client works OK, it sends
> > > >  > something to the service and receives some response. No crashes.
> > > >  >
> > > >  > But if I start the client application _without_ starting a server
> > > >  > (that is, I expect some kind of timeout or some error about
> > > > inability
> > > >  > to conect to the server), the client application crashes.
> > > >  >
> > > >  > Here is what I found:
> > > >  >
> > > >  > The axis2_svc_client_send_receive() calls
> > > >  > axis2_svc_client_send_receive_with_op_qname() function that
> > > > implements
> > > >  > the sending and receiving of the SOAP messages. If there is an
> > > > error
> > > >  > in the low-level sending/receiving of the messages (which really
> > > >  > happens in my case, because I did not start the SOAP server for
> > > > this
> > > >  > test), the res_msg_ctx variable will be NULL, and in the
> > > > conditional
> > > >  > statement in the lines 864-872 of the file axis2_svc_client.c is
> > > >  > executed the 'else' alternative, which calls the
> > > >  > axis2_op_client_add_msg_ctx() function, passing the res_msg_ctx
> > > > value
> > > >  > (which is NULL) to it.
> > > >  >
> > > >  > In the axis2_op_client_add_msg_ctx() function, right before the
> > > > 'if'
> > > >  > statement in the lines 274-296 (file axis_op_client.c):
> > > >  >
> > > >  >     if (out_msg_ctx && !mc)
> > > >  >
> > > >  >  value of the out_msg_ctx is not NULL, and value of the mc is not
> > > > NULL
> > > >  > (I checked this using the debug logging), so the body of this
> > > >  > statement is executed. In this body, right before the 'if'
> > > > statement
> > > >  > on the line 290:
> > > >  >
> > > >  >     if (axutil_strcmp(dump_value, AXIS2_VALUE_TRUE))
> > > >  >
> > > >  > the value of the dump_value is NULL (again checked by the debug
> > > >  > logging), and the axutil_strcmp() returns -1 (which is
> > > > interpreted as
> > > >  > a 'true' boolean value), and thus the body of the statement,
> > > > including
> > > >  > the call (line 292)
> > > >  >
> > > >  >     axis2_msg_ctx_free(out_msg_ctx, env);
> > > >  >
> > > >  > is executed.
> > > >  >
> > > >  > The out_msg_ctx here points to the same message context object
> > > > that
> > > >  > was created in the axis2_svc_client_send_receive_with_op_qname()
> > > >  > function, before sending the SOAP request - I saw using the debug
> > > >  > logging that the pointer value returned by the
> > > > axis2_msg_ctx_create()
> > > >  > call in the axis2_svc_client_send_receive_with_op_qname() (line
> > > > 834)
> > > >  > is the same as the value of the pointer out_msg_ctx here.
> > > >  >
> > > >  > But this message context object contains a soap_envelop object
> > > > that,
> > > >  > in turn, contains the payload object (tree of the object model
> > > > nodes)
> > > >  > that my client application allocated before calling the
> > > >  > axis2_svc_client_send_receive() (specifically, this soap_envelop
> > > > is
> > > >  > filled with the payload in the call
> > > >  > axis2_svc_client_fill_soap_envelope() (line 838, function
> > > >  > axis2_svc_client_send_receive_with_op_qname(), file
> > > >  > axis2_svc_client.c). So, returning back to the the
> > > >  > axis2_op_client_add_msg_ctx() function, this payload object
> > > > (tree)
> > > >  > gets freed here. Then, later, when my client application tries to
> > > > free
> > > >  > the payload object after the axis2_svc_client_send_receive()
> > > > returns
> > > >  > to it, the application crashes, because this memory is already
> > > > freed.
> > > >  >
> > > >  >
> > > >  > So, finally, my questions:
> > > >  >
> > > >  > What strategy the client application that calls
> > > >  > axis2_svc_client_send_receive() should use regarding
> > > >  > allocating/freeing memory? From the current implementation of
> > > > Axis2/C,
> > > >  > it looks like a) if the response was received successfully, the
> > > > client
> > > >  > application should free the payload, but b) if there was a
> > > >  > communication error, the Axis library will free the payload
> > > > itself. Is
> > > >  > this correct?
> > > >  >
> > > >  > Is this a 'by design' feature of the Axis2/C or is this a bug and
> > > > (in
> > > >  > theory) there should be more sane rules regarding memory control?
> > > >  > (And, is there somewhere published the memory management rules
> > > > for the
> > > >  > Axis2/C?)
> > > >  >
> > > >  >
> > > >  > Second thing I've noticed when browsing the code of the
> > > >  > axis2_svc_client_send_receive_with_op_qname() is something that
> > > > looks
> > > >  > suspiciously as a potential memory leak. Look at the line 838 of
> > > >  > fileaxis2_svc_client.c. Here a message context object is created
> > > > (by
> > > >  > calling the axis2_msg_ctx_create(), wich allocates a memory for
> > > > the
> > > >  > message control object (using an allocator from the environment,
> > > > which
> > > >  > is normally malloc()?). Notice that the pointer to the allocated
> > > >  > message context object is stored in the _local_ variable msg_ctx.
> > > >  >
> > > >  > After this follows an 'if' statement (lines 838-842) that calls
> > > >  > axis2_svc_client_fill_soap_envelope() and if the result is
> > > > 'false', it
> > > >  > executes 'return NULL'. The axis2_svc_client_fill_soap_envelope()
> > > >  > could return a wrong result for different reasons, for example,
> > > > just
> > > >  > because the 'soap_version_uri' is not set in the client options
> > > > (line
> > > >  > 407, file svc_client.c) - basically, I did not see any guarantee
> > > > that
> > > >  > this function will not return 'false' if the message context
> > > > object
> > > >  > was successfully allocated.
> > > >  >
> > > >  > So, if the axis2_svc_client_fill_soap_envelope() returns 'false',
> > > > the
> > > >  > 'if' statement on lines 838-842 just returns NULL, and the
> > > >  > axis2_svc_client_send_receive_with_op_qname() exits, without
> > > > freeing
> > > >  > the memory allocated for the mesasge context object. Because the
> > > >  > pointer to this memory was stored in the local variable msg_ctx,
> > > > this
> > > >  > memory is lost. (Or, at least I think it is lost - I might be
> > > > wrong
> > > >  > and there is far more complex processing here to prevent memory
> > > > leaks
> > > >  > that I did not recognize :) )
> > > >  >
> > > >  >
> > > >  > Thank you,
> > > >  >
> > > >  >     alex.
> > > >  >
> > > >  >
> > > > ---------------------------------------------------------------------
> > > >  > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > >  > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >  >
> > > >  >
> > > >  >
> > > >  >
> > > >
> > > >
> > > >  --
> > > >  Samisa Abeysinghe
> > > >  Software Architect; WSO2 Inc.
> > > >
> > > >  http://www.wso2.com/ - "Oxygenating the Web Service Platform."
> > > >
> > > >
> > > >
> > > >  ---------------------------------------------------------------------
> > > >  To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > >  For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > > >
> > > >  
> > > > ------------------------------------------------------------------------
> > > >
> > > >
> > > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > > ------------------------------------------------------------------------
> > > >
> > > > No virus found in this incoming message.
> > > > Checked by AVG. Version: 7.5.519 / Virus Database: 269.22.0/1343 -
> > > > Release Date: 3/25/2008 7:17 PM
> > > >
> > >
> >
> > --
> > Samisa Abeysinghe Software Architect; WSO2 Inc.
> >
> > http://www.wso2.com/ - "Oxygenating the Web Service Platform."
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
>
>

Reply via email to