diff options
author | Richard van der Hoff <1389908+richvdh@users.noreply.github.com> | 2018-10-02 10:47:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-02 10:47:38 +0100 |
commit | 8c41b0ca66b87ebed4abfd8fd52716402d1ac264 (patch) | |
tree | dded82bc1137f1dd5d74a8a20e2262c3f3a01898 /synapse/handlers/message.py | |
parent | Merge pull request #3986 from matrix-org/erikj/fix_sync_with_redacted_state (diff) | |
parent | Avoid reraise, to improve stacktraces (diff) | |
download | synapse-8c41b0ca66b87ebed4abfd8fd52716402d1ac264.tar.xz |
Merge pull request #3989 from matrix-org/rav/better_stacktraces
Avoid reraise, to improve stacktraces
Diffstat (limited to 'synapse/handlers/message.py')
-rw-r--r-- | synapse/handlers/message.py | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index e484061cc0..4954b23a0d 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -14,9 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import logging -import sys -import six from six import iteritems, itervalues, string_types from canonicaljson import encode_canonical_json, json @@ -624,6 +622,9 @@ class EventCreationHandler(object): event, context ) + # reraise does not allow inlineCallbacks to preserve the stacktrace, so we + # hack around with a try/finally instead. + success = False try: # If we're a worker we need to hit out to the master. if self.config.worker_app: @@ -636,6 +637,7 @@ class EventCreationHandler(object): ratelimit=ratelimit, extra_users=extra_users, ) + success = True return yield self.persist_and_notify_client_event( @@ -645,17 +647,16 @@ class EventCreationHandler(object): ratelimit=ratelimit, extra_users=extra_users, ) - except: # noqa: E722, as we reraise the exception this is fine. - # Ensure that we actually remove the entries in the push actions - # staging area, if we calculated them. - tp, value, tb = sys.exc_info() - - run_in_background( - self.store.remove_push_actions_from_staging, - event.event_id, - ) - six.reraise(tp, value, tb) + success = True + finally: + if not success: + # Ensure that we actually remove the entries in the push actions + # staging area, if we calculated them. + run_in_background( + self.store.remove_push_actions_from_staging, + event.event_id, + ) @defer.inlineCallbacks def persist_and_notify_client_event( |