Skip to content

Commit

Permalink
Fix memory leak in upgrade action
Browse files Browse the repository at this point in the history
fixes #10439

Signed-off-by: Jerome Küttner <j.kuettner@mittwald.de>
  • Loading branch information
jkmw committed Dec 6, 2021
1 parent 0e6e936 commit ad3d2cc
Showing 1 changed file with 20 additions and 8 deletions.
28 changes: 20 additions & 8 deletions pkg/action/upgrade.go
Original file line number Diff line number Diff line change
Expand Up @@ -321,9 +321,17 @@ func (u *Upgrade) performUpgrade(ctx context.Context, originalRelease, upgradedR
return nil, err
}
rChan := make(chan resultMessage)
ctxChan := make(chan resultMessage)
doneChan := make(chan interface{})
go u.releasingUpgrade(rChan, upgradedRelease, current, target, originalRelease)
go u.handleContext(ctx, rChan, upgradedRelease)
result := <-rChan
go u.handleContext(ctx, doneChan, ctxChan, upgradedRelease)
var result resultMessage
select {
case result = <-rChan:
doneChan <- true
case result = <-ctxChan:
close(rChan)
}

return result.r, result.e
}
Expand All @@ -341,13 +349,17 @@ func (u *Upgrade) reportToPerformUpgrade(c chan<- resultMessage, rel *release.Re
}

// Setup listener for SIGINT and SIGTERM
func (u *Upgrade) handleContext(ctx context.Context, c chan<- resultMessage, upgradedRelease *release.Release) {

func (u *Upgrade) handleContext(ctx context.Context, done chan interface{}, c chan<- resultMessage, upgradedRelease *release.Release) {
go func() {
<-ctx.Done()
err := ctx.Err()
// when the atomic flag is set the ongoing release finish first and doesn't give time for the rollback happens.
u.reportToPerformUpgrade(c, upgradedRelease, kube.ResourceList{}, err)
select {
case <-ctx.Done():
err := ctx.Err()

// when the atomic flag is set the ongoing release finish first and doesn't give time for the rollback happens.
u.reportToPerformUpgrade(c, upgradedRelease, kube.ResourceList{}, err)
case <-done:
return
}
}()
}
func (u *Upgrade) releasingUpgrade(c chan<- resultMessage, upgradedRelease *release.Release, current kube.ResourceList, target kube.ResourceList, originalRelease *release.Release) {
Expand Down

0 comments on commit ad3d2cc

Please sign in to comment.