fielding    97/03/20 10:40:18

  Modified:    src       CHANGES
               src/modules/proxy  mod_proxy.h proxy_cache.c proxy_ftp.c
                        proxy_http.c  proxy_util.c
  Log:
  In the proxy, if the cache filesystem was full, garbage_coll() was
  never called, and thus the filesystem would remain full indefinitely.
  We now also remove incomplete cache files left if the origin server
  didn't send a Content-Length header and either the client has aborted
  transfer or bwrite() to client has failed.
  
  Submitted by: Petr Lampa
  Reviewed by: Chuck Murcko, Roy Fielding
  
  Revision  Changes    Path
  1.207     +6 -0      apache/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache/src/CHANGES,v
  retrieving revision 1.206
  retrieving revision 1.207
  diff -C3 -r1.206 -r1.207
  *** CHANGES   1997/03/20 18:03:33     1.206
  --- CHANGES   1997/03/20 18:40:11     1.207
  ***************
  *** 1,5 ****
  --- 1,11 ----
    Changes with Apache 1.2b8
    
  +   *) In the proxy, if the cache filesystem was full, garbage_coll() was
  +      never called, and thus the filesystem would remain full indefinitely.
  +      We now also remove incomplete cache files left if the origin server
  +      didn't send a Content-Length header and either the client has aborted
  +      transfer or bwrite() to client has failed. [Petr Lampa]
  + 
      *) Fixed the handling of module and script-added header fields.
         Improved the interface for sending header fields and reduced
         the duplication of code between sending okay responses and errors.
  
  
  
  1.9       +1 -0      apache/src/modules/proxy/mod_proxy.h
  
  Index: mod_proxy.h
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/mod_proxy.h,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -C3 -r1.8 -r1.9
  *** mod_proxy.h       1997/03/02 05:05:22     1.8
  --- mod_proxy.h       1997/03/20 18:40:14     1.9
  ***************
  *** 228,233 ****
  --- 228,234 ----
        struct cache_req **cr);
    int proxy_cache_update(struct cache_req *c, array_header *resp_hdrs,
        const char *protocol, int nocache);
  + void proxy_garbage_coll(request_rec *r);
    
    /* proxy_connect.c */
    
  
  
  
  1.10      +6 -2      apache/src/modules/proxy/proxy_cache.c
  
  Index: proxy_cache.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_cache.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -C3 -r1.9 -r1.10
  *** proxy_cache.c     1997/01/20 04:28:32     1.9
  --- proxy_cache.c     1997/03/20 18:40:15     1.10
  ***************
  *** 88,94 ****
    static int sub_garbage_coll(request_rec *r,array_header *files,
                            const char *cachedir,const char *cachesubdir);
    
  ! static void garbage_coll(request_rec *r)
        {
        const char *cachedir;
        void *sconf = r->server->module_config;
  --- 88,94 ----
    static int sub_garbage_coll(request_rec *r,array_header *files,
                            const char *cachedir,const char *cachesubdir);
    
  ! void proxy_garbage_coll(request_rec *r)
        {
        const char *cachedir;
        void *sconf = r->server->module_config;
  ***************
  *** 835,840 ****
  --- 835,845 ----
            return;
        }
        } else
  +     if (c->req->connection->aborted) {
  +         pclosef(c->req->pool, c->fp->fd);  /* no need to flush */
  +         unlink(c->tempfile);
  +         return;
  +     } else 
        {
    /* update content-length of file */
        char buff[9];
  ***************
  *** 909,914 ****
            "proxy: error deleting temp file",s);
    #endif
    
  -     garbage_coll(c->req);
    }
    
  --- 914,918 ----
  
  
  
  1.12      +2 -0      apache/src/modules/proxy/proxy_ftp.c
  
  Index: proxy_ftp.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_ftp.c,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -C3 -r1.11 -r1.12
  *** proxy_ftp.c       1997/02/24 05:37:54     1.11
  --- proxy_ftp.c       1997/03/20 18:40:15     1.12
  ***************
  *** 878,883 ****
  --- 878,885 ----
        pclosef(pool, dsock);
        pclosef(pool, sock);
    
  +     proxy_garbage_coll(r);
  + 
        return OK;
    }
    
  
  
  
  1.15      +1 -0      apache/src/modules/proxy/proxy_http.c
  
  Index: proxy_http.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_http.c,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -C3 -r1.14 -r1.15
  *** proxy_http.c      1997/02/20 05:16:25     1.14
  --- proxy_http.c      1997/03/20 18:40:15     1.15
  ***************
  *** 395,400 ****
  --- 395,401 ----
    
        pclosef(pool, sock);
    
  +     proxy_garbage_coll(r);
        return OK;
    }
    
  
  
  
  1.8       +8 -2      apache/src/modules/proxy/proxy_util.c
  
  Index: proxy_util.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_util.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -C3 -r1.7 -r1.8
  *** proxy_util.c      1997/01/20 04:28:34     1.7
  --- proxy_util.c      1997/03/20 18:40:16     1.8
  ***************
  *** 408,415 ****
        
            while(n && !r->connection->aborted) {
                w = bwrite(con->client, &buf[o], n);
  !         if (w <= 0)
  !             break;
            reset_timeout(r); /* reset timeout after successfule write */
                n-=w;
                o+=w;
  --- 408,421 ----
        
            while(n && !r->connection->aborted) {
                w = bwrite(con->client, &buf[o], n);
  !             if (w <= 0) {
  !                 if (f2 != NULL) {
  !                     pclosef(c->req->pool, c->fp->fd);
  !                     c->fp = NULL; 
  !                     unlink(c->tempfile);
  !                 }
  !                 break;
  !             }
            reset_timeout(r); /* reset timeout after successfule write */
                n-=w;
                o+=w;
  
  
  

Reply via email to