Unverified 提交 c0c68278 作者: Steven Allen 提交者: GitHub

Merge pull request #6112 from ipfs/fix/gc-deadlock

gc: fix a potential deadlock
...@@ -83,7 +83,7 @@ func GC(ctx context.Context, bs bstore.GCBlockstore, dstor dstore.Datastore, pn ...@@ -83,7 +83,7 @@ func GC(ctx context.Context, bs bstore.GCBlockstore, dstor dstore.Datastore, pn
var removed uint64 var removed uint64
loop: loop:
for { for ctx.Err() == nil { // select may not notice that we're "done".
select { select {
case k, ok := <-keychan: case k, ok := <-keychan:
if !ok { if !ok {
...@@ -94,8 +94,11 @@ func GC(ctx context.Context, bs bstore.GCBlockstore, dstor dstore.Datastore, pn ...@@ -94,8 +94,11 @@ func GC(ctx context.Context, bs bstore.GCBlockstore, dstor dstore.Datastore, pn
removed++ removed++
if err != nil { if err != nil {
errors = true errors = true
output <- Result{Error: &CannotDeleteBlockError{k, err}} select {
//log.Errorf("Error removing key from blockstore: %s", err) case output <- Result{Error: &CannotDeleteBlockError{k, err}}:
case <-ctx.Done():
break loop
}
// continue as error is non-fatal // continue as error is non-fatal
continue loop continue loop
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论