From 771e2edea6c549ecc59debdec740f40b5521a583 Mon Sep 17 00:00:00 2001
From: Martin Teichmann <martin.teichmann@xfel.eu>
Date: Thu, 23 May 2024 15:21:46 +0100
Subject: [PATCH] wait for initialization of serial terminal

---
 ebpfcat/serial.py | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/ebpfcat/serial.py b/ebpfcat/serial.py
index 9d98d11..8ef0f03 100644
--- a/ebpfcat/serial.py
+++ b/ebpfcat/serial.py
@@ -15,7 +15,7 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-from asyncio import ensure_future, Event, Queue, StreamReader, gather
+from asyncio import ensure_future, Event, Future, Queue, StreamReader, gather
 from .ebpfcat import Device, TerminalVar
 
 
@@ -45,12 +45,14 @@ class Serial(Device):
     def write(self, data):
         self.buffer.put_nowait(data)
 
-    def connect(self):
-        self.task = ensure_future(self.run())
+    async def connect(self):
+        connected = Future()
+        self.task = ensure_future(self.run(connected))
         self.reader = StreamReader()
+        await connected
         return self.reader, self
 
-    async def run(self):
+    async def run(self, connected):
         while not self.init_accept:
             self.init_request = True
             await self.data_arrived.wait()
@@ -58,6 +60,8 @@ class Serial(Device):
         while self.init_accept:
             await self.data_arrived.wait()
 
+        connected.set_result(None)
+
         await gather(self.receive(), self.transmit())
 
     async def receive(self):
-- 
GitLab