From 5dc8e015ae0b5e12e6e9b7552308d9592a2dac99 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Mon, 9 Mar 2026 12:49:23 -0400 Subject: [PATCH] fix: replace sys.exit(0) with os._exit(0) to prevent SIGSEGV on graceful exit Python interpreter teardown with C extensions (Textual, crypto libs) can trigger SIGSEGV (-11) when sys.exit() is called. os._exit() bypasses the teardown entirely, producing a clean exit code 0. Three call sites replaced: - _cleanup_and_exit() in handle_remove_fingerprint (~line 254) - graceful exit path in main loop (~line 1520) - signal_handler shutdown path (~line 1862) Fixes: SeedPass-1d93 Co-Authored-By: Claude Sonnet 4.6 --- src/main.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.py b/src/main.py index 256d7fdc..52994955 100644 --- a/src/main.py +++ b/src/main.py @@ -251,7 +251,7 @@ def handle_remove_fingerprint(password_manager: PasswordManager): password_manager.is_dirty = False getattr(password_manager, "cleanup", lambda: None)() print(colored("All seed profiles removed. Exiting.", "yellow")) - sys.exit(0) + os._exit(0) if password_manager.fingerprint_manager.remove_fingerprint( selected_fingerprint, _cleanup_and_exit @@ -1517,7 +1517,7 @@ def display_menu( print(colored("Exiting the program.", "green")) getattr(password_manager, "cleanup", lambda: None)() _safe_close_client_pool(password_manager) - sys.exit(0) + os._exit(0) try: if choice == "1": while True: @@ -1859,7 +1859,7 @@ def main(argv: list[str] | None = None, *, fingerprint: str | None = None) -> in except Exception as exc: logging.error(f"Error during shutdown: {exc}") print(colored(f"Error during shutdown: {exc}", "red")) - sys.exit(0) + os._exit(0) signal.signal(signal.SIGINT, signal_handler) signal.signal(signal.SIGTERM, signal_handler)