From: Ian Lance Taylor Date: Fri, 18 Jun 2021 00:34:18 +0000 (-0700) Subject: runtime: disable CPU profiling before removing the SIGPROF handler X-Git-Tag: go1.17rc1~80 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=57aaa19aae32a6c75a07ea8e3006fdcda7583385;p=gostls13.git runtime: disable CPU profiling before removing the SIGPROF handler Otherwise, in c-archive or c-shared mode, there is the chance of getting a SIGPROF just after the signal handler is removed but before profiling is disabled, in which case the program will die. Fixes #46498 Change-Id: I5492beef45fec9fb9a7f58724356d6aedaf799ac Reviewed-on: https://go-review.googlesource.com/c/go/+/329290 Trust: Ian Lance Taylor Reviewed-by: Bryan C. Mills --- diff --git a/src/runtime/signal_unix.go b/src/runtime/signal_unix.go index f2e526973d..03e2a40ce6 100644 --- a/src/runtime/signal_unix.go +++ b/src/runtime/signal_unix.go @@ -280,6 +280,8 @@ func setProcessCPUProfiler(hz int32) { it.it_value = it.it_interval setitimer(_ITIMER_PROF, &it, nil) } else { + setitimer(_ITIMER_PROF, &itimerval{}, nil) + // If the Go signal handler should be disabled by default, // switch back to the signal handler that was installed // when we enabled profiling. We don't try to handle the case @@ -303,8 +305,6 @@ func setProcessCPUProfiler(hz int32) { setsig(_SIGPROF, h) } } - - setitimer(_ITIMER_PROF, &itimerval{}, nil) } }