diff --git a/osbuild/api.py b/osbuild/api.py index 21530bee..e1ce9864 100644 --- a/osbuild/api.py +++ b/osbuild/api.py @@ -19,6 +19,7 @@ class API: self._output = None self.event_loop = asyncio.new_event_loop() self.thread = threading.Thread(target=self._run_event_loop) + self.barrier = threading.Barrier(2) @property def output(self): @@ -60,6 +61,7 @@ class API: def _run_event_loop(self): sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) sock.bind(self.socket_address) + self.barrier.wait() self.event_loop.add_reader(sock, self._dispatch, sock) asyncio.set_event_loop(self.event_loop) self.event_loop.run_forever() @@ -68,6 +70,7 @@ class API: def __enter__(self): self.thread.start() + self.barrier.wait() return self def __exit__(self, *args): diff --git a/osbuild/remoteloop.py b/osbuild/remoteloop.py index 88e9a3f6..5d1c7b1d 100644 --- a/osbuild/remoteloop.py +++ b/osbuild/remoteloop.py @@ -61,6 +61,7 @@ class LoopServer: self.ctl = loop.LoopControl() self.event_loop = asyncio.new_event_loop() self.thread = threading.Thread(target=self._run_event_loop) + self.barrier = threading.Barrier(2) def _create_device(self, fd, dir_fd, offset=None, sizelimit=None): while True: @@ -105,6 +106,7 @@ class LoopServer: def _run_event_loop(self): sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) sock.bind(self.socket_address) + self.barrier.wait() self.event_loop.add_reader(sock, self._dispatch, sock) asyncio.set_event_loop(self.event_loop) self.event_loop.run_forever() @@ -113,6 +115,8 @@ class LoopServer: def __enter__(self): self.thread.start() + self.barrier.wait() + return self def __exit__(self, *args): self.event_loop.call_soon_threadsafe(self.event_loop.stop)