Swap: tell the user when a journal is locked out or failing; long names
- SwapManager queues user notices when a journal is held by another kte (this session's edits are then not journaled) and, once per gap, when journal writes fail. Editor shows them in the status line from its per-frame hook. Both went only to the error log, so crash recovery was silently off or incomplete. - The fallback swap name '<basename>.<hash>.swp' exceeded NAME_MAX for basenames over ~233 bytes, so such files were never journaled; the basename is shortened (on a UTF-8 boundary) only in that case. - Audit doc: sixth-round findings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015rcVQiiWyTzoNrsvLSaAfB
This commit is contained in:
@@ -495,8 +495,11 @@ Editor::ProcessPendingOpens()
|
||||
try {
|
||||
// Also the once-per-frame hook for the journal: retry the
|
||||
// checkpoint of a journal that lost a record.
|
||||
if (kte::SwapManager *sm = Swap())
|
||||
if (kte::SwapManager *sm = Swap()) {
|
||||
sm->RetryGapCheckpoints();
|
||||
if (std::string notice = sm->TakeUserNotice(); !notice.empty())
|
||||
SetStatus(notice);
|
||||
}
|
||||
return process_pending_opens_();
|
||||
} catch (const std::exception &e) {
|
||||
kte::ErrorHandler::Instance().Error("Editor", std::string("open failed: ") + e.what(), "");
|
||||
|
||||
Reference in New Issue
Block a user