Skip to content

Commit

Permalink
Replace uses unsafe with atomic with the generic atomic.Pointer (#4226)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Jorropo committed Jun 20, 2023
1 parent e3f547f commit cda2d6c
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 8 deletions.
7 changes: 3 additions & 4 deletions internal/global/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import (
"log"
"os"
"sync/atomic"
"unsafe"
)

var (
Expand All @@ -42,20 +41,20 @@ type ErrorHandler interface {
}

type ErrDelegator struct {
delegate unsafe.Pointer
delegate atomic.Pointer[ErrorHandler]
}

func (d *ErrDelegator) Handle(err error) {
d.getDelegate().Handle(err)
}

func (d *ErrDelegator) getDelegate() ErrorHandler {
return *(*ErrorHandler)(atomic.LoadPointer(&d.delegate))
return *d.delegate.Load()
}

// setDelegate sets the ErrorHandler delegate.
func (d *ErrDelegator) setDelegate(eh ErrorHandler) {
atomic.StorePointer(&d.delegate, unsafe.Pointer(&eh))
d.delegate.Store(&eh)
}

func defaultErrorHandler() *ErrDelegator {
Expand Down
7 changes: 3 additions & 4 deletions internal/global/internal_logging.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import (
"log"
"os"
"sync/atomic"
"unsafe"

"github.com/go-logr/logr"
"github.com/go-logr/stdr"
Expand All @@ -28,7 +27,7 @@ import (
//
// The default logger uses stdr which is backed by the standard `log.Logger`
// interface. This logger will only show messages at the Error Level.
var globalLogger unsafe.Pointer
var globalLogger atomic.Pointer[logr.Logger]

func init() {
SetLogger(stdr.New(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)))
Expand All @@ -40,11 +39,11 @@ func init() {
// 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`.
func SetLogger(l logr.Logger) {
atomic.StorePointer(&globalLogger, unsafe.Pointer(&l))
globalLogger.Store(&l)
}

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.
Expand Down

0 comments on commit cda2d6c

Please sign in to comment.