]> git.pld-linux.org Git - packages/squid.git/blame - squid-2.5.STABLE4-cache_peer_maxconn.patch
- add squid-2.5.STABLE5-range_offset_limit.patch patch; rel 2
[packages/squid.git] / squid-2.5.STABLE4-cache_peer_maxconn.patch
CommitLineData
684396e0
AM
1Index: squid/src/forward.c
2diff -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.319767 seconds and 4 git commands to generate.