• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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