From c5ae5c9ad8eb68a8ec01cfa1b19d81cbad49617a Mon Sep 17 00:00:00 2001 From: Cameron Dale Date: Thu, 24 Apr 2008 16:17:54 -0700 Subject: [PATCH] Fix some errors in the new twisted HTTP client's connectionLost() methods. See http://twistedmatrix.com/trac/ticket/3207 for more info. --- apt_p2p/HTTPDownloader.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apt_p2p/HTTPDownloader.py b/apt_p2p/HTTPDownloader.py index 2952f48..35847f7 100644 --- a/apt_p2p/HTTPDownloader.py +++ b/apt_p2p/HTTPDownloader.py @@ -18,6 +18,9 @@ from zope.interface import implements from apt_p2p_conf import version +class PipelineError(Exception): + """An error has occurred in pipelining requests.""" + class LoggingHTTPClientProtocol(HTTPClientProtocol): """A modified client protocol that logs the number of bytes received.""" @@ -36,6 +39,15 @@ class LoggingHTTPClientProtocol(HTTPClientProtocol): self.stats.receivedBytes(len(data), self.mirror) HTTPClientProtocol.rawDataReceived(self, data) + def setReadPersistent(self, persist): + self.readPersistent = persist + if not persist: + # Tell all requests but first to abort. + lostRequests = self.inRequests[1:] + del self.inRequests[1:] + for request in lostRequests: + request.connectionLost(PipelineError('The pipelined connection was lost')) + class Peer(ClientFactory): """A manager for all HTTP requests to a single peer. -- 2.30.2