[ 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-unsubscribe@axis.apache.org
For additional commands, e-mail: c-dev-help@axis.apache.org
|