cvs commit: apache-apr/pthreads/src/main http_main.c

1999-02-17 Thread manoj
manoj   99/02/16 16:01:54

  Modified:pthreads/src/main http_main.c
  Log:
  Eep. ptrans existed in the process scope. Now there is one ptrans per
  thread, and it is sub-pooled off the correct super-pool now. This
  fixes some very confusing coredumps, which were confusing because there
  were still coredumps before the original ptrans patch, they were just
  caused by the lack of ptrans.
  
  Revision  ChangesPath
  1.35  +2 -2  apache-apr/pthreads/src/main/http_main.c
  
  Index: http_main.c
  ===
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -u -r1.34 -r1.35
  --- http_main.c   1999/02/16 21:37:32 1.34
  +++ http_main.c   1999/02/17 00:01:45 1.35
  @@ -288,7 +288,6 @@
   
   static pool *pperm; /* Pool for permananent stuff */
   static pool *pconf;  /* Pool for config stuff */
  -static pool *ptrans; /* Pool for per-transaction stuff */
   static pool *ptemp;  /* Pool for temporart config stuff */
   static pool *pcommands;  /* Pool for -C and -c switches */
   
  @@ -2313,10 +2312,11 @@
   int my_tid = ti-tid;
   struct sockaddr sa_client;
   int csd;
  +pool *ptrans;/* Pool for per-transaction stuff */
   
   free(ti);
   
  -ptrans = ap_make_sub_pool(pconf);
  +ptrans = ap_make_sub_pool(pchild);
   while (0  requests_this_child) {
   (void) ap_update_child_status(my_pid, my_tid, SERVER_READY, 
  (request_rec *) NULL);
  
  
  


cvs commit: apache-apr/pthreads/src/main http_main.c

1999-02-17 Thread manoj
manoj   99/02/16 16:03:43

  Modified:pthreads/src/main http_main.c
  Log:
  Get rid of some more debugging messages which were clogging the error log.
  
  Revision  ChangesPath
  1.36  +0 -2  apache-apr/pthreads/src/main/http_main.c
  
  Index: http_main.c
  ===
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -u -r1.35 -r1.36
  --- http_main.c   1999/02/17 00:01:45 1.35
  +++ http_main.c   1999/02/17 00:03:41 1.36
  @@ -2219,10 +2219,8 @@
   while ((r = ap_read_request(current_conn)) != NULL) {
(void) ap_update_child_status(my_child_num, my_thread_num,
  SERVER_BUSY_WRITE, r);
  - fprintf(stderr,%d child_main: about to process 
request\n,my_child_num);
if (r-status == HTTP_OK)
ap_process_request(r);
  - fprintf(stderr,%d child_main: request done\n,my_child_num);
if (ap_extended_status)
increment_counts(my_child_num, my_thread_num, r);
if (!current_conn-keepalive || ap_is_aborted(current_conn))
  
  
  


cvs commit: apache-apr STATUS

1999-02-17 Thread manoj
manoj   99/02/16 17:08:19

  Modified:.STATUS
  Log:
  I really have to get this song out of my head.
  
  Revision  ChangesPath
  1.8   +2 -4  apache-apr/STATUS
  
  Index: STATUS
  ===
  RCS file: /home/cvs/apache-apr/STATUS,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -u -r1.7 -r1.8
  --- STATUS1999/02/16 16:04:10 1.7
  +++ STATUS1999/02/17 01:08:18 1.8
  @@ -1,5 +1,5 @@
   Apache Portable Runtime STATUS:
  -Last modified at [$Date: 1999/02/16 16:04:10 $]
  +Last modified at [$Date: 1999/02/17 01:08:18 $]
   
   Release:
   
  @@ -25,14 +25,12 @@
   
   Mod_status
Re-write mod_status to use updated scoreboard for hybrid server.
  +This is pretty close to completion. 
   
   Accept Serialization across Processes
Currently, we use one mutex total, we need to change this to be
one mutex per socket.  Possibly, we could attach the mutex to the
listen_rec, and pass it down to the accept loop.
  -
  -Memory leakage
  - It looks like we are leaking, we need to find out why and where.
   
   Timeouts.  (only soft timeouts)
   
  
  
  


cvs commit: apache-apr/pthreads/src/main http_main.c

1999-02-17 Thread manoj
manoj   99/02/16 21:32:02

  Modified:pthreads/src/main http_main.c
  Log:
  pthread calls while handling a signal are bad voodoo. This is another way
  to allow cleanups to run after all threads exit.
  
  Revision  ChangesPath
  1.37  +11 -10apache-apr/pthreads/src/main/http_main.c
  
  Index: http_main.c
  ===
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -u -r1.36 -r1.37
  --- http_main.c   1999/02/17 00:03:41 1.36
  +++ http_main.c   1999/02/17 05:32:00 1.37
  @@ -431,13 +431,6 @@
ap_pclosesocket(pconf, lr-fd);
lr= lr-next;
   }
  -
  -for (i = 0; i  ss-worker_threads + ss-acceptor_threads; i++) {
  -if (ap_scoreboard_image-servers[index][i].status != SERVER_DEAD) {
  - pthread_join(ap_scoreboard_image-servers[index][i].tid, NULL);
  - }
  -}
  -clean_child_exit(0);
   }
   
   /**  ZZZ this should probably be abstracted to it's own file.   /
  @@ -2300,7 +2293,7 @@
   }
   ap_update_child_status(my_pid, my_tid, SERVER_DEAD, (request_rec *) 
NULL);
   pthread_once(firstcall, graceful_killer);
  -pthread_exit(NULL);
  +return NULL;
   }
   
   void * worker_thread(void * dummy)
  @@ -2328,8 +2321,7 @@
   ap_destroy_pool(ptrans);
   ap_update_child_status(my_pid, my_tid, SERVER_DEAD, (request_rec *) 
NULL);
   pthread_once(firstcall, graceful_killer);
  -
  -pthread_exit(NULL);
  +return NULL;
   }
   
   /*
  @@ -2573,6 +2565,15 @@
   lr-used = 1;
   
   accept_thread(my_info);
  +
  +/* Wait for other threads to die, then clean up. Note: joining oneself is
  + * a bad thing, so we make sure that i  my_info-tid, not = */
  +for (i = 0; i  my_info-tid; i++) {
  +if (ap_scoreboard_image-servers[my_child_num][i].status != 
SERVER_DEAD) {
  + pthread_join(ap_scoreboard_image-servers[my_child_num][i].tid, 
NULL);
  + }
  +}
  +clean_child_exit(0);
   }
   
   static int make_child(server_rec *s, int slot, time_t now) /* ZZZ */
  
  
  


cvs commit: apache-apr/pthreads/src/main http_main.c

1999-02-17 Thread manoj
manoj   99/02/17 00:13:16

  Modified:.STATUS
   pthreads/src/main http_main.c
  Log:
  Start to remove pthread calls from clean_child_exit to make it legal for
  a signal handler. There is still a pthread_cancel loop, which seems to
  work sometimes for killing hanging threads, but not all the time. The
  real solution is to fix the hanging threads, which seem to be caused by
  the (accidental?) usage of a cross-process alloc_mutex.
  
  The last commit message was messed up. That patch didn't undo any
  pthread calls during signal handling, but it is still necessary because
  it prevents the thread from trying to join itself. I need someone to
  show me how to change stupid commit messages.
  
  Revision  ChangesPath
  1.9   +3 -1  apache-apr/STATUS
  
  Index: STATUS
  ===
  RCS file: /home/cvs/apache-apr/STATUS,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -u -r1.8 -r1.9
  --- STATUS1999/02/17 01:08:18 1.8
  +++ STATUS1999/02/17 08:13:13 1.9
  @@ -1,5 +1,5 @@
   Apache Portable Runtime STATUS:
  -Last modified at [$Date: 1999/02/17 01:08:18 $]
  +Last modified at [$Date: 1999/02/17 08:13:13 $]
   
   Release:
   
  @@ -40,6 +40,8 @@
   Everything
   
   Needs patch:
  +  * A patch to make the alloc_mutex's scope per-process. It seems to be
  +causing trouble on Linux at least.
   
   Open issues:
   
  
  
  
  1.38  +17 -3 apache-apr/pthreads/src/main/http_main.c
  
  Index: http_main.c
  ===
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -u -r1.37 -r1.38
  --- http_main.c   1999/02/17 05:32:00 1.37
  +++ http_main.c   1999/02/17 08:13:15 1.38
  @@ -397,14 +397,29 @@
   listen_rec *lr;
   parent_score *ss = ap_scoreboard_image-parent[child_num];
   
  +/* XXX - This should be taken care of by the parent process. When it 
reaps
  + * the child, it will also update the scoreboard. We can't do this here,
  + * because clean_child_exit can be called from a signal handler, and
  + * ap_update_child_status calls pthread_self */
  +#if 0
   for (i = 0; i  ap_threads_per_child + ap_acceptors_per_child; i++)
   ap_update_child_status(child_num, i, SERVER_DEAD, (request_rec *) 
NULL);
  +#endif
   
   if (pchild) {
ap_child_exit_modules(pchild, server_conf);
ap_destroy_pool(pchild);
   }
   
  +/* XXX - This is not allowed in a signal handler either, and it shouldn't
  + * be needed. But it's still in here, because without it, we get hanging
  + * threads on linux. The symptom isn't *too* bad on Linux: a core dump in
  + * the exit() library call.
  + *
  + * The root cause seems to be that alloc's pthread mutex is being used
  + * across processes, which is not kosher on some platforms (i.e. Linux),
  + * and a thread whacking a pool will hit an acquire_mutex and hang */
  +
   for (i = 0; i  ss-worker_threads + ss-acceptor_threads; i++) {
   if (ap_scoreboard_image-servers[child_num][i].status != 
SERVER_DEAD) {
pthread_cancel(ap_scoreboard_image-servers[child_num][i].tid);
  @@ -2811,9 +2826,8 @@
   if (pid = 0) {
   child_slot = find_child_by_pid(0);
   if (child_slot = 0) {
  -   /*(void) ap_update_child_status(child_slot, 
SERVER_DEAD,
  - (request_rec *) NULL);
  - LOOK INTO THIS */
  +for (i = 0; i  ap_threads_per_child + 
ap_acceptors_per_child; i++)
  +ap_update_child_status(child_slot, i, SERVER_DEAD, 
(request_rec *) NULL);
   
if (remaining_children_to_start
 child_slot  ap_daemons_limit) {
  
  
  


cvs commit: apache-apr/pthreads/src/main http_main.c

1999-02-17 Thread rbb
rbb 99/02/17 07:29:52

  Modified:pthreads/src/main http_main.c
  Log:
  Removing Manoj's two patches from last night, because they go after a symptom,
  not the cause of the problem.  This is the first of a series of commits to
  fix the underlying problem of graceful restarts.  This is my first time 
removing
  a patch, so if I do it wrong, I'll fix it in later patches.  :)
  
  Revision  ChangesPath
  1.39  +13 -28apache-apr/pthreads/src/main/http_main.c
  
  Index: http_main.c
  ===
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- http_main.c   1999/02/17 08:13:15 1.38
  +++ http_main.c   1999/02/17 15:29:51 1.39
  @@ -397,29 +397,14 @@
   listen_rec *lr;
   parent_score *ss = ap_scoreboard_image-parent[child_num];
   
  -/* XXX - This should be taken care of by the parent process. When it 
reaps
  - * the child, it will also update the scoreboard. We can't do this here,
  - * because clean_child_exit can be called from a signal handler, and
  - * ap_update_child_status calls pthread_self */
  -#if 0
   for (i = 0; i  ap_threads_per_child + ap_acceptors_per_child; i++)
   ap_update_child_status(child_num, i, SERVER_DEAD, (request_rec *) 
NULL);
  -#endif
   
   if (pchild) {
ap_child_exit_modules(pchild, server_conf);
ap_destroy_pool(pchild);
   }
   
  -/* XXX - This is not allowed in a signal handler either, and it shouldn't
  - * be needed. But it's still in here, because without it, we get hanging
  - * threads on linux. The symptom isn't *too* bad on Linux: a core dump in
  - * the exit() library call.
  - *
  - * The root cause seems to be that alloc's pthread mutex is being used
  - * across processes, which is not kosher on some platforms (i.e. Linux),
  - * and a thread whacking a pool will hit an acquire_mutex and hang */
  -
   for (i = 0; i  ss-worker_threads + ss-acceptor_threads; i++) {
   if (ap_scoreboard_image-servers[child_num][i].status != 
SERVER_DEAD) {
pthread_cancel(ap_scoreboard_image-servers[child_num][i].tid);
  @@ -446,6 +431,13 @@
ap_pclosesocket(pconf, lr-fd);
lr= lr-next;
   }
  +
  +for (i = 0; i  ss-worker_threads + ss-acceptor_threads; i++) {
  +if (ap_scoreboard_image-servers[index][i].status != SERVER_DEAD) {
  + pthread_join(ap_scoreboard_image-servers[index][i].tid, NULL);
  + }
  +}
  +clean_child_exit(0);
   }
   
   /**  ZZZ this should probably be abstracted to it's own file.   /
  @@ -2308,7 +2300,7 @@
   }
   ap_update_child_status(my_pid, my_tid, SERVER_DEAD, (request_rec *) 
NULL);
   pthread_once(firstcall, graceful_killer);
  -return NULL;
  +pthread_exit(NULL);
   }
   
   void * worker_thread(void * dummy)
  @@ -2336,7 +2328,8 @@
   ap_destroy_pool(ptrans);
   ap_update_child_status(my_pid, my_tid, SERVER_DEAD, (request_rec *) 
NULL);
   pthread_once(firstcall, graceful_killer);
  -return NULL;
  +
  +pthread_exit(NULL);
   }
   
   /*
  @@ -2580,15 +2573,6 @@
   lr-used = 1;
   
   accept_thread(my_info);
  -
  -/* Wait for other threads to die, then clean up. Note: joining oneself is
  - * a bad thing, so we make sure that i  my_info-tid, not = */
  -for (i = 0; i  my_info-tid; i++) {
  -if (ap_scoreboard_image-servers[my_child_num][i].status != 
SERVER_DEAD) {
  - pthread_join(ap_scoreboard_image-servers[my_child_num][i].tid, 
NULL);
  - }
  -}
  -clean_child_exit(0);
   }
   
   static int make_child(server_rec *s, int slot, time_t now) /* ZZZ */
  @@ -2826,8 +2810,9 @@
   if (pid = 0) {
   child_slot = find_child_by_pid(0);
   if (child_slot = 0) {
  -for (i = 0; i  ap_threads_per_child + 
ap_acceptors_per_child; i++)
  -ap_update_child_status(child_slot, i, SERVER_DEAD, 
(request_rec *) NULL);
  +   /*(void) ap_update_child_status(child_slot, 
SERVER_DEAD,
  + (request_rec *) NULL);
  + LOOK INTO THIS */
   
if (remaining_children_to_start
 child_slot  ap_daemons_limit) {
  
  
  


cvs commit: apache-apr/pthreads/src/main http_main.c

1999-02-17 Thread rbb
rbb 99/02/17 10:42:03

  Modified:pthreads/src/main http_main.c
  Log:
  This patch fixes a few different things.  The first, is that if
  MaxRequestsPerChild was set to 0 in the config file, the child would start
  and stop immediately.  This fixes that.  The rest are mostly syntax errors 
that
  my compiler didn't catch before.
  
  Revision  ChangesPath
  1.41  +8 -15 apache-apr/pthreads/src/main/http_main.c
  
  Index: http_main.c
  ===
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- http_main.c   1999/02/17 16:28:03 1.40
  +++ http_main.c   1999/02/17 18:42:01 1.41
  @@ -1521,7 +1521,7 @@
   static void graceful_sig_handler(int sig)
   {
   requests_this_child = 0;
  -fprintf(stderr, SigWINCH received in child\n);
  +ap_max_requests_per_child = 1;
   }
   
   /*
  @@ -2173,13 +2173,6 @@
* Child process main loop.
*/
   
  -API_EXPORT(void) ap_child_terminate(request_rec *r)
  -{
  -r-connection-keepalive = 0;
  -/*requests_this_child = ap_max_requests_per_child = 1; */
  -/* ZZZ doesn't really make sense in a threaded server. */
  -}
  -
   static void process_socket(pool *p, struct sockaddr *sa_client, int csd, int 
my_child_num, int my_thread_num)
   {
   struct sockaddr sa_server; /*  */
  @@ -2276,7 +2269,8 @@
   sock_disable_nagle(sd);
   */
   
  -while (0  requests_this_child) {
  +while ((ap_max_requests_per_child != 0  ++requests_this_child  0) ||
  +   (ap_max_requests_per_child == 0)) { 
   (void) ap_update_child_status(my_pid, my_tid, SERVER_ACCEPTING, 
(request_rec *) NULL);
/* lock around the accept if necessary */
  @@ -2298,10 +2292,9 @@
   if (exiting_now == 0) {
exiting_now++;
pthread_mutex_unlock(exit_mutex); 
  -graceful_killer;
  +graceful_killer();
   clean_child_exit(0);
   }
  -fprintf(stderr,thorugh pthread_once\n);
   pthread_exit(NULL);
   }
   
  @@ -2317,7 +2310,8 @@
   free(ti);
   
   ptrans = ap_make_sub_pool(pchild);
  -while (0  requests_this_child) {
  +while ((ap_max_requests_per_child != 0  ++requests_this_child  0) ||
  +   (ap_max_requests_per_child == 0)) { 
   (void) ap_update_child_status(my_pid, my_tid, SERVER_READY, 
  (request_rec *) NULL);

  @@ -2333,10 +2327,9 @@
   if (exiting_now == 0) {
exiting_now++;
pthread_mutex_unlock(exit_mutex); 
  -graceful_killer;
  +graceful_killer();
   clean_child_exit(0);
   }
  -fprintf(stderr,through with pthread_once worker\n);
   pthread_exit(NULL);
   }
   
  @@ -2819,7 +2812,7 @@
   pid = wait_or_timeout(status);
   
   if (pid = 0) {
  -child_slot = find_child_by_pid(0);
  +child_slot = find_child_by_pid(pid);
   if (child_slot = 0) {
  /*(void) ap_update_child_status(child_slot, 
SERVER_DEAD,
(request_rec *) NULL);
  
  
  


cvs commit: apache-apr/pthreads/src/main http_main.c

1999-02-17 Thread manoj
manoj   99/02/17 12:28:57

  Modified:pthreads/src/main http_main.c
  Log:
  First, fix unbalanced locking and unlocking of the exit_mutex (which
  will hopefully go away when we switch to a single signal-handling
  thread). Also get rid of a malloc-free pair.
  
  Revision  ChangesPath
  1.42  +13 -11apache-apr/pthreads/src/main/http_main.c
  
  Index: http_main.c
  ===
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -u -r1.41 -r1.42
  --- http_main.c   1999/02/17 18:42:01 1.41
  +++ http_main.c   1999/02/17 20:28:56 1.42
  @@ -176,7 +176,7 @@
   int ap_listenbacklog;
   int ap_dump_settings = 0;
   int exiting_now = 0;
  -pthread_mutex_t  *exit_mutex;
  +pthread_mutex_t exit_mutex = PTHREAD_MUTEX_INITIALIZER;
   API_VAR_EXPORT int ap_extended_status = 0;
   
   
  @@ -406,7 +406,6 @@
ap_destroy_pool(pchild);
   }
   
  -free(exit_mutex);
   exit(code);
   }
   
  @@ -2288,13 +2287,16 @@
 }
   }
   ap_update_child_status(my_pid, my_tid, SERVER_DEAD, (request_rec *) 
NULL);
  -pthread_mutex_lock(exit_mutex);
  +pthread_mutex_lock(exit_mutex);
   if (exiting_now == 0) {
exiting_now++;
  - pthread_mutex_unlock(exit_mutex); 
  + pthread_mutex_unlock(exit_mutex); 
   graceful_killer();
   clean_child_exit(0);
  -}
  +}
  +else {
  +pthread_mutex_unlock(exit_mutex);
  +}
   pthread_exit(NULL);
   }
   
  @@ -2323,13 +2325,16 @@
   }
   ap_destroy_pool(ptrans);
   ap_update_child_status(my_pid, my_tid, SERVER_DEAD, (request_rec *) 
NULL);
  -pthread_mutex_lock(exit_mutex);
  +pthread_mutex_lock(exit_mutex);
   if (exiting_now == 0) {
exiting_now++;
  - pthread_mutex_unlock(exit_mutex); 
  + pthread_mutex_unlock(exit_mutex); 
   graceful_killer();
   clean_child_exit(0);
  -}
  +}
  +else {
  +pthread_mutex_unlock(exit_mutex);
  +}
   pthread_exit(NULL);
   }
   
  @@ -2470,9 +2475,6 @@
   requests_this_child = ap_max_requests_per_child;
   
   pchild = ap_make_sub_pool(pconf);
  -
  -exit_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t));
  -pthread_mutex_init(exit_mutex, NULL);
   
   /*stuff to do before we switch id's, so we have permissions.*/
   reopen_scoreboard(pchild);
  
  
  


cvs commit: apache-apr/pthreads/src/main http_main.c

1999-02-17 Thread rbb
rbb 99/02/17 14:39:44

  Modified:pthreads/src/main http_main.c
  Log:
  This fixes a stupid mistake I made earlier.  Too much coding the last few days
  
  Revision  ChangesPath
  1.43  +2 -2  apache-apr/pthreads/src/main/http_main.c
  
  Index: http_main.c
  ===
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- http_main.c   1999/02/17 20:28:56 1.42
  +++ http_main.c   1999/02/17 22:39:43 1.43
  @@ -2268,7 +2268,7 @@
   sock_disable_nagle(sd);
   */
   
  -while ((ap_max_requests_per_child != 0  ++requests_this_child  0) ||
  +while ((ap_max_requests_per_child != 0  requests_this_child  0) ||
  (ap_max_requests_per_child == 0)) { 
   (void) ap_update_child_status(my_pid, my_tid, SERVER_ACCEPTING, 
(request_rec *) NULL);
  @@ -2312,7 +2312,7 @@
   free(ti);
   
   ptrans = ap_make_sub_pool(pchild);
  -while ((ap_max_requests_per_child != 0  ++requests_this_child  0) ||
  +while ((ap_max_requests_per_child != 0  requests_this_child  0) ||
  (ap_max_requests_per_child == 0)) { 
   (void) ap_update_child_status(my_pid, my_tid, SERVER_READY, 
  (request_rec *) NULL);
  
  
  


cvs commit: apache-1.3/src/modules/standard mod_log_config.c

1999-02-17 Thread coar
coar99/02/17 15:28:20

  Modified:htdocs/manual/mod mod_log_config.html
   src  CHANGES
   src/modules/standard mod_log_config.c
  Log:
Add conditional logging based upon environment variable existence.
Also add RefererIgnore functionality from mod_log_referer to
mod_log_config; mod_log_referer and mod_log_agent are now
deprecated.  The list of envariables to check is set up as
an array even though the current implementation (TAKE23)
only handles one; just in case we ever want to do something
strange like, 'env=foo,bar,!bag'.
  
  PR:   519, 548, 1351, 1811(?), 3449
  
  Revision  ChangesPath
  1.29  +133 -10   apache-1.3/htdocs/manual/mod/mod_log_config.html
  
  Index: mod_log_config.html
  ===
  RCS file: /home/cvs/apache-1.3/htdocs/manual/mod/mod_log_config.html,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- mod_log_config.html   1998/09/17 12:33:07 1.28
  +++ mod_log_config.html   1999/02/17 23:28:11 1.29
  @@ -14,22 +14,23 @@
   
   !--#include virtual=header.html --
   H1 ALIGN=CENTERModule mod_log_config/H1
  -
  +P
   This module is contained in the CODEmod_log_config.c/CODE file,
   and is compiled in by default in Apache 1.2. mod_log_config replaces
   mod_log_common in Apache 1.2. Prior to version 1.2, mod_log_config was
   an optional module. It provides for logging of the requests made to
   the server, using the Common Log Format or a user-specified format.
  +/P
   
   H2Summary/H2
  -
  +P
   Three directives are provided by this module: CODETransferLog/CODE
   to create a log file, CODELogFormat/CODE to set a custom format,
   and CODECustomLog/CODE to define a log file and format in one go.
   The CODETransferLog/CODE and CODECustomLog/CODE directives can
   be used multiple times in each server to cause each request to be
   logged to multiple files.
  -P
  +/P
   
   H3Compatibility notes/H3
   
  @@ -45,6 +46,22 @@
   CODECookieLog/CODE is deprecated, and a CODECustomLog/CODE
   should be defined to log user-tracking information instead.
   
  +LIAs of Apache 1.3.5, this module allows conditional logging
  +based upon the setting of environment variables.  That is,
  +you can control whether a request should be logged or not
  +based upon whether an arbitrary environment variable is
  +defined or not.  This is settable on a EMper/EM-logfile
  +basis.
  +
  +LIBeginning with Apache 1.3.5, the mod_log_config module has
  +also subsumed the CODERefererIgnore/CODE directive from
  +A HREF=mod_log_referer.htmlmod_log_referer/A.  The use
  +of CODERefererIgnore/CODE is deprecated, and should be
  +replaced by combinations of
  +A HREF=mod_setenvif.htmlCODESetEnvIf/CODE/A directives
  +and environment variable controlled CODECustomLog/CODE
  +definitions.
  +
   /UL
   
   H2Log File Formats/H2
  @@ -195,7 +212,9 @@
   UL
   LIA HREF=#cookielogCookieLog/A
   LIA HREF=#customlogCustomLog/A
  +LIA HREF=#customlog-conditionalCustomLog (conditional)/A
   LIA HREF=#logformatLogFormat/A
  +LIA HREF=#refererignoreRefererIgnore/A
   LIA HREF=#transferlogTransferLog/A
   /UL
   HR
  @@ -223,8 +242,8 @@
   The CookieLog directive sets the filename for logging of cookies.
   The filename is relative to the A
   HREF=core.html#serverrootServerRoot/A. This directive is included
  -only for compatibility with A
  -HREF=mod_cookies.htmlmod_cookies/A, and is deprecated.
  +only for compatibility with
  +A HREF=mod_cookies.htmlmod_cookies/A, and is deprecated.
   P
   
   HR
  @@ -242,7 +261,10 @@
HREF=directive-dict.html#Status
REL=Help
   STRONGStatus:/STRONG/A BaseBR
  -STRONGCompatibility: /STRONG Nickname only available in Apache 1.3
  +A
  + HREF=directive-dict.html#Compatibility
  + REL=Help
  +STRONGCompatibility:/STRONG/A Nickname only available in Apache 1.3
   or later
   BR
   A
  @@ -274,7 +296,58 @@
   SAMPLogFormat/SAMP/A
   directive.
   /P
  +
   HR
  +H2A NAME=customlog-conditionalCustomLog (conditional)/A/H2
  +A
  + HREF=directive-dict.html#Syntax
  + REL=Help
  +STRONGSyntax:/STRONG/A CustomLog EMfile-pipe/EM
  +EMformat-or-nickname/EM
  +env=[!]EMenvironment-variable/EMBR
  +A
  + HREF=directive-dict.html#Context
  + REL=Help
  +STRONGContext:/STRONG/A server config, virtual hostBR
  +A
  + HREF=directive-dict.html#Status
  + REL=Help
  +STRONGStatus:/STRONG/A BaseBR
  +A
  + HREF=directive-dict.html#Compatibility
  + REL=Help
  +STRONGCompatibility:/STRONG/A Only available in Apache 1.3.5
  +or later
  +BR
  +A
  + HREF=directive-dict.html#Module
  + REL=Help
  +STRONGModule:/STRONG/A mod_log_config
  +P
  +
  +The behaviour of this form of the SAMPCustomLog/SAMP directive is almost
  +identical to the A HREF=#customlogstandard CODECustomLog/CODE/A
  +directive.  The difference is that the 'CODEenv=/CODE' clause controls
  +whether a