httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Roy Fielding <field...@hyperreal.com>
Subject cvs commit: apache/src CHANGES http_protocol.c buff.c
Date Sun, 27 Apr 1997 06:23:24 GMT
fielding    97/04/26 23:23:23

  Modified:    src       CHANGES http_protocol.c buff.c
  Log:
  Fix problem with scripts not receiving a SIGPIPE when client drops
  the connection (e.g., when user presses Stop).  We now stop
  trying to send a message body immediately after an error from write.
  
  Submitted by: Roy Fielding (with help from Nathan Kurz, PR#335)
  Reviewed by: Dean Gaudet, Randy Terbush, Chuck Murcko
  
  Revision  Changes    Path
  1.250     +5 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.249
  retrieving revision 1.250
  diff -C3 -r1.249 -r1.250
  *** CHANGES	1997/04/25 00:19:37	1.249
  --- CHANGES	1997/04/27 06:23:20	1.250
  ***************
  *** 1,5 ****
  --- 1,10 ----
    Changes with Apache 1.2
      
  +   *) Fix problem with scripts not receiving a SIGPIPE when client drops
  +      the connection (e.g., when user presses Stop).  Apache will now stop
  +      trying to send a message body immediately after an error from write.
  +      [Roy Fielding and Nathan Kurz] PR#335
  + 
      *) Fix graceful restart on architectures not using scoreboard files
         (it is still broken on scoreboard-file architectures).
         Eliminate many signal-related race conditions in both forms of
  
  
  
  1.117     +23 -8     apache/src/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/http_protocol.c,v
  retrieving revision 1.116
  retrieving revision 1.117
  diff -C3 -r1.116 -r1.117
  *** http_protocol.c	1997/04/24 23:35:20	1.116
  --- http_protocol.c	1997/04/27 06:23:21	1.117
  ***************
  *** 1540,1553 ****
            }
            o=0;
    	total_bytes_sent += n;
  ! 	
  !         while(n && !r->connection->aborted) {
  !             w=bwrite(r->connection->client, &buf[o], n);
  ! 	    if(w <= 0)
  ! 		break;
  ! 	    reset_timeout(r); /* reset timeout after successful write */
  !             n-=w;
  ! 	    o+=w;
            }
        }
        
  --- 1540,1568 ----
            }
            o=0;
    	total_bytes_sent += n;
  ! 
  !         while (n && !r->connection->aborted) {
  !             w = bwrite(r->connection->client, &buf[o], n);
  !             if (w > 0) {
  !                 reset_timeout(r); /* reset timeout after successful write */
  !                 n-=w;
  !                 o+=w;
  !             }
  !             else if (w < 0) {
  !                 if (r->connection->aborted)
  !                     break;
  !                 else if (errno == EAGAIN)
  !                     continue;
  !                 else {
  !                     log_unixerr("send body lost connection to",
  !                                 get_remote_host(r->connection,
  !                                     r->per_dir_config, REMOTE_NAME),
  !                                 NULL, r->server);
  !                     bsetflag(r->connection->client, B_EOUT, 1);
  !                     r->connection->aborted = 1;
  !                     break;
  !                 }
  !             }
            }
        }
        
  
  
  
  1.25      +4 -0      apache/src/buff.c
  
  Index: buff.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/buff.c,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -C3 -r1.24 -r1.25
  *** buff.c	1997/04/21 20:29:07	1.24
  --- buff.c	1997/04/27 06:23:21	1.25
  ***************
  *** 99,109 ****
  --- 99,113 ----
    static void
    doerror(BUFF *fb, int err)
    {
  +     int errsave = errno;  /* Save errno to prevent overwriting it below */
  + 
        if (err == B_RD)
    	fb->flags |= B_RDERR;
        else
    	fb->flags |= B_WRERR;
        if (fb->error != NULL) (*fb->error)(fb, err, fb->error_data);
  + 
  +     errno = errsave;
    }
    
    /* Buffering routines */
  
  
  

Mime
View raw message