mirror of
				https://github.com/restic/restic.git
				synced 2025-11-04 03:56:52 +00:00 
			
		
		
		
	defer close(ch) outside repository.RunWorkers
This commit is contained in:
		@@ -135,14 +135,10 @@ func (c *Checker) LoadIndex(ctx context.Context) (hints []error, errs []error) {
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// final closes indexCh after all workers have terminated
 | 
					 | 
				
			||||||
	final := func() {
 | 
					 | 
				
			||||||
		close(resultCh)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// run workers on ch
 | 
						// run workers on ch
 | 
				
			||||||
	wg.Go(func() error {
 | 
						wg.Go(func() error {
 | 
				
			||||||
		return repository.RunWorkers(defaultParallelism, worker, final)
 | 
							defer close(resultCh)
 | 
				
			||||||
 | 
							return repository.RunWorkers(defaultParallelism, worker)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// receive decoded indexes
 | 
						// receive decoded indexes
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -476,14 +476,10 @@ func (r *Repository) LoadIndex(ctx context.Context) error {
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// final closes indexCh after all workers have terminated
 | 
					 | 
				
			||||||
	final := func() {
 | 
					 | 
				
			||||||
		close(indexCh)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// run workers on ch
 | 
						// run workers on ch
 | 
				
			||||||
	wg.Go(func() error {
 | 
						wg.Go(func() error {
 | 
				
			||||||
		return RunWorkers(loadIndexParallelism, worker, final)
 | 
							defer close(indexCh)
 | 
				
			||||||
 | 
							return RunWorkers(loadIndexParallelism, worker)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// receive decoded indexes
 | 
						// receive decoded indexes
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,10 +5,8 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RunWorkers runs count instances of workerFunc using an errgroup.Group.
 | 
					// RunWorkers runs count instances of workerFunc using an errgroup.Group.
 | 
				
			||||||
// After all workers have terminated, finalFunc is run. If an error occurs in
 | 
					// If an error occurs in one of the workers, it is returned.
 | 
				
			||||||
// one of the workers, it is returned. FinalFunc is always run, regardless of
 | 
					func RunWorkers(count int, workerFunc func() error) error {
 | 
				
			||||||
// any other previous errors.
 | 
					 | 
				
			||||||
func RunWorkers(count int, workerFunc func() error, finalFunc func()) error {
 | 
					 | 
				
			||||||
	var wg errgroup.Group
 | 
						var wg errgroup.Group
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// run workers
 | 
						// run workers
 | 
				
			||||||
@@ -16,12 +14,5 @@ func RunWorkers(count int, workerFunc func() error, finalFunc func()) error {
 | 
				
			|||||||
		wg.Go(workerFunc)
 | 
							wg.Go(workerFunc)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// wait for termination
 | 
						return wg.Wait()
 | 
				
			||||||
	err := wg.Wait()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// make sure finalFunc is run
 | 
					 | 
				
			||||||
	finalFunc()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// return error from workers to the caller
 | 
					 | 
				
			||||||
	return err
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user