aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/lock_futex.c
diff options
context:
space:
mode:
authorDmitriy Vyukov <dvyukov@google.com>2013-07-31 22:03:59 +0400
committerDmitriy Vyukov <dvyukov@google.com>2013-07-31 22:03:59 +0400
commit98d94b589cfb03104c0bfd7d4e89b23b1d3ddf73 (patch)
tree3587516b4317a27ef11349aec1747f8f498cbea5 /src/pkg/runtime/lock_futex.c
parent658d19a53f26865549653fb16f80a47ae552b4f0 (diff)
downloadgo-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.c7
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);
}