Skip to content

fix: release peer lock before persistence - #101

Merged
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock
Jul 31, 2026
Merged

fix: release peer lock before persistence#101
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock

Conversation

@ovitrif

@ovitrifovitrif commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes#99

Related to synonymdev/bitkit-android#986.
Addresses the Node.listPeers ANR tracked in synonymdev/bitkit-android#1036.

Summary

  • Backport Fully switch to async KVStore persistence lightningdevkit/ldk-node#919's async KVStore peer-persistence design.
  • Serialize peer mutations with a Tokio mutex, encode each snapshot under the peer RwLock, and release that lock before awaiting persistence.
  • Preserve fork address updates, RGS recovery exclusion ordering, and retryable add, address-update, and removal failures.
  • Make explicit disconnect succeed only after durable peer removal; persistence failures keep the peer connected and remain retryable.
  • Bridge synchronous node APIs at the runtime boundary while async event and recovery paths await persistence directly.
  • Prepare Rust and mobile binding artifacts as 0.7.0-rc.62.

Validation

  • Local verification: cargo fmt --check, git diff --check, and cargo test --features uniffi --lib (94 passed).
  • Binding verification: ./bindgen.sh completed for JVM Kotlin, Python, Swift, and Android; JVM Gradle, Swift framework assembly, Android three-ABI build-ID, 16 KiB alignment, debug-symbol, stripped-library, and AAR checks passed.
  • Swift archive verification: SHA-256 40907bc5d61d85492a9f22722c1009791255ed0da40577765f49d486ebb41e9c matches Package.swift and the uploaded release asset.

QA Notes

  • Originally stacked on fix: prevent electrum runtime self-drop #100 at 080b5f2.
  • Synchronous peer reads remain available while async persistence is pending.
  • Failed persistence restores the previous in-memory state so the mutation can be retried.
  • Explicit disconnect returns a peer-removal persistence failure and keeps the live peer connected.

Release

@ovitrifovitrif self-assigned this Jul 28, 2026
@ovitrifovitrif linked an issue Jul 28, 2026 that may be closed by this pull request
Backport lightningdevkit/ldk-node@d49b681 while preserving fork address updates and retryable persistence failures.
@ovitrif
ovitrifforce-pushed the ovi/fix-99-release-peer-lock branch from 85ac71a to b3bd780CompareJuly 29, 2026 13:02
@ovitrif
ovitrif marked this pull request as ready for review July 29, 2026 13:11
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif merged commit 60c4c4d into fix/94-sigabrt-runtime-dropJul 31, 2026
2 checks passed
@ovitrif
ovitrif deleted the ovi/fix-99-release-peer-lock branch July 31, 2026 17:41
ovitrif added a commit that referenced this pull request Aug 1, 2026
Preserve PR #100 and PR #101 merge history while reconciling the stacked branch into the default branch.
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Follow-up after merge:

  • This PR remained based on fix/94-sigabrt-runtime-drop after fix: prevent electrum runtime self-drop #100 merged into main. Its merge therefore advanced that already-merged branch rather than the default branch.
  • I preserved the previous main tip 0533c40 at backup/main-before-pr-101-recovery-20260801.
  • I preserved the stacked branch tip 60c4c4d at backup/pr-101-stack-before-main-recovery-20260801.
  • I reconciled both histories into main with f929ec2 so the default branch now contains the exact tree shipped in v0.7.0-rc.62.
  • Local verification: cargo test --features uniffi --lib passed all 94 tests, and the resulting tree matches the reviewed rc.62 tree exactly.
  • The published v0.7.0-rc.62 release and annotated tag remain unchanged at 6fddf6f.
  • I deleted the obsolete fix/94-sigabrt-runtime-drop branch after verifying both recovery refs and the new main.
  • I manually enabled Automatically delete head branches in repository settings to prevent merged head branches from lingering.
  • fix: release peer lock before persistence #99 is closed as completed now that the fix is present on main.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: release peer lock before persistence

2 participants

@ovitrif@coreyphillips
, '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" + '
fix: release peer lock before persistence by ovitrif · Pull Request #101 · synonymdev/ldk-node · GitHub
Skip to content

fix: release peer lock before persistence - #101

Merged
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock
Jul 31, 2026
Merged

fix: release peer lock before persistence#101
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock

Conversation

@ovitrif

@ovitrifovitrif commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes#99

Related to synonymdev/bitkit-android#986.
Addresses the Node.listPeers ANR tracked in synonymdev/bitkit-android#1036.

Summary

  • Backport Fully switch to async KVStore persistence lightningdevkit/ldk-node#919's async KVStore peer-persistence design.
  • Serialize peer mutations with a Tokio mutex, encode each snapshot under the peer RwLock, and release that lock before awaiting persistence.
  • Preserve fork address updates, RGS recovery exclusion ordering, and retryable add, address-update, and removal failures.
  • Make explicit disconnect succeed only after durable peer removal; persistence failures keep the peer connected and remain retryable.
  • Bridge synchronous node APIs at the runtime boundary while async event and recovery paths await persistence directly.
  • Prepare Rust and mobile binding artifacts as 0.7.0-rc.62.

Validation

  • Local verification: cargo fmt --check, git diff --check, and cargo test --features uniffi --lib (94 passed).
  • Binding verification: ./bindgen.sh completed for JVM Kotlin, Python, Swift, and Android; JVM Gradle, Swift framework assembly, Android three-ABI build-ID, 16 KiB alignment, debug-symbol, stripped-library, and AAR checks passed.
  • Swift archive verification: SHA-256 40907bc5d61d85492a9f22722c1009791255ed0da40577765f49d486ebb41e9c matches Package.swift and the uploaded release asset.

QA Notes

  • Originally stacked on fix: prevent electrum runtime self-drop #100 at 080b5f2.
  • Synchronous peer reads remain available while async persistence is pending.
  • Failed persistence restores the previous in-memory state so the mutation can be retried.
  • Explicit disconnect returns a peer-removal persistence failure and keeps the live peer connected.

Release

@ovitrifovitrif self-assigned this Jul 28, 2026
@ovitrifovitrif linked an issue Jul 28, 2026 that may be closed by this pull request
Backport lightningdevkit/ldk-node@d49b681 while preserving fork address updates and retryable persistence failures.
@ovitrif
ovitrifforce-pushed the ovi/fix-99-release-peer-lock branch from 85ac71a to b3bd780CompareJuly 29, 2026 13:02
@ovitrif
ovitrif marked this pull request as ready for review July 29, 2026 13:11
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif merged commit 60c4c4d into fix/94-sigabrt-runtime-dropJul 31, 2026
2 checks passed
@ovitrif
ovitrif deleted the ovi/fix-99-release-peer-lock branch July 31, 2026 17:41
ovitrif added a commit that referenced this pull request Aug 1, 2026
Preserve PR #100 and PR #101 merge history while reconciling the stacked branch into the default branch.
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Follow-up after merge:

  • This PR remained based on fix/94-sigabrt-runtime-drop after fix: prevent electrum runtime self-drop #100 merged into main. Its merge therefore advanced that already-merged branch rather than the default branch.
  • I preserved the previous main tip 0533c40 at backup/main-before-pr-101-recovery-20260801.
  • I preserved the stacked branch tip 60c4c4d at backup/pr-101-stack-before-main-recovery-20260801.
  • I reconciled both histories into main with f929ec2 so the default branch now contains the exact tree shipped in v0.7.0-rc.62.
  • Local verification: cargo test --features uniffi --lib passed all 94 tests, and the resulting tree matches the reviewed rc.62 tree exactly.
  • The published v0.7.0-rc.62 release and annotated tag remain unchanged at 6fddf6f.
  • I deleted the obsolete fix/94-sigabrt-runtime-drop branch after verifying both recovery refs and the new main.
  • I manually enabled Automatically delete head branches in repository settings to prevent merged head branches from lingering.
  • fix: release peer lock before persistence #99 is closed as completed now that the fix is present on main.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: release peer lock before persistence

2 participants

@ovitrif@coreyphillips
, '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('^' + ".*" + ' fix: release peer lock before persistence by ovitrif · Pull Request #101 · synonymdev/ldk-node · GitHub
Skip to content

fix: release peer lock before persistence - #101

