fix(portforward): rework run loop and fix deadlocks (#1874)
This commit is contained in:
45
internal/portforward/service/service.go
Normal file
45
internal/portforward/service/service.go
Normal file
@@ -0,0 +1,45 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
// State
|
||||
portMutex sync.RWMutex
|
||||
port uint16
|
||||
// Fixed parameters
|
||||
settings Settings
|
||||
puid int
|
||||
pgid int
|
||||
// Fixed injected objets
|
||||
client *http.Client
|
||||
portAllower PortAllower
|
||||
logger Logger
|
||||
// Internal channels and locks
|
||||
startStopMutex sync.Mutex
|
||||
keepPortCancel context.CancelFunc
|
||||
keepPortDoneCh <-chan struct{}
|
||||
}
|
||||
|
||||
func New(settings Settings, client *http.Client,
|
||||
portAllower PortAllower, logger Logger, puid, pgid int) *Service {
|
||||
return &Service{
|
||||
// Fixed parameters
|
||||
settings: settings,
|
||||
puid: puid,
|
||||
pgid: pgid,
|
||||
// Fixed injected objets
|
||||
client: client,
|
||||
portAllower: portAllower,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Service) GetPortForwarded() (port uint16) {
|
||||
s.portMutex.RLock()
|
||||
defer s.portMutex.RUnlock()
|
||||
return s.port
|
||||
}
|
||||
Reference in New Issue
Block a user