@cryptotaxi247 / kubo / commits / 59a32b1d0

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 {