@cryptotaxi247 / kubo / commits / 7280aac83

perf: avoid lots of communication by signaling once at end of method

License: MIT Signed-off-by: Brian Tiger Chow <brian@perfmode.com>

Brian Tiger Chow committed Dec 16, 2014 at 21:28 UTC 7280aac83ff52af54225cde33188d0b7b9ee9b4b
1 file changed +12 -13
exchange/bitswap/strategy/ledgermanager.go
+12 -13
@@ -104,6 +104,16 @@ func (lm *LedgerManager) BlockIsWantedByPeer(k u.Key, p peer.Peer) bool {
104 // MessageReceived performs book-keeping. Returns error if passed invalid
105 // arguments.
106 func (lm *LedgerManager) MessageReceived(p peer.Peer, m bsmsg.BitSwapMessage) error {
107 + newWorkExists := false
108 + defer func() {
109 + if newWorkExists {
110 + // Signal task generation to restart (if stopped!)
111 + select {
112 + case lm.workSignal <- struct{}{}:
113 + default:
114 + }
115 + }
116 + }()
117 lm.lock.Lock()
118 defer lm.lock.Unlock()
119
@@ -117,13 +127,8 @@ func (lm *LedgerManager) MessageReceived(p peer.Peer, m bsmsg.BitSwapMessage) er
127 lm.tasklist.Cancel(e.Key, p)
128 } else {
129 l.Wants(e.Key, e.Priority)
130 + newWorkExists = true
131 lm.tasklist.Push(e.Key, e.Priority, p)
121 -
122 - // Signal task generation to restart (if stopped!)
123 - select {
124 - case lm.workSignal <- struct{}{}:
125 - default:
126 - }
132 }
133 }
134
@@ -132,14 +137,8 @@ func (lm *LedgerManager) MessageReceived(p peer.Peer, m bsmsg.BitSwapMessage) er
137 l.ReceivedBytes(len(block.Data))
138 for _, l := range lm.ledgerMap {
139 if l.WantListContains(block.Key()) {
140 + newWorkExists = true
141 lm.tasklist.Push(block.Key(), 1, l.Partner)
136 -
137 - // Signal task generation to restart (if stopped!)
138 - select {
139 - case lm.workSignal <- struct{}{}:
140 - default:
141 - }
142 -
142 }
143 }
144 }