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/11/25 20:32:54 UTC

svn commit: r479178 - in /webservices/axis2/trunk/c: axiom/src/attachments/ axiom/src/om/ modules/core/transport/http/sender/ samples/client/mtom/

Author: samisa
Date: Sat Nov 25 11:32:53 2006
New Revision: 479178

URL: http://svn.apache.org/viewvc?view=rev&rev=479178
Log:
MTOM related memory leak fixes

Modified:
    webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c
    webservices/axis2/trunk/c/axiom/src/attachments/mime_body_part.c
    webservices/axis2/trunk/c/axiom/src/attachments/mime_output.c
    webservices/axis2/trunk/c/axiom/src/om/om_output.c
    webservices/axis2/trunk/c/axiom/src/om/om_text.c
    webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c
    webservices/axis2/trunk/c/samples/client/mtom/mtom_client.c

Modified: webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c?view=diff&rev=479178&r1=479177&r2=479178
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c (original)
+++ webservices/axis2/trunk/c/axiom/src/attachments/data_handler.c Sat Nov 25 11:32:53 2006
@@ -290,6 +290,14 @@
                     read_stream_size = 0;
                 }
             }
+            else
+            {
+                if (read_stream)
+                {
+                    AXIS2_FREE(env->allocator, read_stream);
+                    read_stream = NULL;
+                }
+            }
         }
         while (!feof(f));
 

Modified: webservices/axis2/trunk/c/axiom/src/attachments/mime_body_part.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/attachments/mime_body_part.c?view=diff&rev=479178&r1=479177&r2=479178
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/attachments/mime_body_part.c (original)
+++ webservices/axis2/trunk/c/axiom/src/attachments/mime_body_part.c Sat Nov 25 11:32:53 2006
@@ -17,6 +17,7 @@
 #include "axiom_mime_body_part.h"
 #include <axiom_data_handler.h>
 #include <axis2_hash.h>
+#include <stdio.h>
 
 typedef struct axiom_mime_body_part_impl
 {
@@ -107,6 +108,21 @@
 
     if (mime_body_part_impl->header_map)
     {
+        axis2_hash_index_t *hash_index = NULL;
+        const void *key = NULL;
+        void *value = NULL;
+        for (hash_index = axis2_hash_first(mime_body_part_impl->header_map, env);
+                    hash_index; hash_index = axis2_hash_next(env, hash_index))
+        {
+            axis2_hash_this(hash_index, &key, NULL, &value);
+            printf("key = %s\n", (char*) key);
+            if (value)
+            {
+                AXIS2_FREE(env->allocator, value);
+            }
+        }
+
+    
         axis2_hash_free(mime_body_part_impl->header_map, env);
         mime_body_part_impl->header_map = NULL;
     }
@@ -163,6 +179,7 @@
     const void *key = NULL;
     void *value = NULL;
     axis2_char_t *header_str = NULL;
+    axis2_char_t *temp_header_str = NULL;
     int header_str_size = 0;
     axis2_byte_t *data_handler_stream = NULL;
     int data_handler_stream_size = 0;
@@ -180,15 +197,31 @@
         axis2_hash_this(hash_index, &key, NULL, &value);
         if (key && value)
         {
-            header_str = AXIS2_STRACAT(header_str, (axis2_char_t*)key, env);
-            header_str = AXIS2_STRACAT(header_str, ": ", env);
-            header_str = AXIS2_STRACAT(header_str, (axis2_char_t*)value, env);
-            header_str = AXIS2_STRACAT(header_str, "\r\n", env);
+            temp_header_str = AXIS2_STRACAT(header_str, (axis2_char_t*)key, env);
+            if (header_str)
+            {
+                AXIS2_FREE(env->allocator, header_str);
+            }
+            header_str = temp_header_str;
+            temp_header_str = AXIS2_STRACAT(header_str, ": ", env);
+            AXIS2_FREE(env->allocator, header_str);
+            header_str = temp_header_str;
+            temp_header_str = AXIS2_STRACAT(header_str, (axis2_char_t*)value, env);
+            AXIS2_FREE(env->allocator, header_str);
+            header_str = temp_header_str;
+            temp_header_str = AXIS2_STRACAT(header_str, "\r\n", env);
+            AXIS2_FREE(env->allocator, header_str);
+            header_str = temp_header_str;
         }
     }
 
     if (mime_body_part_impl->data_handler)
