Skip to content

staticaddr: fix deposit recovery deadlock #954

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

hieblmi
Copy link
Collaborator

@hieblmi hieblmi commented Jun 13, 2025

Fixes a deadlock in the deposit recovery that arises if deposits expired while the client was offline.
Since recoverDeposits blocks on fsm.SendEvent(ctx, OnRecover, nil) the main run loop never gets a chance to read from m.finalizedDepositChan.

@hieblmi hieblmi marked this pull request as draft June 13, 2025 11:01
@hieblmi hieblmi force-pushed the fix-deadlock branch 3 times, most recently from eb832fd to 7bd246e Compare June 13, 2025 11:59
@hieblmi hieblmi self-assigned this Jun 13, 2025
@hieblmi hieblmi marked this pull request as ready for review June 13, 2025 12:01
@hieblmi hieblmi requested review from starius, bhandras and sputn1ck June 13, 2025 12:01
@hieblmi hieblmi force-pushed the fix-deadlock branch 3 times, most recently from de3c60e to 8285bc7 Compare June 13, 2025 13:42
if err != nil {
log.Errorf("Error sending OnStart event: %v", err)
}
go func(fsm *FSM) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder what the tradeoff is between having this in a go func or more asynchronous fsm actions? from what I can tell in effect it is the same?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But with most recent projects I tend to force tha actions to be asynchronous as this means we can go events only vs listening for channels everywhere where we need to interact with a blocking action

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants