diff options
author | Erik Johnston <erik@matrix.org> | 2016-09-14 10:03:48 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2016-09-14 10:03:48 +0100 |
commit | d5ae1f129143d6436a238fd7882e39168f944846 (patch) | |
tree | 495ff980ee00b730b46a29cc5a0608f4d8734250 /synapse/state.py | |
parent | Merge pull request #1111 from matrix-org/matthew/device-ids (diff) | |
download | synapse-d5ae1f129143d6436a238fd7882e39168f944846.tar.xz |
Ensure we don't mutate state cache entries
Diffstat (limited to 'synapse/state.py')
-rw-r--r-- | synapse/state.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/synapse/state.py b/synapse/state.py index 4520fa0415..617db8d2e2 100644 --- a/synapse/state.py +++ b/synapse/state.py @@ -26,6 +26,7 @@ from synapse.events.snapshot import EventContext from synapse.util.async import Linearizer from collections import namedtuple +from frozendict import frozendict import logging import hashlib @@ -58,11 +59,11 @@ class _StateCacheEntry(object): __slots__ = ["state", "state_group", "state_id", "prev_group", "delta_ids"] def __init__(self, state, state_group, prev_group=None, delta_ids=None): - self.state = state + self.state = frozendict(state) self.state_group = state_group self.prev_group = prev_group - self.delta_ids = delta_ids + self.delta_ids = frozendict(delta_ids) if delta_ids is not None else None # The `state_id` is a unique ID we generate that can be used as ID for # this collection of state. Usually this would be the same as the @@ -255,6 +256,7 @@ class StateHandler(object): context.prev_group = entry.prev_group context.delta_ids = entry.delta_ids if context.delta_ids is not None: + context.delta_ids = dict(context.delta_ids) context.delta_ids[key] = event.event_id else: context.current_state_ids = context.prev_state_ids |