Merged
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock
Jul 31, 2026
Merged

fix: release peer lock before persistence#101
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock

Conversation

@ovitrif

@ovitrifovitrif commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes#99

Related to synonymdev/bitkit-android#986.
Addresses the Node.listPeers ANR tracked in synonymdev/bitkit-android#1036.

Summary

  • Backport Fully switch to async KVStore persistence lightningdevkit/ldk-node#919's async KVStore peer-persistence design.
  • Serialize peer mutations with a Tokio mutex, encode each snapshot under the peer RwLock, and release that lock before awaiting persistence.
  • Preserve fork address updates, RGS recovery exclusion ordering, and retryable add, address-update, and removal failures.
  • Make explicit disconnect succeed only after durable peer removal; persistence failures keep the peer connected and remain retryable.
  • Bridge synchronous node APIs at the runtime boundary while async event and recovery paths await persistence directly.
  • Prepare Rust and mobile binding artifacts as 0.7.0-rc.62.

Validation

  • Local verification: cargo fmt --check, git diff --check, and cargo test --features uniffi --lib (94 passed).
  • Binding verification: ./bindgen.sh completed for JVM Kotlin, Python, Swift, and Android; JVM Gradle, Swift framework assembly, Android three-ABI build-ID, 16 KiB alignment, debug-symbol, stripped-library, and AAR checks passed.
  • Swift archive verification: SHA-256 40907bc5d61d85492a9f22722c1009791255ed0da40577765f49d486ebb41e9c matches Package.swift and the uploaded release asset.

QA Notes

  • Originally stacked on fix: prevent electrum runtime self-drop #100 at 080b5f2.
  • Synchronous peer reads remain available while async persistence is pending.
  • Failed persistence restores the previous in-memory state so the mutation can be retried.
  • Explicit disconnect returns a peer-removal persistence failure and keeps the live peer connected.

Release

@ovitrifovitrif self-assigned this Jul 28, 2026
@ovitrifovitrif linked an issue Jul 28, 2026 that may be closed by this pull request
Backport lightningdevkit/ldk-node@d49b681 while preserving fork address updates and retryable persistence failures.
@ovitrif
ovitrifforce-pushed the ovi/fix-99-release-peer-lock branch from 85ac71a to b3bd780CompareJuly 29, 2026 13:02
@ovitrif
ovitrif marked this pull request as ready for review July 29, 2026 13:11
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif merged commit 60c4c4d into fix/94-sigabrt-runtime-dropJul 31, 2026
2 checks passed
@ovitrif
ovitrif deleted the ovi/fix-99-release-peer-lock branch July 31, 2026 17:41
ovitrif added a commit that referenced this pull request Aug 1, 2026
Preserve PR #100 and PR #101 merge history while reconciling the stacked branch into the default branch.
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Follow-up after merge:

  • This PR remained based on fix/94-sigabrt-runtime-drop after fix: prevent electrum runtime self-drop #100 merged into main. Its merge therefore advanced that already-merged branch rather than the default branch.
  • I preserved the previous main tip 0533c40 at backup/main-before-pr-101-recovery-20260801.
  • I preserved the stacked branch tip 60c4c4d at backup/pr-101-stack-before-main-recovery-20260801.
  • I reconciled both histories into main with f929ec2 so the default branch now contains the exact tree shipped in v0.7.0-rc.62.
  • Local verification: cargo test --features uniffi --lib passed all 94 tests, and the resulting tree matches the reviewed rc.62 tree exactly.
  • The published v0.7.0-rc.62 release and annotated tag remain unchanged at 6fddf6f.
  • I deleted the obsolete fix/94-sigabrt-runtime-drop branch after verifying both recovery refs and the new main.
  • I manually enabled Automatically delete head branches in repository settings to prevent merged head branches from lingering.
  • fix: release peer lock before persistence #99 is closed as completed now that the fix is present on main.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: release peer lock before persistence

2 participants

@ovitrif@coreyphillips
, '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('^' + ".*" + ' fix: release peer lock before persistence by ovitrif · Pull Request #101 · synonymdev/ldk-node · GitHub
Skip to content

fix: release peer lock before persistence - #101

Merged
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock
Jul 31, 2026
Merged

fix: release peer lock before persistence#101
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock

Conversation

@ovitrif

@ovitrifovitrif commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes#99

Related to synonymdev/bitkit-android#986.
Addresses the Node.listPeers ANR tracked in synonymdev/bitkit-android#1036.

Summary

  • Backport Fully switch to async KVStore persistence lightningdevkit/ldk-node#919's async KVStore peer-persistence design.
  • Serialize peer mutations with a Tokio mutex, encode each snapshot under the peer RwLock, and release that lock before awaiting persistence.
  • Preserve fork address updates, RGS recovery exclusion ordering, and retryable add, address-update, and removal failures.
  • Make explicit disconnect succeed only after durable peer removal; persistence failures keep the peer connected and remain retryable.
  • Bridge synchronous node APIs at the runtime boundary while async event and recovery paths await persistence directly.
  • Prepare Rust and mobile binding artifacts as 0.7.0-rc.62.

Validation

  • Local verification: cargo fmt --check, git diff --check, and cargo test --features uniffi --lib (94 passed).
  • Binding verification: ./bindgen.sh completed for JVM Kotlin, Python, Swift, and Android; JVM Gradle, Swift framework assembly, Android three-ABI build-ID, 16 KiB alignment, debug-symbol, stripped-library, and AAR checks passed.
  • Swift archive verification: SHA-256 40907bc5d61d85492a9f22722c1009791255ed0da40577765f49d486ebb41e9c matches Package.swift and the uploaded release asset.

QA Notes

  • Originally stacked on fix: prevent electrum runtime self-drop #100 at 080b5f2.
  • Synchronous peer reads remain available while async persistence is pending.
  • Failed persistence restores the previous in-memory state so the mutation can be retried.
  • Explicit disconnect returns a peer-removal persistence failure and keeps the live peer connected.

Release

@ovitrifovitrif self-assigned this Jul 28, 2026
@ovitrifovitrif linked an issue Jul 28, 2026 that may be closed by this pull request
Backport lightningdevkit/ldk-node@d49b681 while preserving fork address updates and retryable persistence failures.
@ovitrif
ovitrifforce-pushed the ovi/fix-99-release-peer-lock branch from 85ac71a to b3bd780CompareJuly 29, 2026 13:02
@ovitrif
ovitrif marked this pull request as ready for review July 29, 2026 13:11
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif merged commit 60c4c4d into fix/94-sigabrt-runtime-dropJul 31, 2026
2 checks passed
@ovitrif
ovitrif deleted the ovi/fix-99-release-peer-lock branch July 31, 2026 17:41
ovitrif added a commit that referenced this pull request Aug 1, 2026
Preserve PR #100 and PR #101 merge history while reconciling the stacked branch into the default branch.
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Follow-up after merge:

  • This PR remained based on fix/94-sigabrt-runtime-drop after fix: prevent electrum runtime self-drop #100 merged into main. Its merge therefore advanced that already-merged branch rather than the default branch.
  • I preserved the previous main tip 0533c40 at backup/main-before-pr-101-recovery-20260801.
  • I preserved the stacked branch tip 60c4c4d at backup/pr-101-stack-before-main-recovery-20260801.
  • I reconciled both histories into main with f929ec2 so the default branch now contains the exact tree shipped in v0.7.0-rc.62.
  • Local verification: cargo test --features uniffi --lib passed all 94 tests, and the resulting tree matches the reviewed rc.62 tree exactly.
  • The published v0.7.0-rc.62 release and annotated tag remain unchanged at 6fddf6f.
  • I deleted the obsolete fix/94-sigabrt-runtime-drop branch after verifying both recovery refs and the new main.
  • I manually enabled Automatically delete head branches in repository settings to prevent merged head branches from lingering.
  • fix: release peer lock before persistence #99 is closed as completed now that the fix is present on main.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: release peer lock before persistence

2 participants

@ovitrif@coreyphillips
, '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" + ' fix: release peer lock before persistence by ovitrif · Pull Request #101 · synonymdev/ldk-node · GitHub
Skip to content

fix: release peer lock before persistence - #101

Merged
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock
Jul 31, 2026
Merged

