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
This commit is contained in:
Dmitriy Vyukov 2014-06-26 11:40:48 -07:00
parent 9e04ff7953
commit 07f6f313a9
1 changed files with 6 additions and 4 deletions

View 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