Merge pull request #3925 from matrix-org/erikj/fix_producers_unregistered

Fix spurious exceptions when client closes conncetion
This commit is contained in:
Richard van der Hoff 2018-09-25 11:52:06 +01:00 committed by GitHub
commit 94f7befc31
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 14 deletions

1
changelog.d/3925.misc Normal file
View File

@ -0,0 +1 @@
Fix spurious exceptions when remote http client closes conncetion

View File

@ -84,10 +84,21 @@ def wrap_json_request_handler(h):
logger.info( logger.info(
"%s SynapseError: %s - %s", request, code, e.msg "%s SynapseError: %s - %s", request, code, e.msg
) )
respond_with_json(
request, code, e.error_dict(), send_cors=True, # Only respond with an error response if we haven't already started
pretty_print=_request_user_agent_is_curl(request), # writing, otherwise lets just kill the connection
) if request.startedWriting:
if request.transport:
try:
request.transport.abortConnection()
except Exception:
# abortConnection throws if the connection is already closed
pass
else:
respond_with_json(
request, code, e.error_dict(), send_cors=True,
pretty_print=_request_user_agent_is_curl(request),
)
except Exception: except Exception:
# failure.Failure() fishes the original Failure out # failure.Failure() fishes the original Failure out
@ -100,16 +111,26 @@ def wrap_json_request_handler(h):
request, request,
f.getTraceback().rstrip(), f.getTraceback().rstrip(),
) )
respond_with_json( # Only respond with an error response if we haven't already started
request, # writing, otherwise lets just kill the connection
500, if request.startedWriting:
{ if request.transport:
"error": "Internal server error", try:
"errcode": Codes.UNKNOWN, request.transport.abortConnection()
}, except Exception:
send_cors=True, # abortConnection throws if the connection is already closed
pretty_print=_request_user_agent_is_curl(request), pass
) else:
respond_with_json(
request,
500,
{
"error": "Internal server error",
"errcode": Codes.UNKNOWN,
},
send_cors=True,
pretty_print=_request_user_agent_is_curl(request),
)
return wrap_async_request_handler(wrapped_request_handler) return wrap_async_request_handler(wrapped_request_handler)