// +build !android | |
package cgotest | |
/* | |
void lockOSThreadCallback(void); | |
inline static void lockOSThreadC(void) | |
{ | |
lockOSThreadCallback(); | |
} | |
int usleep(unsigned usec); | |
*/ | |
import "C" | |
import ( | |
"runtime" | |
"testing" | |
) | |
func init() { | |
// Same as test3775 but run during init so that | |
// there are two levels of internal runtime lock | |
// (1 for init, 1 for cgo). | |
// This would have been broken by CL 11663043. | |
C.lockOSThreadC() | |
} | |
func test3775(t *testing.T) { | |
// Used to panic because of the UnlockOSThread below. | |
C.lockOSThreadC() | |
} | |
//export lockOSThreadCallback | |
func lockOSThreadCallback() { | |
runtime.LockOSThread() | |
runtime.UnlockOSThread() | |
go C.usleep(10000) | |
runtime.Gosched() | |
} |