[prev in list] [next in list] [prev in thread] [next in thread] 

List:       rampart-c-dev
Subject:    [jira] [Commented] (AXIS2C-1586) Memory leak in axis2_http_worker_process_request (http_worker.c)
From:       "Ivan Pechorin (JIRA)" <jira () apache ! org>
Date:       2012-06-15 17:48:43
Message-ID: 1459335176.19387.1339782523172.JavaMail.jiratomcat () issues-vm
[Download RAW message or body]


    [ https://issues.apache.org/jira/browse/AXIS2C-1586?page=com.atlassian.jira.plugin \
.system.issuetabpanels:comment-tabpanel&focusedCommentId=13295794#comment-13295794 ] 

Ivan Pechorin commented on AXIS2C-1586:
---------------------------------------

I'm not a committer, unfortunately.
Someone among the committers should review and apply this fix...
                
> Memory leak in axis2_http_worker_process_request (http_worker.c)
> ----------------------------------------------------------------
> 
> Key: AXIS2C-1586
> URL: https://issues.apache.org/jira/browse/AXIS2C-1586
> Project: Axis2-C
> Issue Type: Bug
> Components: core/transport
> Affects Versions: 1.6.0, 1.7.0, Current (Nightly)
> Environment: Solaris 10
> Reporter: Serghei Samsi
> Attachments: axis2-c-http_worker-out_stream.diff
> 
> 
> If trying to connect to HTTP based service (axis2_http_server) by using telnet and \
> simply exiting, appears memory leak which grows after each connect. How to \
> reproduce: Try many times
> # telnet <AXIS_IP> <AXIS_PORT>
> ^C
> Solaris MBD output (axis2_http_server binary was started with the following \
> environment: LD_PRELOAD=libumem.so.1 UMEM_DEBUG=default): umem_alloc_2304 leak: 1 \
> buffer, 2304 bytes ADDR          BUFADDR        TIMESTAMP           THREAD
> CACHE          LASTLOG         CONTENTS
> 810f380          8111c00    34aa8a030e830                2
> 80b3590                0                0
> libumem.so.1`umem_cache_alloc_debug+0x16c
> libumem.so.1`umem_cache_alloc+0x15c
> libumem.so.1`umem_alloc+0x3f
> libumem.so.1`malloc+0x23
> libaxutil.so.0.6.0`axutil_allocator_malloc_impl+0x1b
> libaxutil.so.0.6.0`axutil_stream_create_basic+0x57
> libaxis2_http_common.so.0.6.0`axis2_http_worker_process_request
> +0x20
> libaxis2_http_receiver.so.0.6.0`axis2_svr_thread_worker_func+0x
> 8c
> libaxutil.so.0.6.0`dummy_worker+0x10
> libc.so.1`_thr_setup+0x4e
> libc.so.1`_lwp_start
> umem_alloc_56 leak: 1 buffer, 56 bytes
> ADDR          BUFADDR        TIMESTAMP           THREAD
> CACHE          LASTLOG         CONTENTS
> 817a630          81799e8    34aa8a030d2fd                2
> 80a3010                0                0
> libumem.so.1`umem_cache_alloc_debug+0x16c
> libumem.so.1`umem_cache_alloc+0x15c
> libumem.so.1`umem_alloc+0x3f
> libumem.so.1`malloc+0x23
> libaxutil.so.0.6.0`axutil_allocator_malloc_impl+0x1b
> libaxutil.so.0.6.0`axutil_stream_create_internal+0x1e
> libaxutil.so.0.6.0`axutil_stream_create_basic+0x1e
> libaxis2_http_common.so.0.6.0`axis2_http_worker_process_request
> +0x20
> libaxis2_http_receiver.so.0.6.0`axis2_svr_thread_worker_func+0x
> 8c
> libaxutil.so.0.6.0`dummy_worker+0x10
> libc.so.1`_thr_setup+0x4e
> libc.so.1`_lwp_start
> The problems is in leaked out_stream:
> <code>
> AXIS2_EXTERN axis2_bool_t AXIS2_CALL
> axis2_http_worker_process_request(
> ...
> axutil_stream_t *out_stream = axutil_stream_create_basic(env);
> ...
> axis2_msg_ctx_set_transport_out_stream(msg_ctx, env, out_stream);
> ...
> return ...;
> <code>
> Comments on axis2_msg_ctx_set_transport_out_stream says that - citated "Here \
> out_stream is set into the in message context". But is msg_cts is null, out_stream \
> will never be freed. The basic idea is that stream should be created ONLY if \
> msg_ctx does exist. So the trivial patch which fixes mentioned problem:
> *** axis2c-src-1.6.0-orig/src/core/transport/http/common/http_worker.c  Mon Apr  6 \
>                 07:46:47 2009
> --- axis2c-src-1.6.0/src/core/transport/http/common/http_worker.c       Fri Feb  3 \
>                 14:07:33 2012
> ***************
> *** 115,121 ****
> axutil_stream_t *request_body = NULL;
> /* Creating out_stream as basic stream */
> !     axutil_stream_t *out_stream = axutil_stream_create_basic(env);
> axis2_http_simple_response_t *response = NULL;
> /* Transport in and out descriptions */
> --- 115,121 ----
> axutil_stream_t *request_body = NULL;
> /* Creating out_stream as basic stream */
> !     axutil_stream_t *out_stream = NULL;
> axis2_http_simple_response_t *response = NULL;
> /* Transport in and out descriptions */
> ***************
> *** 474,480 ****
> * To avoid double freeing of out_stream we reset the out message context at the end \
>                 of engine
> * receive function.
> */
> !     axis2_msg_ctx_set_transport_out_stream(msg_ctx, env, out_stream);
> headers = axis2_http_worker_get_headers(http_worker, env, simple_request);
> axis2_msg_ctx_set_transport_headers(msg_ctx, env, headers);
> --- 474,484 ----
> * To avoid double freeing of out_stream we reset the out message context at the end \
>                 of engine
> * receive function.
> */
> !     if (msg_ctx)
> !     {
> !       out_stream = axutil_stream_create_basic(env);
> !       axis2_msg_ctx_set_transport_out_stream(msg_ctx, env, out_stream);
> !     }
> headers = axis2_http_worker_get_headers(http_worker, env, simple_request);
> axis2_msg_ctx_set_transport_headers(msg_ctx, env, headers);

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: \
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more \
information on JIRA, see: http://www.atlassian.com/software/jira

        

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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic