From ebbfd6f28fd984c0bf7872e8a3791958006a7ffb Mon Sep 17 00:00:00 2001 From: Amos Jeffries Date: Sat, 10 May 2008 02:22:32 +1200 Subject: [PATCH] Author: Finn Thain Bug 2332: segfault in tunnelConnectTimeout() Fixes at least one race condition. If tunnelConnectTimeout() is called before tunnelPeerSelectComplete(), then tunnelState->servers will be NULL. --- src/tunnel.cc | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/tunnel.cc b/src/tunnel.cc index 925791ff2c..e619af8ef1 100644 --- a/src/tunnel.cc +++ b/src/tunnel.cc @@ -465,16 +465,18 @@ tunnelConnectTimeout(int fd, void *data) HttpRequest *request = tunnelState->request; ErrorState *err = NULL; - if (tunnelState->servers->_peer) - hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, - tunnelState->servers->_peer->host); - else if (Config.onoff.log_ip_on_direct) - hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, - fd_table[tunnelState->server.fd()].ipaddr); - else - hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, - tunnelState->host); - + if (tunnelState->servers) { + if (tunnelState->servers->_peer) + hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, + tunnelState->servers->_peer->host); + else if (Config.onoff.log_ip_on_direct) + hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, + fd_table[tunnelState->server.fd()].ipaddr); + else + hierarchyNote(&tunnelState->request->hier, tunnelState->servers->code, + tunnelState->host); + } else + debugs(26, 1, "tunnelConnectTimeout(): tunnelState->servers is NULL"); err = errorCon(ERR_CONNECT_FAIL, HTTP_SERVICE_UNAVAILABLE, request); -- 2.47.3