// Copyright 2024 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. package main // Test case for issue 66427. // Running under TSAN, this fails with "signal handler // spoils errno". /* #include #include #include void go_callback(); static void *thr(void *arg) { int i; for (i = 0; i < 10; i++) go_callback(); return 0; } static void *sendthr(void *arg) { pthread_t th = *(pthread_t*)arg; while (1) { int r = pthread_kill(th, SIGWINCH); if (r < 0) break; } return 0; } static void foo() { pthread_t *th = malloc(sizeof(pthread_t)); pthread_t th2; pthread_create(th, 0, thr, 0); pthread_create(&th2, 0, sendthr, th); pthread_join(*th, 0); } */ import "C" import ( "time" ) //export go_callback func go_callback() {} func main() { go func() { for { C.foo() } }() time.Sleep(1000 * time.Millisecond) }