mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
avoid copy the whole slice
This commit is contained in:
parent
c1579c907f
commit
20f6b7a854
1 changed files with 10 additions and 16 deletions
|
|
@ -56,7 +56,7 @@ type payloadQueue struct {
|
||||||
// all containing empty items.
|
// all containing empty items.
|
||||||
func newPayloadQueue() *payloadQueue {
|
func newPayloadQueue() *payloadQueue {
|
||||||
return &payloadQueue{
|
return &payloadQueue{
|
||||||
payloads: make([]*payloadQueueItem, maxTrackedPayloads),
|
payloads: make([]*payloadQueueItem, 0, maxTrackedPayloads),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -65,10 +65,12 @@ func (q *payloadQueue) put(id engine.PayloadID, payload *miner.Payload) {
|
||||||
q.lock.Lock()
|
q.lock.Lock()
|
||||||
defer q.lock.Unlock()
|
defer q.lock.Unlock()
|
||||||
|
|
||||||
copy(q.payloads[1:], q.payloads)
|
q.payloads = append(q.payloads, &payloadQueueItem{
|
||||||
q.payloads[0] = &payloadQueueItem{
|
|
||||||
id: id,
|
id: id,
|
||||||
payload: payload,
|
payload: payload,
|
||||||
|
})
|
||||||
|
if len(q.payloads) > maxTrackedPayloads {
|
||||||
|
q.payloads = q.payloads[1:]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,9 +80,6 @@ func (q *payloadQueue) get(id engine.PayloadID, full bool) *engine.ExecutionPayl
|
||||||
defer q.lock.RUnlock()
|
defer q.lock.RUnlock()
|
||||||
|
|
||||||
for _, item := range q.payloads {
|
for _, item := range q.payloads {
|
||||||
if item == nil {
|
|
||||||
return nil // no more items
|
|
||||||
}
|
|
||||||
if item.id == id {
|
if item.id == id {
|
||||||
if !full {
|
if !full {
|
||||||
return item.payload.Resolve()
|
return item.payload.Resolve()
|
||||||
|
|
@ -97,9 +96,6 @@ func (q *payloadQueue) has(id engine.PayloadID) bool {
|
||||||
defer q.lock.RUnlock()
|
defer q.lock.RUnlock()
|
||||||
|
|
||||||
for _, item := range q.payloads {
|
for _, item := range q.payloads {
|
||||||
if item == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if item.id == id {
|
if item.id == id {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
@ -125,7 +121,7 @@ type headerQueue struct {
|
||||||
// all containing empty items.
|
// all containing empty items.
|
||||||
func newHeaderQueue() *headerQueue {
|
func newHeaderQueue() *headerQueue {
|
||||||
return &headerQueue{
|
return &headerQueue{
|
||||||
headers: make([]*headerQueueItem, maxTrackedHeaders),
|
headers: make([]*headerQueueItem, 0, maxTrackedHeaders),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -138,7 +134,9 @@ func (q *headerQueue) put(hash common.Hash, data *types.Header) {
|
||||||
hash: hash,
|
hash: hash,
|
||||||
header: data,
|
header: data,
|
||||||
})
|
})
|
||||||
|
if len(q.headers) > maxTrackedHeaders {
|
||||||
q.headers = q.headers[1:]
|
q.headers = q.headers[1:]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// get retrieves a previously stored header item or nil if it does not exist.
|
// get retrieves a previously stored header item or nil if it does not exist.
|
||||||
|
|
@ -146,11 +144,7 @@ func (q *headerQueue) get(hash common.Hash) *types.Header {
|
||||||
q.lock.RLock()
|
q.lock.RLock()
|
||||||
defer q.lock.RUnlock()
|
defer q.lock.RUnlock()
|
||||||
|
|
||||||
for i := len(q.headers) - 1; i >= 0; i-- {
|
for _, item := range q.headers {
|
||||||
item := q.headers[i]
|
|
||||||
if item == nil {
|
|
||||||
return nil // no more items
|
|
||||||
}
|
|
||||||
if item.hash == hash {
|
if item.hash == hash {
|
||||||
return item.header
|
return item.header
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue