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!