summary refs log tree commit diff
path: root/synapse/state.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-09-14 10:03:48 +0100
committerErik Johnston <erik@matrix.org>2016-09-14 10:03:48 +0100
commitd5ae1f129143d6436a238fd7882e39168f944846 (patch)
tree495ff980ee00b730b46a29cc5a0608f4d8734250 /synapse/state.py
parentMerge pull request #1111 from matrix-org/matthew/device-ids (diff)
downloadsynapse-d5ae1f129143d6436a238fd7882e39168f944846.tar.xz
Ensure we don't mutate state cache entries
Diffstat (limited to 'synapse/state.py')
-rw-r--r--synapse/state.py6
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