Merge pull request #134 from wpaulino/account-reservation-lock

account: ensure only one outstanding account reservation exists
This commit is contained in:
Olaoluwa Osuntokun 2020-11-06 16:37:51 -08:00 committed by GitHub
commit d0d8dd656b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -140,6 +140,12 @@ type Manager struct {
// Finalize message for.
pendingBatchMtx sync.Mutex
// reservationMtx prevents a trader from attempting to have more than
// once active reservation at a time when creating new accounts. This is
// done to ensure an account picks up the correct reservation once its
// time to fund it.
reservationMtx sync.Mutex
wg sync.WaitGroup
quit chan struct{}
}
@ -260,6 +266,12 @@ func (m *Manager) QuoteAccount(ctx context.Context, value btcutil.Amount,
func (m *Manager) InitAccount(ctx context.Context, value btcutil.Amount,
expiry, bestHeight, confTarget uint32) (*Account, error) {
// We'll make sure to acquire the reservation lock throughout the
// account funding process to ensure we use the same reservation, as
// only one can be active per trader LSAT.
m.reservationMtx.Lock()
defer m.reservationMtx.Unlock()
// First, make sure we have a valid amount to create the account. We
// need to ask the auctioneer for the maximum as it dynamically defines
// that value.