[ https://issues.apache.org/jira/browse/AXIS2C-1476?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13229132#comment-13229132 ]
Matthew Sweet commented on AXIS2C-1476: --------------------------------------- Firstly thanks to Sam for finding this - we've just tripped over it too and he has saved us hours of examining code. There is an underlying problem here. read has been declared as a size_t, rather than a long. size_t is unsigned. In error cases ap_get_client_block() returns negative values. Better than looking for 0xFFFFFFFF would be to declare read as being a long, as this will defend against people returning other negative values. Another possible enhancement would be to remember that a negative value has been returned, and do something to "close" the stream permanently. > 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-unsubscr...@axis.apache.org For additional commands, e-mail: c-dev-h...@axis.apache.org