Re: is httpd a valid way to start Apache?
On Thu, May 16, 2002 at 10:16:56PM -0701, Jos Backus wrote: On Thu, May 16, 2002 at 07:27:46PM -0700, Manoj Kasichainula wrote: I've (mostly) written replacements for supervise, setuidgid, and tcpserver. They use Single Unix APIs, haven't been ported to APR, and have no docs yet, but they are working for me. I imagine porting them to APR wouldn't be too painful, though they wouldn't remain the svelte 4-8kB binaries they are today. :) Interesting. I'm not sure how much benefit there would be from using APR though. Mainly portability to older Unixes that don't support some of the more modern calls I used (or that break Single Unix in ways that Linux doesn't). I guess autoconf, etc. would do the job as well. Are people interested in this code? I for one would be interested in seeing this. http://www.io.com/~manoj/file/mktool-0.0.7.tar.gz I've only built it on my Linux boxes; I haven't even tried FreeBSD yet, though I did try to avoid Linuxisms. The supervise replacement is called babysit (so it wouldn't be confused with the djb tool it tries to work as). I'll hopefully clean it up a bit more, and maybe even test and doc it more next week. I may be able to sell this to the FreeBSD people for inclusion in the base OS if the license allows it. That won't be a problem. :) Do you also have equivalents to svc, svstat and svok? I haven't written svc or svstat replacements yet; I've just used 'echo -n dx directory/control' in my scripts in the mean time. But they will be easy. There is an svok workalike called bsok in the tarball though.
Development documentation
Hello: I am new in the list and i don´t know if this is the correct place for my problem. I am doing a proyect with Apache and i need to know how works Apache internally. I need to look into its source code and try to understand how it goes more or less. My problem is that i have downloaded the latest version of the server httpd-2.0.36 and i have been looking into its source code but is really complex to try to understand it looking at first into the code, and i would like to know if there is some kind of guide or document anywhere that could explain in some way the source tree structure and the internals of the server, that could guide me to understand the source tree of apache. I apologize if this question is not apropiate in this mailing list. Thank you! _ Únase con MSN Hotmail al servicio de correo electrónico más grande del mundo. http://www.hotmail.com
Re: [PATCH 2] worker MPM deadlock
Is there a unix equivalent to the Win32 Sleep(0) call? If so, then we can rip out all this cruft and use the patch I posted earlier. Bill - Original Message - From: Brian Pane [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Tuesday, May 21, 2002 8:08 PM Subject: [PATCH 2] worker MPM deadlock Here is an updated worker patch. It fixes a race condition that the first patch didn't: it was possible for the listener thread to push multiple connections onto the fd queue between the cond_signal and the subsequent wakeup of the next worker. This caused problems because the idle worker count, which the listener used to decide when to accept more connections, didn't get decremented until the worker woke up. Thus the listener could overflow the connection queue. The fix, as implemented in this new patch, is to make the listener block if either: 1) there are no idle workers, or 2) the queue is full. This patch isn't a complete fix, as there is now an error case in which the listener thread fails to exit during shutdown. It needs some more testing and cleanup work. Meanwhile, I'm going to take another look at leader/follower, because IMHO the worker synchronization logic is getting far too complicated. --Brian Index: server/mpm/worker/fdqueue.h === RCS file: /home/cvs/httpd-2.0/server/mpm/worker/fdqueue.h,v retrieving revision 1.19 diff -u -r1.19 fdqueue.h --- server/mpm/worker/fdqueue.h 28 Apr 2002 23:12:35 - 1.19 +++ server/mpm/worker/fdqueue.h 21 May 2002 23:57:16 - @@ -71,16 +71,6 @@ #endif #include apr_errno.h -typedef struct fd_queue_info_t fd_queue_info_t; - -apr_status_t ap_queue_info_create(fd_queue_info_t **queue_info, - apr_pool_t *pool, int max_idlers); -apr_status_t ap_queue_info_set_idle(fd_queue_info_t *queue_info, -apr_pool_t *pool_to_recycle); -apr_status_t ap_queue_info_wait_for_idler(fd_queue_info_t *queue_info, - apr_pool_t **recycled_pool); -apr_status_t ap_queue_info_term(fd_queue_info_t *queue_info); - struct fd_queue_elem_t { apr_socket_t *sd; apr_pool_t*p; @@ -94,13 +84,19 @@ apr_thread_mutex_t *one_big_mutex; apr_thread_cond_t *not_empty; int terminated; +int idlers; +apr_thread_cond_t *idlers_available; +apr_pool_t**recycled_pools; +int num_recycled; }; typedef struct fd_queue_t fd_queue_t; apr_status_t ap_queue_init(fd_queue_t *queue, int queue_capacity, apr_pool_t *a); apr_status_t ap_queue_push(fd_queue_t *queue, apr_socket_t *sd, apr_pool_t *p); -apr_status_t ap_queue_pop(fd_queue_t *queue, apr_socket_t **sd, apr_pool_t **p); +apr_status_t ap_queue_pop(fd_queue_t *queue, apr_socket_t **sd, apr_pool_t **p, + apr_pool_t **recycled); apr_status_t ap_queue_interrupt_all(fd_queue_t *queue); +apr_status_t ap_queue_wait_for_idler(fd_queue_t *queue, apr_pool_t **recycled); apr_status_t ap_queue_term(fd_queue_t *queue); #endif /* FDQUEUE_H */ Index: server/mpm/worker/fdqueue.c === RCS file: /home/cvs/httpd-2.0/server/mpm/worker/fdqueue.c,v retrieving revision 1.22 diff -u -r1.22 fdqueue.c --- server/mpm/worker/fdqueue.c 29 Apr 2002 01:57:39 - 1.22 +++ server/mpm/worker/fdqueue.c 21 May 2002 23:57:16 - @@ -58,138 +58,6 @@ #include fdqueue.h -struct fd_queue_info_t { -int idlers; -apr_thread_mutex_t *idlers_mutex; -apr_thread_cond_t *wait_for_idler; -int terminated; -int max_idlers; -apr_pool_t**recycled_pools; -int num_recycled; -}; - -static apr_status_t queue_info_cleanup(void *data_) -{ -fd_queue_info_t *qi = data_; -int i; -apr_thread_cond_destroy(qi-wait_for_idler); -apr_thread_mutex_destroy(qi-idlers_mutex); -for (i = 0; i qi-num_recycled; i++) { -apr_pool_destroy(qi-recycled_pools[i]); -} -return APR_SUCCESS; -} - -apr_status_t ap_queue_info_create(fd_queue_info_t **queue_info, - apr_pool_t *pool, int max_idlers) -{ -apr_status_t rv; -fd_queue_info_t *qi; - -qi = apr_palloc(pool, sizeof(*qi)); -memset(qi, 0, sizeof(*qi)); - -rv = apr_thread_mutex_create(qi-idlers_mutex, APR_THREAD_MUTEX_DEFAULT, - pool); -if (rv != APR_SUCCESS) { -return rv; -} -rv = apr_thread_cond_create(qi-wait_for_idler, pool); -if (rv != APR_SUCCESS) { -return rv; -} -qi-recycled_pools = (apr_pool_t **)apr_palloc(pool, max_idlers * - sizeof(apr_pool_t *)); -qi-num_recycled =
Re: [PATCH 2] worker MPM deadlock
Bill Stoddard [EMAIL PROTECTED] writes: Is there a unix equivalent to the Win32 Sleep(0) call? If so, then we can rip out all this cruft and use the patch I posted earlier. google for pthread_yield() and compare the doc with the doc for Win32's Sleep(0). I suspect it is the same as long as we're dealing with pthreads. -- Jeff Trawick | [EMAIL PROTECTED] Born in Roswell... married an alien...
RE: [PATCH 2] worker MPM deadlock
From: [EMAIL PROTECTED] [mailto:trawick@rdu88-251- Bill Stoddard [EMAIL PROTECTED] writes: Is there a unix equivalent to the Win32 Sleep(0) call? If so, then we can rip out all this cruft and use the patch I posted earlier. google for pthread_yield() and compare the doc with the doc for Win32's Sleep(0). I suspect it is the same as long as we're dealing with pthreads. The biggest problem with pthread_yield is that it doesn't always do anything. Some pthreads implementations don't really implement pthread_yield, in fact, if I remember correctly AIX is one of those. I could be wrong about AIX though. I do know that when I first wrote the APR thread library, I specifically left out yield because it had different results on different platforms. Ryan
Re: [PATCH 2] worker MPM deadlock
From: [EMAIL PROTECTED] [mailto:trawick@rdu88-251- Bill Stoddard [EMAIL PROTECTED] writes: Is there a unix equivalent to the Win32 Sleep(0) call? If so, then we can rip out all this cruft and use the patch I posted earlier. google for pthread_yield() and compare the doc with the doc for Win32's Sleep(0). I suspect it is the same as long as we're dealing with pthreads. The biggest problem with pthread_yield is that it doesn't always do anything. Some pthreads implementations don't really implement pthread_yield, in fact, if I remember correctly AIX is one of those. You are thinking about the old draft 7 pthread implementation in AIX 4.? (where ?=2 if I recall correctly). I could be wrong about AIX though. I do know that when I first wrote the APR thread library, I specifically left out yield because it had different results on different platforms. You may be right but I would -hope- that a spec pthread implementation would handle pthread_yield() correctly... Bill
RE: [PATCH 2] worker MPM deadlock
Copying APR, because this is becoming an APR issue quickly. From: [EMAIL PROTECTED] [mailto:trawick@rdu88-251- Bill Stoddard [EMAIL PROTECTED] writes: Is there a unix equivalent to the Win32 Sleep(0) call? If so, then we can rip out all this cruft and use the patch I posted earlier. google for pthread_yield() and compare the doc with the doc for Win32's Sleep(0). I suspect it is the same as long as we're dealing with pthreads. The biggest problem with pthread_yield is that it doesn't always do anything. Some pthreads implementations don't really implement pthread_yield, in fact, if I remember correctly AIX is one of those. You are thinking about the old draft 7 pthread implementation in AIX 4.? (where ?=2 if I recall correctly). Yep, you are correct, even down to AIX 4.2. I could be wrong about AIX though. I do know that when I first wrote the APR thread library, I specifically left out yield because it had different results on different platforms. You may be right but I would -hope- that a spec pthread implementation would handle pthread_yield() correctly... The problem is that Single Unix doesn't even define pthread_yield, and neither does the pthreads spec if I am reading it right. It looks like they both require sched_yield, which should do the same thing, however. All I am saying is that this isn't a panacea, a lot more research would be needed before pthread_ or sched_ yield could be considered portable. Ryan
Re: Development documentation
http://httpd.apache.org/docs-2.0/developer/ Most people do not need to modify the server itself, but rather just write a module. In that case pick one of the simple ones that come in the distribution and see how things work. Have a look at Doug MacEachern's Writing Apache Modules with mod_perl and C It is an excellent book, but only covers 1.3 but a lot of the concepts are very similar and will help you get started Daniel On Wed, May 22, 2002 at 02:17:49PM +0200, Miguel Camargo wrote: Hello: I am new in the list and i don´t know if this is the correct place for my problem. I am doing a proyect with Apache and i need to know how works Apache internally. I need to look into its source code and try to understand how it goes more or less. My problem is that i have downloaded the latest version of the server httpd-2.0.36 and i have been looking into its source code but is really complex to try to understand it looking at first into the code, and i would like to know if there is some kind of guide or document anywhere that could explain in some way the source tree structure and the internals of the server, that could guide me to understand the source tree of apache. I apologize if this question is not apropiate in this mailing list. Thank you! _ Únase con MSN Hotmail al servicio de correo electrónico más grande del mundo. http://www.hotmail.com
Re: [PATCH 2] worker MPM deadlock
Bill Stoddard wrote: Is there a unix equivalent to the Win32 Sleep(0) call? If so, then we can rip out all this cruft and use the patch I posted earlier. Can you repost your patch (or post a link to an archived copy)? Thanks, --Brian
Is Apache Proxy Half-Duplex?
Hello, Experimenting with an Apache Proxy, I noticed that in version 1.3 (the latest cvs snapshot) it behaves in a half-duplex fashion. That is, it doesn't read the backend server response until it have finished transmitting the client's request body. This is pretty annoying, mainly if the request involves a very large post (file upload), and the backend sever response, after the headers, says Please wait patiently I wonder: are there any intentions to change this? It seems that full-duplex operation requires two threads per proxy, which is not how the Apache proxy server works. Is the situation different, or going to be different, in Apache 2? Just for reference, the Squid proxy doesn't suffer from this deficiency. Thanks for you attention, Zvi. -- Dr. Zvi Har'El mailto:[EMAIL PROTECTED] Department of Mathematics tel:+972-54-227607 Technion - Israel Institute of Technology fax:+972-4-8324654 http://www.math.technion.ac.il/~rl/ Haifa 32000, ISRAEL If you can't say somethin' nice, don't say nothin' at all. -- Thumper (1942) Wednesday, 12 Sivan 5762, 22 May 2002, 6:03PM
Re: [PATCH] exec cmd working with suexec
On Tue, May 21, 2002 at 01:03:03AM +0100, Colm MacCárthaigh wrote: The following patch reverts to the previous and documented bevahiour (exhibited by 1.3). Currently !--exec cmd does not work with suexec enabled as the proc.c will try to run : shell -c suexec uid gid ... so on. snip patch I should have mentioned, this patch resolves PR 8291. Also after applying this patch, SSI + suexec works fully except that !--#include file=some.cgi-- will run the cgi as the webserver user, and not the suexec user. Obviously a security hole. include virtual is not affected, Nor is the fsize directive. (they all use subrequests) The patch below fixes it by using the ap_sub_req_lookup_uri instead of ap_sub_req_lookup_file. Since the functionality of _uri is a superset of _file (afaict) this means that nothing valid in an include file directive will break. But it also means that some of what was previously invalid will (query string etc). Since include file has deprecated support anyway .. I'm not sure how big a deal it is that mod_include wouldnt be enforcing what include file should only be able to do. Colm Index: modules/filters/mod_include.c === RCS file: /home/cvspublic/httpd-2.0/modules/filters/mod_include.c,v retrieving revision 1.222 diff -u -r1.222 mod_include.c --- modules/filters/mod_include.c 17 May 2002 11:33:09 - 1.222 +++ modules/filters/mod_include.c 22 May 2002 09:26:39 - -1263,7 +1263,7 in parsed file %s; } else { -rr = ap_sub_req_lookup_file(parsed_string, r, f-next); +rr = ap_sub_req_lookup_uri(parsed_string, r, f-next); } } else {
Re: [PATCH 2] worker MPM deadlock
I don't know if this will actually work, haven't fully considered all failure possibilities. I think there are better implementations of the basic idea. Need to use atomic increment/decrement and replace the yield() call with pthread_yield() or whatever... Bill === RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v retrieving revision 1.117 diff -u -r1.117 worker.c --- worker.c 18 Apr 2002 17:46:20 - 1.117 +++ worker.c 26 Apr 2002 17:59:16 - @@ -156,6 +156,7 @@ */ int ap_threads_per_child = 0; /* Worker threads per child */ +static int worker_thread_cnt = 0; static int ap_daemons_to_start = 0; static int min_spare_threads = 0; static int max_spare_threads = 0; @@ -693,6 +694,14 @@ } if (listener_may_exit) break; +/* If no worker threads are available, yield our quanta and try again + * later + */ +if (!worker_thread_cnt) { +yield(); +continue; +} + if ((rv = SAFE_ACCEPT(apr_proc_mutex_lock(accept_mutex))) != APR_SUCCESS) { int level = APLOG_EMERG; @@ -791,6 +800,7 @@ signal_threads(ST_GRACEFUL); } if (csd != NULL) { +worker_thread_cnt--; rv = ap_queue_push(worker_queue, csd, ptrans, recycled_pool); if (rv) { @@ -852,6 +862,7 @@ while (!workers_may_exit) { ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_READY, NULL); +worker_thread_cnt++; rv = ap_queue_pop(worker_queue, csd, ptrans, last_ptrans); last_ptrans = NULL; - Original Message - From: Brian Pane [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, May 22, 2002 11:52 AM Subject: Re: [PATCH 2] worker MPM deadlock Bill Stoddard wrote: Is there a unix equivalent to the Win32 Sleep(0) call? If so, then we can rip out all this cruft and use the patch I posted earlier. Can you repost your patch (or post a link to an archived copy)? Thanks, --Brian
Re: [PATCH 2] worker MPM deadlock
Bill Stoddard wrote: I don't know if this will actually work, haven't fully considered all failure possibilities. I think there are better implementations of the basic idea. Need to use atomic increment/decrement and replace the yield() call with pthread_yield() or whatever... Bill === RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v retrieving revision 1.117 diff -u -r1.117 worker.c --- worker.c 18 Apr 2002 17:46:20 - 1.117 +++ worker.c 26 Apr 2002 17:59:16 - -156,6 +156,7 */ int ap_threads_per_child = 0; /* Worker threads per child */ +static int worker_thread_cnt = 0; static int ap_daemons_to_start = 0; static int min_spare_threads = 0; static int max_spare_threads = 0; -693,6 +694,14 } if (listener_may_exit) break; +/* If no worker threads are available, yield our quanta and try again + * later + */ +if (!worker_thread_cnt) { +yield(); +continue; +} + if ((rv = SAFE_ACCEPT(apr_proc_mutex_lock(accept_mutex))) != APR_SUCCESS) { int level = APLOG_EMERG; -791,6 +800,7 signal_threads(ST_GRACEFUL); } if (csd != NULL) { +worker_thread_cnt--; rv = ap_queue_push(worker_queue, csd, ptrans, recycled_pool); if (rv) { -852,6 +862,7 while (!workers_may_exit) { ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_READY, NULL); +worker_thread_cnt++; rv = ap_queue_pop(worker_queue, csd, ptrans, last_ptrans); last_ptrans = NULL; Thanks for re-posting. At first glance, what I like about this patch is that it creates a model in which the workers produce tokens and the listener consumes the tokens. This removes some of the race conditions associated with the my patch in which the workers do both the increment and the decrement. However, there's a problem with this approach (aside from the whole issue of spinning around the (worker_thread_count != 0) check). If the ap_queue_pop() function returns without actually acquiring a connection, you'll end up doubly incrementing the idle worker count (as the worker loop enters its next iteration). This can happen if the cond_wait gets interrupted. I believe Aaron has some test cases in which this has happened, and I saw what I think is this same phenomenon yesterday when debugging. --Brian
Re: [PATCH 2] worker MPM deadlock
Bill Stoddard wrote: I don't know if this will actually work, haven't fully considered all failure possibilities. I think there are better implementations of the basic idea. Need to use atomic increment/decrement and replace the yield() call with pthread_yield() or whatever... Bill === RCS file: /home/cvs/httpd-2.0/server/mpm/worker/worker.c,v retrieving revision 1.117 diff -u -r1.117 worker.c --- worker.c 18 Apr 2002 17:46:20 - 1.117 +++ worker.c 26 Apr 2002 17:59:16 - -156,6 +156,7 */ int ap_threads_per_child = 0; /* Worker threads per child */ +static int worker_thread_cnt = 0; static int ap_daemons_to_start = 0; static int min_spare_threads = 0; static int max_spare_threads = 0; -693,6 +694,14 } if (listener_may_exit) break; +/* If no worker threads are available, yield our quanta and try again + * later + */ +if (!worker_thread_cnt) { +yield(); +continue; +} + if ((rv = SAFE_ACCEPT(apr_proc_mutex_lock(accept_mutex))) != APR_SUCCESS) { int level = APLOG_EMERG; -791,6 +800,7 signal_threads(ST_GRACEFUL); } if (csd != NULL) { +worker_thread_cnt--; rv = ap_queue_push(worker_queue, csd, ptrans, recycled_pool); if (rv) { -852,6 +862,7 while (!workers_may_exit) { ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_READY, NULL); +worker_thread_cnt++; rv = ap_queue_pop(worker_queue, csd, ptrans, last_ptrans); last_ptrans = NULL; Thanks for re-posting. At first glance, what I like about this patch is that it creates a model in which the workers produce tokens and the listener consumes the tokens. This removes some of the race conditions associated with the my patch in which the workers do both the increment and the decrement. However, there's a problem with this approach (aside from the whole issue of spinning around the (worker_thread_count != 0) check). If the ap_queue_pop() function returns without actually acquiring a connection, you'll end up doubly incrementing the idle worker count (as the worker loop enters its next iteration). This can happen if the cond_wait gets interrupted. I believe Aaron has some test cases in which this has happened, and I saw what I think is this same phenomenon yesterday when debugging. --Brian Yep this is a problem. I believe the pthread spec states that the cond_wait can be spuriously triggered. Bill
Re: [PATCH 2] worker MPM deadlock
On Wed, May 22, 2002 at 01:31:06PM -0400, Bill Stoddard wrote: Yep this is a problem. I believe the pthread spec states that the cond_wait can be spuriously triggered. I'm pretty sure it does, which is why we always check for the condition when we wake up and go right back to sleep if the condition hasn't been met. -aaron
Re: [PATCH] Implement -k option for httpd
Here is another pass at it, starting with some of Justin's code but trying to work out a more agreeable place for some of the function. This puts the -k parsing in a rewrite_args hook (one for the Unix MPMs is implemented in mpm_common.c) and puts the actual signalling code in an optional function called from main() (again, one for the Unix MPMs is implemented in mpm_common.c). This patch concentrates on distributing the work to the right places. It only implements -k stop, it is only enabled for the prefork MPM (easy to enable for other MPMs), and I didn't sort out the httpd help text (gross). Hopefully this won't break anybody, and it can be quickly filled in with the necessary details. Any comments/concerns? There must be at least ten improvements to this that different people can think of :) Index: include/http_log.h === RCS file: /home/cvs/httpd-2.0/include/http_log.h,v retrieving revision 1.36 diff -u -r1.36 http_log.h --- include/http_log.h 17 May 2002 10:48:06 - 1.36 +++ include/http_log.h 22 May 2002 17:36:39 - @@ -240,6 +240,14 @@ */ AP_DECLARE(void) ap_log_pid(apr_pool_t *p, const char *fname); +/** + * Retrieve the pid from a pidfile. + * @param p The pool to use for logging + * @param filename The name of the file containing the pid + * @param mypid Pointer to pid_t (valid only if return APR_SUCCESS) + */ +AP_DECLARE(apr_status_t) ap_read_pid(apr_pool_t *p, const char *filename, pid_t +*mypid); + typedef struct piped_log piped_log; /** Index: include/http_main.h === RCS file: /home/cvs/httpd-2.0/include/http_main.h,v retrieving revision 1.23 diff -u -r1.23 http_main.h --- include/http_main.h 17 Apr 2002 16:36:27 - 1.23 +++ include/http_main.h 22 May 2002 17:36:39 - @@ -59,6 +59,8 @@ #ifndef APACHE_HTTP_MAIN_H #define APACHE_HTTP_MAIN_H +#include apr_optional.h + /* AP_SERVER_BASEARGS is the command argument list parsed by http_main.c * in apr_getopt() format. Use this for default'ing args that the MPM * can safely ignore and pass on from its rewrite_args() handler. @@ -88,6 +90,8 @@ /** An array of all -D defines on the command line. This allows people to * effect the server based on command line options */ AP_DECLARE_DATA extern apr_array_header_t *ap_server_config_defines; + +APR_DECLARE_OPTIONAL_FN(int, ap_signal_server, (int *, apr_pool_t *)); #ifdef __cplusplus } Index: include/mpm_common.h === RCS file: /home/cvs/httpd-2.0/include/mpm_common.h,v retrieving revision 1.36 diff -u -r1.36 mpm_common.h --- include/mpm_common.h29 Mar 2002 16:21:48 - 1.36 +++ include/mpm_common.h22 May 2002 17:36:39 - @@ -280,6 +280,11 @@ const char *arg); #endif +#ifdef AP_MPM_WANT_SIGNAL_SERVER +int ap_signal_server(int *, apr_pool_t *); +void ap_mpm_rewrite_args(process_rec *); +#endif + #ifdef __cplusplus } #endif Index: server/log.c === RCS file: /home/cvs/httpd-2.0/server/log.c,v retrieving revision 1.120 diff -u -r1.120 log.c --- server/log.c17 May 2002 11:11:37 - 1.120 +++ server/log.c22 May 2002 17:36:39 - @@ -626,6 +626,55 @@ saved_pid = mypid; } +AP_DECLARE(apr_status_t) ap_read_pid(apr_pool_t *p, const char *filename, + pid_t *mypid) +{ +const int BUFFER_SIZE = sizeof(long) * 3 + 2; /* see apr_ltoa */ +apr_file_t *pid_file = NULL; +apr_status_t rv; +const char *fname; +char *buf, *endptr; +apr_size_t bytes_wanted, bytes_read; + +if (!filename) { +return APR_EGENERAL; +} + +fname = ap_server_root_relative(p, filename); +if (!fname) { +ap_log_error(APLOG_MARK, APLOG_STARTUP|APLOG_CRIT, APR_EBADPATH, + NULL, Invalid PID file path %s, ignoring., filename); +return APR_EGENERAL; +} + +rv = apr_file_open(pid_file, fname, APR_READ, APR_OS_DEFAULT, p); +if (rv != APR_SUCCESS) { +return rv; +} + +bytes_wanted = BUFFER_SIZE; +endptr = buf = apr_palloc(p, BUFFER_SIZE); +do { +bytes_read = bytes_wanted; +rv = apr_file_read(pid_file, endptr, bytes_read); +if (rv != APR_SUCCESS rv != APR_EOF) { +return rv; +} +bytes_wanted -= bytes_read; +endptr += bytes_read; +} +while (bytes_wanted 0 rv != APR_EOF); + +*mypid = strtol(buf, endptr, 10); +/* We only know for sure that the beginning part is the pid. */ +if (*buf == '\0' || *endptr != '\n') { +return APR_EGENERAL; +} + +apr_file_close(pid_file); +return APR_SUCCESS; +} + AP_DECLARE(void) ap_log_assert(const char *szExp, const char *szFile, int nLine) {
RE: [PATCH 2] worker MPM deadlock
From: Aaron Bannert [mailto:[EMAIL PROTECTED]] On Wed, May 22, 2002 at 01:31:06PM -0400, Bill Stoddard wrote: Yep this is a problem. I believe the pthread spec states that the cond_wait can be spuriously triggered. I'm pretty sure it does, which is why we always check for the condition when we wake up and go right back to sleep if the condition hasn't been met. I'll raise you and say without a doubt, pthread_cond can be triggered spuriously. Ryan
Re: [PATCH 2] worker MPM deadlock
Ryan Bloom [EMAIL PROTECTED] writes: From: Aaron Bannert [mailto:[EMAIL PROTECTED]] On Wed, May 22, 2002 at 01:31:06PM -0400, Bill Stoddard wrote: Yep this is a problem. I believe the pthread spec states that the cond_wait can be spuriously triggered. I'm pretty sure it does, which is why we always check for the condition when we wake up and go right back to sleep if the condition hasn't been met. I'll raise you and say without a doubt, pthread_cond can be triggered spuriously. Yep, I too have seen it repeatedly. Infuriating to have to code for something like that. -- Jeff Trawick | [EMAIL PROTECTED] Born in Roswell... married an alien...
Re: [PATCH 2] worker MPM deadlock
On Wed, May 22, 2002 at 01:50:44PM -0400, Cliff Woolley wrote: Right. pthread_yield seems to be a non-portable extension, if I'm reading right. From /usr/include/pthread.h on Linux: #ifdef __USE_GNU /* Yield the processor to another thread or process. This function is similar to the POSIX `sched_yield' function but might be differently implemented in the case of a m-on-n thread implementation. */ extern int pthread_yield (void) __THROW; #endif But likewise, yield() is not portable and neither is sched_yield(). This is why we need apr_thread_yield() to be implemented on Unix, as I mentioned the last time this came up. But it's not. void apr_thread_yield() { } The reason it's not implemented is because it's not guaranteed to do anything. Yielding is up to the discresion of the underlying system, and depending on many things it may behave differently. We can not get predictable scheduling with any variant of yield() in a way that will be portable. The only method we have right now for predictable scheduling in APR is apr_thread_cond.h. -aaron
Re: cvs commit: apache-1.3 STATUS
On 22 May 2002 [EMAIL PROTECTED] wrote: jim 02/05/22 07:15:28 Modified:.STATUS Log: Not a showstopper but something Martin has expressed an interest in seeing resolved in 1.3.25 Revision ChangesPath 1.999 +6 -4 apache-1.3/STATUS RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: + +* [PATCH] 1.3: Stricter check on request_line format + (Message-ID: [EMAIL PROTECTED]) + Status: Martin thinks this should be addressed Wasn't this already committed a day or two ago? --Cliff -- Cliff Woolley [EMAIL PROTECTED] Charlottesville, VA
Re: [PATCH 2] worker MPM deadlock
On Wed, 22 May 2002, Aaron Bannert wrote: The reason it's not implemented is because it's not guaranteed to do anything. Yielding is up to the discresion of the underlying system, and depending on many things it may behave differently. We can not get predictable scheduling with any variant of yield() in a way that will be portable. The only method we have right now for predictable scheduling in APR is apr_thread_cond.h. I'd say it's up to us to guarantee that it *does* do something on a cross-platform basis. That's APR's job. If we're not going to do that, then it needs to go away. Having a function in the API that doesn't do what it's supposed to do uniformly across platforms is bad karma. It works on Win32, why shouldn't it work on Unix? --Cliff -- Cliff Woolley [EMAIL PROTECTED] Charlottesville, VA
dist/httpd/
Anyone mind if I make the following changes: - Make subdirectories for flood and apreq and move releases there. - Rename httpd-2.0.36-win32.zip to httpd-2.0.36-source_only-win32.zip There seems to be a ton of people downloading the win32.zip, and I imagine the majority of them are just confusing themselves. Joshua.
Re: dist/httpd/
On Wed, 22 May 2002, Joshua Slive wrote: - Make subdirectories for flood and apreq and move releases there. +1 - Rename httpd-2.0.36-win32.zip to httpd-2.0.36-source_only-win32.zip How about just -srconly- or -src- instead of -source_only- ? That's an awfully long filename. But +1 either way. --Cliff -- Cliff Woolley [EMAIL PROTECTED] Charlottesville, VA
Authentication requirement
httpd2.0.35 server/protocol.c Is there any reason why ap_get_basic_auth_pw() rejects authentication itself if the client provides no Auth line? I can see a theoretical reason, but it seems to me that the practical reasons not to do this would outweigh that. If I specify a module or set of modules to handle authentication, why is the base server getting involved in the decision at all? Line 1081: if (!auth_line) { ap_note_basic_auth_failure(r); return HTTP_UNAUTHORIZED; } I use a hack currently that changes the above rejection to fill in auth fields with 0 length strings and presume Basic type. It's probably not the right way to do things, but it seems to have the least chance of breaking any existing modules (unless someone actually uses a blank login/password). I'm using a module that controls access to directories and files. It doesn't always require a login/password, but for some files/directories it does. It uses a database to determine what kind of credentials are needed to access any given resource. Naturally there's a problem if the resource shouldn't require a login/password, but the module isn't even being prompted for that, instead the Apache server is rejecting it immediately. Am I missing some straightforward way to avoid this without altering the code? Is there any reason why an auth module can't be passed every request in it's domain regardless of how seemingly obvious it is that the request will fail? Andrew Mann
RE: dist/httpd/
From: Cliff Woolley [mailto:[EMAIL PROTECTED]] Sent: 22 May 2002 20:06 On Wed, 22 May 2002, Joshua Slive wrote: - Make subdirectories for flood and apreq and move releases there. +1 - Rename httpd-2.0.36-win32.zip to httpd-2.0.36-source_only-win32.zip How about just -srconly- or -src- instead of -source_only- ? That's an awfully long filename. But +1 either way. +1, specifically for 'src'. And maybe add a descriptive AddDescription entry for it to the .htaccess file. Sander
Re: [PATCH 2] worker MPM deadlock
On Wed, 22 May 2002, Aaron Bannert wrote: CPU since it hits none of the yieldable system calls. On systems that do true context switching between userspace threads, this doesn't need to be implemented. It in no way guarantees that the execution will be yielded, since that's up to the scheduling mechanism. If it isn't guaranteed to do something but is rather just a hint, that's fine, as long as it's documented. But we should still make an attempt to honor the hint if the underlying system will let us. [For example, I know my research work frequently requires these hints because ~10ms is far too long a timeslice in my field, and I love using APR for my research projects... I personally just assumed apr_thread_yield() did what I wanted until I looked into it and found that it did nothing.] --Cliff -- Cliff Woolley [EMAIL PROTECTED] Charlottesville, VA
Re: [PATCH 2] worker MPM deadlock
On Wed, May 22, 2002 at 02:14:30PM -0400, Cliff Woolley wrote: If it isn't guaranteed to do something but is rather just a hint, that's fine, as long as it's documented. But we should still make an attempt to honor the hint if the underlying system will let us. [For example, I know my research work frequently requires these hints because ~10ms is far too long a timeslice in my field, and I love using APR for my research projects... I personally just assumed apr_thread_yield() did what I wanted until I looked into it and found that it did nothing.] [moving this discussion to APR] FWIW, here's the top of the thread that introduced this API: http:[EMAIL PROTECTED]%3e You bring up a good point, so my only question is whether we know how to implement this on all the unix thread libraries out there. -aaron
Re: cvs commit: apache-1.3 STATUS
Yes it was! This should have been committed awhile ago (I thought it had!) :/ At 1:56 PM -0400 5/22/02, Cliff Woolley wrote: On 22 May 2002 [EMAIL PROTECTED] wrote: jim 02/05/22 07:15:28 Modified:.STATUS Log: Not a showstopper but something Martin has expressed an interest in seeing resolved in 1.3.25 Revision ChangesPath 1.999 +6 -4 apache-1.3/STATUS RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: + +* [PATCH] 1.3: Stricter check on request_line format + (Message-ID: [EMAIL PROTECTED]) + Status: Martin thinks this should be addressed Wasn't this already committed a day or two ago? --Cliff -- Cliff Woolley [EMAIL PROTECTED] Charlottesville, VA -- === Jim Jagielski [|] [EMAIL PROTECTED] [|] http://www.jaguNET.com/ A society that will trade a little liberty for a little order will lose both and deserve neither - T.Jefferson
Re: libexpat
Doug MacEachern wrote: httpd links in expat, perl extension links against a different version of expat. both have the same symbol names, and they are not binary compatible. perl extension resolves symbols to the httpd version. kaboom. its been an issue for years with 1.3, you'll find plenty in the modperl archives on it. Speaking of 1.3 expat, I built a 1.3.24 Linux binary on my Mandrake 8.0 laptop the other day with binbuild.sh. I was surpised when one of the IBM testers told me he couldn't bring it up on his SuSE box, because it couldn't find libexpat.so.0 or some such. It turns out that my ThinkPad has native expat support installed; the SuSE box doesn't. The Configure script prefers the system's expat to our bundled version. Makes sense, except for binbuilds where supporting the lowest common denominator is a winner. I hacked Configure to bundle our expat and the SuSE tester was happy. When I mentioned this to other Apachers around here, I got differing opinions on what the Right Thing is for a binbuild. One thought was to disable expat altogether in 1.3 binbuilds since they don't include mod_dav. Another thought was to always bundle expat so that external modules can use it. I wouldn't mind spending a little time to resolve this if we had a consensus on what it should do. Doug and Will's comments make disabling expat in 1.3 binbuilds sound better. Greg
Re: libexpat
Doug MacEachern wrote: On Tue, 21 May 2002, Greg Stein wrote: Euh... we switched over to a shared library to specifically fix this problem. Are you saying that that didn't work? I'm not buying it... :-) sooo, i guess the answer to my question on how to disable expat is you can't ? Which release of httpd? 1.3 has a Configure rule to turn off expat. Greg
Re: [PATCH 2] worker MPM deadlock
On Wed, May 22, 2002 at 01:59:02PM -0400, Cliff Woolley wrote: On Wed, 22 May 2002, Aaron Bannert wrote: The reason it's not implemented is because it's not guaranteed to do anything. Yielding is up to the discresion of the underlying system, and depending on many things it may behave differently. We can not get predictable scheduling with any variant of yield() in a way that will be portable. The only method we have right now for predictable scheduling in APR is apr_thread_cond.h. I'd say it's up to us to guarantee that it *does* do something on a cross-platform basis. That's APR's job. If we're not going to do that, then it needs to go away. Having a function in the API that doesn't do what it's supposed to do uniformly across platforms is bad karma. It works on Win32, why shouldn't it work on Unix? IIRC, this function exists so that netware and other single-multiplexed-process based thread libraries can have finer-grain control over execution sharing. The use case is a large computationally expensive function that hogs the CPU for a long time and can't yield the CPU since it hits none of the yieldable system calls. On systems that do true context switching between userspace threads, this doesn't need to be implemented. It in no way guarantees that the execution will be yielded, since that's up to the scheduling mechanism. -aaron Aaron, That is very disturbing but makes a lot of sense. Now I wonder if Sleep(0) on WinNT -really- behaves as documented... Bill
Re: dist/httpd/
At 01:00 PM 5/22/2002, Joshua Slive wrote: Anyone mind if I make the following changes: - Make subdirectories for flood and apreq and move releases there. Sounds Cool. - Rename httpd-2.0.36-win32.zip to httpd-2.0.36-source_only-win32.zip Allow me to make some changes first. There seems to be a ton of people downloading the win32.zip, and I imagine the majority of them are just confusing themselves. I've seen far fewer complaints since .36 when I rewrote the first few sentences about what the downloads are. Download precompiled binaries/ for your platform, or download the source: where precompiled binaries/ is an href to binaries/ ... can still be better worded.
Re: libexpat
On Wed, 22 May 2002, Greg Ames wrote: Which release of httpd? 1.3 has a Configure rule to turn off expat. right. i'm asking about 2.0 (my original message specified)
Re: dist/httpd/
On Wed, 22 May 2002, William A. Rowe, Jr. wrote: There seems to be a ton of people downloading the win32.zip, and I imagine the majority of them are just confusing themselves. I've seen far fewer complaints since .36 when I rewrote the first few sentences about what the downloads are. Download precompiled binaries/ for your platform, or download the source: where precompiled binaries/ is an href to binaries/ ... can still be better worded. I believe you, but I just did a quick scan of http://www.apache.org/server-status and I saw more people downloading win32.zip than the win32 binary. I'm just guessing that most of these people are lost. Joshua.
Re: cvs commit: httpd-dist HEADER.html
On 22 May 2002 [EMAIL PROTECTED] wrote: wrowe 02/05/22 13:13:08 Modified:.HEADER.html Log: Attempt to cool off download hell. Simplify the HEADER to just what we MUST state up front, so folks will take the time to read it. Not to discourage you, but I should note that many of our mirrors do not display HEADER and README. And, since we IndexIgnore those files, they are totally invisible on some mirrors. That is one reason for making sure the filenames themselves are clear. Joshua.
win32 changes from 1.3
In 1.3 we did not need to specify a drive letter for ServerRoot and DocumentRoot paths but in 2.0 it appears we must specify the drive letter or Apache will not start as a service. (note: the 2.0.36 .msi install sets the drive letter so this limitation is not immediately apparent to those users). Also, in 1.3 the -k stop/restart directives worked even if you started Apache from the command line. Now it appears that -k is only effective when running as a service. Were these changes intentional or did they slip in inadvertently? Allan
Re: cvs commit: httpd-dist HEADER.html
At 03:28 PM 5/22/2002, Joshua wrote: On 22 May 2002 [EMAIL PROTECTED] wrote: wrowe 02/05/22 13:13:08 Modified:.HEADER.html Log: Attempt to cool off download hell. Simplify the HEADER to just what we MUST state up front, so folks will take the time to read it. Not to discourage you, but I should note that many of our mirrors do not display HEADER and README. And, since we IndexIgnore those files, they are totally invisible on some mirrors. That is one reason for making sure the filenames themselves are clear. Agreed... and all the more reason that README should spell out all of the notes the user should READ before downloading :-) HEADER is now a fairly flat entry. Perhaps we should duplicate the first h2/p section into README for that very reason [HTTP Server Source Code Distribution]? And agreed ... are there any objections to renaming all of the tarball files in that directory as -src ? It sure seems like a good decision, I know I get confused after throwing a dozen downloads into the same project directory on my machine. -src is goodness in my book (across the board, unix and win32 included.) So for win32 we end up with the somewhat wordy but extremely clear -win32-build-src.zip Bill
Re: dist/httpd/
On Wed, May 22, 2002 at 02:22:03PM -0500, William A. Rowe, Jr. wrote: ... - Rename httpd-2.0.36-win32.zip to httpd-2.0.36-source_only-win32.zip Allow me to make some changes first. Um. How is httpd-2.0.36-win32.zip different from the .tar.gz ? In other words, if we're talking about source distributions, then why isn't it simply httpd-2.0.36.zip ? Cheers, -g -- Greg Stein, http://www.lyra.org/
Re: dist/httpd/
On Wed, 22 May 2002, Greg Stein wrote: Um. How is httpd-2.0.36-win32.zip different from the .tar.gz ? In other words, if we're talking about source distributions, then why isn't it simply httpd-2.0.36.zip ? DOS-friendly CRLF line endings in the source files.
RE: win32 changes from 1.3
If your cwd is on another volume, that's a problem. This hurts services, since the cwd will always be c:\winnt\system32\. Yep, was installed on a non-C: drive I suggest we cwd to the server root on startup. We can do this in the winnt_mpm, or for all platforms in main(). Opinions? +1 - at least for Windows -k preferring a service was a deliberate change. That was my guess, but I had to ask :) Allan
Re: dist/httpd/
At 04:52 PM 5/22/2002, you wrote: On Wed, May 22, 2002 at 02:22:03PM -0500, William A. Rowe, Jr. wrote: ... - Rename httpd-2.0.36-win32.zip to httpd-2.0.36-source_only-win32.zip Allow me to make some changes first. Um. How is httpd-2.0.36-win32.zip different from the .tar.gz ? In other words, if we're talking about source distributions, then why isn't it simply httpd-2.0.36.zip ? It contains the Win32 .mak files and awk-generated .rc files, and is in text cr/lf format. Ergo I've renamed it more properly -win32-build. In fact, ignoring the .mak/.rc issues, and transposing lf endings for crlf text files, it can be built on Unix. Netware, who has all these packed up build files to untangle, might also benefit from a -netware-build.zip version. The point being, these are alternative builds (such as, perhaps, a -darwin-build.tar.gz version.) And Josh and I are suggesting we add -src to the end of every package name in the source distro directory. Bill
Re: dist/httpd/
And Josh and I are suggesting we add -src to the end of every package name in the source distro directory. +1 -aaron
[STATUS] (apache-1.3) Wed May 22 23:45:06 EDT 2002
APACHE 1.3 STATUS: -*-text-*- Last modified at [$Date: 2002/05/22 18:06:38 $] Release: 1.3.25-dev: In development A release is proposed for end of May 2002. Jim volunteers to be RM. 1.3.24: Tagged Mar 21, 2002. Announced Mar 22, 2002. 1.3.23: Tagged Jan 21, 2002. 1.3.22: Tagged Oct 8, 2001. Announced Oct 12, 2001. 1.3.21: Not released. (Pulled for htdocs/manual config mismatch. t/r Oct 5, 2001) 1.3.20: Tagged and rolled May 15, 2001. Announced May 21, 2001. 1.3.19: Tagged and rolled Feb 26, 2001. Announced Mar 01, 2001. 1.3.18: Tagged and rolled Not released. (Pulled because of an incorrect unescaping fix. t/r Feb 19, 2001) 1.3.17: Tagged and rolled Jan 26, 2001. Announced Jan 29, 2001. 1.3.16: Not released. (Pulled because of vhosting bug. t/r Jan 20, 2001) 1.3.15: Not released. (Pulled due to CVS dumping core during the tagging when it reached src/os/win32/) 1.3.14: Tagged and Rolled Oct 10, 2000. Released/announced on the 13th. 1.3.13: Not released. (Pulled in the first minutes due to a Netware build bug) 1.3.12: Tagged and rolled Feb. 23, 2000. Released/announced on the 25th. 1.3.11: Tagged and rolled Jan. 19, 2000. Released/announced on the 21st. 1.3.10: Not released. (Pulled at last minute due to a build bug in the MPE port) 1.3.9: Tagged and rolled on Aug. 16. Released and announced on 19th. 1.3.8: Not released. 1.3.7: Not released. 1.3.6: Tagged and rolled on Mar. 22. Released and announced on 24th. 1.3.5: Not released. 1.3.4: Tagged and rolled on Jan. 9. Released on 11th, announced on 12th. 1.3.3: Tagged and rolled on Oct. 7. Released on 9th, announced on 10th. 1.3.2: Tagged and rolled on Sep. 21. Announced and released on 23rd. 1.3.1: Tagged and rolled on July 19. Announced and released. 1.3.0: Tagged and rolled on June 1. Announced and released on the 6th. 2.0 : In alpha development, see httpd-2.0 repository RELEASE SHOWSTOPPERS: RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: * htpasswd.c and htdigest.c use tmpnam()... consider using mkstemp() when available. Message-ID: [EMAIL PROTECTED] Status: * Dean's unescaping hell (unescaping the various URI components at the right time and place, esp. unescaping the host name). Message-ID: [EMAIL PROTECTED] Status: * Martin observed a core dump because a ipaddr_chain struct contains a NULL-server pointer when being dereferenced by invoking httpd -S. Message-ID: [EMAIL PROTECTED] Status: Workaround enabled. Clean solution can come after 1.3.19 * long pathnames with many components and no AllowOverride None Workaround is to define Directory / with AllowOverride None, which is something all sites should do in any case. Status: Marc was looking at it. (Will asks 'wasn't this patched?') * Ronald Tschalär's patch to mod_proxy to allow other modules to set headers too (needed by mod_auth_digest) Message-ID: [EMAIL PROTECTED] Status: Available Patches (Most likely, will be ported to 2.0 as appropriate): * Backport of 2.0 ForceLanguagePriority directive /dist/httpd/contrib/patches/1.3/force_language_priority.patch Message-ID: [EMAIL PROTECTED] Status: * A rewrite of ap_unparse_uri_components() by Jeffrey W. Baker [EMAIL PROTECTED] to more fully close some segfault potential. Message-ID: Pine.LNX.4.21.0102102350060.6815-20@desktop Status: Jim +1 (for 1.3.19), Martin +0 * Andrew Ford's patch (1999/12/05) to add absolute times to mod_expires Message-ID: [EMAIL PROTECTED] Status: Martin +1, Jim +1, Ken +1 (on concept) * Raymond S Brand's path to mod_autoindex to fix the header/readme include processing so the envariables are correct for the included documents. (Actually, there are two variants in the patch message, for two different ways of doing it.) Message-ID: [EMAIL PROTECTED] Status: Martin +1(concept) * Jayaram's patch (10/27/99) for bugfix to mod_autoindex IndexIgnore file-extension should hide the files with this file- extension in directory listings. This was NOT happening because the total filename was being compared with the file-extension. Status: Martin +1(untested), Ken +1(untested) * Salvador Ortiz Garcia [EMAIL PROTECTED]' patch to allow DirectoryIndex to refer to URIs for non-static resources. MID: [EMAIL PROTECTED] Status: Ken +1 (on concept), Lars +1 (on concept) * Brian Havard's patch to remove dependency of mod_auth_dbm on mod_auth. (PR#2598) Message-ID: [EMAIL PROTECTED] Status: Lars +1 (on concept), Ken
[STATUS] (httpd-2.0) Wed May 22 23:45:10 EDT 2002
APACHE 2.0 STATUS: -*-text-*- Last modified at [$Date: 2002/05/22 05:56:43 $] Release: 2.0.37 : in development. 2.0.36 : released May 6, 2002 as GA. 2.0.35 : released April 5, 2002 as GA. 2.0.34 : tagged March 26, 2002. 2.0.33 : tagged March 6, 2002. not released. 2.0.32 : released Feburary 16, 2002 as beta. 2.0.31 : rolled Feburary 1, 2002. not released. 2.0.30 : tagged January 8, 2002. not rolled. 2.0.29 : tagged November 27, 2001. not rolled. 2.0.28 : released November 13, 2001 as beta. 2.0.27 : rolled November 6, 2001 2.0.26 : tagged October 16, 2001. not rolled. 2.0.25 : rolled August 29, 2001 2.0.24 : rolled August 18, 2001 2.0.23 : rolled August 9, 2001 2.0.22 : rolled July 29, 2001 2.0.21 : rolled July 20, 2001 2.0.20 : rolled July 8, 2001 2.0.19 : rolled June 27, 2001 2.0.18 : rolled May 18, 2001 2.0.17 : rolled April 17, 2001 2.0.16 : rolled April 4, 2001 2.0.15 : rolled March 21, 2001 2.0.14 : rolled March 7, 2001 2.0a9 : released December 12, 2000 2.0a8 : released November 20, 2000 2.0a7 : released October 8, 2000 2.0a6 : released August 18, 2000 2.0a5 : released August 4, 2000 2.0a4 : released June 7, 2000 2.0a3 : released April 28, 2000 2.0a2 : released March 31, 2000 2.0a1 : released March 10, 2000 Please consult the following STATUS files for information on related projects: * srclib/apr/STATUS * srclib/apr-util/STATUS * docs/STATUS CURRENT RELEASE NOTES: * 36 status: released on Monday, May 6, 2002. Awaiting the .zip files to complete the release. RELEASE SHOWSTOPPERS: * Worker MPM deadlocks * for 2.0.37: decide if the MMN bump was warranted * there is an outstanding veto on an apr_brigade_puts() optimization CURRENT VOTES: * Should we always build [support*] binaries statically unless otherwise indicated? Message-ID: [EMAIL PROTECTED] +1: Ken, *wrowe [they are PITAs on OSX] -1: Justin, Ian * If the parent process dies, should the remaining child processes gracefully self-terminate. Or maybe we should make it a runtime option, or have a concept of 2 parent processes (one being a hot spare). See: Message-ID: [EMAIL PROTECTED] Self-destruct: Ken, Martin Not self-destruct: BrianP, Ian, Cliff, BillS Make it runtime configurable: Aaron, Jim, Justin Have 2 parents: +1: Jim -1: Justin, wrowe [for 2.0] +0: Martin (while standing by, could it do something useful?) * Make the worker MPM the default MPM for threaded Unix boxes. +1: Justin, Ian, Cliff, BillS +0: BrianP, Aaron (mutex contention is looking better with the latest code, let's continue tuning and testing) -0: Lars * Change the default config so that we add a ServerToken Minimal to the config. Possibly go one step further and add a option to just report '2.0' instead of '2.0.x' +1: IanH, BrianP -1: Greg, Cliff, Justin I use the default response all the time to verify that a module is present and at the proper version. This information is also very handy for the module surveys, to determine what modules are out there and in prevalent use (see securityspace.com; frickin' JServ is still increasing in numbers!). Security conscious people can change this on their own, when required. Removing the information doesn't remove any future vulnerabilities. Assuming that a vulnerability occurred, I highly doubt that somebody would actually bother to *test* the version reported in the response before attempting to use the vulnerability, so trying to hide the information isn't all that useful. RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: * Get mod_cache/mod_mem_cache out of experimental (still some work items left to complete) * The 2.0.36 worker MPM graceless shutdown changes work but are a bit clunky on some platforms; eg, on Linux, the loop to join each worker thread seems to hang, and the parent ends up killing off the child with SIGKILL. But at least it shuts down. * --enable-mods-shared=foo1 foo2 is busted on Darwin. Pier posted a patch (Message-ID: [EMAIL PROTECTED]). * We do not properly substitute the prefix-variables in the configuration scripts or generated-configs. (i.e. if sysconfdir is etc, httpd-std.conf points to conf.) * If any request gets through ap_process_request_internal() and is scheduled to be served by the core handler, without a flag that this r-filename was tested by dir/file_walk, we need to 500 at
RE: win32 changes from 1.3
At 06:37 PM 5/22/2002, you wrote: If your cwd is on another volume, that's a problem. This hurts services, since the cwd will always be c:\winnt\system32\. Yep, was installed on a non-C: drive I suggest we cwd to the server root on startup. We can do this in the winnt_mpm, or for all platforms in main(). Opinions? +1 - at least for Windows And +1 for the rest, or was that simply +0 to do so in main()?