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 via email to