From 809e58f0dd22d22f68fa8a1531d53291b155dc4b Mon Sep 17 00:00:00 2001 From: Brian Tiger Chow Date: Fri, 30 Jan 2015 00:08:46 -0800 Subject: [PATCH] refac(blockservice) extract waitable --- blockservice/worker/worker.go | 19 ++----------------- thirdparty/waitable/waitable.go | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 thirdparty/waitable/waitable.go diff --git a/blockservice/worker/worker.go b/blockservice/worker/worker.go index eb5b1fc17..77097bef6 100644 --- a/blockservice/worker/worker.go +++ b/blockservice/worker/worker.go @@ -6,11 +6,11 @@ import ( "errors" "time" - context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" process "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/goprocess" ratelimit "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/goprocess/ratelimit" blocks "github.com/jbenet/go-ipfs/blocks" exchange "github.com/jbenet/go-ipfs/exchange" + waitable "github.com/jbenet/go-ipfs/thirdparty/waitable" util "github.com/jbenet/go-ipfs/util" ) @@ -119,7 +119,7 @@ func (w *Worker) start(c Config) { // reads from |workerChan| until process closes w.process.Go(func(proc process.Process) { - ctx := childContext(proc) // shut down in-progress HasBlock when time to die + ctx := waitable.Context(proc) // shut down in-progress HasBlock when time to die limiter := ratelimit.NewRateLimiter(process.Background(), c.NumWorkers) defer limiter.Close() for { @@ -181,18 +181,3 @@ func (s *BlockList) Pop() *blocks.Block { func (s *BlockList) Len() int { return s.list.Len() } - -// TODO extract -type waitable interface { - Closing() <-chan struct{} -} - -// TODO extract -func childContext(w waitable) context.Context { - ctx, cancel := context.WithCancel(context.Background()) - go func() { - <-w.Closing() - cancel() - }() - return ctx -} diff --git a/thirdparty/waitable/waitable.go b/thirdparty/waitable/waitable.go new file mode 100644 index 000000000..afffce207 --- /dev/null +++ b/thirdparty/waitable/waitable.go @@ -0,0 +1,19 @@ +package waitable + +import ( + context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" +) + +type Waitable interface { + Closing() <-chan struct{} +} + +// Context returns a context that cancels when the waitable is closing. +func Context(w Waitable) context.Context { + ctx, cancel := context.WithCancel(context.Background()) + go func() { + <-w.Closing() + cancel() + }() + return ctx +}