diff --git a/Userland/Libraries/LibSQL/SQLClient.cpp b/Userland/Libraries/LibSQL/SQLClient.cpp index 9fdd842f0f..53479fb124 100644 --- a/Userland/Libraries/LibSQL/SQLClient.cpp +++ b/Userland/Libraries/LibSQL/SQLClient.cpp @@ -15,6 +15,7 @@ # include # include # include +# include #endif namespace SQL { @@ -58,9 +59,14 @@ static ErrorOr launch_server(DeprecatedString const& socket_path, Deprecat return server_fd_or_error.release_error(); } auto server_fd = server_fd_or_error.value(); + sigset_t original_set; + sigset_t setting_set; + sigfillset(&setting_set); + (void)pthread_sigmask(SIG_BLOCK, &setting_set, &original_set); auto server_pid = TRY(Core::System::fork()); if (server_pid == 0) { + (void)pthread_sigmask(SIG_SETMASK, &original_set, nullptr); TRY(Core::System::setsid()); TRY(Core::System::signal(SIGCHLD, SIG_IGN)); server_pid = TRY(Core::System::fork()); @@ -95,8 +101,12 @@ static ErrorOr launch_server(DeprecatedString const& socket_path, Deprecat VERIFY_NOT_REACHED(); } + VERIFY(server_pid > 0); - TRY(Core::System::waitpid(server_pid)); + auto wait_err = Core::System::waitpid(server_pid); + (void)pthread_sigmask(SIG_SETMASK, &original_set, nullptr); + if (wait_err.is_error()) + return wait_err.release_error(); return {}; }