fix: release peer lock before persistence#101
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock

Conversation

@ovitrif

@ovitrifovitrif commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes#99

Related to synonymdev/bitkit-android#986.
Addresses the Node.listPeers ANR tracked in synonymdev/bitkit-android#1036.

Summary

  • Backport Fully switch to async KVStore persistence lightningdevkit/ldk-node#919's async KVStore peer-persistence design.
  • Serialize peer mutations with a Tokio mutex, encode each snapshot under the peer RwLock, and release that lock before awaiting persistence.
  • Preserve fork address updates, RGS recovery exclusion ordering, and retryable add, address-update, and removal failures.
  • Make explicit disconnect succeed only after durable peer removal; persistence failures keep the peer connected and remain retryable.
  • Bridge synchronous node APIs at the runtime boundary while async event and recovery paths await persistence directly.
  • Prepare Rust and mobile binding artifacts as 0.7.0-rc.62.

Validation

  • Local verification: cargo fmt --check, git diff --check, and cargo test --features uniffi --lib (94 passed).
  • Binding verification: ./bindgen.sh completed for JVM Kotlin, Python, Swift, and Android; JVM Gradle, Swift framework assembly, Android three-ABI build-ID, 16 KiB alignment, debug-symbol, stripped-library, and AAR checks passed.
  • Swift archive verification: SHA-256 40907bc5d61d85492a9f22722c1009791255ed0da40577765f49d486ebb41e9c matches Package.swift and the uploaded release asset.

QA Notes

  • Originally stacked on fix: prevent electrum runtime self-drop #100 at 080b5f2.
  • Synchronous peer reads remain available while async persistence is pending.
  • Failed persistence restores the previous in-memory state so the mutation can be retried.
  • Explicit disconnect returns a peer-removal persistence failure and keeps the live peer connected.

Release

@ovitrifovitrif self-assigned this Jul 28, 2026
@ovitrifovitrif linked an issue Jul 28, 2026 that may be closed by this pull request
Backport lightningdevkit/ldk-node@d49b681 while preserving fork address updates and retryable persistence failures.
@ovitrif
ovitrifforce-pushed the ovi/fix-99-release-peer-lock branch from 85ac71a to b3bd780CompareJuly 29, 2026 13:02
@ovitrif
ovitrif marked this pull request as ready for review July 29, 2026 13:11
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif merged commit 60c4c4d into fix/94-sigabrt-runtime-dropJul 31, 2026
2 checks passed
@ovitrif
ovitrif deleted the ovi/fix-99-release-peer-lock branch July 31, 2026 17:41
ovitrif added a commit that referenced this pull request Aug 1, 2026
Preserve PR #100 and PR #101 merge history while reconciling the stacked branch into the default branch.
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Follow-up after merge:

  • This PR remained based on fix/94-sigabrt-runtime-drop after fix: prevent electrum runtime self-drop #100 merged into main. Its merge therefore advanced that already-merged branch rather than the default branch.
  • I preserved the previous main tip 0533c40 at backup/main-before-pr-101-recovery-20260801.
  • I preserved the stacked branch tip 60c4c4d at backup/pr-101-stack-before-main-recovery-20260801.
  • I reconciled both histories into main with f929ec2 so the default branch now contains the exact tree shipped in v0.7.0-rc.62.
  • Local verification: cargo test --features uniffi --lib passed all 94 tests, and the resulting tree matches the reviewed rc.62 tree exactly.
  • The published v0.7.0-rc.62 release and annotated tag remain unchanged at 6fddf6f.
  • I deleted the obsolete fix/94-sigabrt-runtime-drop branch after verifying both recovery refs and the new main.
  • I manually enabled Automatically delete head branches in repository settings to prevent merged head branches from lingering.
  • fix: release peer lock before persistence #99 is closed as completed now that the fix is present on main.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: release peer lock before persistence

2 participants

@ovitrif@coreyphillips
, '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('^' + ".*" + ' fix: release peer lock before persistence by ovitrif · Pull Request #101 · synonymdev/ldk-node · GitHub
Skip to content

fix: release peer lock before persistence - #101

Merged
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock
Jul 31, 2026
Merged