-        header_str = AXIS2_STRACAT(header_str, "\r\n", env);
+    {
+        temp_header_str = AXIS2_STRACAT(header_str, "\r\n", env);
+        AXIS2_FREE(env->allocator, header_str);
+        header_str = temp_header_str;
+
+    }
 
     if (header_str)
         header_str_size = AXIS2_STRLEN(header_str);
@@ -224,9 +257,18 @@
     }
     /*TODO char2byte header_str */
     if (header_str)
+    {
         memcpy(byte_stream, header_str, header_str_size);
+        AXIS2_FREE(env->allocator, header_str);
+        header_str = NULL;
+    }
+
     if (data_handler_stream)
+    {
         memcpy(byte_stream + header_str_size, data_handler_stream, data_handler_stream_size);
+        AXIS2_FREE(env->allocator, data_handler_stream);
+        data_handler_stream = NULL;
+    }
 
     *output_stream = byte_stream;
     *output_stream_size = size;

Modified: webservices/axis2/trunk/c/axiom/src/attachments/mime_output.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/attachments/mime_output.c?view=diff&rev=479178&r1=479177&r2=479178
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/attachments/mime_output.c (original)
+++ webservices/axis2/trunk/c/axiom/src/attachments/mime_output.c Sat Nov 25 11:32:53 2006
@@ -175,7 +175,9 @@
 {
     axis2_status_t status = AXIS2_FAILURE;
     axis2_char_t *header_value = NULL;
+    axis2_char_t *temp_header_value = NULL;
     axis2_char_t *content_id_string = NULL;
+    axis2_char_t *temp_content_id_string = NULL;
     axiom_mime_body_part_t *root_mime_body_part = NULL;
     axis2_byte_t *output_stream_start = NULL;
     int output_stream_start_size = 0;
@@ -188,6 +190,7 @@
     axis2_byte_t *stream_buffer = NULL;
     int stream_buffer_size = 0;
     int soap_body_buffer_size = 0;
+    axis2_char_t *temp_soap_body_buffer;
 
     AXIS2_ENV_CHECK(env, NULL);
 
@@ -200,23 +203,36 @@
 
     /* content-type */
     header_value = AXIS2_STRDUP("application/xop+xml; charset=", env);
-    header_value = AXIS2_STRACAT(header_value, char_set_encoding, env);
-    header_value = AXIS2_STRACAT(header_value, "; type=\"", env);
-    header_value = AXIS2_STRACAT(header_value, soap_content_type, env);
-    header_value = AXIS2_STRACAT(header_value, "\";", env);
+    temp_header_value = AXIS2_STRACAT(header_value, char_set_encoding, env);
+    AXIS2_FREE(env->allocator, header_value);
+    header_value = temp_header_value;
+    temp_header_value = AXIS2_STRACAT(header_value, "; type=\"", env);
+    AXIS2_FREE(env->allocator, header_value);
+    header_value = temp_header_value;
+    temp_header_value = AXIS2_STRACAT(header_value, soap_content_type, env);
+    AXIS2_FREE(env->allocator, header_value);
+    header_value = temp_header_value;
+    temp_header_value = AXIS2_STRACAT(header_value, "\";", env);
+    AXIS2_FREE(env->allocator, header_value);
+    header_value = temp_header_value;
     AXIOM_MIME_BODY_PART_ADD_HEADER(root_mime_body_part, env, "content-type", header_value);
 
     /* content-transfer-encoding */
-    AXIOM_MIME_BODY_PART_ADD_HEADER(root_mime_body_part, env, "content-transfer-encoding", "binary");
+    AXIOM_MIME_BODY_PART_ADD_HEADER(root_mime_body_part, env, "content-transfer-encoding", axis2_strdup("binary", env));
 
     /* content-id */
     content_id_string = (axis2_char_t *)"<";
     content_id_string = AXIS2_STRACAT(content_id_string, content_id, env);
-    content_id_string = AXIS2_STRACAT(content_id_string, ">", env);
+    temp_content_id_string = AXIS2_STRACAT(content_id_string, ">", env);
+    AXIS2_FREE(env->allocator, content_id_string);
+    content_id_string = temp_content_id_string;
     AXIOM_MIME_BODY_PART_ADD_HEADER(root_mime_body_part, env, "content-id", content_id_string);
 
     axis2_write_body_part(mime_output, env, &output_stream_body, &output_stream_body_size, root_mime_body_part, boundary);
 
+    AXIOM_MIME_BODY_PART_FREE(root_mime_body_part, env);
+    root_mime_body_part = NULL;
+
     if (binary_node_list)
     {
         int j = 0;
@@ -277,7 +293,11 @@
 
     if (soap_body_buffer)
     {
-        soap_body_buffer = AXIS2_STRACAT(soap_body_buffer, "\r\n", env);
+        temp_soap_body_buffer = AXIS2_STRACAT(soap_body_buffer, "\r\n", env);
+        
+        AXIS2_FREE(env->allocator, soap_body_buffer);
+        soap_body_buffer = temp_soap_body_buffer;
+        
         soap_body_buffer_size = AXIS2_STRLEN(soap_body_buffer);
     }
 
@@ -386,6 +406,7 @@
     const axis2_char_t *content_type = "application/octet-stream";
     axiom_mime_body_part_t * mime_body_part = axiom_mime_body_part_create(env);
     axis2_char_t *content_id = (axis2_char_t *)"<";
+    axis2_char_t *temp_content_id = NULL;
     if (!mime_body_part)
         return NULL;
     data_handler = AXIOM_TEXT_GET_DATA_HANDLER(text, env);
@@ -399,10 +420,14 @@
             data_handler);
     content_id = AXIS2_STRACAT(content_id,
             AXIOM_TEXT_GET_CONTENT_ID(text, env), env);
-    content_id = AXIS2_STRACAT(content_id, ">", env);
+    temp_content_id = AXIS2_STRACAT(content_id, ">", env);
+    
+    AXIS2_FREE(env->allocator, content_id);
+    content_id = temp_content_id;
+    
     AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, "content-id", content_id);
