Skip to content

Free holding cell in remaining quiescence-exit code paths - #4415

Merged
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit
Feb 18, 2026
Merged

Free holding cell in remaining quiescence-exit code paths#4415
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

Depends on #4412.

According to the spec, handling a splice_init and splice_ack may return tx_abort to reject the splice, but we always send a warning and disconnect instead, so those are not included here.

@wpaulinowpaulino added this to the 0.3 milestone Feb 12, 2026
@wpaulinowpaulino self-assigned this Feb 12, 2026
@ldk-reviews-bot

ldk-reviews-bot commented Feb 12, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.09635% with 87 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.90%. Comparing base (0a20fa5) to head (1b8617c).
⚠️ Report is 21 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channelmanager.rs75.98%56 Missing and 5 partials ⚠️
lightning/src/ln/channel.rs44.68%26 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4415 +/- ##
==========================================
- Coverage 85.91% 85.90% -0.02% 
==========================================
Files 156 156 Lines 103963 103990 +27 Branches 103963 103990 +27 ==========================================
+ Hits 89322 89333 +11 - Misses 12119 12135 +16 
Partials 2522 2522 
FlagCoverage Δ
tests85.90% <71.09%> (-0.02%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 12, 2026

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

Comment threadlightning/src/ln/channelmanager.rs Outdated
Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulino dismissed TheBlueMatt’s stale reviewFebruary 12, 2026 22:53

The merge-base changed after approval.

@ldk-reviews-bot

Copy link
Copy Markdown

👋 The first review has been submitted!

Do you think this PR is ready for a second reviewer? If so, click here to assign a second reviewer.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from d1ea893 to 5a610c7CompareFebruary 12, 2026 23:27
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Rebased and pushed fixups for #4412

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

Skimmed though it. Just one comment on the approach.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from 5a610c7 to 826113bCompareFebruary 13, 2026 00:57

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks like fail_splice_on_tx_complete_error is failing in CI.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch 2 times, most recently from 4b7cfee to f55c452CompareFebruary 13, 2026 17:46
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase due to an import conflict in channelmanager.rs

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulino
wpaulino requested a review from jkczyzFebruary 17, 2026 17:15
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from f55c452 to ac2631fCompareFebruary 17, 2026 23:22
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to a processing error on a counterparty's
`tx_add_input/output`, `tx_remove_input/output`, or `tx_complete`
message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to processing a counterparty's `tx_abort` message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the last remaining path where
we exit quiescence when we exchange `tx_signatures` with the
counterparty.
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from ac2631f to 0766da8CompareFebruary 17, 2026 23:35
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase again after #4290

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @TheBlueMatt@jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 18, 2026
debug_assert!(res.as_ref().err().map_or(true, |err| !err.closes_channel()));
let _ = self.handle_error(res, counterparty_node_id);
persist
self.event_persist_notifier.notify();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm... why do we need to manually notify? Shouldn't dropping the PersistenceNotifierGuard cause notification if handle_error (via handle_holding_cell_free_result) sets the persistence flag (and only if it does)? Instead of manually_notify, I was thinking something like notify_if_needed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

handle_holding_cell_free_result is not guaranteed to happen so we still need to notify the event handling when we have a response to the message

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, though it looks like we unconditionally notify now whereas before we may have not (e.g., upon exchanging tx_complete when no signatures are needed from the user). Are we fine with that?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

If tx_complete is exchanged then we're already persisting because we have a new signing session

Comment threadlightning/src/ln/channelmanager.rs Outdated
These errors will only ever affect our in-memory state, so there's no
need to persist the ChannelManager when we come across one. Note that
`tx_abort` is not included here because there is a possibility we force
close the channel, which we should persist.
@TheBlueMatt
TheBlueMatt merged commit 153e57e into lightningdevkit:mainFeb 18, 2026
16 of 17 checks passed
@wpaulino
wpaulino deleted the free-holding-cells-quiescence-exit branch February 18, 2026 22:57
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Free holding cell in remaining quiescence-exit code paths by wpaulino · Pull Request #4415 · lightningdevkit/rust-lightning · GitHub
Skip to content

Free holding cell in remaining quiescence-exit code paths - #4415

Merged
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit
Feb 18, 2026
Merged

Free holding cell in remaining quiescence-exit code paths#4415
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

Depends on #4412.

According to the spec, handling a splice_init and splice_ack may return tx_abort to reject the splice, but we always send a warning and disconnect instead, so those are not included here.

@wpaulinowpaulino added this to the 0.3 milestone Feb 12, 2026
@wpaulinowpaulino self-assigned this Feb 12, 2026
@ldk-reviews-bot

ldk-reviews-bot commented Feb 12, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.09635% with 87 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.90%. Comparing base (0a20fa5) to head (1b8617c).
⚠️ Report is 21 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channelmanager.rs75.98%56 Missing and 5 partials ⚠️
lightning/src/ln/channel.rs44.68%26 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4415 +/- ##
==========================================
- Coverage 85.91% 85.90% -0.02% 
==========================================
Files 156 156 Lines 103963 103990 +27 Branches 103963 103990 +27 ==========================================
+ Hits 89322 89333 +11 - Misses 12119 12135 +16 
Partials 2522 2522 
FlagCoverage Δ
tests85.90% <71.09%> (-0.02%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 12, 2026

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

Comment threadlightning/src/ln/channelmanager.rs Outdated
Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulino dismissed TheBlueMatt’s stale reviewFebruary 12, 2026 22:53

The merge-base changed after approval.

@ldk-reviews-bot

Copy link
Copy Markdown

👋 The first review has been submitted!

Do you think this PR is ready for a second reviewer? If so, click here to assign a second reviewer.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from d1ea893 to 5a610c7CompareFebruary 12, 2026 23:27
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Rebased and pushed fixups for #4412

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

Skimmed though it. Just one comment on the approach.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from 5a610c7 to 826113bCompareFebruary 13, 2026 00:57

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks like fail_splice_on_tx_complete_error is failing in CI.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch 2 times, most recently from 4b7cfee to f55c452CompareFebruary 13, 2026 17:46
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase due to an import conflict in channelmanager.rs

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulino
wpaulino requested a review from jkczyzFebruary 17, 2026 17:15
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from f55c452 to ac2631fCompareFebruary 17, 2026 23:22
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to a processing error on a counterparty's
`tx_add_input/output`, `tx_remove_input/output`, or `tx_complete`
message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to processing a counterparty's `tx_abort` message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the last remaining path where
we exit quiescence when we exchange `tx_signatures` with the
counterparty.
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from ac2631f to 0766da8CompareFebruary 17, 2026 23:35
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase again after #4290

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @TheBlueMatt@jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 18, 2026
debug_assert!(res.as_ref().err().map_or(true, |err| !err.closes_channel()));
let _ = self.handle_error(res, counterparty_node_id);
persist
self.event_persist_notifier.notify();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm... why do we need to manually notify? Shouldn't dropping the PersistenceNotifierGuard cause notification if handle_error (via handle_holding_cell_free_result) sets the persistence flag (and only if it does)? Instead of manually_notify, I was thinking something like notify_if_needed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

handle_holding_cell_free_result is not guaranteed to happen so we still need to notify the event handling when we have a response to the message

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, though it looks like we unconditionally notify now whereas before we may have not (e.g., upon exchanging tx_complete when no signatures are needed from the user). Are we fine with that?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

If tx_complete is exchanged then we're already persisting because we have a new signing session

Comment threadlightning/src/ln/channelmanager.rs Outdated
These errors will only ever affect our in-memory state, so there's no
need to persist the ChannelManager when we come across one. Note that
`tx_abort` is not included here because there is a possibility we force
close the channel, which we should persist.
@TheBlueMatt
TheBlueMatt merged commit 153e57e into lightningdevkit:mainFeb 18, 2026
16 of 17 checks passed
@wpaulino
wpaulino deleted the free-holding-cells-quiescence-exit branch February 18, 2026 22:57
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Free holding cell in remaining quiescence-exit code paths by wpaulino · Pull Request #4415 · lightningdevkit/rust-lightning · GitHub
Skip to content

Free holding cell in remaining quiescence-exit code paths - #4415

Merged
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit
Feb 18, 2026
Merged

Free holding cell in remaining quiescence-exit code paths#4415
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

Depends on #4412.

According to the spec, handling a splice_init and splice_ack may return tx_abort to reject the splice, but we always send a warning and disconnect instead, so those are not included here.

@wpaulinowpaulino added this to the 0.3 milestone Feb 12, 2026
@wpaulinowpaulino self-assigned this Feb 12, 2026
@ldk-reviews-bot

ldk-reviews-bot commented Feb 12, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.09635% with 87 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.90%. Comparing base (0a20fa5) to head (1b8617c).
⚠️ Report is 21 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channelmanager.rs75.98%56 Missing and 5 partials ⚠️
lightning/src/ln/channel.rs44.68%26 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4415 +/- ##
==========================================
- Coverage 85.91% 85.90% -0.02% 
==========================================
Files 156 156 Lines 103963 103990 +27 Branches 103963 103990 +27 ==========================================
+ Hits 89322 89333 +11 - Misses 12119 12135 +16 
Partials 2522 2522 
FlagCoverage Δ
tests85.90% <71.09%> (-0.02%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 12, 2026

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

Comment threadlightning/src/ln/channelmanager.rs Outdated
Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulino dismissed TheBlueMatt’s stale reviewFebruary 12, 2026 22:53

The merge-base changed after approval.

@ldk-reviews-bot

Copy link
Copy Markdown

👋 The first review has been submitted!

Do you think this PR is ready for a second reviewer? If so, click here to assign a second reviewer.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from d1ea893 to 5a610c7CompareFebruary 12, 2026 23:27
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Rebased and pushed fixups for #4412

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

Skimmed though it. Just one comment on the approach.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from 5a610c7 to 826113bCompareFebruary 13, 2026 00:57

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks like fail_splice_on_tx_complete_error is failing in CI.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch 2 times, most recently from 4b7cfee to f55c452CompareFebruary 13, 2026 17:46
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase due to an import conflict in channelmanager.rs

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulino
wpaulino requested a review from jkczyzFebruary 17, 2026 17:15
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from f55c452 to ac2631fCompareFebruary 17, 2026 23:22
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to a processing error on a counterparty's
`tx_add_input/output`, `tx_remove_input/output`, or `tx_complete`
message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to processing a counterparty's `tx_abort` message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the last remaining path where
we exit quiescence when we exchange `tx_signatures` with the
counterparty.
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from ac2631f to 0766da8CompareFebruary 17, 2026 23:35
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase again after #4290

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @TheBlueMatt@jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 18, 2026
debug_assert!(res.as_ref().err().map_or(true, |err| !err.closes_channel()));
let _ = self.handle_error(res, counterparty_node_id);
persist
self.event_persist_notifier.notify();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm... why do we need to manually notify? Shouldn't dropping the PersistenceNotifierGuard cause notification if handle_error (via handle_holding_cell_free_result) sets the persistence flag (and only if it does)? Instead of manually_notify, I was thinking something like notify_if_needed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

handle_holding_cell_free_result is not guaranteed to happen so we still need to notify the event handling when we have a response to the message

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, though it looks like we unconditionally notify now whereas before we may have not (e.g., upon exchanging tx_complete when no signatures are needed from the user). Are we fine with that?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

If tx_complete is exchanged then we're already persisting because we have a new signing session

Comment threadlightning/src/ln/channelmanager.rs Outdated
These errors will only ever affect our in-memory state, so there's no
need to persist the ChannelManager when we come across one. Note that
`tx_abort` is not included here because there is a possibility we force
close the channel, which we should persist.
@TheBlueMatt
TheBlueMatt merged commit 153e57e into lightningdevkit:mainFeb 18, 2026
16 of 17 checks passed
@wpaulino
wpaulino deleted the free-holding-cells-quiescence-exit branch February 18, 2026 22:57
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Free holding cell in remaining quiescence-exit code paths by wpaulino · Pull Request #4415 · lightningdevkit/rust-lightning · GitHub
Skip to content

Free holding cell in remaining quiescence-exit code paths - #4415

Merged
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit
Feb 18, 2026
Merged

Free holding cell in remaining quiescence-exit code paths#4415
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

Depends on #4412.

According to the spec, handling a splice_init and splice_ack may return tx_abort to reject the splice, but we always send a warning and disconnect instead, so those are not included here.

@wpaulinowpaulino added this to the 0.3 milestone Feb 12, 2026
@wpaulinowpaulino self-assigned this Feb 12, 2026
@ldk-reviews-bot

ldk-reviews-bot commented Feb 12, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.09635% with 87 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.90%. Comparing base (0a20fa5) to head (1b8617c).
⚠️ Report is 21 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channelmanager.rs75.98%56 Missing and 5 partials ⚠️
lightning/src/ln/channel.rs44.68%26 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4415 +/- ##
==========================================
- Coverage 85.91% 85.90% -0.02% 
==========================================
Files 156 156 Lines 103963 103990 +27 Branches 103963 103990 +27 ==========================================
+ Hits 89322 89333 +11 - Misses 12119 12135 +16 
Partials 2522 2522 
FlagCoverage Δ
tests85.90% <71.09%> (-0.02%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 12, 2026

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

Comment threadlightning/src/ln/channelmanager.rs Outdated
Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulino dismissed TheBlueMatt’s stale reviewFebruary 12, 2026 22:53

The merge-base changed after approval.

@ldk-reviews-bot

Copy link
Copy Markdown

👋 The first review has been submitted!

Do you think this PR is ready for a second reviewer? If so, click here to assign a second reviewer.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from d1ea893 to 5a610c7CompareFebruary 12, 2026 23:27
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Rebased and pushed fixups for #4412

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

Skimmed though it. Just one comment on the approach.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from 5a610c7 to 826113bCompareFebruary 13, 2026 00:57

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks like fail_splice_on_tx_complete_error is failing in CI.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch 2 times, most recently from 4b7cfee to f55c452CompareFebruary 13, 2026 17:46
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase due to an import conflict in channelmanager.rs

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulino
wpaulino requested a review from jkczyzFebruary 17, 2026 17:15
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from f55c452 to ac2631fCompareFebruary 17, 2026 23:22
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to a processing error on a counterparty's
`tx_add_input/output`, `tx_remove_input/output`, or `tx_complete`
message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to processing a counterparty's `tx_abort` message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the last remaining path where
we exit quiescence when we exchange `tx_signatures` with the
counterparty.
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from ac2631f to 0766da8CompareFebruary 17, 2026 23:35
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase again after #4290

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @TheBlueMatt@jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 18, 2026
debug_assert!(res.as_ref().err().map_or(true, |err| !err.closes_channel()));
let _ = self.handle_error(res, counterparty_node_id);
persist
self.event_persist_notifier.notify();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm... why do we need to manually notify? Shouldn't dropping the PersistenceNotifierGuard cause notification if handle_error (via handle_holding_cell_free_result) sets the persistence flag (and only if it does)? Instead of manually_notify, I was thinking something like notify_if_needed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

handle_holding_cell_free_result is not guaranteed to happen so we still need to notify the event handling when we have a response to the message

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, though it looks like we unconditionally notify now whereas before we may have not (e.g., upon exchanging tx_complete when no signatures are needed from the user). Are we fine with that?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

If tx_complete is exchanged then we're already persisting because we have a new signing session

Comment threadlightning/src/ln/channelmanager.rs Outdated
These errors will only ever affect our in-memory state, so there's no
need to persist the ChannelManager when we come across one. Note that
`tx_abort` is not included here because there is a possibility we force
close the channel, which we should persist.
@TheBlueMatt
TheBlueMatt merged commit 153e57e into lightningdevkit:mainFeb 18, 2026
16 of 17 checks passed
@wpaulino
wpaulino deleted the free-holding-cells-quiescence-exit branch February 18, 2026 22:57
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Free holding cell in remaining quiescence-exit code paths by wpaulino · Pull Request #4415 · lightningdevkit/rust-lightning · GitHub
Skip to content

Free holding cell in remaining quiescence-exit code paths - #4415

Merged
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit
Feb 18, 2026
Merged

Free holding cell in remaining quiescence-exit code paths#4415
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

Depends on #4412.

According to the spec, handling a splice_init and splice_ack may return tx_abort to reject the splice, but we always send a warning and disconnect instead, so those are not included here.

@wpaulinowpaulino added this to the 0.3 milestone Feb 12, 2026
@wpaulinowpaulino self-assigned this Feb 12, 2026
@ldk-reviews-bot

ldk-reviews-bot commented Feb 12, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.09635% with 87 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.90%. Comparing base (0a20fa5) to head (1b8617c).
⚠️ Report is 21 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channelmanager.rs75.98%56 Missing and 5 partials ⚠️
lightning/src/ln/channel.rs44.68%26 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4415 +/- ##
==========================================
- Coverage 85.91% 85.90% -0.02% 
==========================================
Files 156 156 Lines 103963 103990 +27 Branches 103963 103990 +27 ==========================================
+ Hits 89322 89333 +11 - Misses 12119 12135 +16 
Partials 2522 2522 
FlagCoverage Δ
tests85.90% <71.09%> (-0.02%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 12, 2026

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

Comment threadlightning/src/ln/channelmanager.rs Outdated
Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulino dismissed TheBlueMatt’s stale reviewFebruary 12, 2026 22:53

The merge-base changed after approval.

@ldk-reviews-bot

Copy link
Copy Markdown

👋 The first review has been submitted!

Do you think this PR is ready for a second reviewer? If so, click here to assign a second reviewer.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from d1ea893 to 5a610c7CompareFebruary 12, 2026 23:27
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Rebased and pushed fixups for #4412

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

Skimmed though it. Just one comment on the approach.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from 5a610c7 to 826113bCompareFebruary 13, 2026 00:57

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks like fail_splice_on_tx_complete_error is failing in CI.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch 2 times, most recently from 4b7cfee to f55c452CompareFebruary 13, 2026 17:46
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase due to an import conflict in channelmanager.rs

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulino
wpaulino requested a review from jkczyzFebruary 17, 2026 17:15
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from f55c452 to ac2631fCompareFebruary 17, 2026 23:22
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to a processing error on a counterparty's
`tx_add_input/output`, `tx_remove_input/output`, or `tx_complete`
message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to processing a counterparty's `tx_abort` message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the last remaining path where
we exit quiescence when we exchange `tx_signatures` with the
counterparty.
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from ac2631f to 0766da8CompareFebruary 17, 2026 23:35
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase again after #4290

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @TheBlueMatt@jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 18, 2026
debug_assert!(res.as_ref().err().map_or(true, |err| !err.closes_channel()));
let _ = self.handle_error(res, counterparty_node_id);
persist
self.event_persist_notifier.notify();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm... why do we need to manually notify? Shouldn't dropping the PersistenceNotifierGuard cause notification if handle_error (via handle_holding_cell_free_result) sets the persistence flag (and only if it does)? Instead of manually_notify, I was thinking something like notify_if_needed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

handle_holding_cell_free_result is not guaranteed to happen so we still need to notify the event handling when we have a response to the message

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, though it looks like we unconditionally notify now whereas before we may have not (e.g., upon exchanging tx_complete when no signatures are needed from the user). Are we fine with that?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

If tx_complete is exchanged then we're already persisting because we have a new signing session

Comment threadlightning/src/ln/channelmanager.rs Outdated
These errors will only ever affect our in-memory state, so there's no
need to persist the ChannelManager when we come across one. Note that
`tx_abort` is not included here because there is a possibility we force
close the channel, which we should persist.
@TheBlueMatt
TheBlueMatt merged commit 153e57e into lightningdevkit:mainFeb 18, 2026
16 of 17 checks passed
@wpaulino
wpaulino deleted the free-holding-cells-quiescence-exit branch February 18, 2026 22:57
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Free holding cell in remaining quiescence-exit code paths by wpaulino · Pull Request #4415 · lightningdevkit/rust-lightning · GitHub
Skip to content

Free holding cell in remaining quiescence-exit code paths - #4415

Merged
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit
Feb 18, 2026
Merged

Free holding cell in remaining quiescence-exit code paths#4415
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

Depends on #4412.

According to the spec, handling a splice_init and splice_ack may return tx_abort to reject the splice, but we always send a warning and disconnect instead, so those are not included here.

@wpaulinowpaulino added this to the 0.3 milestone Feb 12, 2026
@wpaulinowpaulino self-assigned this Feb 12, 2026
@ldk-reviews-bot

ldk-reviews-bot commented Feb 12, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.09635% with 87 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.90%. Comparing base (0a20fa5) to head (1b8617c).
⚠️ Report is 21 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channelmanager.rs75.98%56 Missing and 5 partials ⚠️
lightning/src/ln/channel.rs44.68%26 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4415 +/- ##
==========================================
- Coverage 85.91% 85.90% -0.02% 
==========================================
Files 156 156 Lines 103963 103990 +27 Branches 103963 103990 +27 ==========================================
+ Hits 89322 89333 +11 - Misses 12119 12135 +16 
Partials 2522 2522 
FlagCoverage Δ
tests85.90% <71.09%> (-0.02%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 12, 2026

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

Comment threadlightning/src/ln/channelmanager.rs Outdated
Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulino dismissed TheBlueMatt’s stale reviewFebruary 12, 2026 22:53

The merge-base changed after approval.

@ldk-reviews-bot

Copy link
Copy Markdown

👋 The first review has been submitted!

Do you think this PR is ready for a second reviewer? If so, click here to assign a second reviewer.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from d1ea893 to 5a610c7CompareFebruary 12, 2026 23:27
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Rebased and pushed fixups for #4412

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

Skimmed though it. Just one comment on the approach.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from 5a610c7 to 826113bCompareFebruary 13, 2026 00:57

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks like fail_splice_on_tx_complete_error is failing in CI.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch 2 times, most recently from 4b7cfee to f55c452CompareFebruary 13, 2026 17:46
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase due to an import conflict in channelmanager.rs

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulino
wpaulino requested a review from jkczyzFebruary 17, 2026 17:15
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from f55c452 to ac2631fCompareFebruary 17, 2026 23:22
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to a processing error on a counterparty's
`tx_add_input/output`, `tx_remove_input/output`, or `tx_complete`
message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to processing a counterparty's `tx_abort` message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the last remaining path where
we exit quiescence when we exchange `tx_signatures` with the
counterparty.
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from ac2631f to 0766da8CompareFebruary 17, 2026 23:35
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase again after #4290

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @TheBlueMatt@jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 18, 2026
debug_assert!(res.as_ref().err().map_or(true, |err| !err.closes_channel()));
let _ = self.handle_error(res, counterparty_node_id);
persist
self.event_persist_notifier.notify();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm... why do we need to manually notify? Shouldn't dropping the PersistenceNotifierGuard cause notification if handle_error (via handle_holding_cell_free_result) sets the persistence flag (and only if it does)? Instead of manually_notify, I was thinking something like notify_if_needed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

handle_holding_cell_free_result is not guaranteed to happen so we still need to notify the event handling when we have a response to the message

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, though it looks like we unconditionally notify now whereas before we may have not (e.g., upon exchanging tx_complete when no signatures are needed from the user). Are we fine with that?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

If tx_complete is exchanged then we're already persisting because we have a new signing session

Comment threadlightning/src/ln/channelmanager.rs Outdated
These errors will only ever affect our in-memory state, so there's no
need to persist the ChannelManager when we come across one. Note that
`tx_abort` is not included here because there is a possibility we force
close the channel, which we should persist.
@TheBlueMatt
TheBlueMatt merged commit 153e57e into lightningdevkit:mainFeb 18, 2026
16 of 17 checks passed
@wpaulino
wpaulino deleted the free-holding-cells-quiescence-exit branch February 18, 2026 22:57
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Free holding cell in remaining quiescence-exit code paths by wpaulino · Pull Request #4415 · lightningdevkit/rust-lightning · GitHub
Skip to content

Free holding cell in remaining quiescence-exit code paths - #4415

Merged
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit
Feb 18, 2026
Merged

Free holding cell in remaining quiescence-exit code paths#4415
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

Depends on #4412.

According to the spec, handling a splice_init and splice_ack may return tx_abort to reject the splice, but we always send a warning and disconnect instead, so those are not included here.

@wpaulinowpaulino added this to the 0.3 milestone Feb 12, 2026
@wpaulinowpaulino self-assigned this Feb 12, 2026
@ldk-reviews-bot

ldk-reviews-bot commented Feb 12, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.09635% with 87 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.90%. Comparing base (0a20fa5) to head (1b8617c).
⚠️ Report is 21 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channelmanager.rs75.98%56 Missing and 5 partials ⚠️
lightning/src/ln/channel.rs44.68%26 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4415 +/- ##
==========================================
- Coverage 85.91% 85.90% -0.02% 
==========================================
Files 156 156 Lines 103963 103990 +27 Branches 103963 103990 +27 ==========================================
+ Hits 89322 89333 +11 - Misses 12119 12135 +16 
Partials 2522 2522 
FlagCoverage Δ
tests85.90% <71.09%> (-0.02%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 12, 2026

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

Comment threadlightning/src/ln/channelmanager.rs Outdated
Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulino dismissed TheBlueMatt’s stale reviewFebruary 12, 2026 22:53

The merge-base changed after approval.

@ldk-reviews-bot

Copy link
Copy Markdown

👋 The first review has been submitted!

Do you think this PR is ready for a second reviewer? If so, click here to assign a second reviewer.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from d1ea893 to 5a610c7CompareFebruary 12, 2026 23:27
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Rebased and pushed fixups for #4412

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

Skimmed though it. Just one comment on the approach.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from 5a610c7 to 826113bCompareFebruary 13, 2026 00:57

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks like fail_splice_on_tx_complete_error is failing in CI.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch 2 times, most recently from 4b7cfee to f55c452CompareFebruary 13, 2026 17:46
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase due to an import conflict in channelmanager.rs

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulino
wpaulino requested a review from jkczyzFebruary 17, 2026 17:15
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from f55c452 to ac2631fCompareFebruary 17, 2026 23:22
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to a processing error on a counterparty's
`tx_add_input/output`, `tx_remove_input/output`, or `tx_complete`
message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to processing a counterparty's `tx_abort` message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the last remaining path where
we exit quiescence when we exchange `tx_signatures` with the
counterparty.
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from ac2631f to 0766da8CompareFebruary 17, 2026 23:35
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase again after #4290

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @TheBlueMatt@jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 18, 2026
debug_assert!(res.as_ref().err().map_or(true, |err| !err.closes_channel()));
let _ = self.handle_error(res, counterparty_node_id);
persist
self.event_persist_notifier.notify();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm... why do we need to manually notify? Shouldn't dropping the PersistenceNotifierGuard cause notification if handle_error (via handle_holding_cell_free_result) sets the persistence flag (and only if it does)? Instead of manually_notify, I was thinking something like notify_if_needed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

handle_holding_cell_free_result is not guaranteed to happen so we still need to notify the event handling when we have a response to the message

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, though it looks like we unconditionally notify now whereas before we may have not (e.g., upon exchanging tx_complete when no signatures are needed from the user). Are we fine with that?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

If tx_complete is exchanged then we're already persisting because we have a new signing session

Comment threadlightning/src/ln/channelmanager.rs Outdated
These errors will only ever affect our in-memory state, so there's no
need to persist the ChannelManager when we come across one. Note that
`tx_abort` is not included here because there is a possibility we force
close the channel, which we should persist.
@TheBlueMatt
TheBlueMatt merged commit 153e57e into lightningdevkit:mainFeb 18, 2026
16 of 17 checks passed
@wpaulino
wpaulino deleted the free-holding-cells-quiescence-exit branch February 18, 2026 22:57
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Free holding cell in remaining quiescence-exit code paths by wpaulino · Pull Request #4415 · lightningdevkit/rust-lightning · GitHub
Skip to content

Free holding cell in remaining quiescence-exit code paths - #4415

Merged
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit
Feb 18, 2026
Merged

Free holding cell in remaining quiescence-exit code paths#4415
TheBlueMatt merged 6 commits into
lightningdevkit:mainfrom
wpaulino:free-holding-cells-quiescence-exit

Conversation

@wpaulino

Copy link
Copy Markdown
Contributor

Depends on #4412.

According to the spec, handling a splice_init and splice_ack may return tx_abort to reject the splice, but we always send a warning and disconnect instead, so those are not included here.

@wpaulinowpaulino added this to the 0.3 milestone Feb 12, 2026
@wpaulinowpaulino self-assigned this Feb 12, 2026
@ldk-reviews-bot

ldk-reviews-bot commented Feb 12, 2026

Copy link
Copy Markdown

👋 Thanks for assigning @TheBlueMatt as a reviewer!
I'll wait for their review and will help manage the review process.
Once they submit their review, I'll check if a second reviewer would be helpful.

@codecov

codecovBot commented Feb 12, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 71.09635% with 87 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.90%. Comparing base (0a20fa5) to head (1b8617c).
⚠️ Report is 21 commits behind head on main.

Files with missing linesPatch %Lines
lightning/src/ln/channelmanager.rs75.98%56 Missing and 5 partials ⚠️
lightning/src/ln/channel.rs44.68%26 Missing ⚠️
Additional details and impacted files
@@ Coverage Diff @@## main #4415 +/- ##
==========================================
- Coverage 85.91% 85.90% -0.02% 
==========================================
Files 156 156 Lines 103963 103990 +27 Branches 103963 103990 +27 ==========================================
+ Hits 89322 89333 +11 - Misses 12119 12135 +16 
Partials 2522 2522 
FlagCoverage Δ
tests85.90% <71.09%> (-0.02%)⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 12, 2026

@TheBlueMattTheBlueMatt left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

lgtm

Comment threadlightning/src/ln/channelmanager.rs Outdated
Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulino dismissed TheBlueMatt’s stale reviewFebruary 12, 2026 22:53

The merge-base changed after approval.

@ldk-reviews-bot

Copy link
Copy Markdown

👋 The first review has been submitted!

Do you think this PR is ready for a second reviewer? If so, click here to assign a second reviewer.

@TheBlueMatt

Copy link
Copy Markdown
Collaborator

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from d1ea893 to 5a610c7CompareFebruary 12, 2026 23:27
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Rebased and pushed fixups for #4412

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

note that github wont let this be merged until its rebased. Also not sure if @jkczyz wants to take a look or not.

Skimmed though it. Just one comment on the approach.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from 5a610c7 to 826113bCompareFebruary 13, 2026 00:57

@jkczyzjkczyz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks like fail_splice_on_tx_complete_error is failing in CI.

Comment threadlightning/src/ln/channelmanager.rs Outdated
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch 2 times, most recently from 4b7cfee to f55c452CompareFebruary 13, 2026 17:46
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase due to an import conflict in channelmanager.rs

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 1st Reminder

Hey @TheBlueMatt! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

@wpaulino
wpaulino requested a review from jkczyzFebruary 17, 2026 17:15
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from f55c452 to ac2631fCompareFebruary 17, 2026 23:22
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to a processing error on a counterparty's
`tx_add_input/output`, `tx_remove_input/output`, or `tx_complete`
message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the path where we exit
quiescence due to processing a counterparty's `tx_abort` message.
After cad88af, a few code paths that also lead to a quiescence exit were
not accounted for. This commit addresses the last remaining path where
we exit quiescence when we exchange `tx_signatures` with the
counterparty.
@wpaulino
wpaulinoforce-pushed the free-holding-cells-quiescence-exit branch from ac2631f to 0766da8CompareFebruary 17, 2026 23:35
@wpaulino

Copy link
Copy Markdown
ContributorAuthor

Had to rebase again after #4290

@ldk-reviews-bot

Copy link
Copy Markdown

🔔 2nd Reminder

Hey @TheBlueMatt@jkczyz! This PR has been waiting for your review.
Please take a look when you have a chance. If you're unable to review, please let us know so we can find another reviewer.

TheBlueMatt
TheBlueMatt previously approved these changes Feb 18, 2026
debug_assert!(res.as_ref().err().map_or(true, |err| !err.closes_channel()));
let _ = self.handle_error(res, counterparty_node_id);
persist
self.event_persist_notifier.notify();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Hmm... why do we need to manually notify? Shouldn't dropping the PersistenceNotifierGuard cause notification if handle_error (via handle_holding_cell_free_result) sets the persistence flag (and only if it does)? Instead of manually_notify, I was thinking something like notify_if_needed.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

handle_holding_cell_free_result is not guaranteed to happen so we still need to notify the event handling when we have a response to the message

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ah, though it looks like we unconditionally notify now whereas before we may have not (e.g., upon exchanging tx_complete when no signatures are needed from the user). Are we fine with that?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

If tx_complete is exchanged then we're already persisting because we have a new signing session

Comment threadlightning/src/ln/channelmanager.rs Outdated
These errors will only ever affect our in-memory state, so there's no
need to persist the ChannelManager when we come across one. Note that
`tx_abort` is not included here because there is a possibility we force
close the channel, which we should persist.
@TheBlueMatt
TheBlueMatt merged commit 153e57e into lightningdevkit:mainFeb 18, 2026
16 of 17 checks passed
@wpaulino
wpaulino deleted the free-holding-cells-quiescence-exit branch February 18, 2026 22:57
@jkczyzjkczyz mentioned this pull request Mar 19, 2026
50 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

4 participants

@wpaulino@ldk-reviews-bot@TheBlueMatt@jkczyz