diff libgo/misc/cgo/test/issue6997_linux.go @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgo/misc/cgo/test/issue6997_linux.go	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,42 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !android
+
+// Test that pthread_cancel works as expected
+// (NPTL uses SIGRTMIN to implement thread cancelation)
+// See https://golang.org/issue/6997
+package cgotest
+
+/*
+#cgo CFLAGS: -pthread
+#cgo LDFLAGS: -pthread
+extern int StartThread();
+extern int CancelThread();
+*/
+import "C"
+
+import "testing"
+import "time"
+
+func test6997(t *testing.T) {
+	r := C.StartThread()
+	if r != 0 {
+		t.Error("pthread_create failed")
+	}
+	c := make(chan C.int)
+	go func() {
+		time.Sleep(500 * time.Millisecond)
+		c <- C.CancelThread()
+	}()
+
+	select {
+	case r = <-c:
+		if r == 0 {
+			t.Error("pthread finished but wasn't canceled??")
+		}
+	case <-time.After(30 * time.Second):
+		t.Error("hung in pthread_cancel/pthread_join")
+	}
+}