forked from cerc-io/plugeth
eth/downloader: fix possible data race by inconsistent field protection (#20690)
This commit is contained in:
parent
bf1cdd723a
commit
2a5ed1a1d3
@ -564,26 +564,29 @@ func (q *queue) reserveHeaders(p *peerConnection, count int, taskPool map[common
|
|||||||
|
|
||||||
// CancelHeaders aborts a fetch request, returning all pending skeleton indexes to the queue.
|
// CancelHeaders aborts a fetch request, returning all pending skeleton indexes to the queue.
|
||||||
func (q *queue) CancelHeaders(request *fetchRequest) {
|
func (q *queue) CancelHeaders(request *fetchRequest) {
|
||||||
|
q.lock.Lock()
|
||||||
|
defer q.lock.Unlock()
|
||||||
q.cancel(request, q.headerTaskQueue, q.headerPendPool)
|
q.cancel(request, q.headerTaskQueue, q.headerPendPool)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CancelBodies aborts a body fetch request, returning all pending headers to the
|
// CancelBodies aborts a body fetch request, returning all pending headers to the
|
||||||
// task queue.
|
// task queue.
|
||||||
func (q *queue) CancelBodies(request *fetchRequest) {
|
func (q *queue) CancelBodies(request *fetchRequest) {
|
||||||
|
q.lock.Lock()
|
||||||
|
defer q.lock.Unlock()
|
||||||
q.cancel(request, q.blockTaskQueue, q.blockPendPool)
|
q.cancel(request, q.blockTaskQueue, q.blockPendPool)
|
||||||
}
|
}
|
||||||
|
|
||||||
// CancelReceipts aborts a body fetch request, returning all pending headers to
|
// CancelReceipts aborts a body fetch request, returning all pending headers to
|
||||||
// the task queue.
|
// the task queue.
|
||||||
func (q *queue) CancelReceipts(request *fetchRequest) {
|
func (q *queue) CancelReceipts(request *fetchRequest) {
|
||||||
|
q.lock.Lock()
|
||||||
|
defer q.lock.Unlock()
|
||||||
q.cancel(request, q.receiptTaskQueue, q.receiptPendPool)
|
q.cancel(request, q.receiptTaskQueue, q.receiptPendPool)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cancel aborts a fetch request, returning all pending hashes to the task queue.
|
// Cancel aborts a fetch request, returning all pending hashes to the task queue.
|
||||||
func (q *queue) cancel(request *fetchRequest, taskQueue *prque.Prque, pendPool map[string]*fetchRequest) {
|
func (q *queue) cancel(request *fetchRequest, taskQueue *prque.Prque, pendPool map[string]*fetchRequest) {
|
||||||
q.lock.Lock()
|
|
||||||
defer q.lock.Unlock()
|
|
||||||
|
|
||||||
if request.From > 0 {
|
if request.From > 0 {
|
||||||
taskQueue.Push(request.From, -int64(request.From))
|
taskQueue.Push(request.From, -int64(request.From))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user