]> git.pld-linux.org Git - packages/squid.git/blob - squid-2.5.STABLE4-cache_peer_maxconn.patch
- unifications
[packages/squid.git] / squid-2.5.STABLE4-cache_peer_maxconn.patch
1 Index: squid/src/forward.c
2 diff -c squid/src/forward.c:1.82.2.8 squid/src/forward.c:1.82.2.9
3 *** squid/src/forward.c:1.82.2.8        Sat Dec 13 09:48:39 2003
4 --- squid/src/forward.c Wed Dec 17 14:01:03 2003
5 ***************
6 *** 42,47 ****
7 --- 42,48 ----
8   static void fwdStateFree(FwdState * fwdState);
9   static PF fwdConnectTimeout;
10   static PF fwdServerClosed;
11 + static PF fwdPeerClosed;
12   static CNCB fwdConnectDone;
13   static int fwdCheckRetry(FwdState * fwdState);
14   static int fwdReforward(FwdState *);
15 ***************
16 *** 178,185 ****
17 --- 179,190 ----
18   fwdServerClosed(int fd, void *data)
19   {
20       FwdState *fwdState = data;
21 +     peer *p;
22       debug(17, 2) ("fwdServerClosed: FD %d %s\n", fd, storeUrl(fwdState->entry));
23       assert(fwdState->server_fd == fd);
24 +     p = fwdStateServerPeer(fwdState);
25 +     if (p)
26 +       p->stats.conn_open--;
27       fwdState->server_fd = -1;
28       if (fwdCheckRetry(fwdState)) {
29         int originserver = (fwdState->servers->peer == NULL);
30 ***************
31 *** 239,246 ****
32         err->dnsserver_msg = xstrdup(dns_error_message);
33         err->request = requestLink(request);
34         fwdFail(fwdState, err);
35 -       if (fs->peer)
36 -           fs->peer->stats.conn_open--;
37         comm_close(server_fd);
38       } else if (status != COMM_OK) {
39         assert(fs);
40 --- 244,249 ----
41 ***************
42 *** 255,264 ****
43         }
44         err->request = requestLink(request);
45         fwdFail(fwdState, err);
46 !       if (fs->peer) {
47             peerConnectFailed(fs->peer);
48 -           fs->peer->stats.conn_open--;
49 -       }
50         comm_close(server_fd);
51       } else {
52         debug(17, 3) ("fwdConnectDone: FD %d: '%s'\n", server_fd, storeUrl(fwdState->entry));
53 --- 258,265 ----
54         }
55         err->request = requestLink(request);
56         fwdFail(fwdState, err);
57 !       if (fs->peer)
58             peerConnectFailed(fs->peer);
59         comm_close(server_fd);
60       } else {
61         debug(17, 3) ("fwdConnectDone: FD %d: '%s'\n", server_fd, storeUrl(fwdState->entry));
62 ***************
63 *** 283,289 ****
64       FwdState *fwdState = data;
65       StoreEntry *entry = fwdState->entry;
66       ErrorState *err;
67 -     peer *p = fwdStateServerPeer(fwdState);
68       debug(17, 2) ("fwdConnectTimeout: FD %d: '%s'\n", fd, storeUrl(entry));
69       assert(fd == fwdState->server_fd);
70       if (entry->mem_obj->inmem_hi == 0) {
71 --- 284,289 ----
72 ***************
73 *** 298,305 ****
74             if (fwdState->servers->peer)
75                 peerConnectFailed(fwdState->servers->peer);
76       }
77 -     if (p)
78 -       p->stats.conn_open--;
79       comm_close(fd);
80   }
81   
82 --- 298,303 ----
83 ***************
84 *** 398,403 ****
85 --- 396,403 ----
86             fwdState->n_tries++;
87             if (!fs->peer)
88                 fwdState->origin_tries++;
89 +           else
90 +               comm_remove_close_handler(fd, fwdPeerClosed, fs->peer);
91             comm_add_close_handler(fd, fwdServerClosed, fwdState);
92             fwdConnectDone(fd, COMM_OK, fwdState);
93             return;
94 ***************
95 *** 544,554 ****
96              * transient (network) error; its a bug.
97              */
98             fwdState->flags.dont_retry = 1;
99 -           /*
100 -            * this assertion exists because if we are connected to
101 -            * a peer, then we need to decrement p->stats.conn_open.
102 -            */
103 -           assert(NULL == p);
104             comm_close(fwdState->server_fd);
105             break;
106         }
107 --- 544,549 ----
108 ***************
109 *** 730,745 ****
110 --- 725,754 ----
111   }
112   
113   /*
114 +  * Accounts for closed persistent connections
115 +  */
116 + static void
117 + fwdPeerClosed(int fd, void *data)
118 + {
119 +     peer *p = data;
120 +     p->stats.conn_open--;
121 + }
122
123 + /*
124    * Frees fwdState without closing FD or generating an abort
125    */
126   void
127   fwdUnregister(int fd, FwdState * fwdState)
128   {
129 +     peer *p;
130       debug(17, 3) ("fwdUnregister: %s\n", storeUrl(fwdState->entry));
131       assert(fd == fwdState->server_fd);
132       assert(fd > -1);
133       comm_remove_close_handler(fd, fwdServerClosed, fwdState);
134       fwdState->server_fd = -1;
135 +     p = fwdStateServerPeer(fwdState);
136 +     if (p)
137 +       comm_add_close_handler(fd, fwdPeerClosed, p);
138   }
139   
140   /*
This page took 0.232393 seconds and 3 git commands to generate.