Changeset 2f535f8


Ignore:
Timestamp:
2011-06-20 09:39:44 (3 years ago)
Author:
Poul-Henning Kamp <phk@…>
Branches:
master, 4.0, experimental-ims
Children:
2d7d3c
Parents:
0b4c69 (diff), 78df00 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
git-author:
Poul-Henning Kamp <phk@…> (2011-06-20 09:39:44)
git-committer:
Poul-Henning Kamp <phk@…> (2011-06-20 09:39:44)
Message:

Merge branch 'master' of  ssh://git.varnish-cache.org/git/varnish-cache

Files:
7 edited

Legend:

Unmodified
Added
Removed
  • bin/varnishd/mgt_shmem.c

    re2ef91e r78df00  
    102102#include "vmb.h" 
    103103#include "vsm.h" 
     104#include "flopen.h" 
    104105 
    105106#ifndef MAP_HASSEMAPHORE 
     
    126127        int i; 
    127128        struct stat st; 
     129        pid_t pid; 
    128130 
    129131        AZ(fstat(fd, &st)); 
     
    131133                ARGV_ERR("\tshmlog: Not a file\n"); 
    132134 
     135        /* Test if the SHMFILE is locked by other Varnish */ 
     136        if (fltest(fd, &pid) > 0) { 
     137                fprintf(stderr, 
     138                        "SHMFILE locked by running varnishd master (pid=%jd)\n", 
     139                        (intmax_t)pid); 
     140                fprintf(stderr, 
     141                        "(Use unique -n arguments if you want multiple " 
     142                        "instances)\n"); 
     143                exit(2); 
     144        } 
     145 
     146        /* Read owning pid from SHMFILE */ 
    133147        memset(&slh, 0, sizeof slh);    /* XXX: for flexelint */ 
    134148        i = read(fd, &slh, sizeof slh); 
     
    139153        if (slh.hdrsize != sizeof slh) 
    140154                return; 
    141  
    142155        if (slh.master_pid != 0 && !kill(slh.master_pid, 0)) { 
    143                 fprintf(stderr, 
    144                     "SHMFILE owned by running varnishd master (pid=%jd)\n", 
    145                     (intmax_t)slh.master_pid); 
    146                 fprintf(stderr, 
    147                     "(Use unique -n arguments if you want multiple " 
    148                     "instances.)\n"); 
    149                 exit(2); 
     156                fprintf(stderr,  
     157                        "WARNING: Taking over SHMFILE marked as owned by " 
     158                        "running process (pid=%jd)\n", 
     159                        (intmax_t)slh.master_pid); 
    150160        } 
    151161} 
     
    162172        unsigned u; 
    163173        char buf[64*1024]; 
     174        int flags; 
    164175 
    165176        (void)unlink(fn); 
    166         vsl_fd = open(fn, O_RDWR | O_CREAT | O_EXCL, 0644); 
     177        vsl_fd = flopen(fn, O_RDWR | O_CREAT | O_EXCL | O_NONBLOCK, 0644); 
    167178        if (vsl_fd < 0) { 
    168179                fprintf(stderr, "Could not create %s: %s\n", 
     
    170181                exit (1); 
    171182        } 
    172  
     183        flags = fcntl(vsl_fd, F_GETFL); 
     184        assert(flags != -1); 
     185        flags &= ~O_NONBLOCK; 
     186        AZ(fcntl(vsl_fd, F_SETFL, flags)); 
     187         
    173188        memset(&slh, 0, sizeof slh); 
    174189        slh.magic = VSM_HEAD_MAGIC; 
     
    278293                (void)close(i); 
    279294        } 
    280         (void)close(i); 
    281295        vsl_buildnew(VSM_FILENAME, size, fill); 
    282296 
  • include/flopen.h

    r6f038c r78df00  
    3232#define FLOPEN_H_INCLUDED 
    3333 
     34#include <sys/types.h> 
     35 
    3436int flopen(const char *, int, ...); 
     37int fltest(int fd, pid_t *pid); 
    3538 
    3639#endif 
  • lib/libvarnish/flopen.c

    r6f038c r78df00  
    108108        } 
    109109} 
     110 
     111/* Tests if the given fd is locked through flopen 
     112 * If pid is non-NULL, stores the pid of the process holding the lock there 
     113 * Returns 1 if the file is locked 
     114 * Returns 0 if the file is unlocked 
     115 * Returns -1 on error (and errno) 
     116 */ 
     117int 
     118fltest(int fd, pid_t *pid) 
     119{ 
     120        struct flock lock; 
     121 
     122        memset(&lock, 0, sizeof lock); 
     123        lock.l_type = F_WRLCK; 
     124        lock.l_whence = SEEK_SET; 
     125 
     126        if (fcntl(fd, F_GETLK, &lock) == -1) 
     127                return (-1); 
     128        if (lock.l_type == F_UNLCK) 
     129                return (0); 
     130        if (pid != NULL) 
     131                *pid = lock.l_pid; 
     132        return (1); 
     133} 
  • bin/varnishd/cache.h

    rc11726 r0b4c69  
    167167#define HTTP_MAGIC              0x6428b5c9 
    168168 
     169        enum httpwhence         logtag; 
     170 
    169171        struct ws               *ws; 
    170  
    171         unsigned char           conds;          /* If-* headers present */ 
    172         enum httpwhence         logtag; 
    173         int                     status; 
    174         double                  protover; 
    175  
    176         unsigned                shd;            /* Size of hd space */ 
    177172        txt                     *hd; 
    178173        unsigned char           *hdf; 
    179174#define HDF_FILTER              (1 << 0)        /* Filtered by Connection */ 
    180         unsigned                nhd;            /* Next free hd */ 
     175        uint16_t                shd;            /* Size of hd space */ 
     176        uint16_t                nhd;            /* Next free hd */ 
     177        uint16_t                status; 
     178        uint8_t                 protover; 
     179        uint8_t                 conds;          /* If-* headers present */ 
    181180}; 
    182181 
  • bin/varnishd/cache_center.c

    rc11726 r0d276b4  
    201201                else if (!sp->wantbody) { 
    202202                        /* Nothing */ 
    203                 } else if (sp->http->protover >= 1.1) { 
     203                } else if (sp->http->protover >= 11) { 
    204204                        sp->wrk->res_mode |= RES_CHUNKED; 
    205205                } else { 
  • bin/varnishd/cache_http.c

    rc11726 r0d276b4  
    421421 
    422422        if (!http_GetHdr(hp, H_Connection, &p)) { 
    423                 if (hp->protover < 1.1) 
     423                if (hp->protover < 11) 
    424424                        return ("not HTTP/1.1"); 
    425425                return (NULL); 
     
    641641 
    642642        if (!strcasecmp(hp->hd[HTTP_HDR_PROTO].b, "HTTP/1.0")) 
    643                 hp->protover = 1.0; 
     643                hp->protover = 10; 
    644644        else if (!strcasecmp(hp->hd[HTTP_HDR_PROTO].b, "HTTP/1.1")) 
    645                 hp->protover = 1.1; 
     645                hp->protover = 11; 
    646646        else 
    647                 hp->protover = 0.9; 
     647                hp->protover = 9; 
    648648} 
    649649 
  • bin/varnishd/rfc2616.c

    rc11726 r0d276b4  
    187187        hp = sp->wrk->beresp; 
    188188 
    189         if (hp->protover < 1.1 && !http_HdrIs(hp, H_Connection, "keep-alive")) 
     189        if (hp->protover < 11 && !http_HdrIs(hp, H_Connection, "keep-alive")) 
    190190                sp->wrk->do_close = 1; 
    191191        else if (http_HdrIs(hp, H_Connection, "close")) 
     
    263263        } 
    264264 
    265         if (hp->protover < 1.1) { 
     265        if (hp->protover < 11) { 
    266266                /* 
    267267                 * With no Connection header, assume EOF. 
Note: See TracChangeset for help on using the changeset viewer.