mirror of
https://github.com/golang/go
synced 2024-11-24 10:40:10 -07:00
c4770b991b
NPTL uses SIGRTMIN (signal 32) to effect thread cancellation. Go's runtime replaces NPTL's signal handler with its own, and ends up aborting if a C library that ends up calling pthread_cancel is used. This patch prevents runtime from replacing NPTL's handler. Fixes #6997. R=golang-codereviews, iant, dvyukov CC=golang-codereviews https://golang.org/cl/47540043
27 lines
516 B
C
27 lines
516 B
C
// 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.
|
|
|
|
#include <pthread.h>
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
static pthread_t thread;
|
|
|
|
static void* threadfunc(void* dummy) {
|
|
while(1) {
|
|
sleep(1);
|
|
}
|
|
}
|
|
|
|
int StartThread() {
|
|
return pthread_create(&thread, NULL, &threadfunc, NULL);
|
|
}
|
|
|
|
int CancelThread() {
|
|
void *r;
|
|
pthread_cancel(thread);
|
|
pthread_join(thread, &r);
|
|
return (r == PTHREAD_CANCELED);
|
|
}
|