diff --git a/gc/gc.go b/gc/gc.go index 9234d436895c595027cd70df99508cca2b4933ec..12b0fadb2293f553c2d18c4444907e48c7873424 100644 --- a/gc/gc.go +++ b/gc/gc.go @@ -83,7 +83,7 @@ func GC(ctx context.Context, bs bstore.GCBlockstore, dstor dstore.Datastore, pn var removed uint64 loop: - for { + for ctx.Err() == nil { // select may not notice that we're "done". select { case k, ok := <-keychan: if !ok { @@ -94,8 +94,11 @@ func GC(ctx context.Context, bs bstore.GCBlockstore, dstor dstore.Datastore, pn removed++ if err != nil { errors = true - output <- Result{Error: &CannotDeleteBlockError{k, err}} - //log.Errorf("Error removing key from blockstore: %s", err) + select { + case output <- Result{Error: &CannotDeleteBlockError{k, err}}: + case <-ctx.Done(): + break loop + } // continue as error is non-fatal continue loop }