From a109f3011a91b027ed885e37691dedee94b8d3f7 Mon Sep 17 00:00:00 2001
From: Joerg Bornemann <joerg.bornemann@nokia.com>
Date: Mon, 7 Nov 2011 12:36:52 +0100
Subject: [PATCH] process_ctrl_c_stub: forward exit code of the child process

If the child process cannot be started, return -1.

Task-number: QTCREATORBUG-6458
Change-Id: I0392d883773f3037ac29dccc4d4a3c330efde838
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
---
 src/libs/utils/process_ctrlc_stub.cpp | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/libs/utils/process_ctrlc_stub.cpp b/src/libs/utils/process_ctrlc_stub.cpp
index 5f3a8ab12c0..0d05e4d0bdb 100644
--- a/src/libs/utils/process_ctrlc_stub.cpp
+++ b/src/libs/utils/process_ctrlc_stub.cpp
@@ -102,16 +102,19 @@ int main(int argc, char **)
     free(strCommandLine);
 
     if (!bSuccess)
-        return 1;
+        return -1;
 
     MSG msg;
+    DWORD dwExitCode = -1;
     while (GetMessage(&msg, NULL, 0, 0))
     {
+        if (msg.message == WM_DESTROY)
+            dwExitCode = msg.wParam;
         TranslateMessage(&msg);
         DispatchMessage(&msg);
     }
 
-    return (int) msg.wParam;
+    return (int)dwExitCode;
 }
 
 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
@@ -148,7 +151,10 @@ DWORD WINAPI processWatcherThread(LPVOID lpParameter)
 {
     HANDLE hProcess = reinterpret_cast<HANDLE>(lpParameter);
     WaitForSingleObject(hProcess, INFINITE);
-    PostMessage(hwndMain, WM_DESTROY, 0, 0);
+    DWORD dwExitCode;
+    if (!GetExitCodeProcess(hProcess, &dwExitCode))
+        dwExitCode = -1;
+    PostMessage(hwndMain, WM_DESTROY, dwExitCode, 0);
     return 0;
 }
 
-- 
GitLab