httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ma...@hyperreal.org
Subject cvs commit: apache-apr/pthreads/src/main http_main.c http_protocol.c
Date Sun, 21 Mar 1999 10:42:36 GMT
manoj       99/03/21 02:42:36

  Modified:    pthreads/src/main http_main.c http_protocol.c
  Log:
  Make MaxRequestsPerChild work in the threaded server again (well at
  least it works like the process server works). This consists of a few
  changes:
  
  - We need to actually count requests. In the pthreads port, we do this
    by decrementing requests_this_child
  - Send a SIGWINCH when we reach the accept_thread, to alert the rest of
    the process to its eventual demise
  - Temporarily comment out a SIG_IGN setting for SIGWINCH in
    http_protocol.c. Otherwise, sigwait() won't see reliably see a
    SIGWINCH, and the SIG_IGN isn't needed in a server with a
    signal-handling thread anyway.
  
  Revision  Changes    Path
  1.63      +12 -0     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.62
  retrieving revision 1.63
  diff -u -u -r1.62 -r1.63
  --- http_main.c	1999/03/19 14:02:03	1.62
  +++ http_main.c	1999/03/21 10:42:34	1.63
  @@ -1804,6 +1804,7 @@
               csd = -1;
           }
           else {
  +            requests_this_child--;
               csd = accept(sd, &sa_client, &len);
   	    SAFE_ACCEPT(accept_mutex_off(my_tid - ap_threads_per_child));
   	}
  @@ -1817,6 +1818,16 @@
   	    }
           } 
       }
  +
  +    /* Raise SIGWINCH so that all the actions that go with a gradual,
  +     * graceful shutdown of the process get done.
  +     *
  +     * The reason this thread is actually going through the trouble to
  +     * look up its own process ID is because under Red Hat 5.2, getpid()
  +     * actually returns the "process ID" of the thread, since threads
  +     * are just processes that share everything. I hope this is fixed in
  +     * glibc 2.1 & Linux 2.2. - mvsk */
  +    kill(ap_scoreboard_image->parent[my_pid].pid, SIGWINCH);
       ap_update_child_status(my_pid, my_tid, SERVER_DEAD, (request_rec *) NULL);
       return NULL;
   }
  @@ -2146,6 +2157,7 @@
   
       if (one_process) {
   	set_signals();
  +        ap_scoreboard_image->parent[slot].pid = getpid();
   	child_main(slot);
       }
   
  
  
  
  1.13      +7 -0      apache-apr/pthreads/src/main/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /home/cvs/apache-apr/pthreads/src/main/http_protocol.c,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -u -r1.12 -r1.13
  --- http_protocol.c	1999/03/17 20:00:40	1.12
  +++ http_protocol.c	1999/03/21 10:42:34	1.13
  @@ -806,9 +806,16 @@
       }
       /* we've probably got something to do, ignore graceful restart requests */
   
  +    /* XXX - sigwait doesn't work if the signal has been SIG_IGNed (under
  +     * linux 2.0 w/ glibc 2.0, anyway), and this step isn't necessary when
  +     * we're running a sigwait thread anyway. If/when unthreaded mode is put
  +     * back in, we should make sure to ignore this signal iff a sigwait thread
  +     * isn't used. - mvsk
  +
   #ifdef SIGWINCH
       signal(SIGWINCH, SIG_IGN);
   #endif
  +    */
   
       ap_bsetflag(conn->client, B_SAFEREAD, 0);
   
  
  
  

Mime
View raw message