Skip to content

Commit

Permalink
avoid blocked by channel (#229)
Browse files Browse the repository at this point in the history
Co-authored-by: David <[email protected]>
  • Loading branch information
mask-pp and davidtaikocha authored May 9, 2024
1 parent 02c6ee9 commit ce49aa4
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions miner/payload_building.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,8 @@ type Payload struct {
stop chan struct{}
lock sync.Mutex
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.
Expand All @@ -85,7 +86,8 @@ func newPayload(empty *types.Block, id engine.PayloadID) *Payload {
id: id,
empty: empty,
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)
payload.cond = sync.NewCond(&payload.lock)
Expand Down Expand Up @@ -135,7 +137,11 @@ func (payload *Payload) Resolve() *engine.ExecutionPayloadEnvelope {
select {
case <-payload.stop:
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)
}
if payload.full != nil {
Expand Down Expand Up @@ -174,7 +180,11 @@ func (payload *Payload) ResolveFull() *engine.ExecutionPayloadEnvelope {
select {
case <-payload.stop:
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)
}
return engine.BlockToExecutableData(payload.full, payload.fullFees, payload.sidecars)
Expand Down

0 comments on commit ce49aa4

Please sign in to comment.