diff options
| author | Dmitriy Vyukov <dvyukov@google.com> | 2013-07-31 22:03:59 +0400 |
|---|---|---|
| committer | Dmitriy Vyukov <dvyukov@google.com> | 2013-07-31 22:03:59 +0400 |
| commit | 98d94b589cfb03104c0bfd7d4e89b23b1d3ddf73 (patch) | |
| tree | 3587516b4317a27ef11349aec1747f8f498cbea5 /src/pkg/runtime/lock_futex.c | |
| parent | 658d19a53f26865549653fb16f80a47ae552b4f0 (diff) | |
| download | go-98d94b589cfb03104c0bfd7d4e89b23b1d3ddf73.tar.xz | |
runtime: better debug output for inconsistent Note
Update #5139.
Double wakeup on Note was reported several times,
but no reliable reproducer.
There also was a strange report about weird value of epoll fd.
Maybe it's corruption of global data...
R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/12182043
Diffstat (limited to 'src/pkg/runtime/lock_futex.c')
| -rw-r--r-- | src/pkg/runtime/lock_futex.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/pkg/runtime/lock_futex.c b/src/pkg/runtime/lock_futex.c index 3f8d632363..bb40b92559 100644 --- a/src/pkg/runtime/lock_futex.c +++ b/src/pkg/runtime/lock_futex.c @@ -118,8 +118,13 @@ runtime·noteclear(Note *n) void runtime·notewakeup(Note *n) { - if(runtime·xchg((uint32*)&n->key, 1)) + uint32 old; + + old = runtime·xchg((uint32*)&n->key, 1); + if(old != 0) { + runtime·printf("notewakeup - double wakeup (%d)\n", old); runtime·throw("notewakeup - double wakeup"); + } runtime·futexwakeup((uint32*)&n->key, 1); } |
