]>
Commit | Line | Data |
---|---|---|
657376c6 | 1 | Index: squid/src/ssl.c |
2 | diff -c squid/src/ssl.c:1.118.2.4 squid/src/ssl.c:1.118.2.5 | |
3 | *** squid/src/ssl.c:1.118.2.4 Wed Aug 6 07:49:02 2003 | |
4 | --- squid/src/ssl.c Mon Mar 29 02:59:44 2004 | |
5 | *************** | |
6 | *** 218,224 **** | |
7 | if (!ignoreErrno(errno)) | |
8 | comm_close(fd); | |
9 | } else if (len == 0) { | |
10 | ! comm_close(sslState->server.fd); | |
11 | } | |
12 | if (cbdataValid(sslState)) | |
13 | sslSetSelect(sslState); | |
14 | --- 218,224 ---- | |
15 | if (!ignoreErrno(errno)) | |
16 | comm_close(fd); | |
17 | } else if (len == 0) { | |
18 | ! comm_close(fd); | |
19 | } | |
20 | if (cbdataValid(sslState)) | |
21 | sslSetSelect(sslState); | |
22 | *************** | |
23 | *** 376,385 **** | |
24 | --- 376,388 ---- | |
25 | { | |
26 | SslStateData *sslState = data; | |
27 | assert(sslState != NULL); | |
28 | + /* temporary lock to save our own feets (comm_close -> sslClientClosed -> Free) */ | |
29 | + cbdataLock(sslState); | |
30 | if (sslState->client.fd > -1) | |
31 | comm_close(sslState->client.fd); | |
32 | if (sslState->server.fd > -1) | |
33 | comm_close(sslState->server.fd); | |
34 | + cbdataUnlock(sslState); | |
35 | } | |
36 | ||
37 | ||
38 | *************** | |
39 | *** 432,437 **** | |
40 | --- 435,467 ---- | |
41 | } | |
42 | } | |
43 | ||
44 | + static void | |
45 | + sslConnectTimeout(int fd, void *data) | |
46 | + { | |
47 | + SslStateData *sslState = data; | |
48 | + request_t *request = sslState->request; | |
49 | + ErrorState *err = NULL; | |
50 | + if (sslState->servers->peer) | |
51 | + hierarchyNote(&sslState->request->hier, sslState->servers->code, | |
52 | + sslState->servers->peer->host); | |
53 | + else if (Config.onoff.log_ip_on_direct) | |
54 | + hierarchyNote(&sslState->request->hier, sslState->servers->code, | |
55 | + fd_table[sslState->server.fd].ipaddr); | |
56 | + else | |
57 | + hierarchyNote(&sslState->request->hier, sslState->servers->code, | |
58 | + sslState->host); | |
59 | + comm_close(fd); | |
60 | + err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE); | |
61 | + *sslState->status_ptr = HTTP_SERVICE_UNAVAILABLE; | |
62 | + err->xerrno = ETIMEDOUT; | |
63 | + err->host = xstrdup(sslState->host); | |
64 | + err->port = sslState->port; | |
65 | + err->request = requestLink(request); | |
66 | + err->callback = sslErrorComplete; | |
67 | + err->callback_data = sslState; | |
68 | + errorSend(sslState->client.fd, err); | |
69 | + } | |
70 | + | |
71 | CBDATA_TYPE(SslStateData); | |
72 | void | |
73 | sslStart(clientHttpRequest * http, size_t * size_ptr, int *status_ptr) | |
74 | *************** | |
75 | *** 526,532 **** | |
76 | sslState); | |
77 | commSetTimeout(sslState->server.fd, | |
78 | Config.Timeout.connect, | |
79 | ! sslTimeout, | |
80 | sslState); | |
81 | peerSelect(request, | |
82 | NULL, | |
83 | --- 556,562 ---- | |
84 | sslState); | |
85 | commSetTimeout(sslState->server.fd, | |
86 | Config.Timeout.connect, | |
87 | ! sslConnectTimeout, | |
88 | sslState); | |
89 | peerSelect(request, | |
90 | NULL, |