fix: release peer lock before persistence#101
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock

Conversation

@ovitrif

@ovitrifovitrif commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes#99

Related to synonymdev/bitkit-android#986.
Addresses the Node.listPeers ANR tracked in synonymdev/bitkit-android#1036.

Summary

  • Backport Fully switch to async KVStore persistence lightningdevkit/ldk-node#919's async KVStore peer-persistence design.
  • Serialize peer mutations with a Tokio mutex, encode each snapshot under the peer RwLock, and release that lock before awaiting persistence.
  • Preserve fork address updates, RGS recovery exclusion ordering, and retryable add, address-update, and removal failures.
  • Make explicit disconnect succeed only after durable peer removal; persistence failures keep the peer connected and remain retryable.
  • Bridge synchronous node APIs at the runtime boundary while async event and recovery paths await persistence directly.
  • Prepare Rust and mobile binding artifacts as 0.7.0-rc.62.

Validation

  • Local verification: cargo fmt --check, git diff --check, and cargo test --features uniffi --lib (94 passed).
  • Binding verification: ./bindgen.sh completed for JVM Kotlin, Python, Swift, and Android; JVM Gradle, Swift framework assembly, Android three-ABI build-ID, 16 KiB alignment, debug-symbol, stripped-library, and AAR checks passed.
  • Swift archive verification: SHA-256 40907bc5d61d85492a9f22722c1009791255ed0da40577765f49d486ebb41e9c matches Package.swift and the uploaded release asset.

QA Notes

  • Originally stacked on fix: prevent electrum runtime self-drop #100 at 080b5f2.
  • Synchronous peer reads remain available while async persistence is pending.
  • Failed persistence restores the previous in-memory state so the mutation can be retried.
  • Explicit disconnect returns a peer-removal persistence failure and keeps the live peer connected.

Release

@ovitrifovitrif self-assigned this Jul 28, 2026
@ovitrifovitrif linked an issue Jul 28, 2026 that may be closed by this pull request
Backport lightningdevkit/ldk-node@d49b681 while preserving fork address updates and retryable persistence failures.
@ovitrif
ovitrifforce-pushed the ovi/fix-99-release-peer-lock branch from 85ac71a to b3bd780CompareJuly 29, 2026 13:02
@ovitrif
ovitrif marked this pull request as ready for review July 29, 2026 13:11
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif merged commit 60c4c4d into fix/94-sigabrt-runtime-dropJul 31, 2026
2 checks passed
@ovitrif
ovitrif deleted the ovi/fix-99-release-peer-lock branch July 31, 2026 17:41
ovitrif added a commit that referenced this pull request Aug 1, 2026
Preserve PR #100 and PR #101 merge history while reconciling the stacked branch into the default branch.
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Follow-up after merge:

  • This PR remained based on fix/94-sigabrt-runtime-drop after fix: prevent electrum runtime self-drop #100 merged into main. Its merge therefore advanced that already-merged branch rather than the default branch.
  • I preserved the previous main tip 0533c40 at backup/main-before-pr-101-recovery-20260801.
  • I preserved the stacked branch tip 60c4c4d at backup/pr-101-stack-before-main-recovery-20260801.
  • I reconciled both histories into main with f929ec2 so the default branch now contains the exact tree shipped in v0.7.0-rc.62.
  • Local verification: cargo test --features uniffi --lib passed all 94 tests, and the resulting tree matches the reviewed rc.62 tree exactly.
  • The published v0.7.0-rc.62 release and annotated tag remain unchanged at 6fddf6f.
  • I deleted the obsolete fix/94-sigabrt-runtime-drop branch after verifying both recovery refs and the new main.
  • I manually enabled Automatically delete head branches in repository settings to prevent merged head branches from lingering.
  • fix: release peer lock before persistence #99 is closed as completed now that the fix is present on main.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: release peer lock before persistence

2 participants

@ovitrif@coreyphillips
, '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('^' + ".*" + ' fix: release peer lock before persistence by ovitrif · Pull Request #101 · synonymdev/ldk-node · GitHub
Skip to content

fix: release peer lock before persistence - #101

Merged
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock
Jul 31, 2026
Merged

