diff --git a/gns3server/compute/notification_manager.py b/gns3server/compute/notification_manager.py index 82388b0a..44c9ca39 100644 --- a/gns3server/compute/notification_manager.py +++ b/gns3server/compute/notification_manager.py @@ -15,7 +15,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . - +import asyncio from contextlib import contextmanager from gns3server.utils.notification_queue import NotificationQueue @@ -54,7 +54,7 @@ class NotificationManager: """ for listener in self._listeners: - listener.put_nowait((action, event, kwargs)) + asyncio.get_event_loop().call_soon_threadsafe(listener.put_nowait, (action, event, kwargs)) @staticmethod def reset(): diff --git a/gns3server/controller/notification.py b/gns3server/controller/notification.py index 48d5a3d2..19672fb0 100644 --- a/gns3server/controller/notification.py +++ b/gns3server/controller/notification.py @@ -15,7 +15,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -import os +import asyncio from contextlib import contextmanager from gns3server.utils.notification_queue import NotificationQueue @@ -73,7 +73,7 @@ class Notification: """ for controller_listener in self._controller_listeners: - controller_listener.put_nowait((action, event, {})) + asyncio.get_event_loop().call_soon_threadsafe(controller_listener.put_nowait, (action, event, {})) def project_has_listeners(self, project_id): """ @@ -134,7 +134,7 @@ class Notification: except KeyError: return for listener in project_listeners: - listener.put_nowait((action, event, {})) + asyncio.get_event_loop().call_soon_threadsafe(listener.put_nowait, (action, event, {})) def _send_event_to_all_projects(self, action, event): """ @@ -146,4 +146,4 @@ class Notification: """ for project_listeners in self._project_listeners.values(): for listener in project_listeners: - listener.put_nowait((action, event, {})) + asyncio.get_event_loop().call_soon_threadsafe(listener.put_nowait, (action, event, {})) diff --git a/tests/compute/qemu/test_qemu_vm.py b/tests/compute/qemu/test_qemu_vm.py index c07e9051..d714d442 100644 --- a/tests/compute/qemu/test_qemu_vm.py +++ b/tests/compute/qemu/test_qemu_vm.py @@ -202,11 +202,11 @@ async def test_termination_callback_error(vm, tmpdir): await queue.get(1) # Ping - (action, event, kwargs) = queue.get_nowait() + (action, event, kwargs) = await queue.get(1) assert action == "node.updated" assert event == vm - (action, event, kwargs) = queue.get_nowait() + (action, event, kwargs) = await queue.get(1) assert action == "log.error" assert event["message"] == "QEMU process has stopped, return code: 1\nBOOMM"