]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: make TestCgoExternalThreadPanic run on windows
authorAlex Brainman <alex.brainman@gmail.com>
Wed, 29 Oct 2014 23:24:37 +0000 (10:24 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Wed, 29 Oct 2014 23:24:37 +0000 (10:24 +1100)
LGTM=rsc
R=golang-codereviews, bradfitz, rsc
CC=golang-codereviews
https://golang.org/cl/163540043

src/runtime/crash_cgo_test.go

index 5958ad8914637f9ddacc31b489638c0c8b7f0f3c..972eedc624ee3d192240d0b764cfa517f174a6ef 100644 (file)
@@ -36,10 +36,14 @@ func TestCgoTraceback(t *testing.T) {
 }
 
 func TestCgoExternalThreadPanic(t *testing.T) {
-       if runtime.GOOS == "windows" || runtime.GOOS == "plan9" {
+       if runtime.GOOS == "plan9" {
                t.Skipf("no pthreads on %s", runtime.GOOS)
        }
-       got := executeTest(t, cgoExternalThreadPanicSource, nil, "main.c", cgoExternalThreadPanicC)
+       csrc := cgoExternalThreadPanicC
+       if runtime.GOOS == "windows" {
+               csrc = cgoExternalThreadPanicC_windows
+       }
+       got := executeTest(t, cgoExternalThreadPanicSource, nil, "main.c", csrc)
        want := "panic: BOOM"
        if !strings.Contains(got, want) {
                t.Fatalf("want failure containing %q. output:\n%s\n", want, got)
@@ -169,3 +173,24 @@ start(void)
                printf("pthread_create failed\n");
 }
 `
+
+const cgoExternalThreadPanicC_windows = `
+#include <stdlib.h>
+#include <stdio.h>
+
+void gopanic(void);
+
+static void*
+die(void* x)
+{
+       gopanic();
+       return 0;
+}
+
+void
+start(void)
+{
+       if(_beginthreadex(0, 0, die, 0, 0, 0) != 0)
+               printf("_beginthreadex failed\n");
+}
+`