fix: release peer lock before persistence#101
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock

Conversation

@ovitrif

@ovitrifovitrif commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes#99

Related to synonymdev/bitkit-android#986.
Addresses the Node.listPeers ANR tracked in synonymdev/bitkit-android#1036.

Summary

  • Backport Fully switch to async KVStore persistence lightningdevkit/ldk-node#919's async KVStore peer-persistence design.
  • Serialize peer mutations with a Tokio mutex, encode each snapshot under the peer RwLock, and release that lock before awaiting persistence.
  • Preserve fork address updates, RGS recovery exclusion ordering, and retryable add, address-update, and removal failures.
  • Make explicit disconnect succeed only after durable peer removal; persistence failures keep the peer connected and remain retryable.
  • Bridge synchronous node APIs at the runtime boundary while async event and recovery paths await persistence directly.
  • Prepare Rust and mobile binding artifacts as 0.7.0-rc.62.

Validation

  • Local verification: cargo fmt --check, git diff --check, and cargo test --features uniffi --lib (94 passed).
  • Binding verification: ./bindgen.sh completed for JVM Kotlin, Python, Swift, and Android; JVM Gradle, Swift framework assembly, Android three-ABI build-ID, 16 KiB alignment, debug-symbol, stripped-library, and AAR checks passed.
  • Swift archive verification: SHA-256 40907bc5d61d85492a9f22722c1009791255ed0da40577765f49d486ebb41e9c matches Package.swift and the uploaded release asset.

QA Notes

  • Originally stacked on fix: prevent electrum runtime self-drop #100 at 080b5f2.
  • Synchronous peer reads remain available while async persistence is pending.
  • Failed persistence restores the previous in-memory state so the mutation can be retried.
  • Explicit disconnect returns a peer-removal persistence failure and keeps the live peer connected.

Release

@ovitrifovitrif self-assigned this Jul 28, 2026
@ovitrifovitrif linked an issue Jul 28, 2026 that may be closed by this pull request
Backport lightningdevkit/ldk-node@d49b681 while preserving fork address updates and retryable persistence failures.
@ovitrif
ovitrifforce-pushed the ovi/fix-99-release-peer-lock branch from 85ac71a to b3bd780CompareJuly 29, 2026 13:02
@ovitrif
ovitrif marked this pull request as ready for review July 29, 2026 13:11
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif merged commit 60c4c4d into fix/94-sigabrt-runtime-dropJul 31, 2026
2 checks passed
@ovitrif
ovitrif deleted the ovi/fix-99-release-peer-lock branch July 31, 2026 17:41
ovitrif added a commit that referenced this pull request Aug 1, 2026
Preserve PR #100 and PR #101 merge history while reconciling the stacked branch into the default branch.
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Follow-up after merge:

  • This PR remained based on fix/94-sigabrt-runtime-drop after fix: prevent electrum runtime self-drop #100 merged into main. Its merge therefore advanced that already-merged branch rather than the default branch.
  • I preserved the previous main tip 0533c40 at backup/main-before-pr-101-recovery-20260801.
  • I preserved the stacked branch tip 60c4c4d at backup/pr-101-stack-before-main-recovery-20260801.
  • I reconciled both histories into main with f929ec2 so the default branch now contains the exact tree shipped in v0.7.0-rc.62.
  • Local verification: cargo test --features uniffi --lib passed all 94 tests, and the resulting tree matches the reviewed rc.62 tree exactly.
  • The published v0.7.0-rc.62 release and annotated tag remain unchanged at 6fddf6f.
  • I deleted the obsolete fix/94-sigabrt-runtime-drop branch after verifying both recovery refs and the new main.
  • I manually enabled Automatically delete head branches in repository settings to prevent merged head branches from lingering.
  • fix: release peer lock before persistence #99 is closed as completed now that the fix is present on main.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: release peer lock before persistence

2 participants

@ovitrif@coreyphillips
, '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); } })(); })(); fix: release peer lock before persistence by ovitrif · Pull Request #101 · synonymdev/ldk-node · GitHub
Skip to content

fix: release peer lock before persistence - #101

Merged
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock
Jul 31, 2026
Merged