-    AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, "content-type", content_type);
-    AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, "content-transfer-encoding", "binary");
+    AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, "content-type", axis2_strdup(content_type, env));
+    AXIOM_MIME_BODY_PART_ADD_HEADER(mime_body_part, env, "content-transfer-encoding", axis2_strdup("binary", env));
 
     return mime_body_part;
 }
@@ -502,37 +527,70 @@
         const axis2_char_t *soap_content_type)
 {
     axis2_char_t *content_type_string = NULL;
+    axis2_char_t *temp_content_type_string = NULL;
 
     AXIS2_ENV_CHECK(env, NULL);
 
     content_type_string = AXIS2_STRDUP("multipart/related", env);
-    content_type_string = AXIS2_STRACAT(content_type_string, "; ", env);
+    temp_content_type_string = AXIS2_STRACAT(content_type_string, "; ", env);
+    AXIS2_FREE(env->allocator, content_type_string);
+    content_type_string = temp_content_type_string;
     if (boundary)
     {
-        content_type_string = AXIS2_STRACAT(content_type_string, "boundary=", env);
-        content_type_string = AXIS2_STRACAT(content_type_string, boundary, env);
-        content_type_string = AXIS2_STRACAT(content_type_string, "; ", env);
-    }
-    content_type_string = AXIS2_STRACAT(content_type_string, "type=\"application/xop+xml\"", env);
-    content_type_string = AXIS2_STRACAT(content_type_string, "; ", env);
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, "boundary=", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, boundary, env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, "; ", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+    }
+    temp_content_type_string = AXIS2_STRACAT(content_type_string, "type=\"application/xop+xml\"", env);
+    AXIS2_FREE(env->allocator, content_type_string);
+    content_type_string = temp_content_type_string;
+    temp_content_type_string = AXIS2_STRACAT(content_type_string, "; ", env);
+    AXIS2_FREE(env->allocator, content_type_string);
+    content_type_string = temp_content_type_string;
     if (content_id)
     {
-        content_type_string = AXIS2_STRACAT(content_type_string, "start=\"<", env);
-        content_type_string = AXIS2_STRACAT(content_type_string, content_id , env);
-        content_type_string = AXIS2_STRACAT(content_type_string, ">\"", env);
-        content_type_string = AXIS2_STRACAT(content_type_string, "; ", env);
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, "start=\"<", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, content_id , env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, ">\"", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, "; ", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
     }
     if (soap_content_type)
     {
-        content_type_string = AXIS2_STRACAT(content_type_string, "start-info=\"", env);
-        content_type_string = AXIS2_STRACAT(content_type_string, soap_content_type, env);
-        content_type_string = AXIS2_STRACAT(content_type_string, "\"; ", env);
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, "start-info=\"", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, soap_content_type, env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, "\"; ", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
     }
     if (char_set_encoding)
     {
-        content_type_string = AXIS2_STRACAT(content_type_string, "charset=\"", env);
-        content_type_string = AXIS2_STRACAT(content_type_string, char_set_encoding, env);
-        content_type_string = AXIS2_STRACAT(content_type_string, "\"", env);
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, "charset=\"", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, char_set_encoding, env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
+        temp_content_type_string = AXIS2_STRACAT(content_type_string, "\"", env);
+        AXIS2_FREE(env->allocator, content_type_string);
+        content_type_string = temp_content_type_string;
     }
 
     return content_type_string;

