fix: handle client disconnect during device creation
Long-running async handlers (DB insert + WG events) can outlive the client connection. Guard all UI operations after async work with RuntimeError catches so disconnected clients don't crash.
This commit is contained in:
parent
384b95b81d
commit
e51c53f247
2 changed files with 27 additions and 10 deletions
|
|
@ -129,13 +129,22 @@ async def admin_devices_page():
|
|||
server_pubkey = await get_server_public_key()
|
||||
config_text = build_client_config(device, private_key, server_pubkey)
|
||||
|
||||
try:
|
||||
create_dialog.close()
|
||||
_reset_create_form()
|
||||
await refresh_table()
|
||||
_show_config_dialog(device.name, config_text)
|
||||
except RuntimeError:
|
||||
pass # Client navigated away during async work
|
||||
|
||||
except RuntimeError:
|
||||
pass # Client disconnected
|
||||
except Exception as e:
|
||||
logger.error("Failed to create device: {}", e)
|
||||
try:
|
||||
ui.notify(f"Error: {e}", type="negative")
|
||||
except RuntimeError:
|
||||
pass
|
||||
|
||||
def _reset_create_form():
|
||||
create_name.value = ""
|
||||
|
|
|
|||
|
|
@ -113,14 +113,22 @@ async def devices_page():
|
|||
server_pubkey = await get_server_public_key()
|
||||
config_text = build_client_config(device, private_key, server_pubkey)
|
||||
|
||||
try:
|
||||
create_dialog.close()
|
||||
_reset_create_form()
|
||||
await refresh_table()
|
||||
_show_config_dialog(device.name, config_text)
|
||||
except RuntimeError:
|
||||
pass # Client navigated away during async work
|
||||
|
||||
except RuntimeError:
|
||||
pass # Client disconnected
|
||||
except Exception as e:
|
||||
logger.error("Failed to create device: {}", e)
|
||||
try:
|
||||
ui.notify(f"Error: {e}", type="negative")
|
||||
except RuntimeError:
|
||||
pass
|
||||
|
||||
def _reset_create_form():
|
||||
create_name.value = ""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue