refactor(bitswap) group the deferreds
License: MIT Signed-off-by: Brian Tiger Chow <brian@perfmode.com>
Brian Tiger Chow committed
Nov 20, 2014 at 19:14 UTC
59a32b1d0fdfac5724b4e1a9f88c1f7b664344e2
1 file changed
+10
-4
exchange/bitswap/bitswap.go
+10
-4
@@ -92,11 +92,14 @@ func (bs *bitswap) GetBlock(parent context.Context, k u.Key) (*blocks.Block, err
92
// functions. This is difficult to enforce. May this comment keep you safe.
93
94
ctx, cancelFunc := context.WithCancel(parent)
95
- defer cancelFunc()
95
96
ctx = eventlog.ContextWithMetadata(ctx, eventlog.Uuid("GetBlockRequest"))
97
log.Event(ctx, "GetBlockRequestBegin", &k)
99
- defer log.Event(ctx, "GetBlockRequestEnd", &k)
98
+
99
+ defer func() {
100
+ cancelFunc()
101
+ log.Event(ctx, "GetBlockRequestEnd", &k)
102
+ }()
103
104
promise, err := bs.GetBlocks(parent, []u.Key{k})
105
if err != nil {
@@ -109,6 +112,7 @@ func (bs *bitswap) GetBlock(parent context.Context, k u.Key) (*blocks.Block, err
112
case <-parent.Done():
113
return nil, parent.Err()
114
}
115
+
116
}
117
118
// GetBlocks returns a channel where the caller may receive blocks that
@@ -172,13 +176,15 @@ func (bs *bitswap) sendWantListTo(ctx context.Context, peers <-chan peer.Peer) e
176
func (bs *bitswap) loop(parent context.Context) {
177
178
ctx, cancel := context.WithCancel(parent)
175
- defer cancel() // signal termination
179
180
// Every so often, we should resend out our current want list
181
rebroadcastTime := time.Second * 5
182
183
broadcastSignal := time.NewTicker(bs.strategy.GetRebroadcastDelay())
181
- defer broadcastSignal.Stop()
184
+ defer func() {
185
+ cancel() // signal to derived async functions
186
+ broadcastSignal.Stop()
187
+ }()
188
189
for {
190
select {