From f0626e8cae48e533349bbd6e89f9b5860bf3df72 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 5 Feb 2026 23:55:02 -0600 Subject: [PATCH] Exit immediately on repeated SIGINT/SIGTERM without progress --- app/main.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/app/main.cpp b/app/main.cpp index d13af8f2..5816f6f9 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -342,6 +342,9 @@ int SDLCALL signalHandlerThread(void* data) { Q_UNUSED(data); + Session* lastSession = nullptr; + bool requestedQuit = false; + int sig; while (recv(signalFds[1], &sig, sizeof(sig), MSG_WAITALL) == sizeof(sig)) { SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Received signal: %d", sig); @@ -353,17 +356,32 @@ int SDLCALL signalHandlerThread(void* data) // Check if we have an active streaming session session = Session::get(); if (session != nullptr) { + // Exit immediately if we haven't changed state since last attempt + if (session == lastSession || requestedQuit) { + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Exiting immediately on second signal"); + _exit(1); + } + if (sig == SIGTERM) { // If this is a SIGTERM, set the flag to quit session->setShouldExit(); + requestedQuit = true; } // Stop the streaming session session->interrupt(); + lastSession = session; } else { + // Exit immediately if we haven't changed state since last attempt + if (requestedQuit) { + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, "Exiting immediately on second signal"); + _exit(1); + } + // If we're not streaming, we'll close the whole app QCoreApplication::instance()->quit(); + requestedQuit = true; } break;