found/fixed a bug in the mod_axis2 function: apache2_stream_read

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

found/fixed a bug in the mod_axis2 function: apache2_stream_read

Sam Carleton-2
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!

Sam

Reply | Threaded
Open this post in threaded view
|

Re: found/fixed a bug in the mod_axis2 function: apache2_stream_read

nandika jayawardana-2
Thanks for the bug fix. Can you create a jira for this issue and attach the patch.

Regards
Nandika


On Mon, May 3, 2010 at 8:07 AM, Sam Carleton <[hidden email]> wrote:
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!

Sam




--
http://nandikajayawardana.blogspot.com/
WSO2 Inc: http://www.wso2.com