fix: release peer lock before persistence#101
ovitrif merged 4 commits into
fix/94-sigabrt-runtime-dropfrom
ovi/fix-99-release-peer-lock

Conversation

@ovitrif

@ovitrifovitrif commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Fixes#99

Related to synonymdev/bitkit-android#986.
Addresses the Node.listPeers ANR tracked in synonymdev/bitkit-android#1036.

Summary

  • Backport Fully switch to async KVStore persistence lightningdevkit/ldk-node#919's async KVStore peer-persistence design.
  • Serialize peer mutations with a Tokio mutex, encode each snapshot under the peer RwLock, and release that lock before awaiting persistence.
  • Preserve fork address updates, RGS recovery exclusion ordering, and retryable add, address-update, and removal failures.
  • Make explicit disconnect succeed only after durable peer removal; persistence failures keep the peer connected and remain retryable.
  • Bridge synchronous node APIs at the runtime boundary while async event and recovery paths await persistence directly.
  • Prepare Rust and mobile binding artifacts as 0.7.0-rc.62.

Validation

  • Local verification: cargo fmt --check, git diff --check, and cargo test --features uniffi --lib (94 passed).
  • Binding verification: ./bindgen.sh completed for JVM Kotlin, Python, Swift, and Android; JVM Gradle, Swift framework assembly, Android three-ABI build-ID, 16 KiB alignment, debug-symbol, stripped-library, and AAR checks passed.
  • Swift archive verification: SHA-256 40907bc5d61d85492a9f22722c1009791255ed0da40577765f49d486ebb41e9c matches Package.swift and the uploaded release asset.

QA Notes

  • Originally stacked on fix: prevent electrum runtime self-drop #100 at 080b5f2.
  • Synchronous peer reads remain available while async persistence is pending.
  • Failed persistence restores the previous in-memory state so the mutation can be retried.
  • Explicit disconnect returns a peer-removal persistence failure and keeps the live peer connected.

Release

@ovitrifovitrif self-assigned this Jul 28, 2026
@ovitrifovitrif linked an issue Jul 28, 2026 that may be closed by this pull request
Backport lightningdevkit/ldk-node@d49b681 while preserving fork address updates and retryable persistence failures.
@ovitrif
ovitrifforce-pushed the ovi/fix-99-release-peer-lock branch from 85ac71a to b3bd780CompareJuly 29, 2026 13:02
@ovitrif
ovitrif marked this pull request as ready for review July 29, 2026 13:11
chatgpt-codex-connector[bot]

This comment was marked as resolved.

@ovitrif
ovitrif merged commit 60c4c4d into fix/94-sigabrt-runtime-dropJul 31, 2026
2 checks passed
@ovitrif
ovitrif deleted the ovi/fix-99-release-peer-lock branch July 31, 2026 17:41
ovitrif added a commit that referenced this pull request Aug 1, 2026
Preserve PR #100 and PR #101 merge history while reconciling the stacked branch into the default branch.
@ovitrif

Copy link
Copy Markdown
CollaboratorAuthor

Follow-up after merge:

  • This PR remained based on fix/94-sigabrt-runtime-drop after fix: prevent electrum runtime self-drop #100 merged into main. Its merge therefore advanced that already-merged branch rather than the default branch.
  • I preserved the previous main tip 0533c40 at backup/main-before-pr-101-recovery-20260801.
  • I preserved the stacked branch tip 60c4c4d at backup/pr-101-stack-before-main-recovery-20260801.
  • I reconciled both histories into main with f929ec2 so the default branch now contains the exact tree shipped in v0.7.0-rc.62.
  • Local verification: cargo test --features uniffi --lib passed all 94 tests, and the resulting tree matches the reviewed rc.62 tree exactly.
  • The published v0.7.0-rc.62 release and annotated tag remain unchanged at 6fddf6f.
  • I deleted the obsolete fix/94-sigabrt-runtime-drop branch after verifying both recovery refs and the new main.
  • I manually enabled Automatically delete head branches in repository settings to prevent merged head branches from lingering.
  • fix: release peer lock before persistence #99 is closed as completed now that the fix is present on main.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: release peer lock before persistence

2 participants

@ovitrif@coreyphillips