From 30bdde91ae83e62c7520c83ae4893f9e5f2af5d1 Mon Sep 17 00:00:00 2001 From: Zsolt Felfoldi Date: Sun, 14 Jan 2024 04:26:50 +0100 Subject: [PATCH] beacon/light/request: bugs fixed --- beacon/light/request/scheduler.go | 21 +++++++++++---------- cmd/blsync/block_sync.go | 6 +++++- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/beacon/light/request/scheduler.go b/beacon/light/request/scheduler.go index ab0cd30ed7..6771f39584 100644 --- a/beacon/light/request/scheduler.go +++ b/beacon/light/request/scheduler.go @@ -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() + event.Server = server + s.addEvent(event) }) 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 { - s.handleEvent(event) + if _, ok := s.servers[event.Server.(server)]; ok { + s.handleEvent(event) + } else { + log.Error("Event received from unsubscribed server") + } } } diff --git a/cmd/blsync/block_sync.go b/cmd/blsync/block_sync.go index 8e3d99b0db..935ce3aac0 100755 --- a/cmd/blsync/block_sync.go +++ b/cmd/blsync/block_sync.go @@ -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