threads. We want to get the workers in the pool of available threads ASAP
to keep perform_idle_server_maintenance from thrashing and starting too
many processes prematurely. The code before this patch would dribble workers
into the worker pool over an extended period of time and this prevented
perform_idle_server_maintenance from accurately deciding when new processes
were needed.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94889 13f79535-47bb-0310-9956-ffa450edef68
resolve some segfaults see when doing such restarts.
(Justin tweaked the palloc/memset in favor of calloc.)
Submitted by: Aaron Bannert
Reviewed by: Greg Ames, Sander Striker, Justin Erenkrantz
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94886 13f79535-47bb-0310-9956-ffa450edef68
If the worker thread synchronization is working properly, it's not
necessary to set these fields to NULL after removing an element from
the queue, and it's IMO more important to have a shorter code path
leading up to the mutex_unlock. I left in support for NULLing the
fields when debugging, though.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94850 13f79535-47bb-0310-9956-ffa450edef68
logic from the file descriptor queue, now that we can rely on the
idle worker reference count to keep the listener from trying to
push connections into a full queue
Reviewed by: Aaron Bannert (concept)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94845 13f79535-47bb-0310-9956-ffa450edef68
- Add a "state" variable to the worker_wakeup_info struct. This is
used to make sure that we act on the correct signal, and to know when
to shut down a worker thread.
- Fix the call when the worker thread waits for a connection to use
the new state variable and use mutexes around the cond_wait() call.
- Change the interrupt_all() call to set the WORKER_TERMINATED state.
- Add two AP_DEBUG_ASSERT() to make sure that we aren't waking up
a worker thread before it is idle.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94843 13f79535-47bb-0310-9956-ffa450edef68
- We don't need the listener_blocked flag, just check if the element
we're adding makes the stack non-empty.
- When we are terminated, return APR_EOF; catch this event in the
worker thread and the listener thread.
- When shutting down, always signal a potential listener thread.
- Wait to signal the listener thread until after we add the worker
element to the stack.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94841 13f79535-47bb-0310-9956-ffa450edef68
ap_queue_info_set_idle() more than once at a time per worker thread.
This fixes an assert coredump.
Submitted by: Aaron Bannert
Reviewed by: Brian Pane
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94840 13f79535-47bb-0310-9956-ffa450edef68
The advantage of doing this is that it enables us to guarantee that the
number of ptrans pools in existence at once is no greater than the
number of worker threads, and that we'll never have to delete ptrans
pools.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94830 13f79535-47bb-0310-9956-ffa450edef68
the listener thread from accept()ing more connections than there are
available workers. This prevents long-running requests from starving
connections that have been accepted but not yet processed.
The queue_info is a simple counter, mutex, and condition variable. Only
the listener thread blocks on the condition, and only when there are no
idle workers. In the fast path there is a mutex lock, integer decrement,
and and unlock (among a few conditionals). The worker threads each notify
the queue_info when they are about to block on the normal worker_queue
waiting for some connection to process, which wakes up any sleeping
listener thread to go perform another accept() in parallel.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94824 13f79535-47bb-0310-9956-ffa450edef68
dereference it in the for(...) loop. Attempting to dereference a NULL pointer
was causing a fault if there were no aliases found.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94819 13f79535-47bb-0310-9956-ffa450edef68
elements in the queue represent accept()ed connections, we want them
to be processed in the order that they were received. (I erroneously
converted it to a LIFO quite awhile ago in the hopes that it would
improve cache efficiency.)
Remember to perform a make clean in the worker directory after this patch,
since this patch changes the size of the fd_queue_t object (which is
allocated in worker.c).
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94813 13f79535-47bb-0310-9956-ffa450edef68
in question. We neglected to clear the FINFO_LINK bit that told us this
was lstat()ed, but also causes stat() to follow an lstat() approach.
This is part 2 of 2 to correct the NTFS Junction (symlink) bug.
Bugz report 8014, identified by Sam Morris <sam@netcity.co.uk>
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94778 13f79535-47bb-0310-9956-ffa450edef68
catch up the segment-count-sorted directory list without string compares.
Mostly affects win32 which jumps from seg 0 (root) to 4 for UNC path names.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94755 13f79535-47bb-0310-9956-ffa450edef68
by default and accept when set to off for the default handler, and would
reject only if set to accept for mod_cgi(d) and mod_isapi.
PR: 8234
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94751 13f79535-47bb-0310-9956-ffa450edef68
explicitly tell the server that warning messages should be sent
to the client in addition to being recorded in the error log.
Prior to this change, ap_log_rerror() always sent warning
messages to the client. In one case, a faulty CGI script caused
the server to send a warning message to the client that contained
the full path to the CGI script. This could be considered a
minor security exposure.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94744 13f79535-47bb-0310-9956-ffa450edef68
apr_atomic.h includes some <asm/*.h> header files that clash
with stdlib.h, so I've moved apr_atomic.h so that it's included
after all the other header files.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94734 13f79535-47bb-0310-9956-ffa450edef68
verified by the vast majority of folks complaining about the "Not a
handle" failures in WSADuplicateHandle, later in the code flow.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94712 13f79535-47bb-0310-9956-ffa450edef68
code within the critical region inside the spin locks. (Shortening
this code path reduces the probability that we'll have to spin.)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94706 13f79535-47bb-0310-9956-ffa450edef68