diff options
Diffstat (limited to 'les')
-rw-r--r-- | les/flowcontrol/control.go | 11 | ||||
-rw-r--r-- | les/handler.go | 5 | ||||
-rw-r--r-- | les/odr_test.go | 4 |
3 files changed, 12 insertions, 8 deletions
diff --git a/les/flowcontrol/control.go b/les/flowcontrol/control.go index 0b8d7f58f..acb131ea4 100644 --- a/les/flowcontrol/control.go +++ b/les/flowcontrol/control.go @@ -99,7 +99,7 @@ type ServerNode struct { params *ServerParams sumCost uint64 // sum of req costs sent to this server pending map[uint64]uint64 // value = sumCost after sending the given req - lock sync.Mutex + lock sync.RWMutex } func NewServerNode(params *ServerParams) *ServerNode { @@ -135,8 +135,8 @@ func (peer *ServerNode) canSend(maxCost uint64) uint64 { } func (peer *ServerNode) CanSend(maxCost uint64) uint64 { - peer.lock.Lock() - defer peer.lock.Unlock() + peer.lock.RLock() + defer peer.lock.RUnlock() return peer.canSend(maxCost) } @@ -148,7 +148,10 @@ func (peer *ServerNode) SendRequest(reqID, maxCost uint64) { peer.recalcBLE(getTime()) for peer.bufEstimate < maxCost { - time.Sleep(time.Duration(peer.canSend(maxCost))) + wait := time.Duration(peer.canSend(maxCost)) + peer.lock.Unlock() + time.Sleep(wait) + peer.lock.Lock() peer.recalcBLE(getTime()) } peer.bufEstimate -= maxCost diff --git a/les/handler.go b/les/handler.go index a51358676..83d73666f 100644 --- a/les/handler.go +++ b/les/handler.go @@ -240,6 +240,7 @@ func (pm *ProtocolManager) findServers() { if pm.p2pServer == nil || pm.topicDisc == nil { return } + glog.V(logger.Debug).Infoln("Looking for topic", string(pm.lesTopic)) enodes := make(chan string, 100) stop := make(chan struct{}) go pm.topicDisc.SearchTopic(pm.lesTopic, stop, enodes) @@ -280,9 +281,9 @@ func (pm *ProtocolManager) Start(srvr *p2p.Server) { } else { if pm.topicDisc != nil { go func() { - glog.V(logger.Debug).Infoln("Starting topic register") + glog.V(logger.Debug).Infoln("Starting registering topic", string(pm.lesTopic)) pm.topicDisc.RegisterTopic(pm.lesTopic, pm.quitSync) - glog.V(logger.Debug).Infoln("Stopped topic register") + glog.V(logger.Debug).Infoln("Stopped registering topic", string(pm.lesTopic)) }() } go func() { diff --git a/les/odr_test.go b/les/odr_test.go index f1fa59ad8..80f7b8208 100644 --- a/les/odr_test.go +++ b/les/odr_test.go @@ -119,7 +119,7 @@ func odrContractCall(ctx context.Context, db ethdb.Database, config *params.Chai from := statedb.GetOrNewStateObject(testBankAddress) from.SetBalance(common.MaxBig) - msg := callmsg{types.NewMessage(from.Address(), &testContractAddr, 0, new(big.Int), big.NewInt(100000), new(big.Int), data)} + msg := callmsg{types.NewMessage(from.Address(), &testContractAddr, 0, new(big.Int), big.NewInt(100000), new(big.Int), data, false)} vmenv := core.NewEnv(statedb, config, bc, msg, header, vm.Config{}) gp := new(core.GasPool).AddGas(common.MaxBig) ret, _, _ := core.ApplyMessage(vmenv, msg, gp) @@ -132,7 +132,7 @@ func odrContractCall(ctx context.Context, db ethdb.Database, config *params.Chai if err == nil { from.SetBalance(common.MaxBig) - msg := callmsg{types.NewMessage(from.Address(), &testContractAddr, 0, new(big.Int), big.NewInt(100000), new(big.Int), data)} + msg := callmsg{types.NewMessage(from.Address(), &testContractAddr, 0, new(big.Int), big.NewInt(100000), new(big.Int), data, false)} vmenv := light.NewEnv(ctx, state, config, lc, msg, header, vm.Config{}) gp := new(core.GasPool).AddGas(common.MaxBig) |