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 2006/03/30 07:11:20 UTC

svn commit: r389990 - in /webservices/axis2/trunk/c: modules/core/clientapi/async_result.c modules/core/clientapi/call.c modules/core/clientapi/stub.c modules/core/transport/http/http_status_line.c samples/client/echo_non_blocking/echo_client.c

Author: samisa
Date: Wed Mar 29 21:11:15 2006
New Revision: 389990

URL: http://svn.apache.org/viewcvs?rev=389990&view=rev
Log:
Fixed more client side leaks

Modified:
    webservices/axis2/trunk/c/modules/core/clientapi/async_result.c
    webservices/axis2/trunk/c/modules/core/clientapi/call.c
    webservices/axis2/trunk/c/modules/core/clientapi/stub.c
    webservices/axis2/trunk/c/modules/core/transport/http/http_status_line.c
    webservices/axis2/trunk/c/samples/client/echo_non_blocking/echo_client.c

Modified: webservices/axis2/trunk/c/modules/core/clientapi/async_result.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/clientapi/async_result.c?rev=389990&r1=389989&r2=389990&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/clientapi/async_result.c (original)
+++ webservices/axis2/trunk/c/modules/core/clientapi/async_result.c Wed Mar 29 21:11:15 2006
@@ -130,6 +130,12 @@
         async_result_impl->async_result.ops = NULL;
     }
     
+    if (async_result_impl->result)
+    {
+        AXIS2_MSG_CTX_FREE(async_result_impl->result, env);
+        async_result_impl->result = NULL;
+    }
+    
     AXIS2_FREE((*env)->allocator, async_result_impl);
     async_result_impl = NULL;
     

Modified: webservices/axis2/trunk/c/modules/core/clientapi/call.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/clientapi/call.c?rev=389990&r1=389989&r2=389990&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/clientapi/call.c (original)
+++ webservices/axis2/trunk/c/modules/core/clientapi/call.c Wed Mar 29 21:11:15 2006
@@ -62,6 +62,8 @@
     axis2_msg_ctx_t *last_res_msg_ctx;
     /* used to hold the service created in assume service */
     axis2_svc_t *axis_svc_private;
+    /* to hold the locally created async result */
+    axis2_async_result_t *async_result;
 
 } axis2_call_impl_t;
 
@@ -212,6 +214,7 @@
     call_impl->last_res_msg_ctx = NULL;
     call_impl->svc_ctx = NULL;
     call_impl->axis_svc_private = NULL;
+    call_impl->async_result = NULL;
     
     if(svc_ctx)
     {
@@ -296,6 +299,12 @@
         call_impl->callback_recv = NULL;
     }   
 
+    if (call_impl->async_result)
+    {
+        AXIS2_ASYNC_RESULT_FREE(call_impl->async_result, env);
+        call_impl->callback_recv = NULL;
+    }   
+
     if (call_impl->last_res_msg_ctx)
     {
         AXIS2_MSG_CTX_FREE(call_impl->last_res_msg_ctx, env);
@@ -402,7 +411,6 @@
         AXIS2_FREE((*env)->allocator, message_id);
         message_id = NULL;
     }
-
    
     if (call_impl->use_separate_listener) 
     {
@@ -555,6 +563,12 @@
     message_id = axis2_uuid_gen(env);
     AXIS2_MSG_CTX_SET_MESSAGE_ID(msg_ctx, env, message_id);
     
+    if(NULL != message_id)
+    {
+        AXIS2_FREE((*env)->allocator, message_id);
+        message_id = NULL;
+    }
+    
     if (call_impl->use_separate_listener) 
     {
         axis2_relates_to_t *relates_to = NULL;
@@ -642,6 +656,12 @@
 #endif
     }
 
+    if (engine)
+    {
+        AXIS2_ENGINE_FREE(engine, env);
+        engine = NULL;
+    }
+
     return AXIS2_SUCCESS;
 }
 
@@ -846,7 +866,6 @@
     axis2_call_worker_func_args_t *args_list = NULL;
     axis2_op_ctx_t *op_ctx = NULL;
     axis2_msg_ctx_t *response = NULL;
-    axis2_async_result_t *async_result = NULL;
     
     args_list = (axis2_call_worker_func_args_t *) data;
     if (!args_list)
@@ -862,8 +881,8 @@
 
     /* send the request and wait for reponse */
     response = axis2_two_way_send(args_list->env, args_list->msg_ctx);
-    async_result = axis2_async_result_create(args_list->env, response);
-    AXIS2_CALLBACK_INVOKE_ON_COMPLETE(args_list->callback, args_list->env, async_result);
+    args_list->call_impl->async_result = axis2_async_result_create(args_list->env, response);
+    AXIS2_CALLBACK_INVOKE_ON_COMPLETE(args_list->callback, args_list->env, args_list->call_impl->async_result);
     AXIS2_CALLBACK_SET_COMPLETE(args_list->callback, args_list->env, AXIS2_TRUE);
     
     return NULL; 

