diff options
author | robot-contrib <[email protected]> | 2024-02-02 17:18:05 +0300 |
---|---|---|
committer | robot-contrib <[email protected]> | 2024-02-02 17:45:26 +0300 |
commit | fdc74ce0fba102516da2237709550e3577739bb8 (patch) | |
tree | d233e69d1e06a19749c0e287e2f5d8696b5ef9a8 /vendor/github.com/golang/glog/glog_file_posix.go | |
parent | b3148fd84b0bcecb343af9157571a434550e1041 (diff) |
Update vendor/go.opentelemetry.io/otel to 1.22.0
Diffstat (limited to 'vendor/github.com/golang/glog/glog_file_posix.go')
-rw-r--r-- | vendor/github.com/golang/glog/glog_file_posix.go | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/vendor/github.com/golang/glog/glog_file_posix.go b/vendor/github.com/golang/glog/glog_file_posix.go new file mode 100644 index 00000000000..c27c7c0e4ab --- /dev/null +++ b/vendor/github.com/golang/glog/glog_file_posix.go @@ -0,0 +1,53 @@ +// Go support for leveled logs, analogous to https://github.com/google/glog. +// +// Copyright 2023 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build (unix || windows) && !linux + +package glog + +import ( + "os" + "syscall" + "time" +) + +// abortProcess attempts to kill the current process in a way that will dump the +// currently-running goroutines someplace useful (like stderr). +// +// It does this by sending SIGABRT to the current process. Unfortunately, the +// signal may or may not be delivered to the current thread; in order to do that +// portably, we would need to add a cgo dependency and call pthread_kill. +// +// If successful, abortProcess does not return. +func abortProcess() error { + p, err := os.FindProcess(os.Getpid()) + if err != nil { + return err + } + if err := p.Signal(syscall.SIGABRT); err != nil { + return err + } + + // Sent the signal. Now we wait for it to arrive and any SIGABRT handlers to + // run (and eventually terminate the process themselves). + // + // We could just "select{}" here, but there's an outside chance that would + // trigger the runtime's deadlock detector if there happen not to be any + // background goroutines running. So we'll sleep a while first to give + // the signal some time. + time.Sleep(10 * time.Second) + select {} +} |