You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Bill Stoddard <bi...@wstoddard.com> on 2001/03/08 00:16:09 UTC

mpm_winnt rewrite

I am about 75% complete with a rewrite of the Windows MPM.  Mr.Rowe pointed
out that MS does not look kindly to using DuplicateHandle on
IOCompletionPorts.  What works today may break with the next service pack.
Confirmed as much with a call to the MS support org. This has turned out to
be a -good- thing.  I was tossing about a rewrite to test some ideas and
this was just the catalyst to get me going.

The new model is -simpler- and from what I can tell so far just as fast as
the old model. And we still get graceful restarts.  The essence of the
change is this:  in the old model, I associated all the listening sockets
with an IOCompletionPort created in the parent process.  (and getting the
IOCompletionPort to the child was where DuplicateHandle came in handy). The
new model is similar to the Apache 1.3 Windows model.  A single accept
thread accepts connections off the listening sockets (using AcceptEx) and
posts an iocp to a new, child only, completion port on which the worker
thread pool is blocked.  I manage a queue of iocompletion contexts that are
passed from the worker threads when they are finished back to the accept
thread where they are reused.

I have it all working quite nicely with a single listener. Just need to
refine the accept loop to handle multiple listeners, do some testing and
I'll be ready to check in some code.  Probably next week.

Bill