1// Copyright 2024 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package main 6 7// Test case for issue 66427. 8// Running under TSAN, this fails with "signal handler 9// spoils errno". 10 11/* 12#include <pthread.h> 13#include <signal.h> 14#include <stdlib.h> 15 16void go_callback(); 17 18static void *thr(void *arg) { 19 int i; 20 for (i = 0; i < 10; i++) 21 go_callback(); 22 return 0; 23} 24 25static void *sendthr(void *arg) { 26 pthread_t th = *(pthread_t*)arg; 27 while (1) { 28 int r = pthread_kill(th, SIGWINCH); 29 if (r < 0) 30 break; 31 } 32 return 0; 33} 34 35static void foo() { 36 pthread_t *th = malloc(sizeof(pthread_t)); 37 pthread_t th2; 38 pthread_create(th, 0, thr, 0); 39 pthread_create(&th2, 0, sendthr, th); 40 pthread_join(*th, 0); 41} 42*/ 43import "C" 44 45import ( 46 "time" 47) 48 49//export go_callback 50func go_callback() {} 51 52func main() { 53 go func() { 54 for { 55 C.foo() 56 } 57 }() 58 59 time.Sleep(1000 * time.Millisecond) 60} 61