httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Chuck Murcko <ch...@hyperreal.com>
Subject cvs commit: apache/src http_main.c
Date Fri, 07 Jun 1996 20:02:05 GMT
chuck       96/06/07 13:02:05

  Modified:    src       http_main.c
  Log:
  Reviewed by:	Chuck Murcko
  Submitted by:	Cliff Skolnick
  Obtained from:  jk@tools.de
  Sending a SIGTERM (as user root using /bin/sh as
  shell) doesn't terminate apache under Solaris 2.5
  (but other SVR4 systems are probably affected, too).
  
  After sending the SIGTERM, /usr/proc/bin/psig on the
  pid of the apache master process shows
      TERM        blocked,caught  0
  
  As far is I understand it, the problem is caused by
  jumping out of a signal handler using setjmp/longjmp
  instead of sigsetjmp/siglongjmp.
  
  Revision  Changes    Path
  1.34      +8 -1      apache/src/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_main.c,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -C3 -r1.33 -r1.34
  *** http_main.c	1996/06/07 19:51:16	1.33
  --- http_main.c	1996/06/07 20:02:03	1.34
  ***************
  *** 821,836 ****
    static int wait_or_timeout_retval = -1;
    
    static void longjmp_out_of_alarm (int sig) {
        longjmp (wait_timeout_buf, 1);
    }
    
    int wait_or_timeout (int *status)
    {
        wait_or_timeout_retval = -1;
        
        if (setjmp(wait_timeout_buf) != 0) {
    	errno = ETIMEDOUT;
  - 	alarm(0);
    	return wait_or_timeout_retval;
        }
        
  --- 821,843 ----
    static int wait_or_timeout_retval = -1;
    
    static void longjmp_out_of_alarm (int sig) {
  + #ifdef NEXT
        longjmp (wait_timeout_buf, 1);
  + #else
  +     siglongjmp (wait_timeout_buf, 1);
  + #endif
    }
    
    int wait_or_timeout (int *status)
    {
        wait_or_timeout_retval = -1;
        
  + #if defined(NEXT)
        if (setjmp(wait_timeout_buf) != 0) {
  + #else 
  +     if (sigsetjmp(wait_timeout_buf, 1) != 0) {
  + #endif
    	errno = ETIMEDOUT;
    	return wait_or_timeout_retval;
        }
        
  
  
  

Mime
View raw message