summary refs log tree commit diff
path: root/synapse/handlers/message.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2018-10-02 14:39:30 +0100
committerErik Johnston <erik@matrix.org>2018-10-02 14:39:30 +0100
commit7fa156af8061397f425f23c159b5ef12bf20f830 (patch)
treed1ee85a8436de10c828e7394c1f1afee978ae952 /synapse/handlers/message.py
parentMerge branch 'develop' into matrix-org-hotfixes (diff)
parentMerge pull request #3960 from matrix-org/rav/fix_missing_create_event_error (diff)
downloadsynapse-7fa156af8061397f425f23c159b5ef12bf20f830.tar.xz
Merge branch 'develop' of github.com:matrix-org/synapse into matrix-org-hotfixes
Diffstat (limited to 'synapse/handlers/message.py')
-rw-r--r--synapse/handlers/message.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py

index ab6b5d2b0e..a905e974cc 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(