Introducing the Go Race Detector
26 Jun 2013
Tags: concurrency, technical

Dmitry Vyukov

Andrew Gerrand

* Introduction

[[http://en.wikipedia.org/wiki/Race_condition][Race conditions]] are among the
most insidious and elusive programming errors. They typically cause erratic and
mysterious failures, often long after the code has been deployed to production.
While Go's concurrency mechanisms make it easy to write clean concurrent code,
they don't prevent race conditions. Care, diligence, and testing are required.
And tools can help.

We're happy to announce that Go 1.1 includes a
[[https://golang.org/doc/articles/race_detector.html][race detector]],
a new tool for finding race conditions in Go code.
It is currently available for Linux, OS X, and Windows systems
with 64-bit x86 processors.

The race detector is based on the C/C++
[[https://github.com/google/sanitizers][ThreadSanitizer runtime library]],
which has been used to detect many errors in Google's internal code base and in
[[http://www.chromium.org/][Chromium]].
The technology was integrated with Go in September 2012; since then it has detected
[[https://github.com/golang/go/issues?utf8=%E2%9C%93&q=ThreadSanitizer][42 races]]
in the standard library. It is now part of our continuous build process,
where it continues to catch race conditions as they arise.

* How it works

The race detector is integrated with the go tool chain. When the
`-race` command-line flag is set, the compiler instruments all memory accesses
with code that records when and how the memory was accessed, while the runtime
library watches for unsynchronized accesses to shared variables.
When such "racy" behavior is detected, a warning is printed.
(See [[https://github.com/google/sanitizers/wiki/ThreadSanitizerAlgorithm][this article]]
for the details of the algorithm.)

Because of its design, the race detector can detect race conditions only when
they are actually triggered by running code, which means it's important to run
race-enabled binaries under realistic workloads.
However, race-enabled binaries can use ten times the CPU and memory, so it is
impractical to enable the race detector all the time.
One way out of this dilemma is to run some tests with the race detector
enabled. Load tests and integration tests are good candidates, since they tend
to exercise concurrent parts of the code.
Another approach using production workloads is to deploy a single race-enabled
instance within a pool of running servers.

* Using the race detector

The race detector is fully integrated with the Go tool chain.
To build your code with the race detector enabled, just add the
`-race` flag to the command line:

	$ go test -race mypkg    // test the package
	$ go run -race mysrc.go  // compile and run the program
	$ go build -race mycmd   // build the command
	$ go install -race mypkg // install the package

To try out the race detector for yourself, fetch and run this example program:

	$ go get -race golang.org/x/blog/support/racy
	$ racy

* Examples

Here are two examples of real issues caught by the race detector.

** Example 1: Timer.Reset

The first example is a simplified version of an actual bug found by the race
detector. It uses a timer to print a message after a random duration between 0
and 1 second. It does so repeatedly for five seconds.
It uses [[https://golang.org/pkg/time/#AfterFunc][`time.AfterFunc`]] to create a
[[https://golang.org/pkg/time/#Timer][`Timer`]] for the first message and then
uses the [[https://golang.org/pkg/time/#Timer.Reset][`Reset`]] method to
schedule the next message, re-using the `Timer` each time.

.play -numbers race-detector/timer.go /func main/,$

This looks like reasonable code, but under certain circumstances it fails in a surprising way:

	panic: runtime error: invalid memory address or nil pointer dereference
	[signal 0xb code=0x1 addr=0x8 pc=0x41e38a]

	goroutine 4 [running]:
	time.stopTimer(0x8, 0x12fe6b35d9472d96)
		src/pkg/runtime/ztime_linux_amd64.c:35 +0x25
	time.(*Timer).Reset(0x0, 0x4e5904f, 0x1)
		src/pkg/time/sleep.go:81 +0x42
	main.func·001()
		race.go:14 +0xe3
	created by time.goFunc
		src/pkg/time/sleep.go:122 +0x48

What's going on here? Running the program with the race detector enabled is more illuminating:

	==================
	WARNING: DATA RACE
	Read by goroutine 5:
	  main.func·001()
	     race.go:14 +0x169

	Previous write by goroutine 1:
	  main.main()
	      race.go:15 +0x174

	Goroutine 5 (running) created at:
	  time.goFunc()
	      src/pkg/time/sleep.go:122 +0x56
	  timerproc()
	     src/pkg/runtime/ztime_linux_amd64.c:181 +0x189
	==================

The race detector shows the problem: an unsynchronized read and write of the
variable `t` from different goroutines. If the initial timer duration is very
small, the timer function may fire before the main goroutine has assigned a
value to `t` and so the call to `t.Reset` is made with a nil `t`.

To fix the race condition we change the code to read and write the variable
`t` only from the main goroutine:

.play -numbers race-detector/timer-fixed.go /func main/,/^}/

Here the main goroutine is wholly responsible for setting and resetting the
`Timer` `t` and a new reset channel communicates the need to reset the timer in
a thread-safe way.

A simpler but less efficient approach is to
[[http://play.golang.org/p/kuWTrY0pS4][avoid reusing timers]].

** Example 2: ioutil.Discard

The second example is more subtle.

The `ioutil` package's
[[https://golang.org/pkg/io/ioutil/#Discard][`Discard`]] object implements
[[https://golang.org/pkg/io/#Writer][`io.Writer`]],
but discards all the data written to it.
Think of it like `/dev/null`: a place to send data that you need to read but
don't want to store.
It is commonly used with [[https://golang.org/pkg/io/#Copy][`io.Copy`]]
to drain a reader, like this:

	io.Copy(ioutil.Discard, reader)

Back in July 2011 the Go team noticed that using `Discard` in this way was
inefficient: the `Copy` function allocates an internal 32 kB buffer each time it
is called, but when used with `Discard` the buffer is unnecessary since we're
just throwing the read data away.
We thought that this idiomatic use of `Copy` and `Discard` should not be so costly.

The fix was simple.
If the given `Writer` implements a `ReadFrom` method, a `Copy` call like this:

	io.Copy(writer, reader)

is delegated to this potentially more efficient call:

	writer.ReadFrom(reader)

We
[[https://golang.org/cl/4817041][added a ReadFrom method]]
to Discard's underlying type, which has an internal buffer that is shared
between all its users.
We knew this was theoretically a race condition, but since all writes to the
buffer should be thrown away we didn't think it was important.

When the race detector was implemented it immediately
[[https://golang.org/issue/3970][flagged this code]] as racy.
Again, we considered that the code might be problematic, but decided that the
race condition wasn't "real".
To avoid the "false positive" in our build we implemented
[[https://golang.org/cl/6624059][a non-racy version]]
that is enabled only when the race detector is running.

But a few months later [[https://bradfitz.com/][Brad]] encountered a
[[https://golang.org/issue/4589][frustrating and strange bug]].
After a few days of debugging, he narrowed it down to a real race condition
caused by `ioutil.Discard`.

Here is the known-racy code in `io/ioutil`, where `Discard` is a
`devNull` that shares a single buffer between all of its users.

.code race-detector/blackhole.go /var blackHole/,/^}/

Brad's program includes a `trackDigestReader` type, which wraps an `io.Reader`
and records the hash digest of what it reads.

	type trackDigestReader struct {
		r io.Reader
		h hash.Hash
	}

	func (t trackDigestReader) Read(p []byte) (n int, err error) {
		n, err = t.r.Read(p)
		t.h.Write(p[:n])
		return
	}

For example, it could be used to compute the SHA-1 hash of a file while reading it:

	tdr := trackDigestReader{r: file, h: sha1.New()}
	io.Copy(writer, tdr)
	fmt.Printf("File hash: %x", tdr.h.Sum(nil))

In some cases there would be nowhere to write the data—but still a need to hash
the file—and so `Discard` would be used:

	io.Copy(ioutil.Discard, tdr)

But in this case the `blackHole` buffer isn't just a black hole; it is a
legitimate place to store the data between reading it from the source
`io.Reader` and writing it to the `hash.Hash`.
With multiple goroutines hashing files simultaneously, each sharing the same
`blackHole` buffer, the race condition manifested itself by corrupting the data
between reading and hashing.
No errors or panics occurred, but the hashes were wrong. Nasty!

	func (t trackDigestReader) Read(p []byte) (n int, err error) {
		// the buffer p is blackHole
		n, err = t.r.Read(p)
		// p may be corrupted by another goroutine here,
		// between the Read above and the Write below
		t.h.Write(p[:n])
		return
	}

The bug was finally
[[https://golang.org/cl/7011047][fixed]]
by giving a unique buffer to each use of `ioutil.Discard`, eliminating the race
condition on the shared buffer.

* Conclusions

The race detector is a powerful tool for checking the correctness of concurrent
programs. It will not issue false positives, so take its warnings seriously.
But it is only as good as your tests; you must make sure they thoroughly
exercise the concurrent properties of your code so that the race detector can
do its job.

What are you waiting for? Run `"go`test`-race"` on your code today!
