From 73587b71a62f7c7a27664a207781dedae223774b Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Thu, 2 Jun 2022 21:10:26 +0000 Subject: [PATCH] runtime: avoid string allocation in printDebuglog Either due to a new nowritebarrierrec annotation or a change in escape analysis, printDebuglog can't be called from sighandler anymore. Fix this by avoiding a string allocation that's the primary culprit. Change-Id: Ic84873a453f45852b0443a46597ed3ab8c9443fd Reviewed-on: https://go-review.googlesource.com/c/go/+/410121 Run-TryBot: Michael Knyszek Reviewed-by: Michael Pratt TryBot-Result: Gopher Robot --- src/runtime/debuglog.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/runtime/debuglog.go b/src/runtime/debuglog.go index 7f92a6baf86..ca1a791c93f 100644 --- a/src/runtime/debuglog.go +++ b/src/runtime/debuglog.go @@ -777,7 +777,8 @@ func printDebugLog() { // Logged before runtimeInitTime was set. pnano = 0 } - print(string(itoaDiv(tmpbuf[:], uint64(pnano), 9))) + pnanoBytes := itoaDiv(tmpbuf[:], uint64(pnano), 9) + print(slicebytetostringtmp((*byte)(noescape(unsafe.Pointer(&pnanoBytes[0]))), len(pnanoBytes))) print(" P ", p, "] ") for i := 0; s.begin < s.end; i++ {