axis-c-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matthew Sweet (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AXIS2C-1476) Memory leak when loosing connections
Date Thu, 15 Mar 2012 11:41:38 GMT

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

Matthew Sweet commented on AXIS2C-1476:
---------------------------------------

Here is what I came up with. It handles -ve return values and "remembers" that there was a
failure in both the read and skip functions:

diff -uNr clean/axis2c-src-1.5.0/src/core/transport/http/server/apache2/apache2_stream.c fixed/axis2c-src/src/core/transport/http/server/apache2/apache2_stream.c
--- clean/axis2c-src-1.5.0/src/core/transport/http/server/apache2/apache2_stream.c      2012-03-14
15:07:41.000000000 +0000
+++ fixed/axis2c-src-1.5.0/src/core/transport/http/server/apache2/apache2_stream.c      2012-03-14
11:37:35.000000000 +0000
@@ -94,7 +94,7 @@
     size_t count)
 {
     apache2_stream_impl_t *stream_impl = NULL;
-    size_t read = 0;
+    long read = 0;
     size_t len = 0;
     AXIS2_ENV_CHECK(env, AXIS2_CRITICAL_FAILURE);
 
@@ -107,11 +107,14 @@
         if (read > 0)
         {
             len += read;
+           continue;
         }
-        else
+       /* If we got an error remember it */
+        if(read < 0)
         {
-            break;
+           stream_impl->request->remaining = -1;
         }
+        break;
     }
 
     return (int)len;
@@ -160,6 +163,11 @@
         return -1;
     }
     len = ap_get_client_block(stream_impl->request, tmp_buffer, count);
+    /* If we got an error remember it */
+    if(len < 0)
+    {
+       stream_impl->request->remaining = -1;
+    }
     AXIS2_FREE(env->allocator, tmp_buffer);
     return len;
 

                
> Memory leak when loosing connections
> ------------------------------------
>
>                 Key: AXIS2C-1476
>                 URL: https://issues.apache.org/jira/browse/AXIS2C-1476
>             Project: Axis2-C
>          Issue Type: Bug
>          Components: httpd module
>    Affects Versions: 1.6.0
>         Environment: Windows 7 64-bit, Visual Studio 2010
>            Reporter: Sam Carleton
>            Priority: Blocker
>              Labels: ap_get_client_block, apache2_stream_read
>             Fix For: 1.7.0
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> I was load testing my apache code today by starting 50 clients which all start in a slide
show mode, pooling the server at least every 5 seconds.  I have a manager program that starts
the clients and does does an abort of the processes when I want to close them.  That is the
secret, the abort...
> I was watching memory usage while it ran, and all was fine, Apache held steady at around
55 megs.  Once I killed the 50 processes, all at the EXACT same time, well milliseconds apart,
the memory usage sky rocketed.  When I broke the code, I was in the mod_axis2::apache2_stream_read
function.
> It turns out that ap_get_client_block(...) was returning 0xFFFFFFFF to the read variable:
> read = ap_get_client_block(stream_impl->request, (char *) buffer + len,
>                            count - len);
> if (read > 0)
> It turns out that read is unsigned, so the 0xFFFFFFFF is NOT negative, so I changed the
code to read:
> if (read > 0 && read != 0xFFFFFFFF)
> All is well after the minor addition!

--
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


Mime
View raw message