浏览代码

fix(model): shut down index sender faster (#9704)

Jakob Borg 1 年之前
父节点
当前提交
2238a288d9
共有 2 个文件被更改,包括 18 次插入0 次删除
  1. 6 0
      lib/model/indexhandler.go
  2. 12 0
      lib/protocol/protocol.go

+ 6 - 0
lib/model/indexhandler.go

@@ -233,6 +233,12 @@ func (s *indexHandler) sendIndexTo(ctx context.Context, fset *db.FileSet) error
 	batch := db.NewFileInfoBatch(nil)
 	var batchError error
 	batch.SetFlushFunc(func(fs []protocol.FileInfo) error {
+		select {
+		case <-ctx.Done():
+			return ctx.Err()
+		default:
+		}
+
 		if len(fs) == 0 {
 			// can't happen, flush is not called with an empty batch
 			panic("bug: flush called with empty batch (race condition?)")

+ 12 - 0
lib/protocol/protocol.go

@@ -354,6 +354,8 @@ func (c *rawConnection) Index(ctx context.Context, idx *Index) error {
 	select {
 	case <-c.closed:
 		return ErrClosed
+	case <-ctx.Done():
+		return ctx.Err()
 	default:
 	}
 	c.idxMut.Lock()
@@ -367,6 +369,8 @@ func (c *rawConnection) IndexUpdate(ctx context.Context, idxUp *IndexUpdate) err
 	select {
 	case <-c.closed:
 		return ErrClosed
+	case <-ctx.Done():
+		return ctx.Err()
 	default:
 	}
 	c.idxMut.Lock()
@@ -377,6 +381,14 @@ func (c *rawConnection) IndexUpdate(ctx context.Context, idxUp *IndexUpdate) err
 
 // Request returns the bytes for the specified block after fetching them from the connected peer.
 func (c *rawConnection) Request(ctx context.Context, req *Request) ([]byte, error) {
+	select {
+	case <-c.closed:
+		return nil, ErrClosed
+	case <-ctx.Done():
+		return nil, ctx.Err()
+	default:
+	}
+
 	rc := make(chan asyncResult, 1)
 
 	c.awaitingMut.Lock()