Skip to content

Commit

Permalink
bitswap: clean up ledgers when disconnecting
Browse files Browse the repository at this point in the history
License: MIT
Signed-off-by: Jeromy <why@ipfs.io>
  • Loading branch information
whyrusleeping authored and Kubuxu committed Dec 19, 2016
1 parent 548490f commit 5064976
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 1 deletion.
1 change: 1 addition & 0 deletions exchange/bitswap/bitswap.go
Original file line number Diff line number Diff line change
Expand Up @@ -393,6 +393,7 @@ func (bs *Bitswap) updateReceiveCounters(b blocks.Block) error {
// Connected/Disconnected warns bitswap about peer connections
func (bs *Bitswap) PeerConnected(p peer.ID) {
bs.wm.Connected(p)
bs.engine.PeerConnected(p)
}

// Connected/Disconnected warns bitswap about peer connections
Expand Down
26 changes: 25 additions & 1 deletion exchange/bitswap/decision/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,8 +295,32 @@ func (e *Engine) MessageSent(p peer.ID, m bsmsg.BitSwapMessage) error {
return nil
}

func (e *Engine) PeerConnected(p peer.ID) {
e.lock.Lock()
l, ok := e.ledgerMap[p]
if !ok {
l = newLedger(p)
e.ledgerMap[p] = l
}
l.lk.Lock()
l.ref++
l.lk.Unlock()
e.lock.Unlock()
}

func (e *Engine) PeerDisconnected(p peer.ID) {
// TODO: release ledger
e.lock.Lock()
defer e.lock.Unlock()
l, ok := e.ledgerMap[p]
if !ok {
return
}
l.lk.Lock()
l.ref--
if l.ref <= 0 {
delete(e.ledgerMap, p)
}
l.lk.Unlock()
}

func (e *Engine) numBytesSentTo(p peer.ID) uint64 {
Expand Down
4 changes: 4 additions & 0 deletions exchange/bitswap/decision/ledger.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ type ledger struct {
// to a given peer
sentToPeer map[string]time.Time

// ref is the reference count for this ledger, its used to ensure we
// don't drop the reference to this ledger in multi-connection scenarios
ref int

lk sync.Mutex
}

Expand Down

0 comments on commit 5064976

Please sign in to comment.