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

This commit is contained in:
Jakob Borg 2024-09-15 11:37:49 +02:00 committed by GitHub
parent 1704827d04
commit 2238a288d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 0 deletions

View File

@ -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?)")

View File

@ -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()