Skip to content

Commit 73be519

Browse files
committed
bitswap: clean up ledgers when disconnecting
License: MIT Signed-off-by: Jeromy <[email protected]>
1 parent 4e8015d commit 73be519

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

exchange/bitswap/bitswap.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ func (bs *Bitswap) updateReceiveCounters(b blocks.Block) error {
393393
// Connected/Disconnected warns bitswap about peer connections
394394
func (bs *Bitswap) PeerConnected(p peer.ID) {
395395
bs.wm.Connected(p)
396+
bs.engine.PeerConnected(p)
396397
}
397398

398399
// Connected/Disconnected warns bitswap about peer connections

exchange/bitswap/decision/engine.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,24 @@ func (e *Engine) MessageSent(p peer.ID, m bsmsg.BitSwapMessage) error {
295295
return nil
296296
}
297297

298+
func (e *Engine) PeerConnected(p peer.ID) {
299+
l := e.findOrCreate(p)
300+
l.lk.Lock()
301+
l.ref++
302+
l.lk.Unlock()
303+
}
304+
298305
func (e *Engine) PeerDisconnected(p peer.ID) {
299-
// TODO: release ledger
306+
e.lock.Lock()
307+
defer e.lock.Unlock()
308+
l, ok := e.ledgerMap[p]
309+
if !ok {
310+
return
311+
}
312+
l.ref--
313+
if l.ref <= 0 {
314+
delete(e.ledgerMap, p)
315+
}
300316
}
301317

302318
func (e *Engine) numBytesSentTo(p peer.ID) uint64 {

exchange/bitswap/decision/ledger.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ type ledger struct {
4343
// to a given peer
4444
sentToPeer map[string]time.Time
4545

46+
// ref is the reference count for this ledger, its used to ensure we
47+
// don't drop the reference to this ledger in multi-connection scenarios
48+
ref int
49+
4650
lk sync.Mutex
4751
}
4852

0 commit comments

Comments
 (0)