isula-build/patch/0065-fix-panic-when-user-knock-ctrl-c-when-pull-push-and-.patch

136 lines
3.6 KiB
Diff
Raw Normal View History

From a33d6ae4fb22a4d72d714733b3045272e050c0d7 Mon Sep 17 00:00:00 2001
From: xingweizheng 00591739 <xingweizheng@huawei.com>
Date: Mon, 9 Nov 2020 13:54:57 +0800
Subject: [PATCH] fix panic when user knock ctrl+c when pull, push and save
---
daemon/pull.go | 24 +++++++++---------------
daemon/push.go | 24 +++++++++---------------
daemon/save.go | 29 +++++++++--------------------
3 files changed, 27 insertions(+), 50 deletions(-)
diff --git a/daemon/pull.go b/daemon/pull.go
index f9dee3e..56be755 100644
--- a/daemon/pull.go
+++ b/daemon/pull.go
@@ -59,23 +59,17 @@ func (b *Backend) Pull(req *pb.PullRequest, stream pb.Control_PullServer) error
eg.Go(pullMessageHandler(stream, opt.logger))
errC := make(chan error, 1)
- go func() { errC <- eg.Wait() }()
+ errC <- eg.Wait()
defer close(errC)
- select {
- case err2 := <-errC:
- if err2 != nil {
- return err2
- }
- case _, ok := <-stream.Context().Done():
- if !ok {
- logrus.WithField(util.LogKeySessionID, opt.pullID).Info("Channel stream done closed")
- return nil
- }
- err := egCtx.Err()
- if err != nil && err != context.Canceled {
- logrus.WithField(util.LogKeySessionID, opt.pullID).Warnf("Stream closed with: %v", err)
- }
+ err, ok := <-errC
+ if !ok {
+ logrus.WithField(util.LogKeySessionID, opt.pullID).Info("Channel errC closed")
+ return nil
+ }
+ if err != nil {
+ logrus.WithField(util.LogKeySessionID, opt.pullID).Warnf("Stream closed with: %v", err)
+ return err
}
return nil
diff --git a/daemon/push.go b/daemon/push.go
index 712062e..ea5e47c 100644
--- a/daemon/push.go
+++ b/daemon/push.go
@@ -63,23 +63,17 @@ func (b *Backend) Push(req *pb.PushRequest, stream pb.Control_PushServer) error
eg.Go(pushMessageHandler(stream, opt.logger))
errC := make(chan error, 1)
- go func() { errC <- eg.Wait() }()
+ errC <- eg.Wait()
defer close(errC)
- select {
- case err2 := <-errC:
- if err2 != nil {
- return err2
- }
- case _, ok := <-stream.Context().Done():
- if !ok {
- logrus.WithField(util.LogKeySessionID, opt.pushID).Info("Channel stream done closed")
- return nil
- }
- err := egCtx.Err()
- if err != nil && err != context.Canceled {
- logrus.WithField(util.LogKeySessionID, opt.pushID).Warnf("Stream closed with: %v", err)
- }
+ err, ok := <-errC
+ if !ok {
+ logrus.WithField(util.LogKeySessionID, opt.pushID).Info("Channel errC closed")
+ return nil
+ }
+ if err != nil {
+ logrus.WithField(util.LogKeySessionID, opt.pushID).Warnf("Stream closed with: %v", err)
+ return err
}
return nil
diff --git a/daemon/save.go b/daemon/save.go
index 13ca8cd..156a1c2 100644
--- a/daemon/save.go
+++ b/daemon/save.go
@@ -102,33 +102,22 @@ func (b *Backend) Save(req *pb.SaveRequest, stream pb.Control_SaveServer) (err e
}
ctx := context.WithValue(stream.Context(), util.LogFieldKey(util.LogKeySessionID), opts.saveID)
- eg, egCtx := errgroup.WithContext(ctx)
+ eg, _ := errgroup.WithContext(ctx)
eg.Go(exportHandler(ctx, stream, opts))
eg.Go(messageHandler(stream, opts.logger))
errC := make(chan error, 1)
- go func() { errC <- eg.Wait() }()
+ errC <- eg.Wait()
defer close(errC)
- select {
- case err, ok = <-errC:
- if !ok {
- opts.logEntry.Info("Channel errC closed")
- return nil
- }
- if err != nil {
- return err
- }
- case _, ok := <-stream.Context().Done():
- if !ok {
- opts.logEntry.Info("Channel stream done closed")
- return nil
- }
- err = egCtx.Err()
- if err != nil && err != context.Canceled {
- opts.logEntry.Infof("Stream closed with: %v", err)
- }
+ err, ok = <-errC
+ if !ok {
+ opts.logEntry.Info("Channel errC closed")
+ return nil
+ }
+ if err != nil {
+ return err
}
return nil
--
1.8.3.1