]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
mpm_winnt: Remove an unnecessary Sleep() in the winnt_accept() function.
authorEvgeny Kotkov <kotkov@apache.org>
Tue, 11 Jul 2017 17:16:49 +0000 (17:16 +0000)
committerEvgeny Kotkov <kotkov@apache.org>
Tue, 11 Jul 2017 17:16:49 +0000 (17:16 +0000)
This sleep occured in a situation when:

 - We don't have a free completion context in the queue
 - We can't add one, as doing so would exceed the max_num_completion_contexts
   limit (all worker threads are busy)
 - We have exceeded a 1 second timeout while waiting for it

In this case, the Sleep() call is unnecessary, as there is no intermittent
failure that can be waited out, but rather than that, it's an ordinary
situation with all workers being busy.  Presumably, calling Sleep() here
can be even considered harmful, as it affects the fairness between the
listeners that are blocked waiting for the completion context.

So, instead of calling Sleep() just check for the possible shutdown and
immediately retry acquiring a completion context.  If all worker threads
are still busy, the retry will block in the same WaitForSingleObject() call,
which is fine.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1801639 13f79535-47bb-0310-9956-ffa450edef68

server/mpm/winnt/child.c

index 7cbaf81f4fdcc3e967976a1ad357c9ca50622691..2a336d75c0fc7959f1ccc4ba2acaef0b47fb21f0 100644 (file)
@@ -439,7 +439,6 @@ reinit: /* target of connect upon too many AcceptEx failures */
         if (!context) {
             rv = mpm_get_completion_context(&context);
             if (APR_STATUS_IS_TIMEUP(rv)) {
-                Sleep(100);
                 continue;
             }
             else if (rv) {