mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: terminate locked OS thread if its goroutine exits
runtime.LockOSThread is sometimes used when the caller intends to put the OS thread into an unusual state. In this case, we never want to return this thread to the runtime thread pool. However, currently exiting the goroutine implicitly unlocks its OS thread. Fix this by terminating the locked OS thread when its goroutine exits, rather than simply returning it to the pool. Fixes #20395. Change-Id: I3dcec63b200957709965f7240dc216fa84b62ad9 Reviewed-on: https://go-review.googlesource.com/46038 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
eff2b2620d
commit
4f34a52913
9 changed files with 303 additions and 2 deletions
|
|
@ -746,3 +746,20 @@ func TestLockOSThreadNesting(t *testing.T) {
|
|||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func TestLockOSThreadExit(t *testing.T) {
|
||||
testLockOSThreadExit(t, "testprog")
|
||||
}
|
||||
|
||||
func testLockOSThreadExit(t *testing.T, prog string) {
|
||||
output := runTestProg(t, prog, "LockOSThreadMain", "GOMAXPROCS=1")
|
||||
want := "OK\n"
|
||||
if output != want {
|
||||
t.Errorf("want %s, got %s\n", want, output)
|
||||
}
|
||||
|
||||
output = runTestProg(t, prog, "LockOSThreadAlt")
|
||||
if output != want {
|
||||
t.Errorf("want %s, got %s\n", want, output)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue