Ivan Zhakov wrote:
Hi!We have Apache/Subversion server under Windows Server 2003. And I wascome
into problem with restarting server that process long request(more than 180
seconds). It's usual for bug Subversion repository. Isee messages like this in
error.log:[Thu Oct 13 02:28:01 2005] [notice] Child 3952: Terminating 1
threadsthat failed to exit.
I research problem and that mpm_winnt have hardcoded timeout forstopping working
threads:http://svn.apache.org/repos/asf/httpd/httpd/branches/2.0.x/server/mpm/winnt/child.c:child_main()/*
Give busy worker threads a chance to service their connections */ ap_log_error(APLOG_MARK,APLOG_NOTICE,
APR_SUCCESS, ap_server_conf, "Child %d: Waiting for %d worker threads to
exit.",my_pid, threads_created); end_time = time(NULL) + 180; while (threads_created) {
rv = wait_for_many_objects(threads_created, child_handles,end_time - time(NULL)); if (rv !=
WAIT_TIMEOUT) { rv = rv - WAIT_OBJECT_0; ap_assert((rv >= 0) && (rv <
threads_created)); cleanup_thread(child_handles, &threads_created, rv); continue;
} break; }
After this timeout Apache terminate worker threads. Why is it? Whympm_winnt
behavior incompatible to perfork behavior which waitsinfinityle for stopping
child processes? It causes really problems onmaintance and also doesn't permit
use MaxRequestsPerChild option.
PS: Sorry if it is not right place for such questions.
--Ivan Zhakov
Hi Ivan,
This is definitly the right place for this type of question. I think the few Win32 developers here (myself
included) always had this on their list of 'todo's'. The Windows MPM needs to be enhanced to reliably support
multiple child processes and when that's done, this will be fixed 'for free'.
Bill