diff options
author | Ghanan Gowripalan <ghanan@google.com> | 2020-07-12 17:20:50 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-07-12 17:22:08 -0700 |
commit | 9c32fd3f4d8f6e63d922c1c58b7d1f1f504fa2bc (patch) | |
tree | dfb5150ec211a268f9f69bfc22d0ba3ecf0795dc /pkg/sleep/sleep_unsafe.go | |
parent | 69f2059e5d38bacac4bcda7912cca580ab70914d (diff) |
Do not copy sleep.Waker
sleep.Waker's fields are modified as values.
PiperOrigin-RevId: 320873451
Diffstat (limited to 'pkg/sleep/sleep_unsafe.go')
-rw-r--r-- | pkg/sleep/sleep_unsafe.go | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/pkg/sleep/sleep_unsafe.go b/pkg/sleep/sleep_unsafe.go index f68c12620..118805492 100644 --- a/pkg/sleep/sleep_unsafe.go +++ b/pkg/sleep/sleep_unsafe.go @@ -75,6 +75,8 @@ package sleep import ( "sync/atomic" "unsafe" + + "gvisor.dev/gvisor/pkg/sync" ) const ( @@ -323,7 +325,12 @@ func (s *Sleeper) enqueueAssertedWaker(w *Waker) { // // This struct is thread-safe, that is, its methods can be called concurrently // by multiple goroutines. +// +// Note, it is not safe to copy a Waker as its fields are modified by value +// (the pointer fields are individually modified with atomic operations). type Waker struct { + _ sync.NoCopy + // s is the sleeper that this waker can wake up. Only one sleeper at a // time is allowed. This field can have three classes of values: // nil -- the waker is not asserted: it either is not associated with |