You've already forked opentelemetry-go
mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-07-17 01:12:45 +02:00
Replace uses unsafe with atomic with the generic atomic.Pointer (#4226)
Line numbers debug symbols aside this code will produce the exact same machine code. It removes a non needed use of unsafe and replace it with compile time type checked generics. Will help keep code cleaner in case any of this ever gets refactored in the future.
This commit is contained in:
@ -18,7 +18,6 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"unsafe"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -42,7 +41,7 @@ type ErrorHandler interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ErrDelegator struct {
|
type ErrDelegator struct {
|
||||||
delegate unsafe.Pointer
|
delegate atomic.Pointer[ErrorHandler]
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *ErrDelegator) Handle(err error) {
|
func (d *ErrDelegator) Handle(err error) {
|
||||||
@ -50,12 +49,12 @@ func (d *ErrDelegator) Handle(err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *ErrDelegator) getDelegate() ErrorHandler {
|
func (d *ErrDelegator) getDelegate() ErrorHandler {
|
||||||
return *(*ErrorHandler)(atomic.LoadPointer(&d.delegate))
|
return *d.delegate.Load()
|
||||||
}
|
}
|
||||||
|
|
||||||
// setDelegate sets the ErrorHandler delegate.
|
// setDelegate sets the ErrorHandler delegate.
|
||||||
func (d *ErrDelegator) setDelegate(eh ErrorHandler) {
|
func (d *ErrDelegator) setDelegate(eh ErrorHandler) {
|
||||||
atomic.StorePointer(&d.delegate, unsafe.Pointer(&eh))
|
d.delegate.Store(&eh)
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultErrorHandler() *ErrDelegator {
|
func defaultErrorHandler() *ErrDelegator {
|
||||||
|
@ -18,7 +18,6 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"unsafe"
|
|
||||||
|
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
"github.com/go-logr/stdr"
|
"github.com/go-logr/stdr"
|
||||||
@ -28,7 +27,7 @@ import (
|
|||||||
//
|
//
|
||||||
// The default logger uses stdr which is backed by the standard `log.Logger`
|
// The default logger uses stdr which is backed by the standard `log.Logger`
|
||||||
// interface. This logger will only show messages at the Error Level.
|
// interface. This logger will only show messages at the Error Level.
|
||||||
var globalLogger unsafe.Pointer
|
var globalLogger atomic.Pointer[logr.Logger]
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
SetLogger(stdr.New(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)))
|
SetLogger(stdr.New(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)))
|
||||||
@ -40,11 +39,11 @@ func init() {
|
|||||||
// To see Info messages use a logger with `l.V(4).Enabled() == true`
|
// To see Info messages use a logger with `l.V(4).Enabled() == true`
|
||||||
// To see Debug messages use a logger with `l.V(8).Enabled() == true`.
|
// To see Debug messages use a logger with `l.V(8).Enabled() == true`.
|
||||||
func SetLogger(l logr.Logger) {
|
func SetLogger(l logr.Logger) {
|
||||||
atomic.StorePointer(&globalLogger, unsafe.Pointer(&l))
|
globalLogger.Store(&l)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLogger() logr.Logger {
|
func getLogger() logr.Logger {
|
||||||
return *(*logr.Logger)(atomic.LoadPointer(&globalLogger))
|
return *globalLogger.Load()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Info prints messages about the general state of the API or SDK.
|
// Info prints messages about the general state of the API or SDK.
|
||||||
|
Reference in New Issue
Block a user