From 5c5556d91505b659ce44e33c31e2ef82d4b079d1 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Wed, 6 Jul 2022 09:38:31 -0400 Subject: [PATCH] More robust usage. --- src/allmydata/storage/http_client.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/allmydata/storage/http_client.py b/src/allmydata/storage/http_client.py index b8bd0bf20..0ccc3c4a1 100644 --- a/src/allmydata/storage/http_client.py +++ b/src/allmydata/storage/http_client.py @@ -18,7 +18,7 @@ from werkzeug.datastructures import Range, ContentRange from twisted.web.http_headers import Headers from twisted.web import http from twisted.web.iweb import IPolicyForHTTPS -from twisted.internet.defer import inlineCallbacks, returnValue, fail, Deferred +from twisted.internet.defer import inlineCallbacks, returnValue, fail, Deferred, succeed from twisted.internet.interfaces import IOpenSSLClientConnectionCreator from twisted.internet.ssl import CertificateOptions from twisted.web.client import Agent, HTTPConnectionPool @@ -137,7 +137,10 @@ def limited_content(response, max_length: int = 30 * 1024 * 1024) -> Deferred: fails with a ``ValueError``. """ collector = _LengthLimitedCollector(max_length) - d = treq.collect(response, collector) + # Make really sure everything gets called in Deferred context, treq might + # call collector directly... + d = succeed(None) + d.addCallback(lambda _: treq.collect(response, collector)) d.addCallback(lambda _: collector.f.getvalue()) return d