invoices: exit early when the subscriber chan is nil

When calling `NotifyExitHopHtlc` it is allowed to pass a chan to
subscribe to the HTLC's resolution when it's settled. However, this
method will also return immediately if there's already a resolution,
which means it behaves like a notifier and a getter. If the caller
decides to only use the getter to do a non-blocking lookup, it can pass
a nil subscriber chan to bypass the notification.
This commit is contained in:
yyforyongyu 2024-11-17 10:48:16 +08:00
parent 71aec7bd94
commit 025d787fd2
No known key found for this signature in database
GPG Key ID: 9BCD95C4FF296868
2 changed files with 10 additions and 1 deletions

View File

@ -29,6 +29,11 @@ func (r *mockRegistry) NotifyExitHopHtlc(payHash lntypes.Hash,
wireCustomRecords lnwire.CustomRecords,
payload invoices.Payload) (invoices.HtlcResolution, error) {
// Exit early if the notification channel is nil.
if hodlChan == nil {
return r.notifyResolution, r.notifyErr
}
r.notifyChan <- notifyExitHopData{
hodlChan: hodlChan,
payHash: payHash,

View File

@ -1275,7 +1275,11 @@ func (i *InvoiceRegistry) notifyExitHopHtlcLocked(
invoiceToExpire = makeInvoiceExpiry(ctx.hash, invoice)
}
i.hodlSubscribe(hodlChan, ctx.circuitKey)
// Subscribe to the resolution if the caller specified a
// notification channel.
if hodlChan != nil {
i.hodlSubscribe(hodlChan, ctx.circuitKey)
}
default:
panic("unknown action")