Skip to content

Commit

Permalink
Merge pull request #168 from ngrok/euan/less-raw-ptr
Browse files Browse the repository at this point in the history
internal/tunnel/client: unsafe.Pointer -> atomic.Pointer
  • Loading branch information
euank committed Jun 24, 2024
2 parents 4917562 + 88d89b7 commit d4bcbfd
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 14 deletions.
9 changes: 4 additions & 5 deletions internal/tunnel/client/reconnecting.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"sync"
"sync/atomic"
"time"
"unsafe"

log "github.com/inconshreveable/log15/v3"
"github.com/jpillora/backoff"
Expand All @@ -18,19 +17,19 @@ var ErrSessionNotReady = errors.New("an ngrok tunnel session has not yet been es

// Wraps a RawSession so that it can be safely swapped out
type swapRaw struct {
raw unsafe.Pointer
raw atomic.Pointer[RawSession]
}

func (s *swapRaw) get() RawSession {
ptr := atomic.LoadPointer(&s.raw)
ptr := s.raw.Load()
if ptr == nil {
return nil
}
return *(*RawSession)(ptr)
return *ptr
}

func (s *swapRaw) set(raw RawSession) {
atomic.StorePointer(&s.raw, unsafe.Pointer(&raw))
s.raw.Store(&raw)
}

func (s *swapRaw) Auth(id string, extra proto.AuthExtra) (resp proto.AuthResp, err error) {
Expand Down
12 changes: 3 additions & 9 deletions session.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import (
"strings"
"sync/atomic"
"time"
"unsafe"

"github.com/inconshreveable/log15/v3"
"go.uber.org/multierr"
Expand Down Expand Up @@ -804,7 +803,7 @@ func Connect(ctx context.Context, opts ...ConnectOption) (Session, error) {
}

type sessionImpl struct {
raw unsafe.Pointer
raw atomic.Pointer[sessionInner]
}

type sessionInner struct {
Expand All @@ -825,15 +824,11 @@ type sessionInner struct {
}

func (s *sessionImpl) inner() *sessionInner {
ptr := atomic.LoadPointer(&s.raw)
if ptr == nil {
return nil
}
return (*sessionInner)(ptr)
return s.raw.Load()
}

func (s *sessionImpl) setInner(raw *sessionInner) {
atomic.StorePointer(&s.raw, unsafe.Pointer(raw))
s.raw.Store(raw)
}

func (s *sessionImpl) closeTunnel(clientID string, err error) error {
Expand All @@ -850,7 +845,6 @@ func (s *sessionImpl) Warnings() []error {
return []error{(*AgentVersionDeprecated)(deprecated)}
}
return nil

}

func (s *sessionImpl) Listen(ctx context.Context, cfg config.Tunnel) (Tunnel, error) {
Expand Down

0 comments on commit d4bcbfd

Please sign in to comment.