1
0
mirror of https://github.com/golang/go synced 2024-11-18 13:54:59 -07:00

runtime: use sched_yield instead of pthread_yield

Attempt to fix the linux-amd64-clang builder, which broke
with CL 29472.

Turns out pthread_yield is a non-portable Linux function, and
should have #define _GNU_SOURCE before #include <pthread.h>.
GCC doesn't complain about this, but Clang does:

	./raceprof.go:44:3: warning: implicit declaration of function 'pthread_yield' is invalid in C99 [-Wimplicit-function-declaration]

(Though the error, while explicable, certainly could be clearer.)

There is a portable POSIX equivalent, sched_yield, so this
CL uses it instead.

Change-Id: I58ca7a3f73a2b3697712fdb02e72a8027c391169
Reviewed-on: https://go-review.googlesource.com/29675
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
David Crawshaw 2016-09-23 00:02:38 -04:00
parent b444d438c0
commit ed915ad421

View File

@ -15,6 +15,7 @@ package main
#include <signal.h> #include <signal.h>
#include <stdint.h> #include <stdint.h>
#include <pthread.h> #include <pthread.h>
#include <sched.h>
struct cgoTracebackArg { struct cgoTracebackArg {
uintptr_t context; uintptr_t context;
@ -41,7 +42,7 @@ static void* raceprofThread(void* p) {
for (i = 0; i < 100; i++) { for (i = 0; i < 100; i++) {
pthread_kill(pthread_self(), SIGPROF); pthread_kill(pthread_self(), SIGPROF);
pthread_yield(); sched_yield();
} }
return 0; return 0;
} }