]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: better debug output for inconsistent Note
authorDmitriy Vyukov <dvyukov@google.com>
Wed, 31 Jul 2013 18:03:59 +0000 (22:03 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Wed, 31 Jul 2013 18:03:59 +0000 (22:03 +0400)
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

src/pkg/runtime/lock_futex.c

index 3f8d632363e16f5e1b74eddaa3997386ec54048d..bb40b9255956caeab0d5361ddcd4200e928dcf36 100644 (file)
@@ -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);
 }