1
0
mirror of https://github.com/golang/go synced 2024-11-21 21:24:45 -07:00
The Go programming language
Go to file
Russ Cox 4953b87296 testing: fix defer race
In a test that does

        func TestFoo(t *testing.T) {
                defer cleanup()
                t.Fatal("oops")
        }

it can be important that cleanup run as the test fails.
The old code did this in Fatal:

        t.signal <- t
        runtime.Goexit()

The runtime.Goexit would run the deferred cleanup
but the send on t.signal would cause the main test loop
to move on and possibly even exit the program before
the runtime.Goexit got a chance to run.

This CL changes tRunner (the top stack frame of a test
goroutine) to send on t.signal as part of a function
deferred by the top stack frame.  This delays the send
on t.signal until after runtime.Goexit has run functions
deferred by the test itself.

For the above TestFoo, this CL guarantees that cleanup
will run before the test binary exits.

This is particularly important when cleanup is doing
externally visible work, like removing temporary files
or unmounting file systems.

R=golang-dev, r
CC=golang-dev
https://golang.org/cl/5532078
2012-01-12 10:18:12 -08:00
doc effective_go: provide reference to runtime.NumCPU() 2012-01-12 22:06:50 +04:00
include os: OS-dependent bits to support NetBSD. 2011-12-15 12:19:19 -05:00
lib codereview: Initialize "found" in codereview.py. 2011-12-16 10:39:20 -05:00
misc misc/dashboard/builder: fix comment in http.go 2012-01-11 13:23:33 -08:00
src testing: fix defer race 2012-01-12 10:18:12 -08:00
test gc: avoid false positives when using scalar struct fields. 2012-01-12 12:08:40 +01:00
.hgignore .hgignore: ignore autogenerated files 2011-12-20 15:54:39 -05:00
.hgtags tag weekly.2011-12-22 2011-12-23 14:34:15 +11:00
AUTHORS A+C: add Yoshiyuki Kanno (Individual CLA) 2012-01-10 15:50:44 -08:00
CONTRIBUTORS A+C: add Yoshiyuki Kanno (Individual CLA) 2012-01-10 15:50:44 -08:00
favicon.ico add a favicon plus a couple of hi-res versions of gordon 2009-10-26 10:13:07 -07:00
LICENSE LICENSE: separate, change PATENTS text 2010-12-06 16:31:59 -05:00
PATENTS LICENSE: separate, change PATENTS text 2010-12-06 16:31:59 -05:00
README build: update, streamline documentation for new $GOBIN 2010-08-24 20:00:50 -04:00
robots.txt godoc: serve robots.txt raw 2011-02-19 05:46:20 +11:00

This is the source code repository for the Go programming language.  

For documentation about how to install and use Go,
visit http://golang.org/ or load doc/install.html in your web browser.

After installing Go, you can view a nicely formatted
doc/install.html by running godoc --http=:6060
and then visiting http://localhost:6060/doc/install.html.

Unless otherwise noted, the Go source files are distributed
under the BSD-style license found in the LICENSE file.

--

Binary Distribution Notes

If you have just untarred a binary Go distribution, you need to set
the environment variable $GOROOT to the full path of the go
directory (the one containing this README).  You can omit the
variable if you unpack it into /usr/local/go, or if you rebuild
from sources by running all.bash (see doc/install.html).
You should also add the Go binary directory $GOROOT/bin
to your shell's path.

For example, if you extracted the tar file into $HOME/go, you might
put the following in your .profile:

    export GOROOT=$HOME/go
    export PATH=$PATH:$GOROOT/bin

See doc/install.html for more details.