mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-08-05 12:44:27 -04:00
Close ijson
coroutines ourselves instead of letting the GC close them (#12875)
Hopefully this means that exceptions raised due to truncated JSON get a sensible logging context and stack. Signed-off-by: Sean Quah <seanq@matrix.org>
This commit is contained in:
parent
7b88f5a107
commit
bb7a637765
3 changed files with 19 additions and 2 deletions
|
@ -225,6 +225,7 @@ async def _handle_response(
|
|||
if max_response_size is None:
|
||||
max_response_size = MAX_RESPONSE_SIZE
|
||||
|
||||
finished = False
|
||||
try:
|
||||
check_content_type_is(response.headers, parser.CONTENT_TYPE)
|
||||
|
||||
|
@ -233,6 +234,7 @@ async def _handle_response(
|
|||
|
||||
length = await make_deferred_yieldable(d)
|
||||
|
||||
finished = True
|
||||
value = parser.finish()
|
||||
except BodyExceededMaxSize as e:
|
||||
# The response was too big.
|
||||
|
@ -283,6 +285,15 @@ async def _handle_response(
|
|||
e,
|
||||
)
|
||||
raise
|
||||
finally:
|
||||
if not finished:
|
||||
# There was an exception and we didn't `finish()` the parse.
|
||||
# Let the parser know that it can free up any resources.
|
||||
try:
|
||||
parser.finish()
|
||||
except Exception:
|
||||
# Ignore any additional exceptions.
|
||||
pass
|
||||
|
||||
time_taken_secs = reactor.seconds() - start_ms / 1000
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue