mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 10:52:25 +00:00
beacon/light/request: bugs fixed
This commit is contained in:
parent
1db975fd34
commit
30bdde91ae
2 changed files with 16 additions and 11 deletions
|
|
@ -152,14 +152,8 @@ func (s *Scheduler) RegisterServer(rs requestServer) {
|
|||
server := newServer(rs, s.clock)
|
||||
s.addEvent(Event{Type: EvRegistered, Server: server})
|
||||
server.subscribe(func(event Event) {
|
||||
s.lock.Lock()
|
||||
if _, ok := s.servers[server]; ok {
|
||||
event.Server = server
|
||||
s.addEvent(event)
|
||||
} else {
|
||||
log.Error("Event received from unsubscribed server")
|
||||
}
|
||||
s.lock.Unlock()
|
||||
})
|
||||
s.servers[server] = struct{}{}
|
||||
}
|
||||
|
|
@ -205,8 +199,11 @@ func (s *Scheduler) syncLoop() {
|
|||
for {
|
||||
s.lock.Lock()
|
||||
s.handleEvents()
|
||||
for s.targetChanged() {
|
||||
for {
|
||||
s.processModules()
|
||||
if !s.targetChanged() {
|
||||
break
|
||||
}
|
||||
}
|
||||
s.sendRequests()
|
||||
s.lock.Unlock()
|
||||
|
|
@ -330,7 +327,11 @@ func (s *Scheduler) handleEvents() {
|
|||
s.events = nil
|
||||
s.eventLock.Unlock()
|
||||
for _, event := range events {
|
||||
if _, ok := s.servers[event.Server.(server)]; ok {
|
||||
s.handleEvent(event)
|
||||
} else {
|
||||
log.Error("Event received from unsubscribed server")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,10 @@ func newBeaconBlockSync(headTracker headTracker) *beaconBlockSync {
|
|||
|
||||
func (s *beaconBlockSync) HandleEvent(event request.Event) {
|
||||
switch event.Type {
|
||||
case request.EvRequest:
|
||||
_, req, _ := event.RequestInfo()
|
||||
blockRoot := common.Hash(req.(sync.ReqBeaconBlock))
|
||||
s.locked[blockRoot] = struct{}{}
|
||||
case request.EvResponse, request.EvFail, request.EvTimeout:
|
||||
_, req, resp := event.RequestInfo()
|
||||
blockRoot := common.Hash(req.(sync.ReqBeaconBlock))
|
||||
|
|
@ -95,7 +99,7 @@ func (s *beaconBlockSync) MakeRequest(server request.Server) (request.Request, f
|
|||
}
|
||||
}
|
||||
// request prefetch head if the given server has announced it
|
||||
if prefetchHead := s.headTracker.PrefetchHead().BlockRoot; prefetchHead != (common.Hash{}) && prefetchHead != s.serverHeads[server] {
|
||||
if prefetchHead := s.headTracker.PrefetchHead().BlockRoot; prefetchHead == s.serverHeads[server] {
|
||||
if _, ok := s.recentBlocks.Get(prefetchHead); !ok {
|
||||
if _, ok := s.locked[prefetchHead]; !ok {
|
||||
return sync.ReqBeaconBlock(prefetchHead), 0
|
||||
|
|
|
|||
Loading…
Reference in a new issue