From 7d9369d15ea6061e4b3a48cc8dbe442501a86ba1 Mon Sep 17 00:00:00 2001
From: lat9nq <lat9nq@gmail.com>
Date: Tue, 12 Jul 2022 14:23:50 -0400
Subject: [PATCH] startup_checks: Use WaitForSingleObject and more cleanup

---
 src/yuzu/startup_checks.cpp | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/yuzu/startup_checks.cpp b/src/yuzu/startup_checks.cpp
index 0919d89c6..8421280bf 100644
--- a/src/yuzu/startup_checks.cpp
+++ b/src/yuzu/startup_checks.cpp
@@ -58,13 +58,11 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
     }
 
     // Wait until the processs exits and get exit code from it
+    WaitForSingleObject(process_info.hProcess, INFINITE);
     DWORD exit_code = STILL_ACTIVE;
-    while (exit_code == STILL_ACTIVE) {
-        const int err = GetExitCodeProcess(process_info.hProcess, &exit_code);
-        if (err == 0) {
-            std::fprintf(stderr, "GetExitCodeProcess failed with error %d\n", GetLastError());
-            break;
-        }
+    const int err = GetExitCodeProcess(process_info.hProcess, &exit_code);
+    if (err == 0) {
+        std::fprintf(stderr, "GetExitCodeProcess failed with error %d\n", GetLastError());
     }
 
     // Vulkan is broken if the child crashed (return value is not zero)
@@ -77,6 +75,11 @@ bool StartupChecks(const char* arg0, bool* has_broken_vulkan) {
         std::fprintf(stderr, "CloseHandle failed with error %d\n", GetLastError());
     }
 
+    if (!SetEnvironmentVariableA(STARTUP_CHECK_ENV_VAR, nullptr)) {
+        std::fprintf(stderr, "SetEnvironmentVariableA failed to clear %s with error %d\n",
+                     STARTUP_CHECK_ENV_VAR, GetLastError());
+    }
+
 #elif defined(YUZU_UNIX)
     const pid_t pid = fork();
     if (pid == 0) {