diff --git a/docs/changelog.rst b/docs/changelog.rst index ec881a92..e242b989 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -21,6 +21,9 @@ Bug fix release. - Configuration: :option:`mopidy --config` now supports directories. +- Network: Fix a race condition where two threads could try to free the same + data simultaneously. (Fixes: :issue:`781`) + v0.19.3 (2014-08-03) ==================== diff --git a/mopidy/utils/network.py b/mopidy/utils/network.py index 11469b47..4ea25026 100644 --- a/mopidy/utils/network.py +++ b/mopidy/utils/network.py @@ -268,8 +268,8 @@ class Connection(object): return True if not data: - self.actor_ref.tell({'close': True}) self.disable_recv() + self.actor_ref.tell({'close': True}) return True try: diff --git a/tests/utils/network/test_connection.py b/tests/utils/network/test_connection.py index 7a25643f..7435353a 100644 --- a/tests/utils/network/test_connection.py +++ b/tests/utils/network/test_connection.py @@ -418,8 +418,8 @@ class ConnectionTest(unittest.TestCase): self.assertTrue(network.Connection.recv_callback( self.mock, sentinel.fd, gobject.IO_IN)) - self.mock.actor_ref.tell.assert_called_once_with({'close': True}) self.mock.disable_recv.assert_called_once_with() + self.mock.actor_ref.tell.assert_called_once_with({'close': True}) def test_recv_callback_recoverable_error(self): self.mock.sock = Mock(spec=socket.SocketType)