blob: 994db52afd85d9cac345fed26e299310dfea0414 [file] [edit]
// 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 <pthread.h>
#include <signal.h>
#include <stdlib.h>
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)
}