aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/testdata
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2023-03-31 19:16:12 +0000
committerCherry Mui <cherryyz@google.com>2023-03-31 19:26:35 +0000
commitbfe3c678ab70d9a033b219276636c3f4669c1dc9 (patch)
tree26b80494f04e11f926350aaf9d19eff0bc0d6fae /src/runtime/testdata
parent99276aeb5e8b40ff9cd3cafd47ce11c58ba0130c (diff)
downloadgo-bfe3c678ab70d9a033b219276636c3f4669c1dc9.tar.xz
Revert "runtime/cgo: store M for C-created thread in pthread key"
This reverts CL 392854. Reason for revert: caused #59294, which was derived from google internal tests. The attempted fix of #59294 caused more breakage. Change-Id: I5a061561ac2740856b7ecc09725ac28bd30f8bba Reviewed-on: https://go-review.googlesource.com/c/go/+/481060 Reviewed-by: Heschi Kreinick <heschi@google.com> Run-TryBot: Cherry Mui <cherryyz@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/runtime/testdata')
-rw-r--r--src/runtime/testdata/testprogcgo/bindm.go89
1 files changed, 0 insertions, 89 deletions
diff --git a/src/runtime/testdata/testprogcgo/bindm.go b/src/runtime/testdata/testprogcgo/bindm.go
deleted file mode 100644
index ed2c6a7eea..0000000000
--- a/src/runtime/testdata/testprogcgo/bindm.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2023 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.
-
-//go:build !plan9 && !windows
-
-// Test that callbacks from C to Go in the same C-thread always get the same m.
-// Make sure the extra M bind to the C-thread.
-
-package main
-
-/*
-#include <stdint.h>
-#include <pthread.h>
-#include <unistd.h>
-
-extern void GoCheckBindM();
-
-#define CTHREADS 2
-#define CHECKCALLS 100
-
-static void* checkBindMThread(void* thread) {
- int i;
- for (i = 0; i < CHECKCALLS; i++) {
- GoCheckBindM((uintptr_t)thread);
- usleep(1);
- }
- return NULL;
-}
-
-static void CheckBindM() {
- int i;
- pthread_t s[CTHREADS];
-
- for (i = 0; i < CTHREADS; i++) {
- pthread_create(&s[i], NULL, checkBindMThread, &s[i]);
- }
- for (i = 0; i < CTHREADS; i++) {
- pthread_join(s[i], NULL);
- }
-}
-*/
-import "C"
-
-import (
- "fmt"
- "os"
- "runtime"
- "sync"
- "sync/atomic"
-)
-
-var (
- mutex = sync.Mutex{}
- cThreadToM = map[uintptr]uintptr{}
- started = atomic.Uint32{}
-)
-
-// same as CTHREADS in C, make sure all the C threads are actually started.
-const cThreadNum = 2
-
-func init() {
- register("EnsureBindM", EnsureBindM)
-}
-
-//export GoCheckBindM
-func GoCheckBindM(thread uintptr) {
- // Wait all threads start
- if started.Load() != cThreadNum {
- // Only once for each thread, since it will wait all threads start.
- started.Add(1)
- for started.Load() < cThreadNum {
- runtime.Gosched()
- }
- }
- m := runtime_getm_for_test()
- mutex.Lock()
- defer mutex.Unlock()
- if savedM, ok := cThreadToM[thread]; ok && savedM != m {
- fmt.Printf("m == %x want %x\n", m, savedM)
- os.Exit(1)
- }
- cThreadToM[thread] = m
-}
-
-func EnsureBindM() {
- C.CheckBindM()
- fmt.Println("OK")
-}