mirror of
https://github.com/netbirdio/netbird.git
synced 2026-04-23 02:36:42 +00:00
Fix nil pointer exception in expectedSemVer
This commit is contained in:
@@ -57,7 +57,9 @@ type UpdateManager struct {
|
|||||||
|
|
||||||
expectedVersion *v.Version
|
expectedVersion *v.Version
|
||||||
updateToLatestVersion bool
|
updateToLatestVersion bool
|
||||||
expectedVersionMutex sync.Mutex
|
|
||||||
|
// updateMutex protect update and expectedVersion fields
|
||||||
|
updateMutex sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUpdateManager(statusRecorder *peer.Status, stateManager *statemanager.Manager) *UpdateManager {
|
func NewUpdateManager(statusRecorder *peer.Status, stateManager *statemanager.Manager) *UpdateManager {
|
||||||
@@ -103,8 +105,8 @@ func (u *UpdateManager) SetVersion(expectedVersion string) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
u.expectedVersionMutex.Lock()
|
u.updateMutex.Lock()
|
||||||
defer u.expectedVersionMutex.Unlock()
|
defer u.updateMutex.Unlock()
|
||||||
if expectedVersion == latestVersion {
|
if expectedVersion == latestVersion {
|
||||||
u.updateToLatestVersion = true
|
u.updateToLatestVersion = true
|
||||||
u.expectedVersion = nil
|
u.expectedVersion = nil
|
||||||
@@ -114,7 +116,7 @@ func (u *UpdateManager) SetVersion(expectedVersion string) {
|
|||||||
log.Errorf("Error parsing version: %v", err)
|
log.Errorf("Error parsing version: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if u.expectedVersion.Equal(expectedSemVer) {
|
if u.expectedVersion != nil && u.expectedVersion.Equal(expectedSemVer) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
u.expectedVersion = expectedSemVer
|
u.expectedVersion = expectedSemVer
|
||||||
@@ -133,12 +135,12 @@ func (u *UpdateManager) Stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
u.cancel()
|
u.cancel()
|
||||||
u.expectedVersionMutex.Lock()
|
u.updateMutex.Lock()
|
||||||
if u.update != nil {
|
if u.update != nil {
|
||||||
u.update.StopWatch()
|
u.update.StopWatch()
|
||||||
u.update = nil
|
u.update = nil
|
||||||
}
|
}
|
||||||
u.expectedVersionMutex.Unlock()
|
u.updateMutex.Unlock()
|
||||||
|
|
||||||
u.wg.Wait()
|
u.wg.Wait()
|
||||||
}
|
}
|
||||||
@@ -148,8 +150,8 @@ func (u *UpdateManager) onContextCancel() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
u.expectedVersionMutex.Lock()
|
u.updateMutex.Lock()
|
||||||
defer u.expectedVersionMutex.Unlock()
|
defer u.updateMutex.Unlock()
|
||||||
if u.update != nil {
|
if u.update != nil {
|
||||||
u.update.StopWatch()
|
u.update.StopWatch()
|
||||||
u.update = nil
|
u.update = nil
|
||||||
@@ -175,15 +177,16 @@ func (u *UpdateManager) updateLoop(ctx context.Context) {
|
|||||||
func (u *UpdateManager) handleUpdate(ctx context.Context) {
|
func (u *UpdateManager) handleUpdate(ctx context.Context) {
|
||||||
var updateVersion *v.Version
|
var updateVersion *v.Version
|
||||||
|
|
||||||
u.expectedVersionMutex.Lock()
|
u.updateMutex.Lock()
|
||||||
if u.update == nil {
|
if u.update == nil {
|
||||||
u.expectedVersionMutex.Unlock()
|
u.updateMutex.Unlock()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
expectedVersion := u.expectedVersion
|
expectedVersion := u.expectedVersion
|
||||||
useLatest := u.updateToLatestVersion
|
useLatest := u.updateToLatestVersion
|
||||||
curLatestVersion := u.update.LatestVersion()
|
curLatestVersion := u.update.LatestVersion()
|
||||||
u.expectedVersionMutex.Unlock()
|
u.updateMutex.Unlock()
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
// Resolve "latest" to actual version
|
// Resolve "latest" to actual version
|
||||||
@@ -194,7 +197,7 @@ func (u *UpdateManager) handleUpdate(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
updateVersion = curLatestVersion
|
updateVersion = curLatestVersion
|
||||||
// Update to specific version
|
// Update to specific version
|
||||||
case u.expectedVersion != nil:
|
case expectedVersion != nil:
|
||||||
updateVersion = expectedVersion
|
updateVersion = expectedVersion
|
||||||
default:
|
default:
|
||||||
log.Debugf("No expected version information set")
|
log.Debugf("No expected version information set")
|
||||||
|
|||||||
Reference in New Issue
Block a user