mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-14 07:53:47 +00:00
avoid blocked by channel (#229)
Co-authored-by: David <david@taiko.xyz>
This commit is contained in:
parent
02c6ee9672
commit
ce49aa43bb
1 changed files with 14 additions and 4 deletions
|
|
@ -76,7 +76,8 @@ type Payload struct {
|
||||||
stop chan struct{}
|
stop chan struct{}
|
||||||
lock sync.Mutex
|
lock sync.Mutex
|
||||||
cond *sync.Cond
|
cond *sync.Cond
|
||||||
done chan struct{} // CHANGE(taiko): done channel to communicate we shouldnt write to `stop` channel.
|
// CHANGE(taiko): done channel to communicate we shouldnt write to `stop` channel.
|
||||||
|
done chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// newPayload initializes the payload object.
|
// newPayload initializes the payload object.
|
||||||
|
|
@ -85,7 +86,8 @@ func newPayload(empty *types.Block, id engine.PayloadID) *Payload {
|
||||||
id: id,
|
id: id,
|
||||||
empty: empty,
|
empty: empty,
|
||||||
stop: make(chan struct{}),
|
stop: make(chan struct{}),
|
||||||
done: make(chan struct{}, 1), // CHANGE(taiko): buffered channel to communicate done to taiko payload builder
|
// CHANGE(taiko): buffered channel to communicate done to taiko payload builder
|
||||||
|
done: make(chan struct{}, 1),
|
||||||
}
|
}
|
||||||
log.Info("Starting work on payload", "id", payload.id)
|
log.Info("Starting work on payload", "id", payload.id)
|
||||||
payload.cond = sync.NewCond(&payload.lock)
|
payload.cond = sync.NewCond(&payload.lock)
|
||||||
|
|
@ -135,7 +137,11 @@ func (payload *Payload) Resolve() *engine.ExecutionPayloadEnvelope {
|
||||||
select {
|
select {
|
||||||
case <-payload.stop:
|
case <-payload.stop:
|
||||||
default:
|
default:
|
||||||
payload.done <- struct{}{} // CHANGE(taiko): signal to taiko payload builder to not write to `payload.stop` channel
|
// CHANGE(taiko): signal to taiko payload builder to not write to `payload.stop` channel
|
||||||
|
select {
|
||||||
|
case payload.done <- struct{}{}:
|
||||||
|
default:
|
||||||
|
}
|
||||||
close(payload.stop)
|
close(payload.stop)
|
||||||
}
|
}
|
||||||
if payload.full != nil {
|
if payload.full != nil {
|
||||||
|
|
@ -174,7 +180,11 @@ func (payload *Payload) ResolveFull() *engine.ExecutionPayloadEnvelope {
|
||||||
select {
|
select {
|
||||||
case <-payload.stop:
|
case <-payload.stop:
|
||||||
default:
|
default:
|
||||||
payload.done <- struct{}{} // CHANGE(taiko): signal to taiko payload builder to not write to `payload.stop` channel
|
// CHANGE(taiko): signal to taiko payload builder to not write to `payload.stop` channel
|
||||||
|
select {
|
||||||
|
case payload.done <- struct{}{}:
|
||||||
|
default:
|
||||||
|
}
|
||||||
close(payload.stop)
|
close(payload.stop)
|
||||||
}
|
}
|
||||||
return engine.BlockToExecutableData(payload.full, payload.fullFees, payload.sidecars)
|
return engine.BlockToExecutableData(payload.full, payload.fullFees, payload.sidecars)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue