Skip to content

v0.3.1 — atomic staging hotfix

Latest

Choose a tag to compare

@TheSylvester TheSylvester released this 11 Jul 15:56

Hotfix: upgrade segfault on Linux (0.2.x → 0.3.0)

The 0.3.0 installer could SIGSEGV mid-recall install when upgrading from 0.2.x on Linux, leaving capture hooks disabled until re-run.

Root cause: the installer's upgrade probe dlopens the staged better_sqlite3.node into its own process; staging then rewrote that same live-mapped file in place with copyFileSync. The implicit truncate discards the mapping's relocated pages (Linux truncate semantics zap private COW pages too), so the next GC weak-callback jumps through an unrelocated GOT slot — a deterministic crash, landing after hooks were already quiesced.

Fix: all ~/.recall/bin staging is now atomic — byte-identical files are left untouched; otherwise the new bytes land via a sibling temp file + rename, so live mappings keep their inode. The Windows fallback (for a mapped destination that refuses replacement) rolls the previous file back if landing the new one fails, so the binding is never left missing. Stale staging leftovers are swept on the next install.

Who should upgrade: everyone on 0.3.0, and especially 0.2.x users on Linux who haven't upgraded yet — with this release, npm install -g crispy-recall && recall install upgrades cleanly.

If a previous 0.3.0 upgrade attempt crashed on you: run recall install again — it completes the migration and restores your hooks, then recall doctor to confirm green.