Browse Source

eth/downloader: avoid hidden reference to finished statesync request (#15545)

Péter Szilágyi 7 năm trước cách đây
mục cha
commit
9c42a41ed8
1 tập tin đã thay đổi với 4 bổ sung1 xóa
  1. 4 1
      eth/downloader/statesync.go

+ 4 - 1
eth/downloader/statesync.go

@@ -132,7 +132,10 @@ func (d *Downloader) runStateSync(s *stateSync) *stateSync {
 
 		// Send the next finished request to the current sync:
 		case deliverReqCh <- deliverReq:
-			finished = append(finished[:0], finished[1:]...)
+			// Shift out the first request, but also set the emptied slot to nil for GC
+			copy(finished, finished[1:])
+			finished[len(finished)-1] = nil
+			finished = finished[:len(finished)-1]
 
 		// Handle incoming state packs:
 		case pack := <-d.stateCh: