diff --git a/core/core.go b/core/core.go index d139011475a0..0d41b737874c 100644 --- a/core/core.go +++ b/core/core.go @@ -14,7 +14,6 @@ import ( "context" "errors" "fmt" - "github.com/ipfs/go-ipfs/provider" "io" "io/ioutil" "os" @@ -29,6 +28,7 @@ import ( ipnsrp "github.com/ipfs/go-ipfs/namesys/republisher" p2p "github.com/ipfs/go-ipfs/p2p" pin "github.com/ipfs/go-ipfs/pin" + provider "github.com/ipfs/go-ipfs/provider" repo "github.com/ipfs/go-ipfs/repo" bitswap "github.com/ipfs/go-bitswap" diff --git a/provider/provider.go b/provider/provider.go index a5093d65bdfe..1f55bf041405 100644 --- a/provider/provider.go +++ b/provider/provider.go @@ -17,7 +17,9 @@ const provideOutgoingWorkerLimit = 8 // Provider announces blocks to the network type Provider interface { + // Run is used to begin processing the provider work Run() + // Provide takes a cid and makes an attempt to announce it to the network Provide(cid.Cid) error } @@ -54,6 +56,10 @@ func (p *provider) handleAnnouncements() { for workers := 0; workers < provideOutgoingWorkerLimit; workers++ { go func() { for { + if err := p.ctx.Err(); err != nil { + log.Warningf("Provider context error: %s", err) + return + } select { case <-p.ctx.Done(): return