Index: squid/src/ssl.c diff -c squid/src/ssl.c:1.118.2.6 squid/src/ssl.c:1.118.2.7 *** squid/src/ssl.c:1.118.2.6 Mon Jun 7 15:20:34 2004 --- squid/src/ssl.c Mon Sep 27 12:07:30 2004 *************** *** 51,56 **** --- 51,57 ---- #if DELAY_POOLS delay_id delay_id; #endif + int connected; } SslStateData; static const char *const conn_established = "HTTP/1.0 200 Connection established\r\n\r\n"; *************** *** 91,97 **** debug(26, 3) ("sslClientClosed: FD %d\n", fd); assert(fd == sslState->client.fd); sslState->client.fd = -1; ! if (sslState->server.fd == -1) sslStateFree(sslState); } --- 92,100 ---- debug(26, 3) ("sslClientClosed: FD %d\n", fd); assert(fd == sslState->client.fd); sslState->client.fd = -1; ! if (sslState->server.fd != -1) ! comm_close(sslState->server.fd); ! else sslStateFree(sslState); } *************** *** 152,158 **** } else if (sslState->client.len == 0) { comm_close(sslState->server.fd); } ! if (sslState->server.fd> -1) { if (sslState->client.len> 0) { commSetSelect(sslState->server.fd, COMM_SELECT_WRITE, --- 155,163 ---- } else if (sslState->client.len == 0) { comm_close(sslState->server.fd); } ! if (!sslState->connected) { ! /* Not yet connected. wait.. */ ! } else if (sslState->server.fd> -1) { if (sslState->client.len> 0) { commSetSelect(sslState->server.fd, COMM_SELECT_WRITE, *************** *** 354,366 **** { SslStateData *sslState = data; debug(26, 3) ("sslTimeout: FD %d\n", fd); ! /* temporary lock to save our own feets (comm_close -> sslClientClosed -> Free) */ ! cbdataLock(sslState); ! if (sslState->client.fd> -1) ! comm_close(sslState->client.fd); ! if (sslState->server.fd> -1) ! comm_close(sslState->server.fd); ! cbdataUnlock(sslState); } static void --- 359,365 ---- { SslStateData *sslState = data; debug(26, 3) ("sslTimeout: FD %d\n", fd); ! comm_close(sslState->client.fd); } static void *************** *** 379,391 **** { SslStateData *sslState = data; assert(sslState != NULL); ! /* temporary lock to save our own feets (comm_close -> sslClientClosed -> Free) */ ! cbdataLock(sslState); ! if (sslState->client.fd> -1) ! comm_close(sslState->client.fd); ! if (sslState->server.fd> -1) ! comm_close(sslState->server.fd); ! cbdataUnlock(sslState); } --- 378,384 ---- { SslStateData *sslState = data; assert(sslState != NULL); ! comm_close(sslState->client.fd); } *************** *** 424,429 **** --- 417,423 ---- err->callback_data = sslState; errorSend(sslState->client.fd, err); } else { + sslState->connected = 1; if (sslState->servers->peer) sslProxyConnected(sslState->server.fd, sslState); else *************** *** 557,575 **** Config.Timeout.lifetime, sslTimeout, sslState); ! commSetTimeout(sslState->server.fd, ! Config.Timeout.connect, ! sslConnectTimeout, ! sslState); peerSelect(request, NULL, sslPeerSelectComplete, sslState); - /* - * Disable the client read handler until peer selection is complete - * Take control away from client_side.c. - */ - commSetSelect(sslState->client.fd, COMM_SELECT_READ, NULL, NULL, 0); } static void --- 551,561 ---- Config.Timeout.lifetime, sslTimeout, sslState); ! sslSetSelect(sslState); peerSelect(request, NULL, sslPeerSelectComplete, sslState); } static void *************** *** 599,608 **** debug(26, 3) ("sslProxyConnected: Sending {%s}\n", sslState->client.buf); sslState->client.len = mb.size; memBufClean(&mb); - commSetTimeout(sslState->server.fd, - Config.Timeout.read, - sslTimeout, - sslState); sslSetSelect(sslState); } --- 585,590 ---- *************** *** 647,652 **** --- 629,638 ---- sslState->delay_id = 0; } #endif + commSetTimeout(sslState->server.fd, + Config.Timeout.connect, + sslConnectTimeout, + sslState); commConnectStart(sslState->server.fd, sslState->host, sslState->port,

AltStyle によって変換されたページ (->オリジナル) /