]> Cypherpunks repositories - gostls13.git/commitdiff
dist: prevent recusive loop on windows when fatal() is called.
authorDaniel Theophanes <kardianos@gmail.com>
Fri, 10 Feb 2012 04:10:27 +0000 (23:10 -0500)
committerRuss Cox <rsc@golang.org>
Fri, 10 Feb 2012 04:10:27 +0000 (23:10 -0500)
Fixes #2931.

R=golang-dev, alex.brainman
CC=golang-dev, rsc
https://golang.org/cl/5651049

src/cmd/dist/windows.c

index 74e7d8123049edd58760fa09e00d6366b5ceb566..1655f7770495019ffb5b3209d84199757c325690 100644 (file)
@@ -371,6 +371,19 @@ genrun(Buf *b, char *dir, int mode, Vec *argv, int wait)
        bfree(&cmd);
 }
 
+// closes the background job for bgwait1
+static void
+bgwaitclose(int i)
+{
+       if(i < 0 || i >= nbg)
+               return;
+
+       CloseHandle(bg[i].pi.hProcess);
+       CloseHandle(bg[i].pi.hThread);
+       
+       bg[i] = bg[--nbg];
+}
+
 // bgwait1 waits for a single background job
 static void
 bgwait1(void)
@@ -391,14 +404,19 @@ bgwait1(void)
 
        cmd = bg[i].cmd;
        mode = bg[i].mode;
-       if(!GetExitCodeProcess(bg[i].pi.hProcess, &code))
+       if(!GetExitCodeProcess(bg[i].pi.hProcess, &code)) {
+               bgwaitclose(i);
                fatal("GetExitCodeProcess: %s", errstr());
-       if(mode==CheckExit && code != 0)
+               return;
+       }
+
+       if(mode==CheckExit && code != 0) {
+               bgwaitclose(i);
                fatal("FAILED: %s", cmd);
-       CloseHandle(bg[i].pi.hProcess);
-       CloseHandle(bg[i].pi.hThread);
+               return;
+       }
 
-       bg[i] = bg[--nbg];
+       bgwaitclose(i);
 }
 
 void