]> Cypherpunks repositories - gostls13.git/commit
runtime: crash when func main calls Goexit and all other goroutines exit
authorRuss Cox <rsc@golang.org>
Wed, 16 Apr 2014 17:12:18 +0000 (13:12 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 16 Apr 2014 17:12:18 +0000 (13:12 -0400)
commitade6bc68b0d71477b3370a20099bcb66de14f517
tree1d9d2a59acce73269fdc0f9e7fd33bb015ed21b8
parent468cf827803ddffd0d72167c44f750dde004aae4
runtime: crash when func main calls Goexit and all other goroutines exit

This has typically crashed in the past, although usually with
an 'all goroutines are asleep - deadlock!' message that shows
no goroutines (because there aren't any).

Previous discussion at:
https://groups.google.com/d/msg/golang-nuts/uCT_7WxxopQ/BoSBlLFzUTkJ
https://groups.google.com/d/msg/golang-dev/KUojayEr20I/u4fp_Ej5PdUJ
http://golang.org/issue/7711

There is general agreement that runtime.Goexit terminates the
main goroutine, so that main cannot return, so the program does
not exit.

The interpretation that all other goroutines exiting causes an
exit(0) is relatively new and was not part of those discussions.
That is what this CL changes.

Thankfully, even though the exit(0) has been there for a while,
some other accounting bugs made it very difficult to trigger,
so it is reasonable to replace. In particular, see golang.org/issue/7711#c10
for an examination of the behavior across past releases.

Fixes #7711.

LGTM=iant, r
R=golang-codereviews, iant, dvyukov, r
CC=golang-codereviews
https://golang.org/cl/88210044
doc/go1.3.html
src/pkg/runtime/crash_test.go
src/pkg/runtime/extern.go
src/pkg/runtime/proc.c