Modified: webservices/axis2/trunk/c/axiom/src/om/om_output.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/om/om_output.c?view=diff&rev=479178&r1=479177&r2=479178
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/om/om_output.c (original)
+++ webservices/axis2/trunk/c/axiom/src/om/om_output.c Sat Nov 25 11:32:53 2006
@@ -314,6 +314,12 @@
         om_output_impl->binary_node_list = NULL;
     }
 
+    if (om_output_impl->mime_output)
+    {
+        AXIOM_MIME_OUTPUT_FREE(om_output_impl->mime_output, env);
+        om_output_impl->mime_output = NULL;
+    }
+
     if (om_output->ops)
     {
         AXIS2_FREE(env->allocator, om_output->ops);

Modified: webservices/axis2/trunk/c/axiom/src/om/om_text.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/axiom/src/om/om_text.c?view=diff&rev=479178&r1=479177&r2=479178
==============================================================================
--- webservices/axis2/trunk/c/axiom/src/om/om_text.c (original)
+++ webservices/axis2/trunk/c/axiom/src/om/om_text.c Sat Nov 25 11:32:53 2006
@@ -261,6 +261,12 @@
         text_impl->content_id = NULL;
     }
 
+    if (text_impl->om_attribute)
+    {
+        AXIOM_ATTRIBUTE_FREE(text_impl->om_attribute, env);
+        text_impl->om_attribute = NULL;
+    }
+
     if (om_text->ops)
     {
         AXIS2_FREE(env->allocator, om_text->ops);
@@ -279,6 +285,7 @@
     int status = AXIS2_SUCCESS;
     axiom_text_impl_t *om_text_impl = NULL;
     axis2_char_t *attribute_value = NULL;
+    axis2_char_t *temp_attribute_value = NULL;
     axis2_char_t *text = NULL;
     axiom_xml_writer_t *om_output_xml_writer = NULL;
 
@@ -305,9 +312,22 @@
                     om_text_impl->content_id = AXIS2_STRDUP(content_id, env);
             }
             attribute_value = AXIS2_STRDUP("cid:", env);
-            attribute_value = AXIS2_STRACAT(attribute_value, om_text_impl->content_id, env);
+            temp_attribute_value = AXIS2_STRACAT(attribute_value, om_text_impl->content_id, env);
+            AXIS2_FREE(env->allocator, attribute_value);
+            attribute_value = temp_attribute_value;
+
             /*send binary as MTOM optimised*/
+            if (om_text_impl->om_attribute)
+            {
+                AXIOM_ATTRIBUTE_FREE(om_text_impl->om_attribute, env);
+                om_text_impl->om_attribute = NULL;
+            }
+
             om_text_impl->om_attribute = axiom_attribute_create(env, "href", attribute_value, NULL);
+
+            AXIS2_FREE(env->allocator, attribute_value);
+            attribute_value = NULL;
+
             axiom_text_serialize_start_part(om_text, env, om_output);
 
             axiom_output_write_optimized(om_output, env, om_text);

Modified: webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c?view=diff&rev=479178&r1=479177&r2=479178
==============================================================================
--- webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c (original)
+++ webservices/axis2/trunk/c/modules/core/transport/http/sender/soap_over_http_sender.c Sat Nov 25 11:32:53 2006
@@ -442,6 +442,9 @@
 
     status_code = AXIS2_HTTP_CLIENT_SEND(sender_impl->client, env, request);
 
+    AXIS2_FREE(env->allocator, output_stream);
+    output_stream = NULL;
+
     AXIS2_FREE(env->allocator, buffer);
     buffer = NULL;
 

Modified: webservices/axis2/trunk/c/samples/client/mtom/mtom_client.c
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/c/samples/client/mtom/mtom_client.c?view=diff&rev=479178&r1=479177&r2=479178
==============================================================================
--- webservices/axis2/trunk/c/samples/client/mtom/mtom_client.c (original)
+++ webservices/axis2/trunk/c/samples/client/mtom/mtom_client.c Sat Nov 25 11:32:53 2006
@@ -37,7 +37,6 @@
     axiom_node_t *ret_node = NULL;
     const axis2_char_t *image_name = "resources/axis2.jpg";
     const axis2_char_t *to_save_name = "test.jpg";
-    axis2_property_t *property = NULL;
     axis2_endpoint_ref_t* reply_to = NULL;
 
 
@@ -63,9 +62,6 @@
 
     /* Create EPR with given address */
     endpoint_ref = axis2_endpoint_ref_create(env, address);
-    property = axis2_property_create(env);
-    AXIS2_PROPERTY_SET_SCOPE(property, env, AXIS2_SCOPE_APPLICATION);
-    AXIS2_PROPERTY_SET_VALUE(property, env, AXIS2_VALUE_TRUE);
 
     /* Setup options */
     options = axis2_options_create(env);
@@ -120,7 +116,10 @@
         axis2_char_t *om_str = NULL;
         om_str = AXIOM_NODE_TO_STRING(ret_node, env);
         if (om_str)
+        {
             printf("\nReceived OM : %s\n", om_str);
+            AXIS2_FREE(env->allocator, om_str);
+        }
         printf("\nmtom client invoke SUCCESSFUL!\n");
     }
     else
@@ -156,6 +155,7 @@
     axiom_node_t* data_om_node = NULL;
     axiom_text_t * data_text = NULL;
     axiom_namespace_t *ns1 = NULL;
+    axis2_char_t *om_str = NULL;
 
     axiom_data_handler_t *data_handler = NULL;
 
@@ -169,6 +169,11 @@
 
     data_handler = axiom_data_handler_create(env, image_name, "image/jpeg");
     data_text = axiom_text_create_with_data_handler(env, image_om_node, data_handler, &data_om_node);
-    printf("%s", AXIOM_NODE_TO_STRING(mtom_om_node, env));
+    om_str = AXIOM_NODE_TO_STRING(mtom_om_node, env);
+    if (om_str)
+    {
+        printf("%s", om_str);
+        AXIS2_FREE(env->allocator, om_str);
+    }
     return mtom_om_node;
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org