if (!dest->getPeer())
cs->setHost(host_);
+ // XXX: Do not co-own attempt.path with ConnOpener.
attempt.path = dest;
attempt.connWait.start(cs, callConnect);
if (!destinations->empty()) {
if (!currentPeer) {
auto newPrime = destinations->extractFront();
+ // XXX: Do not co-own currentPeer Connection with ConnOpener
+ // (which is activated via startConnecting() below).
currentPeer = newPrime;
Must(currentPeer);
debugs(17, 7, "new peer " << *currentPeer);
const auto connector = new Security::BlindPeerConnector(request, params.conn, callback, nullptr, timeLeft);
encryptionWait.start(connector, callback);
AsyncJob::Start(connector); // will call our callback
+ // XXX: Exceptions orphan params.conn
return;
}
state = new IdentStateData;
state->hash.key = xstrdup(key);
+ // XXX: Do not co-own state->conn Connection with ConnOpener.
+
// copy the conn details. We do not want the original FD to be re-used by IDENT.
state->conn = conn->cloneIdentDetails();
// NP: use random port for secure outbound to IDENT_PORT
return false;
}
+ // XXX: Do not co-own dataConn with ConnOpener.
+
// active transfer: open a data connection from Squid to client
typedef CommCbMemFunT<Server, CommConnectCbParams> Dialer;
AsyncCall::Pointer callback = JobCallback(17, 3, Dialer, this, Ftp::Server::connectedForData);