From 607a41c4436cd1b3a8917c897f8e82b70bf49471 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sun, 26 Aug 2012 22:17:51 +0200 Subject: [PATCH] Make HTTP proxy insta-murder connections that need to be re-used (happens when progressive makes two connections from one user agent for some reason - kills the oldest connections for the newest one). --- src/conn_http.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/conn_http.cpp b/src/conn_http.cpp index 9de07c5c..9b4f19a7 100644 --- a/src/conn_http.cpp +++ b/src/conn_http.cpp @@ -159,9 +159,18 @@ namespace Connector_HTTP{ std::string request = H.BuildRequest();//copy the request for later forwarding to the connector H.Clean(); + //existing connections must be murdered, if any + if (connconn.count(uid)){ + if (!connconn[uid]->in_use.try_lock()){ + connconn[uid]->conn->close(); + connconn[uid]->in_use.lock(); + } + connconn[uid]->in_use.unlock(); + } //check if a connection exists, and if not create one conn_mutex.lock(); - if (!connconn.count(uid)){ + if (!connconn.count(uid) || !connconn[uid]->conn->connected()){ + if (connconn.count(uid)){connconn.erase(uid);} connconn[uid] = new ConnConn(new Socket::Connection("/tmp/mist/http_"+connector)); connconn[uid]->conn->setBlocking(false);//do not block on spool() with no data }