Main-locked threads are panic wrapped
This commit is contained in:
32
util.go
32
util.go
@@ -14,16 +14,34 @@ import "sync/atomic"
|
||||
import "unicode/utf8"
|
||||
import "runtime/debug"
|
||||
|
||||
func panicErr(message any, stack []byte) (err error) {
|
||||
if panErr, ok := message.(error); ok {
|
||||
err = panErr
|
||||
type panicError struct {
|
||||
wrapped error
|
||||
stack []byte
|
||||
}
|
||||
|
||||
func (this panicError) Error() string {
|
||||
if this.stack == nil {
|
||||
return this.wrapped.Error()
|
||||
} else {
|
||||
err = errors.New(fmt.Sprint(message))
|
||||
return fmt.Sprintf("%v: %s", this.wrapped, this.stack)
|
||||
}
|
||||
if stack != nil {
|
||||
err = fmt.Errorf("%w: %s", err, stack)
|
||||
}
|
||||
|
||||
func (this panicError) Unwrap() error {
|
||||
return this.wrapped
|
||||
}
|
||||
|
||||
func panicErr(message any, stack []byte) (err error) {
|
||||
var wrapped error
|
||||
if panErr, ok := message.(error); ok {
|
||||
wrapped = panErr
|
||||
} else {
|
||||
wrapped = errors.New(fmt.Sprint(message))
|
||||
}
|
||||
return panicError {
|
||||
wrapped: wrapped,
|
||||
stack: stack,
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func defaul[T comparable](value, def T) T {
|
||||
|
||||
Reference in New Issue
Block a user