from pathlib import Path
 from queue import SimpleQueue
 from sys import argv, exit as sys_exit
+from typing import Optional
 # non-standard libs
 from plomlib.setup import dependency_hint
 try:
-    from ircplom.events import ExceptionEvent, QuitEvent
+    from ircplom.events import CrashingException, ExceptionEvent, QuitEvent
     from ircplom.client import ClientsDb, ClientEvent, NewClientEvent
     from ircplom.tui_base import BaseTui, Terminal, TerminalInterface, TuiEvent
     from ircplom.client_tui import ClientTui
     q_events: SimpleQueue = SimpleQueue()
     clients_db: ClientsDb = {}
     try:
+        to_raise: Optional[CrashingException] = None
         with cls_term(_q_out=q_events).setup() as term:
             tui = cls_tui(_q_out=q_events, term=term)
             while True:
                 if isinstance(event, QuitEvent):
                     break
                 if isinstance(event, ExceptionEvent):
-                    raise event.exception
+                    to_raise = event.exception
+                    break
                 if isinstance(event, TuiEvent):
                     event.affect(tui)
                 elif isinstance(event, NewClientEvent):
                     event.affect(clients_db)
                 elif isinstance(event, ClientEvent):
                     event.affect(clients_db[event.client_id])
+        if to_raise:
+            raise to_raise
     finally:
         for client in clients_db.values():
             client.close()