Merge pull request #2790 from matrix-org/rav/preserve_event_logcontext_leak
Fix a logcontext leak in persist_events
This commit is contained in:
commit
f5f89fda21
|
@ -146,6 +146,9 @@ class _EventPeristenceQueue(object):
|
||||||
try:
|
try:
|
||||||
queue = self._get_drainining_queue(room_id)
|
queue = self._get_drainining_queue(room_id)
|
||||||
for item in queue:
|
for item in queue:
|
||||||
|
# handle_queue_loop runs in the sentinel logcontext, so
|
||||||
|
# there is no need to preserve_fn when running the
|
||||||
|
# callbacks on the deferred.
|
||||||
try:
|
try:
|
||||||
ret = yield per_item_callback(item)
|
ret = yield per_item_callback(item)
|
||||||
item.deferred.callback(ret)
|
item.deferred.callback(ret)
|
||||||
|
@ -157,7 +160,11 @@ class _EventPeristenceQueue(object):
|
||||||
self._event_persist_queues[room_id] = queue
|
self._event_persist_queues[room_id] = queue
|
||||||
self._currently_persisting_rooms.discard(room_id)
|
self._currently_persisting_rooms.discard(room_id)
|
||||||
|
|
||||||
preserve_fn(handle_queue_loop)()
|
# set handle_queue_loop off on the background. We don't want to
|
||||||
|
# attribute work done in it to the current request, so we drop the
|
||||||
|
# logcontext altogether.
|
||||||
|
with PreserveLoggingContext():
|
||||||
|
handle_queue_loop()
|
||||||
|
|
||||||
def _get_drainining_queue(self, room_id):
|
def _get_drainining_queue(self, room_id):
|
||||||
queue = self._event_persist_queues.setdefault(room_id, deque())
|
queue = self._event_persist_queues.setdefault(room_id, deque())
|
||||||
|
|
Loading…
Reference in New Issue