From: Dmitriy Vyukov Date: Thu, 26 Jun 2014 18:40:48 +0000 (-0700) Subject: runtime: say when a goroutine is locked to OS thread X-Git-Tag: go1.4beta1~1212 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=07f6f313a90b264377f8a9ecc4fadfe13bfff633;p=gostls13.git runtime: say when a goroutine is locked to OS thread 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 --- diff --git a/src/pkg/runtime/proc.c b/src/pkg/runtime/proc.c index 7467e9fa16..dd98e8ce26 100644 --- a/src/pkg/runtime/proc.c +++ b/src/pkg/runtime/proc.c @@ -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