From 07f6f313a90b264377f8a9ecc4fadfe13bfff633 Mon Sep 17 00:00:00 2001 From: Dmitriy Vyukov Date: Thu, 26 Jun 2014 11:40:48 -0700 Subject: [PATCH] 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 --- src/pkg/runtime/proc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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 -- 2.48.1