From d4bc44468bd646c9d11eae2b87a190aad3767690 Mon Sep 17 00:00:00 2001 From: David Wilson Date: Mon, 26 Mar 2018 20:35:47 +0545 Subject: [PATCH] core: fix crash in fork stress test 14:50:04 E mitogen: mitogen.fork.Stream('fork.7431') crashed Traceback (most recent call last): File "/home/dmw/src/mitogen/mitogen/core.py", line 1287, in _call func(self) File "/home/dmw/src/mitogen/mitogen/core.py", line 758, in on_receive return self.on_disconnect(broker) File "/home/dmw/src/mitogen/mitogen/parent.py", line 370, in on_disconnect super(Stream, self).on_disconnect(broker) File "/home/dmw/src/mitogen/mitogen/core.py", line 721, in on_disconnect fire(self, 'disconnect') File "/home/dmw/src/mitogen/mitogen/core.py", line 162, in fire return [func(*args, **kwargs) for func in signals.get(name, ())] File "/home/dmw/src/mitogen/mitogen/core.py", line 1160, in listen(stream, 'disconnect', lambda: self.on_stream_disconnect(stream)) File "/home/dmw/src/mitogen/mitogen/core.py", line 1142, in on_stream_disconnect for context in self._context_by_id.itervalues(): RuntimeError: dictionary changed size during iteration --- mitogen/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mitogen/core.py b/mitogen/core.py index 09420926..9dcfc6da 100644 --- a/mitogen/core.py +++ b/mitogen/core.py @@ -1139,7 +1139,7 @@ class Router(object): return 'Router(%r)' % (self.broker,) def on_stream_disconnect(self, stream): - for context in self._context_by_id.itervalues(): + for context in self._context_by_id.values(): stream_ = self._stream_by_id.get(context.context_id) if stream_ is stream: del self._stream_by_id[context.context_id]