]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: disable CPU profiling before removing the SIGPROF handler
authorIan Lance Taylor <iant@golang.org>
Fri, 18 Jun 2021 00:34:18 +0000 (17:34 -0700)
committerIan Lance Taylor <iant@golang.org>
Fri, 18 Jun 2021 16:56:48 +0000 (16:56 +0000)
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 <iant@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
src/runtime/signal_unix.go

index f2e526973df99dd4c5b1273715549c6bbcd306fb..03e2a40ce65c08195b3774cf8e14fc0fbaa4021a 100644 (file)
@@ -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)
        }
 }