]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: say when a goroutine is locked to OS thread
authorDmitriy Vyukov <dvyukov@google.com>
Thu, 26 Jun 2014 18:40:48 +0000 (11:40 -0700)
committerDmitriy Vyukov <dvyukov@google.com>
Thu, 26 Jun 2014 18:40:48 +0000 (11:40 -0700)
Say when a goroutine is locked to OS thread in crash reports
and goroutine profiles.
It can be useful to understand what goroutines consume OS threads
(syscall and locked), e.g. if you forget to call UnlockOSThread
or leak locked goroutines.

R=golang-codereviews
CC=golang-codereviews, rsc
https://golang.org/cl/94170043

src/pkg/runtime/proc.c

index 7467e9fa16593d675ebfd827aba8be0f4d8a96d0..dd98e8ce26a4fe52a4756aa2420253fc443975db 100644 (file)
@@ -297,10 +297,12 @@ runtime·goroutineheader(G *gp)
        if((gp->status == Gwaiting || gp->status == Gsyscall) && gp->waitsince != 0)
                waitfor = (runtime·nanotime() - gp->waitsince) / (60LL*1000*1000*1000);
 
-       if(waitfor < 1)
-               runtime·printf("goroutine %D [%s]:\n", gp->goid, status);
-       else
-               runtime·printf("goroutine %D [%s, %D minutes]:\n", gp->goid, status, waitfor);
+       runtime·printf("goroutine %D [%s", gp->goid, status);
+       if(waitfor >= 1)
+               runtime·printf(", %D minutes", waitfor);
+       if(gp->lockedm != nil)
+               runtime·printf(", locked to thread");
+       runtime·printf("]:\n");
 }
 
 void