Modified: webservices/axis2/trunk/c/modules/core/clientapi/stub.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/clientapi/stub.c?rev=389990&r1=389989&r2=389990&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/clientapi/stub.c (original)
+++ webservices/axis2/trunk/c/modules/core/clientapi/stub.c Wed Mar 29 21:11:15 2006
@@ -50,6 +50,9 @@
      */
     axis2_bool_t maintain_session;
     axis2_char_t *current_session_id;
+
+    /* keep track of locally created endpoint to free it*/
+    axis2_endpoint_ref_t *endpoint_ref;
     	
 } axis2_stub_impl_t;
 
@@ -201,6 +204,7 @@
     stub_impl->maintain_session = AXIS2_FALSE;
     stub_impl->current_session_id = NULL;
     stub_impl->stub.ops = NULL;
+    stub_impl->endpoint_ref = NULL;
     
     stub_impl->sender_transport = AXIS2_STRDUP(AXIS2_TRANSPORT_HTTP, env);
     if(!stub_impl->sender_transport)
@@ -315,6 +319,7 @@
 		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
         return NULL;  
     }
+    stub_impl->endpoint_ref = endpoint_ref;
     
     return &(stub_impl->stub);
 }
@@ -353,6 +358,12 @@
     {
         AXIS2_ARRAY_LIST_FREE(stub_impl->modules, env);
         stub_impl->modules = NULL;
+    }
+    
+    if (stub_impl->endpoint_ref)
+    {
+        AXIS2_ENDPOINT_REF_FREE(stub_impl->endpoint_ref, env);
+        stub_impl->endpoint_ref = NULL;
     }
     
     if(stub_impl)

Modified: webservices/axis2/trunk/c/modules/core/transport/http/http_status_line.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/modules/core/transport/http/http_status_line.c?rev=389990&r1=389989&r2=389990&view=diff
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/http_status_line.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/http_status_line.c Wed Mar 29 21:11:15 2006
@@ -86,6 +86,7 @@
 		AXIS2_ERROR_SET((*env)->error, AXIS2_ERROR_NO_MEMORY, AXIS2_FAILURE);
         return NULL;
 	}
+    status_line_impl->status_line.ops = NULL;
     status_line_impl->line = (axis2_char_t *)AXIS2_STRDUP(str, env);
     status_line_impl->http_version = NULL;
     status_line_impl->reason_phrase = NULL;

Modified: webservices/axis2/trunk/c/samples/client/echo_non_blocking/echo_client.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/samples/client/echo_non_blocking/echo_client.c?rev=389990&r1=389989&r2=389990&view=diff
==============================================================================
--- webservices/axis2/trunk/c/samples/client/echo_non_blocking/echo_client.c (original)
+++ webservices/axis2/trunk/c/samples/client/echo_non_blocking/echo_client.c Wed Mar 29 21:11:15 2006
@@ -144,6 +144,7 @@
     
     AXIS2_CALL_INVOKE_NON_BLOCKING(call, &env, op, msg_ctx, callback);
 
+    printf("Non blocking call invoked\n");
   
     printf("\n");
     while (!AXIS2_CALLBACK_GET_COMPLETE(callback, &env))
@@ -155,13 +156,9 @@
         
     }
 
-    /*if (response_ctx)
-    {*/
-        soap_envelope = AXIS2_CALLBACK_GET_ENVELOPE(callback, &env);
-        if (soap_envelope)
-            ret_node = AXIS2_SOAP_ENVELOPE_GET_BASE_NODE(soap_envelope, &env);
-    /*}*/
-
+    soap_envelope = AXIS2_CALLBACK_GET_ENVELOPE(callback, &env);
+    if (soap_envelope)
+        ret_node = AXIS2_SOAP_ENVELOPE_GET_BASE_NODE(soap_envelope, &env);
                                                         
     if(ret_node)
     {
@@ -176,6 +173,8 @@
         AXIS2_OM_NODE_SERIALIZE (ret_node, &env, om_output);
         buffer = AXIS2_XML_WRITER_GET_XML(writer, &env);
         printf ("\nReceived OM node in XML : %s\n", buffer);
+        AXIS2_OM_OUTPUT_FREE(om_output, &env);
+        AXIS2_FREE(env->allocator, buffer);
     }
     else
     {
@@ -214,13 +213,14 @@
 
     AXIS2_OM_ELEMENT_SET_TEXT(text_om_ele, env, "echo5", text_om_node);
     
-    
     xml_writer = axis2_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE);
     om_output = axis2_om_output_create( env, xml_writer);
     
     AXIS2_OM_NODE_SERIALIZE(echo_om_node, env, om_output);
     buffer = AXIS2_XML_WRITER_GET_XML(xml_writer, env);         
     printf("\nSending OM node in XML : %s \n",  buffer); 
+    AXIS2_OM_OUTPUT_FREE(om_output, env);
+    AXIS2_FREE((*env)->allocator, buffer);
 
     return echo_om_node;
 }